简体中文 | English
使用 Xcode 打开 iOS 端项目,创建 Network Extension:File -> New -> Target -> 选择后点击 Next
输入 Network Extension 的名称(比如 NEOvpn),其他配置参考下图(注意 Team 需和容器 App 一致)
打开 Apple Developer 网站
可能在你添加
Network Extension时已经自动创建了group和identifier
- 创建
group:Identifiers -> App Groups -> 点击+添加 - Network Extension App
- 创建
identifier- Identifiers -> App IDs -> 点击
+添加 - 输入
Network Extension的 bundle identifier - 添加以下
Capabilities- App Groups, 选择先前创建的
group - Network Extensions
- Personal VPN
- App Groups, 选择先前创建的
- Identifiers -> App IDs -> 点击
- 创建
profile- Profiles -> 点击
+添加 - 选择 iOS App Development/Ad Hoc/App Store
- 选择
Network Extension的 App ID - 生成后下载并双击安装
- Profiles -> 点击
- 创建
- 容器 App
- 编辑你的容器 App identifier, 添加以下
Capabilities- App Groups, 选择先前创建的
group(和Network Extension一致) - Network Extensions
- Personal VPN
- App Groups, 选择先前创建的
- 重新创建容器 App 的
profile并安装
- 编辑你的容器 App identifier, 添加以下
重新打开 Xcode,选择 Signing & Capabilities 标签
- Network Extension App
- 取消勾选
Automatically manage signing,并选择相应的profile - 点击左上角的
+ Capability添加 以下Capabilities- App Groups, 勾选先前创建的
group - Network Extensions, 勾选
Packet Tunnel - Personal VPN
- App Groups, 勾选先前创建的
- 取消勾选
- 容器 App 添加与
Network Extension相同的Capabilities
-
运行
brew install carthage获取 Carthage -
在
ios/目录下创建Cartfile文件,添加github "ss-abramchuk/OpenVPNAdapter",并运行carthage update -
将
ios/Carthage/Build/iOS目录下的OpenVPNAdapter.framework拖拽到 Network Extension target 的Frameworks and Libraries,并选择Do Not Embed -
选择容器 App target 的
Build Phases标签- 点击
+选择New Run Script Phase,添加/usr/local/bin/carthage copy-frameworks - 在
ios/目录下创建input.xcfilelist和output.xcfilelist文件 - 在
Run Script Phase的Input File Lists添加input.xcfilelist - 在
Run Script Phase的Output File Lists添加output.xcfilelist
- 点击
Cartfile/input.xcfilelist/output.xcfilelist 文件内容参考本项目 apple/ 目录下的文件
其他安装方法请参考 OpenVPNAdapter installation
创建 Network Extension 时项目会同时创建相应的文件
将本项目 apple/ 目录下 PacketTunnelProvider.h/m 文件的内容拷贝到 Network Extension 对应的文件
- 如果你想使用
Swift版本的Network Extension,请参考 OpenVPNAdapter usage - 容器 App 的
version和build应该与Network Extension的保持一致, 否则在应用上传至 App Store 时会产生警告 Network Extension的Deployment info的iOS version需设置合适的值(最好与容器 App 的Minimum Deployments保持一致),否则设备可能无法正常开启 VPN







