最近需要將自己公司的項目的打包成
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| 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' => '[email protected]' } 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 在這,有不懂的地方可以看一下,希望能夠幫助大家少走一些坑。
將來的你,一定會感激現在拼命的自己,願自己與讀者的開發之路無限美好。