iOS:向CocoaPods提交開源代碼

說明 時間
首次發布 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

配置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

補充:

    1. 如果出現驗證不過,需要進行下面的操作:
      在 podspec 文件中添加 s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' },如果項目已經設置 pod_target_xcconfig,添加到已有值的后面。
    1. 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 中

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容