最近需要將自己公司的項目的打包成
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
。image 由于
Carthage
在build
時,會自動將設置為Shared
的framework target
構建成framework
,所以需要單擊頂部target
,在彈出選項中選中Manager Schemes
,將framework target
的Shared
選項選中。
2. 創建 podfile 集成第三方庫
假設我的代碼中要用到
Alamofire
這個第三方庫(用于演示),然后使用CocoaPods
在工程中集成Alamofire
,集成方法和普通項目一模一樣。-
創建
podfile
并加入pod 'Alamofire'
,然后執行pod install
,然后選擇工程下的FrameworkDemo.xcworkspace
重新打開工程。image
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| s.name = 'FrameworkDemo_Gzz' s.version = '1.0.0' s.summary = '測試 Framework' s.homepage = 'https://github.com/Jonzzs/FrameworkDemo' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Jonzzs' => '292710547@qq.com' } s.source = { :git => 'https://github.com/Jonzzs/FrameworkDemo.git', :tag => s.version } s.platform = :ios s.ios.deployment_target = '9.0' s.swift_version = '4.0' s.ios.vendored_frameworks = 'Carthage/Build/iOS/*.framework' # 依賴庫 s.dependency '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 在這,有不懂的地方可以看一下,希望能夠幫助大家少走一些坑。
將來的你,一定會感激現在拼命的自己,愿自己與讀者的開發之路無限美好。