iOS 發佈我的開源框架到CocoaPods

  • 須要作的工做包括如下幾點
  1. 建立一個本地的倉庫,將本身想要公開的代碼搞進去
  2. 將本身的代碼上傳到遠程公開倉庫中去
  3. 建立一個pods 的描述文件 .podspec
  4. 修改.podspec描述文件中的相關的描述信息
  5. 將當前本地的.podspec文件傳到CocoaPods官方的索引庫中
  6. 測試一下,有沒有上傳到CocoaPods的索引庫中
  7. 後期的升級維護
  • 具體詳細的步驟以下
    1. 建立遠程倉庫注意點
  • 正規的倉庫都有一個license文件,Pods依賴庫對這個文件要求比較嚴格,須要有這個文件,建議使用MIT類型的license
  • 代碼版本要打tag(要在代碼版本上傳之後打tag)
  • pod 支持 .a靜態庫、.framework 以及文件,不必定要是可運行的工程裏面的某個組件
  • 放代碼的倉庫不必定非要是Git倉庫,只要是能夠獲取到相關代碼文件就能夠,能夠是SVN的,也能夠是zip包,區別就是在podspec中的source項填寫的內容不一樣
  1. 建立一個pods 的描述文件 .podspec $ pod spec create MyViewExtension<這個名稱通常和建立的項目名稱同樣就能夠>
  2. 修改.podspec描述文件中的相關的描述信息 詳情可參考CocoaPods的官網的PodSpec語法
Pod::Spec.new do |s|
  # 項目的名稱
  s.name             = "MyViewExtension"   
  # 項目的版本號,經過項目git的tag標籤進行對應,這裏的標籤表明的版本 
  s.version          = "0.0.1"    
  # 項目簡單的描述信息 
  s.summary          = "Just Testing."  
  # 項目的詳細描述信息,注意,這裏的文字的長度,必定要比上面的s.summary長,否則會認爲格式不合格
  s.description  = <<-DESC
                      this project provide all kind of KeychainDeviceID for iOS developer 
                   DESC
  # 項目的網頁主頁信息,這裏能夠直接寫本身的遠程倉庫的主頁的地址
  s.homepage         = "https://github.com/RunOfTheSnail/MyViewExtension"
  # 開源協議
  s.license          = "MIT"   
  # 做者信息 
  s.author             = { "zhangyan" => "17***24@163.com" }                   
  # 這個比較重要,指的就是git的對應的遠程倉庫的地址以及版本號,版本號直接獲取的是上面的s.version
  # 項目地址,這裏不支持ssh的地址,驗證不經過,只支持HTTP和HTTPS,最好使用HTTPS
  # Supported Keys:
  # :git => :tag, :branch, :commit, :submodules
  # :svn => :folder, :tag, :revision
  # :hg => :revision
  # :http => :flatten, :type, :sha256, :sha1
  s.source       = { :git => "https://github.com/RunOfTheSnail/MyViewExtension.git", :tag => s.version }                      
  # 支持的平臺及版本
  s.platform     = :ios, "11.0"
  # 支持的ios最低版本
  s.ios.deployment_target = "7.0"
  # 若是是 Swift 的話指定 Swift 編譯版本
  # s.swift_version = "4.0"
  # 必備項,代碼源文件地址,若是有多個目錄下則用逗號分開,不然"public_header_files"等不可用
  s.source_files  = "GSLXYKeychainDeviceID/KeychainDeviceID/**/*.{h,m}"                               
  # 公開頭文件地址
  # s.public_header_files = "Pod/Classes/**/*.h"
  # 所需的系統framework,多個用逗號隔開,不須要後綴名
  # s.framework = "SomeFramework"
  s.frameworks = "UIKit", "AnotherFramework"
  # 須要弱連接的框架
  # s.weak_framework = "Twitter"
  # s.weak_frameworks = "Twitter", "SafariServices"
  #項目依賴的庫文件(這個是系統的庫文件),不須要後綴名,好比sqlite,libz等.以lib開頭的須要省略掉lib這三個字母.例如:libz須要簡寫爲z不然報錯
  # s.library = "iconv"
  # s.libraries = "iconv", "xml2"
  # 第三方或本身建立的 .Framework的名稱
  # s.vendored_frameworks = "YostarLib.framework"
  # 第三方或本身建立的 .a靜態庫的名稱
  # s.vendored_libraries = "libYostarStaticLib.a"
  # 添加資源文件
  # s.resource = "XXX/XXXX/**/*.bundle"
  # s.resources = "XXX/XXXX/**/*.bundle"
  # CocoaPods會把這個庫配置成static framework,同時支持Swift和Objective-C
  # s.static_framework = true
  # 依賴關係,該項目所依賴的其餘,當在加載的時候也會一塊把相關的依賴的庫加載下來,若是有多個須要填寫多個
  # s.dependency "JSONKit", "~> 1.4" 
  # 是否使用ARC,若是指定具體文件,則具體的文件使用ARC 
  s.requires_arc = true
  # 指定項目配置,如HEADER_SEARCH_PATHS、OTHER_LDFLAGS等
  # s.xcconfig = {"OTHER_LDFLAGS" => "-ObjC"}  
