iOS 發佈CocoaPods私有庫

  • 須要作的工做包括如下幾點
  1. 建立一個本地的倉庫,將本身的代碼搞進去
  2. 將本身的代碼上傳到遠程私有倉庫中去
  3. 建立一個pods 的描述文件 .podspec
  4. 修改.podspec描述文件中的相關的描述信息
  5. 建立遠程內部私有Spec Repo倉庫
  6. 向私有的Spec Repo倉庫中提交.podspec
  7. 在我的項目中的Podfile中增長剛剛製做的好的Pod並使用
  8. 後期的升級維護
  • 具體詳細的步驟以下
    1. 建立遠程倉庫注意點
  • 正規的倉庫都有一個license文件,Pods依賴庫對這個文件要求比較嚴格,須要有這個文件,建議使用MIT類型的license
  • 代碼版本要打tag(要在代碼版本上傳之後打tag)
  • pod 支持 .a靜態庫、.framework 以及文件,不必定要是可運行的工程裏面的某個組件
  • 放代碼的倉庫不必定非要是Git倉庫,只要是能夠獲取到相關代碼文件就能夠,能夠是SVN的,也能夠是zip包,區別就是在podspec中的source項填寫的內容不一樣
  1. 建立一個pods 的描述文件 .podspec
  • 若是你已經有先有工程可使用以下命令直接建立.podspec文件$ pod spec create MyViewExtension<這個名稱通常和建立的項目名稱同樣就能夠>
  • 或者使用以下命令建立完整項目工程目錄$ pod lib create MyViewExtension <這個名稱通常和建立的項目名稱同樣就能夠>使用這個命令會詢問以下問題,根據項目狀況選擇便可
  1. 修改.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. 建立遠程內部私有Spec Repo倉庫 建立遠程內部私有Spec Repo倉庫, 須要到Github或其餘代碼託管平臺建立遠程倉庫, 以後將遠程倉庫克隆到本地,終端執行以下命令:
// 這裏能夠用https或ssh地址方式克隆
$ pod repo add WBSpecs https://github.com/G***00/TestPodspec.git
複製代碼

注意:代碼倉庫和Spec Repo是須要分開存儲的 克隆成功以後,咱們能夠查看一下:$ open ~/.cocoapods/repos 本地cocoapods目錄以下: html

  1. 向私有的Spec Repo倉庫中提交.podspec
  • 首先將本地.podspec推送到遠程私有repo spec倉庫和本地repo spec倉庫,終端執行以下命令:$ pod repo push WBSpecs WBAvoidCrash.podspec 參數解析:repo spec倉庫名稱 .podspec名稱
  • 驗證遠程是否經過 推送成功以後,終端輸入以下命令進行驗證$ pod spec lint WBAvoidCrash.podspec
  • 驗證私有倉庫是否可用 用pod命令進行搜索,看可否搜索到:$ pod search WBAvoidCrash 若是搜索不到,在終端執行以下命令$ rm ~/Library/Caches/CocoaPods/search_index.json或者更新本地倉庫$ pod repo update而後從新search
  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文件以後,終端執行:ios

$ pod install 安裝時使用,更新庫使用update命令
或
$ pod update 更新時使用
複製代碼
  1. 後期的升級維護 8.1. 更新遠程私有庫中的代碼 8.2. 修改.podspec中的配置,version升級一個版本 8.3. 給當前的遠程倉庫的代碼,從新打個tag,tag和.podspec的version同樣 8.4. 遠程倉庫的代碼更新完畢,接下來執行上面的 6.將當前本地的spec文件傳到私有Spec Repo倉庫的索引庫中 8.5. 檢查測試一下,有沒有上傳到私有Spec Repo倉庫的索引庫中
  • 刪除私有的Spec Repo$ pod repo remove [name] 其實直接找到之後,手動刪除就行了,而後在將Git的變更push到遠端倉庫便可
  • 清理CocoaPods本地緩存 特殊狀況下,因爲網絡或者別的緣由,經過CocoaPods下載的文件可能會有問題
  1. 手動刪除(~/Library/Caches/CocoaPods/Pods/Release目錄)git

  2. 打開終端,輸入$ pod cache list,會列出全部本地已經緩存的第三方庫,在終端中輸入$ pod cache clean AAA會刪除AAA緩存庫,使用$ pod cache clean --all清除全部緩存github

附:個人博客地址sql

相關文章
相關標籤/搜索