說明 | 時間 |
---|---|
首次發布 | 2017年10月12日 |
最近更新 | 2019年03月15日 |
背景:這兩天項目的尾巴收的差不多了,趁有些時間,就寫一下關于
提交開源代碼到CocoaPods
和打包.framework靜態庫
的文章吧。打包.framework靜態庫
請移步到下一篇。CocoaPods是非常好用的iOS依賴管理工具,使用它可以方便的管理和更新項目中所使用到的第三方庫,以及將自己的項目中的公共組件交由它去管理。廢話不多說,開始正題。
步驟一:我們需要建一個遠程倉庫,無論是在github上還是在碼云上都可以,下面的截圖是我在碼云上創建的遠程倉庫。
步驟二:執行pod lib create MZLibrary
,會為我們生成上傳CocoaPods所需文件。
步驟三:將我們的代碼copy到生成工程的Pods -> Development Pods -> 庫名 -> 庫名 -> Classes目錄下,cd
到生成的文件夾內,與遠程倉庫進行鏈接。
步驟四:配置MZLibrary.podspec
步驟五:驗證庫名.podspec
是否合法
pod lib lint 庫名.podspec
步驟六:驗證合法之后,將代碼上傳到遠程倉庫并打tag,特別需要注意的是tag應該與podspec里的版本號保存一致。
步驟七:使用pod trunk me
查看在電腦上是否配置過信息,如果沒有的話,執行pod trunk register 郵箱 '用戶名' --description='描述'
,之后執行pod trunk push 庫名.podspec
將開源庫推送到CocoaPods
最后:我們需要更新pod本地索引
rm ~/Library/Caches/CocoaPods/search_index.json
pod repo update
或
pod setup
知識點補充
當執行pod lib create ProjectName
時,其實是從GitHub上下載了一個pod模板,然后在內部通過更改.podspec
文件的配置定制化自己的pod,
pod lib create ProjectName
其實使用了默認參數,補全的話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執照) | |
---|---|
s.license | 開源協議 |
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靜態庫路徑,如'xx/xx/*.a' |
s.vendored_frameworks | .framework靜態庫,如'xx.framework' |
Resources(資源) | |
---|---|
s.resource | 資源文件 |
s.resources | 多個資源文件 |
s.preserve_paths | 保留路徑 |
Project Linking(項目關聯) | |
---|---|
s.framework | 框架 |
s.frameworks | 多個框架, 如'UIKit', 'Foundation' |
s.library | 系統靜態庫 |
s.libraries | 多個系統靜態庫庫 |
Project Settings(項目設置) | |
---|---|
s.requires_arc | 需要ARC模式 |
s.xcconfig | Xcode配置,如s.xcconfig = { "HEADER_SEARCH_PATHS" => "${PODS_ROOT}/../../Library/gmssl"}
|
s.dependency | 依賴Podspecs |
補充:
- 如果出現驗證不過,需要進行下面的操作:
在 podspec 文件中添加 s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' },如果項目已經設置 pod_target_xcconfig,添加到已有值的后面。
- 如果出現驗證不過,需要進行下面的操作:
-
- 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' 加載指定分支
更多關于CocoaPods的講解,還可以參考我另一篇文章:Pod:知識點匯總。
-
1、創建遠程索引倉庫(注意:要初始化遠程索引庫)和本地索引庫
pod repo add (本地索引庫名) (遠程地址)
- 2、查看本地索引庫列表
pod repo list
3、修改
A.podspec
文件,將源碼A上傳到A的遠程倉庫-
4、推送到索引庫
pod repo push (本地索引庫名) (A.podspec) --allow-warnings
關于靜態庫
lipo A.a -thin x86_64 -output A_64.a #如果是多 CPU 架構,先提取出某一種架構下的 .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文件
關于Cocoapods
Podfile.lock的作用:
- 1、判斷 Podfile.lock 是否存在,如果不存在,按照 Podfile 中指定的版本安裝
- 2、如果 Podfile.lock 存在,檢查 Podfile 中每一個 Pod 在 Podfile.lock 中是否存在
- 3、如果存在, 則忽略 Podfile 中的配置,使用 Podfile.lock 中的配置
- 4、如果不存在,則使用 Podfile 中的配置,并寫入 Podfile.lock 中