 
        最近需要将自己公司的项目的打包成
Framework然后以SDK的形式来供客户使用,但是项目中用到不少Cocoapods第三方的库,怎么才能将项目打包Framework并依赖CocoaPods第三方库呢,网上找了很久都没有找到一篇专门说这个的,让我走了很多的坑,手动打包Framework太麻烦,开始尝试了 cocoapods-packager 方式打包,但是这个插件貌似对于Swift项目的支持并不是很好,尝试很久都没有打包成功,作者貌似也不是很活跃,无奈放弃,最后选择用Carthage方式来打包Framework,下面就分享一下利用Carthage将项目打包Framework并依赖CocoaPods第三方库的方法。
创建工程并打包 Framework
我这边演示的是 Swift 工程,Objective-C 也是一样的,演示Demo 我会保留,不懂的可以看一下。
1. 创建 Framework 工程
- 新建一个工程或者在现有工程下创建一个新的 - target,类型需要选择- Coaoa Touch Framework,这里说一下我的- Xcode版本是- 10.0.0。![]() 
- 由于 - Carthage在- build时,会自动将设置为- Shared的- framework target构建成- framework,所以需要单击顶部- target,在弹出选项中选中- Manager Schemes,将- framework target的- Shared选项选中。
2. 创建 podfile 集成第三方库
- 假设我的代码中要用到 - Alamofire这个第三方库(用于演示),然后使用- CocoaPods在工程中集成- Alamofire,集成方法和普通项目一模一样。
- 创建 - podfile并加入- pod 'Alamofire',然后执行- pod install,然后选择工程下的- FrameworkDemo.xcworkspace重新打开工程。![]() 
3. 创建测试代码
- 我这边创建了一个 - TestAlamofire.swift的测试文件,并在里面使用了- Alamofire这个库,一会打包就打包这个文件。
- 然后编译一下,编译通过,测试代码如下。 ![]() 
4. 构建 framework
- 打开终端 - cd到工程目录下,执行以下命令开始打包- framework,执行完成后会自动将- framework文件保存在工程的- Carthage/Build/iOS文件夹下。- carthage build --no-skip-current ![]() 
- 到此 - framework就打包完成了,想了解更多关于- Carthage打包的详情,可以看我另一篇文章:【iOS 开发】给自己项目添加 Carthage 支持的方法 ,方法基本一致,我这边就不详述了。
将 Framework 传到 Cocoapods 仓库
由于打包好的 framework 需要依赖 Alamofire 这个库,单独运行会报错,如果直接将 framework 给客户让客户自己依赖 Alamofire 的话,并不友好,所以打算将 framework 传到 Cocoapods 仓库,并指定 Alamofire 依赖库,这样客户直接 pod 我们封装好的库即可。
1. 创建 Git 仓库
- 先创建一个 Git仓库,仓库中必须包含一个License文件,类型为MIT License。
- 接着 Clone到本地,将刚才打包的Framework放进去,我这边就直接将测试工程放进去了。
2. 创建 podspec 文件
- 在仓库目录下新建一个 - podspec文件,文件名就是- pod库的名称,我这边叫- FrameworkDemo_Gzz.podspec,或者使用以下命令创建。- pod spec create FrameworkDemo_Gzz ![]() 
- 然后打开 - podspec文件,内容编辑如下,内容的具体意思我这边就不详述了。- Pod::Spec.new do |s| 
 = 'FrameworkDemo_Gzz'
 = '1.0.0'
 = '测试 Framework'
 = 'https://github.com/karise-guo/FrameworkDemo'
 = { :type => 'MIT', :file => 'LICENSE' }
 = { 'Karise' => '292710547@qq.com' }
 = { :git => 'https://github.com/karise-guo/FrameworkDemo.git', :tag => s.version }
 = :ios
 = '9.0'
 = '4.0'
 = 'Carthage/Build/iOS/*.framework'
 # 依赖库
 'Alamofire'
 end
3. 验证 podspec 文件
- 编辑完成后,打开终端 - cd到- podspec所在文件目录下,输入以下命令来验证编译是否通过。- pod lib lint --allow-warnings --verbose 
- 验证通过会显示 - FrameworkDemo_Gzz passed validation。
4. 给项目打上 tag 并上传
- podspec文件验证成功后,先将改动后的文件- commit提交,接着- push推送到远程仓库 。
- 因为 - CocoaPods是依赖项目的- tag版本的,所以必须打上- tag版本,执行以下命令打上- tag版本,版本名必须要和之前- podspec文件中的- s.version一致。- git tag "1.0.0" // 为 git 提交打上 tag 
 git push --tags // 将 tag 推送到远程仓库
5. 发布到 CocoaPods
- 打开终端 - cd到- podspec所在文件目录下,输入以下命令来发布到- CocoaPods。- pod trunk push *.podspec --allow-warnings 
- 发布成功会显示 - successfully published。
- 到此就发布完成了,我这边讲的比较简单,如果发布 - CocoaPods遇到什么问题或者报错,可以看我的另一篇文章:【iOS 开发】创建 podspec 文件,给自己写的框架添加 CocoaPos 支持 ,我这边就不详述了。
测试 Framework 的 Pod 库
- 新建一个测试工程 - Test,然后将刚才传到- CocoaPods的库引入,然后执行- pod install。![]() 
- 可以看到 - pod将我们的- framework和- Alamofire依赖库一起- pod下来了。![]() 
- 然后在控制器中 - import FrameworkDemo引入我们的库,执行库中用到- Alamofire的一个方法。![]() 
- 编译运行成功,打印结果正常。 ![]() 
演示Demo 在这,有不懂的地方可以看一下,希望能够帮助大家少走一些坑。
 
        








 
        