iOS CocoaPods 私有pod操作流程

pod repo

如果已添加過pod repo 可以跳過

  • 從0開始

    在git服務端創(chuàng)建一個新的空倉庫就好

  • 從已經(jīng)創(chuàng)建好的倉庫拉取

添加pod repo

pod repo add XXX自定義名字 XXX上面的倉庫地址

可以通過下面兩種方式查看是否添加成功

//方式1 到文件夾中查看
cd ~/.cocoapods/repos
//方式2 
pod repo list
新建pod
  • 從0開始
pod lib create XXX自定義名字

? 按照流程配置即可

  • 從已經(jīng)創(chuàng)建好的遠程倉庫拉取

在創(chuàng)建了Example工程的情況下,我們都是在Pods->Development Pods下添加我們的代碼,且可以方便的在Example中調(diào)試使用。

修改pod
  1. 添加代碼文件

    1. 選擇要添加的文件
    2. Add to targets 這里要選擇當前的私有pod


      添加代碼
    3. 添加成功后,如下圖
添加成功
  1. 添加資源文件

    資源文件的添加要主要:

    1. 添加圖片這樣的資源文件可以先添加到.xcassets文件中,這樣在私有pod打包之后,iOS會根據(jù)機型選擇合適的圖片進行應用瘦身,打包成Bundle的資源文件讀取方式要用下面的方式,不然讀取不到。

      NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"XXXBundle" ofType:@"bundle"]];
      NSURL *url = [bundle URLForResource:soundTypeName withExtension:nil];
      

      有一點需要注意:

      XXXBundle是我們在下面第三步中podspec文件中填寫的。

      [NSBundle bundleForClass:[self class]],當在類中寫這個代碼是沒有問題的,但當是在category中讀取時,[self class]只會獲取添加category的類,這樣就無法讀到正確的bundle。

      解決辦法:

      在當前庫中建立一個新的空類,然后 [NSBundle bundleForClass:[Empty class]],這樣便可以定位到當前庫中。

    2. 添加非圖片資源時可以先打成Bundle,也可以跟添加代碼一樣添加。

  2. 修改podspec文件

    podspec示例如下

    Pod::Spec.new do |s|
      s.name             = 'XXXUI'
      s.version          = '0.0.1'
      s.summary          = '這是一個什么組件'
      s.description      = <<-DESC
         比summary更詳細的描述
                           DESC
      s.homepage         = 'git主頁'
      s.license          = { :type => 'MIT', :file => 'LICENSE' }
      s.author           = { 'myname' => 'myemail@mail.com' }
      s.source           = { :git => '代碼地址', :tag => "feature/V#{s.version.to_s}" }
    
      s.ios.deployment_target = '8.0'
    
      s.subspec 'ColorAndFont' do |ss|
          ss.source_files = 'XXXUI/ColorAndFont/*.{h,m}'
          ss.public_header_files = 'XXXUI/ColorAndFont/*.h'
      end
    
      s.subspec 'Button' do |ss|
          ss.source_files = 'XXXUI/Button/*.{h,m}'
          ss.public_header_files = 'XXXUI/Button/*.h'
          ss.dependency 'XXXUI/ColorAndFont'
      end
    
      s.resource_bundles = {
         'XXXUIBundle' => ['XXXUI/Assets/*.png']
      }
      
      # s.public_header_files = ''
      # s.frameworks = 'UIKit', 
      # s.dependency 'AFNetworking', '~> 2.3'
    end
    

    主要注意點:

    1. name 私有pod的名字
    2. version版本號
    3. homepage 項目主頁
    4. author項目作者
    5. source項目地址,注意后面的tag寫法,這里是讀取了feature分支下的對應版本
    6. subspec添加下級目錄,會按照設置的二級目錄整理代碼和資源文件
    7. resource_bundles資源文件,這樣操作會把指定目錄下的資源文件在編譯之后打包成一個獨立的Bundle,從而防止了跟主工程中資源文件命名沖突的可能性
    8. frameworks當前pod需要的系統(tǒng)庫
    9. dependency當前pod需要的第三方庫,當多個不同的私有pod使用同一個第三方庫的不同版本時會產(chǎn)生沖突,如果有沖突建議協(xié)商修改為統(tǒng)一的版本
    10. 同一個私有pod中,如果按照subspec分成了子庫(文件夾),如果相互之間需要引用,需要添加dependency,如上面的ss.dependency 'XXXUI/ColorAndFont',就代表著Button字庫中需要依賴ColorAndFont字庫
  1. 修改README文件

    這個文件的內(nèi)容,會展示在項目主頁,可以修改表示作者、使用注意事項等


    README
驗證pod
  1. Example工程添加

    pod添加好之后,進入pod的Example文件中,執(zhí)行下面命令,會把pod安裝到當前Example工程中,這里我們可以測試私有pod是否可以正常編譯、使用

    pod install
    
  2. 本地驗證

    進入到私有pod工程主目錄


    目錄

    執(zhí)行命令,進行本地驗證

    pod lib lint
    

    驗證過程中如果有過多的警告導致驗證不過,可以通過命令忽略警告

    pod lib lint --allow-warnings
    
  3. 遠程驗證

    pod spec lint 
    
推送pod
  1. 推送私有pod代碼

    驗證通過的代碼可推送到遠端

  2. 推送podsepc到pod repo

    pod repo push XXXrepo XXXUI
    
使用pod
  1. 在要使用私有pod的工程的Podfile中添加,引入私有pod repo的地址,同時為了正常使用cocoapods需要加入cocoapods地址

    platform :ios, '8.0'
    source 'http://xxxx.git'
    source 'https://cdn.cocoapods.org/'
    use_frameworks!
    
    pod 'XXXUI', '~> 0.0.1' 
    
  2. 安裝pod

    pod install
    
總結

可能會用到的其他命令

//查看pod repo
pod repo list
//查看pod是否可用
pod search XXXUI
//查看pod緩存
pod cache list
//清除緩存
pod cache clean XXXUI
//清除全部緩存
pod cache clean —all 
//不更新repo 快速安裝、更新
pod install --no-repo-update
pod update --no-repo-update
//更新repo 安裝
pod install --repo-update

Podfle使用建議,建議使用pod ‘AFNetworking’, ‘~>0.1.2′

pod ‘AFNetworking’ //不顯式指定依賴庫版本,表示每次都獲取最新版本
pod ‘AFNetworking’, ‘2.0’ //只使用2.0版本
pod ‘AFNetworking’, ‘>2.0′ //使用高于2.0的版本
pod ‘AFNetworking’, ‘>=2.0′ //使用大于或等于2.0的版本
pod ‘AFNetworking’, ‘<2.0′ //使用小于2.0的版本
pod ‘AFNetworking’, ‘<=2.0′ //使用小于或等于2.0的版本
pod ‘AFNetworking’, ‘~>0.1.2′ //使用大于等于0.1.2但小于0.2的版本,相當于>=0.1.2并且<0.2.0
pod ‘AFNetworking’, ‘~>0.1′ //使用大于等于0.1但小于1.0的版本
pod ‘AFNetworking’, ‘~>0′ //高于0的版本,寫這個限制和什么都不寫是一個效果,都表示使用最新版本
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容