返回

iOS中Network Extension安全科学Tunnel应用**

IOS

前言

在iOS中,Network Extension是一个允许开发者创建和管理VPN连接的框架。利用这个框架我们可以很简单的在自己的应用中集成VPN功能。本文中,我们将结合第三方库NEKit来使用iOS的Network Extension创建一个安全科学Tunnel应用,然后我们就能使用像G高级搜索、Y视频等软件。

安装NEProviderTargetTemplates.pkg

在创建应用之前我们需要安装NEProviderTargetTemplates.pkg,在xcode10.12之后苹果已经提供了NEProviderTargetTemplates.pkg的安装包供我们下载,可以直接到苹果官网下载安装,安装完之后我们就可以在xcode中创建Network Extension Target了。

创建项目

首先,我们需要创建一个新的Xcode项目。选择“文件”->“新建”->“项目”。在“模板”部分,选择“Network Extension”模板。在“产品名称”字段,输入您的应用程序的名称。在“组织标识符”字段,输入您的组织的标识符。在“语言”字段,选择“Swift”。然后,点击“下一步”。

在“设备”部分,选择您要为其构建应用程序的设备。在“部署目标”字段,选择您要支持的最低iOS版本。然后,点击“下一步”。

在“选项”部分,选中“包括单元测试”复选框。然后,点击“完成”。

添加NEKit库

接下来,我们需要将NEKit库添加到我们的项目中。为此,请按照下列步骤操作:

  1. 在项目导航器中,选择您的项目。
  2. 单击“构建阶段”选项卡。
  3. 单击“链接二进制文件库”部分中的“+”按钮。
  4. 在“库”字段中,输入“NEKit”。
  5. 单击“添加”按钮。

创建Network Extension Target

现在,我们需要创建一个Network Extension Target。为此,请按照下列步骤操作:

  1. 在项目导航器中,右键单击您的项目。
  2. 选择“添加目标”->“Network Extension”。
  3. 在“模板”部分,选择“Packet Tunnel”模板。
  4. 在“产品名称”字段,输入您的Network Extension Target的名称。
  5. 在“组织标识符”字段,输入您的组织的标识符。
  6. 在“语言”字段,选择“Swift”。
  7. 然后,点击“下一步”。

在“设备”部分,选择您要为其构建Network Extension Target的设备。在“部署目标”字段,选择您要支持的最低iOS版本。然后,点击“下一步”。

在“选项”部分,选中“包括单元测试”复选框。然后,点击“完成”。

配置Network Extension Target

现在,我们需要配置Network Extension Target。为此,请按照下列步骤操作:

  1. 在项目导航器中,选择您的Network Extension Target。
  2. 单击“构建设置”选项卡。
  3. 在“搜索路径”部分,将“头文件搜索路径”的值设置为“(inherited) (PROJECT_DIR)/NEKit”。
  4. 将“库搜索路径”的值设置为“(inherited) (PROJECT_DIR)/NEKit”。
  5. 在“链接器标志”部分,将“其他链接器标志”的值设置为“$(inherited) -lNEKit”。
  6. 在“Info”部分,将“Bundle Identifier”的值设置为“com.yourcompany.yourapp.networkExtension”。

实现Network Extension Target

现在,我们需要实现Network Extension Target。为此,请按照下列步骤操作:

  1. 在项目导航器中,选择您的Network Extension Target。
  2. 单击“源文件”选项卡。
  3. 双击“NEPacketTunnelProvider.swift”文件。

在“NEPacketTunnelProvider.swift”文件中,添加以下代码:

import NetworkExtension

class NEPacketTunnelProvider: NEPacketTunnelProvider {

    override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) {
        // Implement your tunnel start logic here.

        completionHandler(nil)
    }

    override func stopTunnel(completionHandler: @escaping () -> Void) {
        // Implement your tunnel stop logic here.

        completionHandler()
    }

    override func handleAppMessage(_ messageData: Data, completionHandler: @escaping (Data?) -> Void) {
        // Implement your app message handling logic here.

        completionHandler(nil)
    }

}

测试Network Extension Target

现在,我们可以测试Network Extension Target了。为此,请按照下列步骤操作:

  1. 在项目导航器中,选择您的Network Extension Target。
  2. 单击“运行”按钮。

您的Network Extension Target现在将在模拟器或设备上运行。

总结

在本文中,我们学习了如何使用iOS的Network Extension创建一个安全科学Tunnel应用。我们还学习了如何使用NEKit库来简化Network Extension的开发过程。