# iOS 插件依赖动态库

多端框架下的 iOS 插件最终将打包成一个动态库供多端 App 使用。在使用 CocoaPods 开发 iOS 插件中介绍了如何引入静态库,本文将同样使用 CocoaPods 介绍插件动态库如何引入第三方动态库依赖。

本文将以依赖 AFNetworking 网络库,实现一个发送 HTTP 请求的功能为例进行示例。

# 一、开发环境准备

  1. 根据原生插件工具操作指引生成一个多端插件工程项目

  2. 安装 Xcode,准备好 iOS 开发环境

  3. 安装 CocoaPods,具体可参看官网指引

# 二、初始化 CocoaPods

  1. 在上述 1)创建的多端插件工程项目中,在 ios 目录下新建一个 Podfile 文件。文件内容如下:
platform :ios, '11.0'
use_frameworks!

# YOUR_PLUGIN_ID 替换成你的插件 id
target 'YOUR_PLUGIN_ID' do
    pod "MyPlugin", :path => "."
end

# 必须 为了调试的时候把依赖的动态库也打入 Frameworks 中
target 'demo' do
    pod 'AFNetworking', '~> 4.0'
end

  1. ios 目录下新建一个 MyPlugin.podspec 文件,并指定引入 AFNetworking。文件内容如下:

# MyPlugin.podspec

Pod::Spec.new do |spec|
    spec.name         = 'MyPlugin'
    spec.version      = '1.0.0'
    spec.summary      = 'Summary of MyPlugin'
    spec.homepage     = 'https://your-framework-website.com'
    spec.author       = { 'Your Name' => 'your@email.com' }
    spec.source       = { :git => 'https://github.com/your/repo.git', :tag => "#{spec.version}" }
    spec.ios.deployment_target = '11.0'

    # 引入 AFNetworking
    spec.dependency 'AFNetworking', '~> 4.0'
end
  
  1. ios 目录下执行 pod install。命令执行完成以后,你的项目将会是以下的结构,新增了 PodsNativePlugin.xcworkspacePodfile.lock
  1. 双击 NativePlugin.xcworkspace,打开 Xcode,即可看见创建好的项目工程
  1. YOUR_PLUGIN_ID 的 target 下,配置链接依赖的动态库

# 实现发送 HTTP 请求

MyPlugin.mm 中添加如下代码,实现插件的异步方法完成 HTTP 请求。

# 四、运行

开发者在开发调试阶段,运行插件工程的方法与 iOS 原生插件开发指引中的指引无异。需要注意的是,使用 CocoaPods 管理项目,需要通过双击 NativePlugin.xcworkspace 打开 Xcode。简单区分就是 Xcode 文件列表中是否有 Pods 的相关内容。

真机运行返回

# 五、构建

注:开发者工具构建 iOS 产物功能目前并不支持直接打包出所需产物,开发者需自行完成打包。

开发者需要构建出 PLUGIN_ID.framework 以及依赖的动态库 framework,并把构建产物放至对应目录下;上传插件,最终应用到多端应用中,具体可查看指引

以本为例,需要构建出如下图所示的 PLUGIN_ID.framework 与 AFNetworking.framework。

# 六、总结

在上文中,我们介绍了如何使用 CocoaPods 来引入动态库依赖。开发者可在该项目结构的基础上,主要通过修改 MyPlugin.podspec 文件来引入更多的第三方 SDK,添加更多的自定义配置来完成自身需求。