end
複製代碼
  • 修改完畢以後進行檢驗一下.podspec的格式有木有問題
$ pod lib lint
完整lint格式
$ pod lib lint --allow-warnings --use-libraries --verbose --no-clean --sources='http://10.11.180.29/mobileDevelopers/YZT-Loan-Pod-Spec.git'
--verbose:打印錯誤
--allow-warnings:容許警告,默認有警告的podspec會驗證失敗
--fail-fast:遇到錯誤立刻中止,默認會完成全過程再中止
--use-libraries:若是本身私有庫包含library,引用了.a、.framework,在驗證和提交時須要加
--no-clean:檢查問題
--sources:若是依賴了其餘不包含在官方specs裏的pod,則用它來指明源,好比依賴了某個私有庫。多個值以逗號分隔
複製代碼
  1. 將當前本地的podspec文件傳到CocoaPods官方的索引庫中 5.1. 第一次須要上傳須要註冊 $ pod trunk register zy_iOS2163.com 'zy' --description='macbook air' --verbose 你註冊的時候須要替換郵箱和名字,加上 --verbose 能夠看到詳細信息,而後你會收到一份郵件,須要點擊驗證
    驗證完成
    5.2. 使用$ pod trunk me查看註冊信息是否註冊成功
    5.3. 若是你的pod是由多人維護的,你也能夠添加其餘維護者 $ pod trunk add-owner JLC kyle@163.com(即:pod trunk add-owner 庫名 郵箱) 移除某個管理員 $ pod trunk remove-owner TTLockSDK 郵箱地址(即:pod trunk remove-owner 庫名 郵箱) $ pod trunk info TTLockSDK查看庫當前狀態,版本,全部人等 5.4. 在提交 spec 文件前,若是發佈的是 Swift 框架,須要指定 Swift 的版本,不然會報錯,執行$ echo "4.0" > .swift-version便可指定版本爲 4.0 5.5. 執行命令,將 .podspec push到cocopods的trunk中 $ pod trunk push MyViewExtension.podspec
  2. 測試一下,有沒有上傳到CocoaPods的索引庫中
  • $ pod search SGExtension若是沒有搜到,可能就是本地倉庫沒有更新
  • 更新本地倉庫$ pod repo update再次執行$ pod search SGExtension
  • 若是還搜索不到,執行$ rm ~/Library/Caches/CocoaPods/search_index.json這句話是移除已經生成的搜索目錄緩存文件,移除以後,執行pod search會從新生成一份最新的緩存列表
  • 查看本地索引庫:$ open ~/.cocoapods/repos
  1. 在我的項目中增長剛剛製做好的Podfile並使用 新建一個測試工程測試,用CocoaPods初始化項目,編輯Podfile文件:
#CocoaPods官方spec倉庫
source 'https://github.com/CocoaPods/Specs.git'
#本身私有spec倉庫
source 'https://github.com/wenmobo/WBSpecs.git'

platform :ios, '8.0'

target 'TestDemo' do
  #防Crash庫
  pod 'WBAvoidCrash'
end
複製代碼

編輯好podfile文件以後,終端執行:html

$ pod install 安裝時使用,更新庫使用update命令
或
$ pod update 更新時使用
複製代碼
  1. 後期的升級維護 8.1. 更新遠程公開庫中的代碼 8.2. 修改.podspec中的配置,version升級一個版本 8.3. 給當前的遠程倉庫的代碼,從新打個tag,tag和.podspec的version同樣 8.4. 遠程倉庫的代碼更新完畢,接下來執行上面的 5.將當前本地的spec文件傳到CocoaPods官方的索引庫中 8.5. 檢查使用上面的 6.測試一下,有沒有上傳到CocoaPods的索引庫中
  • 移除索引版本,糾正意外推送
  • 移除該版本,而後從新push,在終端執行下面指令 $ pod trunk delete TTLockSDK 2.6.4(即:pod trunk delete 庫名 版本號)
  • 也能夠放棄整個pod和全部版本 $ pod trunk deprecate TTLockSDK(即:pod trunk deprecate 庫名) 確認時,回覆一個"y"(小寫字母 y)
  • 清理CocoaPods本地緩存 特殊狀況下,因爲網絡或者別的緣由,經過CocoaPods下載的文件可能會有問題
  1. 手動刪除(~/Library/Caches/CocoaPods/Pods/Release目錄)
  2. 打開終端,輸入$ pod cache list,會列出全部本地已經緩存的第三方庫,在終端中輸入$ pod cache clean AAA會刪除AAA緩存庫,使用$ pod cache clean --all清除全部緩存

附:個人博客地址ios

相關文章
相關標籤/搜索