iOS CocoaPods私有庫

QiShare發表於2018-12-31

級別: ★★☆☆☆
標籤:「iOS」「CocoaPods」「私有庫」
作者: 憶思夢
審校: QiShare團隊

先說下CocoaPods拉取開源庫的原理:

CocoaPods 有一個開源的索引倉庫Specs,倉庫存放著所有開源庫的各個版本的.podspec檔案,.podspec檔案包含中記錄著原始碼的地址。首次使用CocoaPods時,會將這個檔案庫克隆到本地~/.cocoapods/repos/master

  1. 在Podfile目錄下執行 pod install 命令,會從本地的索引庫查詢該庫的.podsepc,如果本地不存在會從遠端拉取最新的索引庫。
  2. 根據索引庫中查到的.podspec檔案內容,獲取原始碼地址。
  3. 從原始碼地址拉取對應版本的程式碼。

iOS CocoaPods私有庫

使用是可以發現,首次匯入一個開源庫時速度較慢,之後再匯入時會很快。是因為CocoaPods在本地會有一個快取目錄,存放開源庫的原始碼,首次下載後,再次匯入該庫時,會直接從本地複製過去。

檢視快取列表使用pod cache list,快取路徑為~/Library/Caches/CocoaPods/Pods/

私有倉庫

私有庫的建立

由於CocoaPods的索引倉庫是開源的,所有人都可以訪問。公司的專案如果也想使用CocoaPods管理原始碼,而不開放原始碼的話,我們可以通過建立私有倉庫來模擬官方的Specs倉庫。

步驟:

  1. 在私有git上建立一個索引倉庫,例:YSMSpecs,用於存放索引檔案。

  2. 將遠端索引庫新增到本地,pod repo add YSMSpecs YSMSpecs_source_url。使用pod repo可以檢視本地的索引倉庫列表。

    $ pod repo add YSMSpecs https://github.com/yisimeng/YSMSpecs.git
    $ pod repo
    
    master   // 公有索引倉庫
    - Type: git (master)
    - URL:  https://github.com/CocoaPods/Specs.git
    - Path: /Users/duanzengguang/.cocoapods/repos/master
    YSMSpecs  //私有索引倉庫
    - Type: git (master)
    - URL:  https://github.com/yisimeng/YSMSpecs.git
    - Path: /Users/duanzengguang/.cocoapods/repos/YSMSpecs
    複製程式碼
  3. 本地建立我們的原始碼工程,可以使用pod lib create YSMKit,建立一個模板工程。

  4. 在模板工程裡進行開發並替換 ReplaceMe 檔案,修改.podspec檔案(版本號,原始碼地址),推送到遠端原始碼倉庫,打tag,提交。原始碼倉庫部署完成。

  5. CocoaPods不允許有Podspecs lints錯誤,所以需要進行Podspecs lints(翻譯不好,會檢查語法錯誤)驗證。這裡可以使用pod lib lint或者pod spec lint,區別在於前者不會聯網,而後者還會檢查外部的倉庫和相關的標籤。

    $ pod lib lint
    -> YSMKit (0.1.0)
    YSMKit passed validation.
    複製程式碼
  6. 檢查沒有錯誤之後,推送.podspec檔案到本地的索引倉庫,本地索引倉庫會自動push到遠端索引倉庫。pod repo push YSMSpecs YSMKit.podspec,這一步會自動進行pod spec lint聯網檢查。索引庫部分完成。

    $ pod repo push YSMSpecs YSMKit.podspec
    Validating spec
     -> YSMKit (0.1.0)
    Updating the `YSMSpecs' repo
    Already up to date.
    Adding the spec to the `YSMSpecs' repo
     - [Add] YSMKit (0.1.0)
    Pushing the `YSMSpecs' repo   // 會自動推送到遠端倉庫
    
    $ pod search YSMKit
    -> YSMKit (0.1.0)
       YSMKit is my kit
       pod 'YSMKit', '~> 0.1.0'
       - Versions: 0.1.0 [YSMSpecs repo]
    複製程式碼

到這裡私有倉庫是搞完了。

第6步如果使用pod trunk push YSMKit.podspec,會將索引庫推送到官方的Specs倉庫中。

私有庫的使用

  1. 在宿主工程的Podifle檔案中引入私有庫:pod 'YSMKit'
  2. 在檔案的最上方新增索引庫地址
source 'https://github.com/yisimeng/YSMSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'
複製程式碼

然後執行 pod install,就可以使用了。

注意: 如果用到了其他開源庫的話,一定要加上官方Specs地址,否則只會去查詢私有索引庫。

私有庫的維護

後續需要更新維護倉庫程式碼的流程:

  1. 在原始碼工程修改程式碼之後,修改.podspec檔案版本號,把原始碼提交,打上tag,推送到遠端倉庫。
  2. .podspec檔案提交到本地的私有索引庫中(會自動幫我們提交到遠端索引庫)。
  3. 回到宿主工程,修改Podfile中的版本,執行pod install(不行就pod update)。

注意事項

  1. 在podfile檔案中 增加inhibit_all_warnings!,這樣pod的工程不會顯示任何警告。
  2. 切記:swift中需要設定好訪問許可權!!!
  3. 新引入一些庫之後執行pod install,會報錯Build Settings,例如:引入Swift庫之後經常會報的“swift version”的錯誤,需要去修改Build Setting,其實可以在Podfile中的post_install中修改。
post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.2'
        end
    end
end
複製程式碼

pre_install:編譯之前可以新增修改(還沒想到可以做哪些事情)。


小編微信:可加並拉入《QiShare技術交流群》。

iOS CocoaPods私有庫

關注我們的途徑有:
QiShare(簡書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公眾號)

推薦文章:
iOS 簽名機制
iOS 掃描二維碼/條形碼
iOS 瞭解Xcode Bitcode
iOS 重繪之drawRect
奇舞週刊

相關文章