前言
最近在写 SDK,由于依赖了第三方库,同时自己也要分发出去,所以总结下基于 CocoaPods 制作 framework 的问题。
SDK 依赖
首先是 SDK 的依赖情况:
IJKFramework 动态库依赖了 libssl.a 静态库,LiveSDK 动态库依赖了 CocoaPods 的公有库私有库、系统库和 IJKFramework。
项目结构
Demo 工程依赖 SDK Framework 工程
具体打包配置
由于 App Store 上架的时候不允许动态库嵌套,所以 LiveSDK 动态库内不能把 IJKFramework 动态库打进去(TODO:这里有点疑问,当时可能理解错了,后续需要 nm 命令来具体查看是否打包进去了)
SDK Framework 工程配置
在 Frameworks and Libraries 里添加 libssl.a 和系统库
Linking – Mach-O 里选择 Dynamic Library
SDK Podfile
1 | platform :ios, '9.0' |
Build SDK framework,生成 Dynamic Framework
1 | ➜ file LiveSDK.framework/LiveSDK |
制作私有 pod
Github 创建仓库 Live_iOS
Live_iOS
├─Live_iOS.podspec
├─Files
| ├─YDLiveSDK.framework
| ├─YDLIJKMediaFramework.framework
Live_iOS.podspec 内容:
1 | Pod::Spec.new do |s| |
提交到 CocoaPods 官方仓库 Live_iOS
项目集成
项目集成有两种方式。先大体说明,后面有具体代码。但是两种情况都不需要添加系统依赖库就可以运行,这里存疑???
第一种用户集成简单,使用 cocodpods 完成所有工作,但是需要我们制作 pod 源,因为 WebRTC 现在是私有 pod。如果用户把我们的 SDK 在他们项目的 submodule 里使用的话也使用这种,原因是因为现在 CocoaPods 1.10.0 不支持在 podspec 里写 :git=>'https://github.com/WebRTC-IOS-SDK.git' , :tag => '2.1.11'
。
第二种就是正常的接入,用户做的工作会多一点。
第一种
需要先制作 pod 源然后再集成
Github 创建仓库做为 pod 源,git 地址为 https://github.com/Live_iOS_Dependency.git
仓库需要创建 WebRTC/2.1.1,然后在版本号文件夹里创建 WebRTC.podspec, 内容和私有的 WebRTC.podspec 一致。
编辑 demo 的 podfile
1 | source 'https://github.com/CocoaPods/Specs.git' |
- Done
第二种
编辑 demo 的 podfile
1
2
3
4
5
6
7target 'test'do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for test
pod 'AFNetworking', '4.0.1'
pod 'WebRTC', :git=>'https://github.com/WebRTC-IOS-SDK.git' , :tag => '2.1.11'
end把 Live_iOS.framework 和 IJKMediaFramework.framework 拖进项目里,并根据命令
file
和codesign -dv
的结果在 Project - General - Frameworks, Libraries and Embedded Content 里正确配置。Done