| 說明 | 時間 |
|---|---|
| 首次發(fā)布 | 2017年10月12日 |
| 最近更新 | 2019年03月15日 |
背景:這兩天項目的尾巴收的差不多了,趁有些時間,就寫一下關(guān)于
提交開源代碼到CocoaPods和打包.framework靜態(tài)庫的文章吧。打包.framework靜態(tài)庫請移步到下一篇。CocoaPods是非常好用的iOS依賴管理工具,使用它可以方便的管理和更新項目中所使用到的第三方庫,以及將自己的項目中的公共組件交由它去管理。廢話不多說,開始正題。
步驟一:我們需要建一個遠程倉庫,無論是在github上還是在碼云上都可以,下面的截圖是我在碼云上創(chuàng)建的遠程倉庫。

步驟二:執(zhí)行pod lib create MZLibrary,會為我們生成上傳CocoaPods所需文件。

步驟三:將我們的代碼copy到生成工程的Pods -> Development Pods -> 庫名 -> 庫名 -> Classes目錄下,cd到生成的文件夾內(nèi),與遠程倉庫進行鏈接。

步驟四:配置MZLibrary.podspec

步驟五:驗證庫名.podspec是否合法
pod lib lint 庫名.podspec

步驟六:驗證合法之后,將代碼上傳到遠程倉庫并打tag,特別需要注意的是tag應(yīng)該與podspec里的版本號保存一致。
步驟七:使用pod trunk me查看在電腦上是否配置過信息,如果沒有的話,執(zhí)行pod trunk register 郵箱 '用戶名' --description='描述',之后執(zhí)行pod trunk push 庫名.podspec將開源庫推送到CocoaPods


最后:我們需要更新pod本地索引
rm ~/Library/Caches/CocoaPods/search_index.json
pod repo update
或
pod setup

知識點補充
當執(zhí)行pod lib create ProjectName時,其實是從GitHub上下載了一個pod模板,然后在內(nèi)部通過更改.podspec文件的配置定制化自己的pod,
pod lib create ProjectName其實使用了默認參數(shù),補全的話pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git。
podspec屬性:
| Spec Metadata(Spec資料) | |
|---|---|
| s.name | 名稱 |
| s.version | 版本 |
| s.summary | 簡介 |
| s.description | 詳細介紹 |
| s.homepage | 主頁地址 |
| s.screenshots | 屏幕截圖 |
| Spec License(Spec執(zhí)照) | |
|---|---|
| s.license | 開源協(xié)議 |
| Author Metadata(作者資料) | |
|---|---|
| s.author | 作者、郵件地址 |
| s.authors | 多個作者 |
| s.social_media_url | 社交地址 |
| Platform Specifics(平臺特性) | |
|---|---|
| s.platform | 平臺 |
| s.ios.deployment_target | ios部署目標 |
| s.osx.deployment_target | osx部署目標 |
| s.watchos.deployment_target | watchos部署目標 |
| s.tvos.deployment_target | tvos部署目標 |
| Source Location(源定位) | |
|---|---|
| s.source | 開源地址、版本號,如{ :git => 'https://xx/xx.git', :tag => s.version.to_s } |
| Source Code(源代碼) | |
|---|---|
| s.source_files | 開源文件路徑 |
| s.exclude_files | 排除文件路徑 |
| s.public_header_files | 頭文件路徑,如'Pod/Classes/*/.h' |
| s.vendored_libraries | .a靜態(tài)庫路徑,如'xx/xx/*.a' |
| s.vendored_frameworks | .framework靜態(tài)庫,如'xx.framework' |
| Resources(資源) | |
|---|---|
| s.resource | 資源文件 |
| s.resources | 多個資源文件 |
| s.preserve_paths | 保留路徑 |
| Project Linking(項目關(guān)聯(lián)) | |
|---|---|
| s.framework | 框架 |
| s.frameworks | 多個框架, 如'UIKit', 'Foundation' |
| s.library | 系統(tǒng)靜態(tài)庫 |
| s.libraries | 多個系統(tǒng)靜態(tài)庫庫 |
| Project Settings(項目設(shè)置) | |
|---|---|
| s.requires_arc | 需要ARC模式 |
| s.xcconfig | Xcode配置,如s.xcconfig = { "HEADER_SEARCH_PATHS" => "${PODS_ROOT}/../../Library/gmssl"}
|
| s.dependency | 依賴Podspecs |
補充:
- 如果出現(xiàn)驗證不過,需要進行下面的操作:
在 podspec 文件中添加 s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' },如果項目已經(jīng)設(shè)置 pod_target_xcconfig,添加到已有值的后面。
- 如果出現(xiàn)驗證不過,需要進行下面的操作:
-
- podfile一些配置說明
配置 說明 :git => 'http://xxxx.git' 指定加載庫的git :path => 'LocalPods/MZWechat' 指定本地pod路徑 :tag => '1.0.2' 指定加載的版本 :commit => '32d8934' 指定加載的某次提交 :configurations => ['Debug', 'Release'] 指定僅在debug下編譯 :podspec => 'http://xxxx/TencentOpenAPI.podspec' 從外部倉庫源獲取 :subspecs => ['Core', 'Utils'] 指定下載pod的子pod :branch => 'dev' 加載指定分支
更多關(guān)于CocoaPods的講解,還可以參考我另一篇文章:Pod:知識點匯總。
-
1、創(chuàng)建遠程索引倉庫(注意:要初始化遠程索引庫)和本地索引庫
pod repo add (本地索引庫名) (遠程地址)- 2、查看本地索引庫列表
pod repo list 3、修改
A.podspec文件,將源碼A上傳到A的遠程倉庫-
4、推送到索引庫
pod repo push (本地索引庫名) (A.podspec) --allow-warnings
關(guān)于靜態(tài)庫
lipo A.a -thin x86_64 -output A_64.a #如果是多 CPU 架構(gòu),先提取出某一種架構(gòu)下的 .a 文件
lipo B.a -thin x86_64 output B_64.a ar -x A_64.a #解壓 A 中的目標文件
ar -x B_64.a #解壓 B 中的目標文件
libtool -static -o Together.a *.o #把所有 .o 文件一起打包到 Together.a 中
lipo -create xxx_arm64 xxx_armv7 xxx_armv7s -output xxx_global.a #然后再組合成一個新的.a文件
關(guān)于Cocoapods
Podfile.lock的作用:
- 1、判斷 Podfile.lock 是否存在,如果不存在,按照 Podfile 中指定的版本安裝
- 2、如果 Podfile.lock 存在,檢查 Podfile 中每一個 Pod 在 Podfile.lock 中是否存在
- 3、如果存在, 則忽略 Podfile 中的配置,使用 Podfile.lock 中的配置
- 4、如果不存在,則使用 Podfile 中的配置,并寫入 Podfile.lock 中