iOS 遠(yuǎn)程私有庫的搭建以及使用

思路:創(chuàng)建一個(gè)是遠(yuǎn)程私有spec倉庫與本地私有spec倉庫,也就是兩個(gè)檢索庫疹娶,其他的和遠(yuǎn)程倉庫沒有太大的區(qū)別负蚊,區(qū)別是比遠(yuǎn)程公有倉庫多兩個(gè)檢索庫

總體內(nèi)容

  • 1、創(chuàng)建 遠(yuǎn)程私有Spec倉庫與本地 Spec Repo檢索庫
  • 2徽缚、創(chuàng)建Pod私有庫所需要的項(xiàng)目工程文件,并上傳到私有倉庫
  • 3革屠、創(chuàng)建Pod所對(duì)應(yīng)的podspec文件, 并進(jìn)行驗(yàn)證/測(cè)試
  • 4凿试、創(chuàng)建JKCIOBase版本,并提交代碼代碼到JKCIOBase的遠(yuǎn)程倉庫
  • 5似芝、向私有的Spec Repo中提交podspec和遠(yuǎn)程私有spec倉庫提交
  • 6那婉、使用pod庫來測(cè)試遠(yuǎn)程私有庫的使用
  • 7、遠(yuǎn)程私有庫與其他公有的混合使用
  • 8党瓮、遠(yuǎn)程私有庫分支
  • 9详炬、遠(yuǎn)程私有庫添加依賴庫
  • 10、資源文件 .buldle 的添加
  • 11、遠(yuǎn)程私有庫內(nèi)容更新
  • 12呛谜、fastlane 自動(dòng)化更新pod庫
  • 13在跳、其他組內(nèi)成員如何使用?

一、創(chuàng)建 遠(yuǎn)程私有Spec倉庫與本地 Spec Repo檢索庫隐岛,遠(yuǎn)程的spec文件存在碼云的私有倉庫

  • 1.1猫妙、在 碼云 創(chuàng)建私有的spec倉庫,取名為JKCIOSpecs聚凹,一定要選擇私有割坠,不然誰都可以看到就沒有什么意義了
    在碼云創(chuàng)建自由的spec倉庫,取名為JKCIOSpecs
  • 1.2妒牙、在本地添加一個(gè)spec倉庫
    • (1)彼哼、查看本地spec路徑

      pod repo
      
      查看本地spec路徑
    • (2)、查看幫助信息湘今,可以看到能夠添加本地spec倉庫的提示

      pod repo --help
      
      查看幫助信息敢朱,可以看到能夠添加本地spec倉庫的提示
    • (3)、開始在本地添加spec倉庫
      具體的代碼如下: JKCIOBase是本地spec倉庫的名字摩瞎,名字你自己可以隨意取拴签, git@gitee.com:JKWC/JKCIOSpecs.git是我們上面在碼云創(chuàng)建的遠(yuǎn)程spec倉庫的 ssh 路徑,本地和遠(yuǎn)程關(guān)聯(lián)起來

      pod repo add JKCIOBase git@gitee.com:JKWC/JKCIOSpecs.git
      

      添加后的效果如下

      command + shift +G 輸入  ~/.cocoapods/repos
      
      相比之前多了一個(gè)JKCIOBase愉豺,也就是我們創(chuàng)建的本地私有spec倉庫
      • 提示:如果你的公鑰與私鑰沒有配置篓吁,那就設(shè)置下,在終端輸入下面的代碼蚪拦,之后最后出現(xiàn)下圖

        ssh-keygen
        
      6161546395798_.pic_hd.jpg
      • 去電腦上的 個(gè)人->.ssh 文件夾里面復(fù)制id_rsa.pub的內(nèi)容到碼云(在碼云個(gè)人設(shè)置里面添加公鑰),也可以使用快捷鍵:command + shift +G 輸入 ~/.ssh 進(jìn)入到 ssh文件里面
        `command + shift +G 輸入 ~/.ssh`
      • 小提示:.ssh是隱藏文件杖剪,可以用 command+shift+.讓隱藏文件顯示出現(xiàn),復(fù)制完記得再次輸入command+shift+.讓隱藏文件關(guān)閉驰贷,切記不要輕易刪除任何隱藏文件
    • (4)盛嘿、查看添加后的效果,在終端輸入下面代碼

      pod repo
      
    查看添加后的效果括袒,在終端輸入下面代碼

二次兆、創(chuàng)建Pod私有庫所需要的項(xiàng)目工程文件(我們還在碼云創(chuàng)建)

  • 2.1、我在碼云創(chuàng)建的CIO時(shí)代的基礎(chǔ)組件與功能組件庫: JKCIOBase

    我在碼云創(chuàng)建的CIO時(shí)代的基礎(chǔ)組件與功能組件庫: `JKCIOBase`

  • 2.2锹锰、把JKCIOBase克隆到本地,創(chuàng)建一個(gè)文件夾 JKRemoteLocal

    # 1芥炭、 cd導(dǎo)入路徑
    cd 進(jìn)入到JKRemoteLocal文件夾
    # 2、git clone 倉庫到本地:clone自己倉庫的地址
    git clone https://gitee.com/JKWC/JKCIOBase.git
    
  • 2.3恃慧、在本地 JKRemoteLocal/JKCIOBase 文件夾里面創(chuàng)建一個(gè) JKCIOBase文件夾,同時(shí)創(chuàng)建一個(gè)JKCIOBaseDemo項(xiàng)目园蝠,與剛才創(chuàng)建的JKCIOBase同一個(gè)目錄

    在本地 `JKRemoteLocal/JKCIOBase` 文件夾里面創(chuàng)建一個(gè) `JKCIOBase`文件夾,同時(shí)創(chuàng)建一個(gè)`JKCIOBaseDemo`項(xiàng)目,與剛才創(chuàng)建的JKCIOBase同一個(gè)目錄

  • 2.4痢士、在與JKCIOBaseDemo 同級(jí)的文件夾JKCIOBase里面彪薛,我又創(chuàng)建了一個(gè)文件夾JKCategory,里面拖入了一個(gè)UIView的分類UIView+JKLayout

三、創(chuàng)建Pod所對(duì)應(yīng)的podspec文件, 并進(jìn)行驗(yàn)證

  • 3.1、在與JKCIOBaseDemo同目錄下創(chuàng)建文件 JKCIOBase.podspec

    cd 進(jìn)入到JKCIOBase
    

    提示:JKCIOBase 是第一個(gè)文件夾善延,也就是 JKCIOBase與JKCIOBaseDemo所在的文件夾

  • 3.2少态、創(chuàng)建spec文件

    pod spec create JKCIOBase
    
創(chuàng)建spec文件
  • 3.3、修改spec文件易遣,下面是我修改的內(nèi)容

    Pod::Spec.new do |s|
    
       s.name         = "JKCIOBase"
       s.version      = "0.0.2"
       s.summary      = "JKCIOBase."
       s.description  = "JKCIOBase是CIO時(shí)代的基礎(chǔ)組件彼妻,后續(xù)還會(huì)繼續(xù)增加"
    
       s.homepage     = "https://gitee.com/JKWC/JKCIOBase"
       s.license      = "MIT"
       s.author             = { "JoanKingWC" => "JoanKingWC@163.com" }
       s.ios.deployment_target = "8.0"
       s.source       = { :git => "https://gitee.com/JKWC/JKCIOBase.git", :tag => "#{s.version}" }
       s.source_files  = 'JKCIOBase/**/*.{h,m}'
       s.requires_arc = true
    
    end
    

    提示:
    1、s.summary 要比 s.description
    2训挡、s.homepage寫JKCIOBase在碼云的首頁

    `s.homepage`寫JKCIOBase在碼云的首頁

    3澳骤、s.sourceJKCIOBase的代碼地址即可
    `s.source`寫 `JKCIOBase `的代碼地址即可

    4歧强、s.source_files 不要寫錯(cuò)澜薄,這里的路徑是以 spec所在的目錄開始尋找的,也就是以 JKCIOBase.podspec所在的目錄開始尋找, JKCIOBase與JKCIOBase.podspec同級(jí)目錄摊册,取JKCIOBase下所有文件夾與.h.m文件

    s.source_files  = 'JKCIOBase/**/*.{h,m}'   // ** 代表所有文件
    

    5肤京、如果依賴什么庫,就寫上依賴茅特,如下忘分,依賴 sqlite3,代碼如下

    s.library = "sqlite3"
    
  • 3.4白修、遠(yuǎn)程驗(yàn)證spec文件是否符合規(guī)則

    pod spec lint JKCIOBase.podspec
    

    提示:如果報(bào)錯(cuò)就看下我在遠(yuǎn)程公有庫博客里面對(duì)于驗(yàn)證spec文件有問題的處理

四妒峦、創(chuàng)建JKCIOBase版本,并提交代碼代碼到JKCIOBase的遠(yuǎn)程倉庫

  • 4.1兵睛、 cd JKCIOBase.podspec所在的目錄

    cd JKCIOBase.podspec所在的目錄
    
  • 4.2肯骇、創(chuàng)建版本 tag: 要與 JKCIOBase.podspec里面的版本號(hào)保持一致

    git tag '0.0.1'
    
  • 4.3、提交版本號(hào)

    git push origin 0.0.1
    
    • 提示:如果你提交tag失敗了祖很,請(qǐng)關(guān)聯(lián)倉庫笛丙,后面加你的倉庫地址,切記是代碼倉庫地址假颇,不是遠(yuǎn)程spec倉庫地址

      git remote add origin https://github.com/JoanKing/JKCIOBase.git
      
    • 如果我們想推送到其他的分支胚鸯,可以移除之前的分支,假如我們自己的分支叫 feature笨鸡,那么查看是不是 feature姜钳,如果不是就刪除掉,有關(guān)這一點(diǎn)不懂的可以下方評(píng)論

      // 查看當(dāng)前的分支
      git branch
      // 查看自己的remote端名字
      git remote -v
      //  如果不是我們的分支形耗,刪除之前的  分支名 項(xiàng)目關(guān)聯(lián)哥桥,下面以 origin 為例
      git remote rm origin
      // 添加關(guān)聯(lián)
      git remote add feature https://github.com/JoanKing/JKGCDTimer.git
      
  • 4.4、提交本地JKCIOBase的內(nèi)容
    打開Xcode,在 Source Control 里面 commit 選擇同時(shí)提交到遠(yuǎn)程 JKCIOBase倉庫

    打開Xcode,在 `Source Control` 里面 `commit` 選擇同時(shí)提交到遠(yuǎn)程 `JKCIOBase`倉庫

五趟脂、向私有的Spec Repo中提交podspec和遠(yuǎn)程私有spec倉庫提交

  • 5.1泰讽、在里面我們已經(jīng)驗(yàn)證過 spec文件是符合規(guī)定的,向私有的Spec Repo中提交 spec文件

    pod repo push JKCIOBase JKCIOBase.podspec 
    

    在此提示:JKCIOBase 是 私有本地私有 spec 索引庫的名字,JKCIOBase.podspec 是我們要推送的索引文件

    提示:如果你在驗(yàn)證的時(shí)候有警告,只要沒有報(bào)錯(cuò)可以加上 --use-libraries --allow-warnings,如下:

    pod repo push JKCIOBase JKCIOBase.podspec --use-libraries --allow-warnings
    
    向私有的Spec Repo中提交 spec文件
  • 5.2已卸、我們驗(yàn)證下是否成功

    進(jìn)入本地 JKCIOBase 倉庫佛玄,上面的沒有報(bào)錯(cuò),在JKCIOBase里面出現(xiàn)JKCIOBase倉庫就是成功了累澡,JKCIOBase里面會(huì)存著每個(gè)版本的spec文件赘娄,這里展示了 0.0.2 版本的 spec 文件

    command + shift +G 輸入 ~/.cocoapods/repos
    
    我們驗(yàn)證下是否成功
  • 5.3、遠(yuǎn)程私有spec倉庫提交
    其實(shí)寫這個(gè)5.3是多余的梧躺,因?yàn)樵?.2里面橡淑,我們把spec文件提交到本地的時(shí)候,同時(shí)也就提交到了我們創(chuàng)建的遠(yuǎn)程 spec倉庫蕊梧,也就是我們?cè)?1.1 創(chuàng)建的 JKCIOSpecs霞赫,我們看下JKCIOSpecs里面,存放也是spec的各個(gè)版本,如下圖

六肥矢、使用pod庫來測(cè)試遠(yuǎn)程私有庫的使用

  • 6.1端衰、在桌面創(chuàng)建一個(gè)項(xiàng)目 JKRemoteLocalTest

  • 6.2、創(chuàng)建Podfile文件

    cd JKRemoteLocalTest文件夾
    pod init
    
  • 6.3甘改、修改 Podfile文件的內(nèi)容

    source 'git@gitee.com:JKWC/JKCIOSpecs.git'
    
    platform :ios, '9.0'
    
    target 'JKRemoteLocalTest' do
    
        use_frameworks!
    
        pod 'JKCIOBase'
    
    end
    

    提示:source 'git@gitee.com:JKWC/JKCIOSpecs.git'是遠(yuǎn)程spec倉庫的地址旅东,不可少,因?yàn)?pod 'JKCIOBase'是要從 source資源里面去找spec文件來下載相應(yīng)的版本的 JKCIOBase

  • 6.4十艾、查看導(dǎo)入的效果


    JKCIOBase成功導(dǎo)入

七抵代、遠(yuǎn)程私有庫與其他公有的混合使用

  • 7.1、如下 Podfile文件 內(nèi)容忘嫉,導(dǎo)入 SDWebImage 是不會(huì)成功的

     source 'git@gitee.com:JKWC/JKCIOSpecs.git'
    
     platform :ios, '9.0'
    
     target 'JKRemoteLocalTest' do
    
        use_frameworks!
    
        pod 'JKCIOBase'
        pod 'SDWebImage'
    
    end
    
  • 7.2荤牍、解決 7.1 導(dǎo)入 SDWebImage 不成功的問題

    • 分析 SDWebImage 是屬于pod 公有庫的資源,在 source 'git@gitee.com:JKWC/JKCIOSpecs.git'是不可能找到的榄融,所以要在公有庫的資源里面尋找参淫,查看公有庫資源路徑

      pod repo
      
      pod repo查看spec路徑
      • 如下寫 Podfile 文件才是正確的

        source 'git@gitee.com:JKWC/JKCIOSpecs.git'
        source 'https://github.com/CocoaPods/Specs.git'
        
        platform :ios, '9.0'
        
        target 'JKRemoteLocalTest' do
        
            use_frameworks!
        
            pod 'JKCIOBase'
            pod 'SDWebImage'
        
        end
        
  • 7.3、查看導(dǎo)入遠(yuǎn)程私有庫與公有庫的效果


    查看導(dǎo)入遠(yuǎn)程私有庫與公有庫的效果

八愧杯、遠(yuǎn)程私有庫分支

  • 8.1涎才、這個(gè)有關(guān)分支的問題,我在遠(yuǎn)程共有庫已經(jīng)闡述過了這里我就在JKCIOBase添加一個(gè)JKKit
    在`JKCIOBase `添加一個(gè)JKKit
  • 8.2力九、在spec文件里面設(shè)置一下JKCategoryJKKit分支的東西
    `JKCategory`與`JKKit`分支
  • 8.3耍铜、把版本改為 0.0.6,打tag提交代碼如下

    #  cd 進(jìn)入spec所在的目錄
    cd 進(jìn)入 JKCIOBase所在的目錄,也就是spec文件所在的目錄
    # 打0.0.6的tag
    git tag '0.0.6'
    # 提交 tag到 遠(yuǎn)程私有倉庫
    git push origin 0.0.6
    # 使用xcode提交代碼到遠(yuǎn)程倉庫
    
  • 8.4跌前、提交spec文件到本地私有spec倉庫(也就是我們創(chuàng)建的JKCIOBase)

    pod repo push JKCIOBase JKCIOBase.podspec --use-libraries --allow-warnings
    
    提交spec文件到本地私有spec倉庫(也就是我們創(chuàng)建的JKCIOBase)
  • 8.5棕兼、在使用 command + shift +G 輸入 ~/.cocoapods/repos里面的 JKCIOBase就可以看到里面多了一個(gè)新的版本,我這里提交的是 0.0.6

    查看是否提交成功

  • 8.6抵乓、測(cè)試一下是否設(shè)置分支成功

    cd 進(jìn)入上面測(cè)試`JKRemoteLocalTest`
    # 更新庫
    pod update 
    
分支創(chuàng)建成功

九伴挚、遠(yuǎn)程私有庫添加依賴庫

  • 9.1靶衍、給JKCIOBase添加依賴庫 'AFNetworking''MJRefresh',給JKKit添加一個(gè)依賴庫 Masonry
    給`JKCIOBase`添加依賴庫 `'AFNetworking'`與`'MJRefresh'`茎芋,給`JKKit`添加一個(gè)依賴庫 `Masonry`
  • 9.2颅眶、打tag,提交spec等等和 里面的一樣田弥,不再寫了
  • 9.3涛酗、查看是否依賴第三方庫成功。同樣更新 JKRemoteLocalTest
    依賴第三方庫成功

十偷厦、資源文件 .buldle 的添加

  • 10.1商叹、什么是Bundle文件?
    答:簡(jiǎn)單理解只泼,就是資源文件包剖笙。我們將許多圖片、XIB辜妓、文本文件組織在一起枯途,打包成一個(gè)Bundle文件忌怎。方便在其他項(xiàng)目中引用包內(nèi)的資源籍滴。
  • 10.2、Bundle文件的特點(diǎn)榴啸?
    答:Bundle是靜態(tài)的孽惰,也就是說,我們包含到包中的資源文件作為一個(gè)資源包是不參加項(xiàng)目編譯的鸥印。也就意味著勋功,bundle包中不能包含可執(zhí)行的文件。它僅僅是作為資源库说,被解析成為特定的2進(jìn)制數(shù)據(jù)狂鞋。
  • 10.3、bundle的優(yōu)點(diǎn)
    • (1)潜的、因?yàn)閎undle在目錄結(jié)構(gòu)中的層次結(jié)構(gòu)骚揍,一個(gè)bundle只包含資源文件。因此啰挪,你可以使用相同的文件接口像打開其他類型文件一樣打開bundle文件
    • (2)信不、bundle的結(jié)構(gòu)使它可以很容易的支持本地化,你可以非常容易的添加或者移除本地資源
    • (3)亡呵、bundle可以保持在多種格式的的系統(tǒng)中抽活, 如HFS,HFS+和AFP的multiple fork formats锰什;UFS下硕,SMB丁逝,NFS 的single-fork formats
  • 10.4、我們創(chuàng)建一個(gè) JKCIOBase.bundle 的資源文件
    • <1>梭姓、新建一個(gè)工程macOS的Bundle項(xiàng)目


      新建一個(gè)工程macOS的Bundle項(xiàng)目
    • <2>果港、命名為:JKCIOBase.bundle


      命名為:JKCIOBase.bundle
    • <3>、刪除文件夾和info.plist文件


      刪除文件夾和info.plist文件
    • <4>糊昙、刪除Build Settings里的Packaging的info.plist的文件地址


      刪除Build Settings里的Packaging的info.plist的文件地址
    • <5>辛掠、設(shè)置 Base SDK 為 iOS


      設(shè)置Base SDK為iOS
    • <6>、把 Build Active Architecture Only 修改為 NO释牺,否則生成的庫就只支持當(dāng)前選擇設(shè)備的架構(gòu)

    • <7>萝衩、bundle中的圖片格式修改
      iOS 創(chuàng)建Bundle時(shí)放入的圖片資源(.png)在默認(rèn)配置下會(huì)被轉(zhuǎn)為.tiff格式,使用的時(shí)候找不到没咙。因?yàn)樵趇OS中創(chuàng)建bundle時(shí)會(huì)用一個(gè)“hack”猩谊,為了使所有的運(yùn)行需要更改一個(gè)配置。找到bundle的工程祭刚,修改:

      Buld Settings > COMBINE_HIDPI_IMAGESNO

      Buld Settings > COMBINE_HIDPI_IMAGES and set toNO

    • <8>.可選配置
      作為資源包牌捷,僅僅需要編譯就好,無需安裝相關(guān)的配置涡驮,設(shè)置 Skip InstallYES暗甥,清除 Installation Directory 路徑信息。

      Buld Settings > `Installation Directory`
    • <9>捉捅、最關(guān)鍵是把工程目錄下的Build SettingsCode Signing Identity 的蘋果研發(fā)者證書換成 iOS研發(fā)者證書

      `Build Settings`下`Code Signing Identity`
    • <10>.添加要打包的資源文件進(jìn)到文件夾,編譯

    • <11>撤防、進(jìn)入到 JKCIOBase.bundle

      進(jìn)入到 `JKCIOBase.bundle`

    • <12>、把JKCIOBase.bundle復(fù)制到其他的iOS項(xiàng)目

      把`JKCIOBase.bundle`復(fù)制到其他的iOS項(xiàng)目
    • <13>棒口、圖片的使用

      • 第一種直接拖入項(xiàng)目使用寄月,取路徑如下

        • OC

          "JKCIOBase.bundle/icon_scan"
          

          加載圖片

          UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 40, 40)];
          imageView.image = [UIImage imageNamed:@"JKCIOBase.bundle/icon_scan"]
          [self.view addSubview:imageView];
          
        • Swift

          let path = Bundle.init(for: ViewController.self).path(forResource: "Frameworks/xcrbasekit.framework/xcrbasekit", ofType: "bundle")
          let bundle = Bundle.init(path: path!)
          let image = UIImage.init(named: "xbb_bigV", in: bundle, compatibleWith: nil)
          
          let userImageView = UIImageView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
          userImageView.image = image
          view.addSubview(userImageView)
          
          • 對(duì)于上面參數(shù)的理解

            let path = Bundle.init(for: #className.self).path(forResource: "#bunleName", ofType: "bundle")
            let bundle = Bundle.init(path: path!)
            let image = UIImage.init(named: "#pageName", in: bundle, compatibleWith: nil)
            

            className:bundle所在的類的類名
            bunleName:bundle名稱
            pageName:要使用的圖片名稱

      • 第二種封裝成SDK再使用,取路徑如下

        • OC

          "Frameworks/JKOCProjectTool.framework/JKCIOBase.bundle/icon_scan"
          

          加載圖片

          UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 40, 40)];
          imageView.image = [UIImage imageNamed:@"Frameworks/JKOCProjectTool.framework/JKCIOBase.bundle/icon_scan"]
          [self.view addSubview:imageView];
          
        • Swift无牵,取資源調(diào)用 <14> 里面的函數(shù)

          let userImageView = UIImageView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
          userImageView.image = UIImage(named: getBundleResource(bundName: "xcrbasekit", resourceName: "xbb_bigV", bundleType: 1))
          view.addSubview(userImageView)
          
    • <14>漾肮、把圖片路徑封裝成宏

      • OC

        #define JKOCProjectToolBundlePath(file) [@"JKOCProjectTool.bundle" stringByAppendingPathComponent:file]
        #define JKOCProjectToolFrameworkBundlePath(file) [@"Frameworks/JKOCProjectTool.framework/JKOCProjectTool.bundle" stringByAppendingPathComponent:file]
        #define JKOCProjectToolBundleImageName(file)  [UIImage imageNamed:JKOCProjectToolBundlePath(file)] ? :[UIImage imageNamed:JKOCProjectToolFrameworkBundlePath(file)]
        
      • Swift 寫成函數(shù)

        /// 獲取資源文件
        /// - Parameter bundName: bundle的名字
        /// - Parameter resourceName: 資源的名字,比如圖片的名字
        /// - Parameter bundleType: 類型:默認(rèn) 0 是在自己模塊下使用茎毁,1 在其他模塊中使用
        func getBundleResource(bundName: String,resourceName: String,bundleType: Int = 0) -> String {
           if bundleType == 1 {
               return "Frameworks/\(bundName).framework/\(bundName).bundle/\(resourceName)"
           }
           return "\(bundName).bundle/" + "\(resourceName)"
        }
        

十一克懊、遠(yuǎn)程私有庫內(nèi)容更新

遠(yuǎn)程私有庫內(nèi)容更新的更新其實(shí)和里面一樣的步驟,修改JKCIOBase里面的內(nèi)容充岛,更改spec內(nèi)的版本號(hào)保檐,有要修改的就修改內(nèi)容,打版本tag,提交tag到遠(yuǎn)程私有倉庫崔梗,提交spec文件打破本地spec倉庫與遠(yuǎn)程私有spec檢索倉庫

十二夜只、fastlane 自動(dòng)化更新pod庫

  • 12.1、什么是自動(dòng)化?
    答:通過簡(jiǎn)單的一條命令, 去自動(dòng)執(zhí)行一組固定操作蒜魄,比如:測(cè)試扔亥、打包上傳審核场躯、分發(fā) 等自動(dòng)化使用場(chǎng)景

  • 12.2、Fastlane 簡(jiǎn)介
    Fastlane是一個(gè)ruby腳本集合

  • 12.3旅挤、Fastlane使用概念

    • lane(航道) : 好比一道題
    • Action機(jī)制:好比做一道題分很多步踢关,每一步都是一個(gè) Action,專業(yè)的解釋:Action是Fastlane自動(dòng)化流程中的最小執(zhí)行單元粘茄,體現(xiàn)在Fastfile腳本中的一個(gè)個(gè)命令签舞,比如:cocoapodsgit_add等等柒瓣,而這些命令背后都對(duì)應(yīng)一個(gè)用 Ruby 編寫的腳本儒搭。
    • 目前所有的 Action: Actions描述鏈接源碼鏈接
    • 常用action:
      • produce 創(chuàng)建可用于 iTunes Connect 和 Apple Developer Portal 的 iOS app芙贫。
      • cert 自動(dòng)創(chuàng)建和維護(hù) iOS 代碼簽名證書搂鲫。
      • sigh 創(chuàng)建、更新磺平、下載和修復(fù) provisioning profiles魂仍。
      • snapshot 自動(dòng)將 App 屏幕截圖本地化到每種設(shè)備上。
      • frameit 將屏幕截圖適配到適當(dāng)?shù)脑O(shè)備屏幕大小拣挪。
      • gym 創(chuàng)建和打包 iOS app擦酌。
      • deliver 上傳屏幕截圖、元數(shù)據(jù)和 App 到 App 商店媒吗。
      • PEM 自動(dòng)創(chuàng)建和更新 Push 通知的 profile仑氛。
  • 12.4、Fastlane 安裝

    sudo gem install fastlane
    sudo gem install -n /usr/local/bin fastlane
    

    提示:要求ruby版本最新

    brew update
    brew install ruby
    
    • 提示:如果報(bào)錯(cuò):-bash: brew: command not found
    • 解決上面報(bào)錯(cuò)的方法:mac 終端下闸英,執(zhí)行以下命令,即可安裝brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    • 在終端環(huán)境下介袜,brew --version 查看brew的版本甫何,也可以驗(yàn)證brew是否安裝成功
  • 12.5、在項(xiàng)目使用 Fastlane

    • <1>遇伞、在終端 cd 進(jìn)入項(xiàng)目根目錄

    • <2>辙喂、fastlane init

      fastlane init`

      • (1)、??自動(dòng)截圖
      • (2)鸠珠、????自動(dòng)測(cè)試分發(fā)到TestFlight
      • (3)巍耗、??自動(dòng)化App Store分發(fā)
      • (4)、??手動(dòng)設(shè)置 - 手動(dòng)設(shè)置項(xiàng)目以自動(dòng)執(zhí)行任務(wù)

      提示1:看自己的需求渐排,我這里選的4
      提示2:如果不需要實(shí)現(xiàn)上傳等操作, 其實(shí)我們可以直接在工程目錄下, 創(chuàng)建一個(gè)fastlane文件夾, 在文件夾內(nèi)部創(chuàng)建"使用文件"(Fastfile文件)炬太,在成功后 fastlane 文件夾里面會(huì)有一個(gè) Fastfile 文件

    • <3>、 在fastlane 文件夾里面的 Fastfile 文件中, 描述不同的"航道",我們這里以下面的步驟為主

      提示:在代碼轉(zhuǎn)化為 action的過程都是在 Actions描述 里面查找的

      • (1)驯耻、提交代碼到本地暫緩區(qū)亲族,git add .炒考,對(duì)應(yīng)的fastlane 命令如下

        git_add(path: ".")   
        

        提示: . 代表當(dāng)前文件下所有的內(nèi)容

      • (2)、提交代碼到本地倉庫霎迫,git commit -m '提交內(nèi)容說明' 斋枢,對(duì)應(yīng)的fastlane 命令如下,提交說明的信息知给,我們可以定義成參數(shù)傳進(jìn)來

        git_commit(path: ".", message: "提交代碼")
        
      • (3)瓤帚、提交代碼到遠(yuǎn)程倉庫,git push origin master,對(duì)應(yīng)的fastlane 命令如下

        push_to_git_remote
        
      • (4)涩赢、給版本打tag缘滥,git tag 版本號(hào),對(duì)應(yīng)的fastlane 命令如下

        add_git_tag(
            tag: 版本號(hào)
        )
        

        提示:版本號(hào)我們傳進(jìn)來

      • (5)、提交所有的版本 git push --tags,對(duì)應(yīng)的fastlane 命令如下

        push_git_tags
        
      • (6)谒主、刪除指定tag: 本地刪除 git tag -d 0.0.1,遠(yuǎn)程刪除: git push origin :0.0.1,對(duì)應(yīng)的fastlane 命令如下

        remove_tag(tag:版本號(hào))
        
      • (6)朝扼、驗(yàn)證spec文件是否有報(bào)錯(cuò),允許有警告霎肯,pod spec lint --allow-warnings,對(duì)應(yīng)的fastlane 命令如下

            pod_lib_lint(allow_warnings: true)
        
      • (7)擎颖、如果你在驗(yàn)證的時(shí)候有警告,只要沒有報(bào)錯(cuò)可以加上 --use-libraries --allow-warnings就可以提交:pod repo push 本地私有庫名 組件名.podspec --use-libraries --allow-warnings观游,,對(duì)應(yīng)的 fastlane 命令如下

        pod_push(path: "#{組件名}.podspec", repo: "本地庫名", allow_warnings: true)
        
      • (8)搂捧、pod install 對(duì)應(yīng)的 fastlane 命令如下

        cocoapods(
            clean: true,
            podfile: "."
        )
        

        提示:podfile后面的路徑是以 fastlane文件夾為準(zhǔn)需要 Podfile 文件的,如果Podfile與fastlane文件夾同目錄懂缕,那么就寫:podfile: "."允跑,其中 .代表當(dāng)前目錄

  • 12.6、fastlane文件夾下Fastfile文件的命令完整的步驟如下:

    default_platform(:ios)
    
       platform :ios do
          desc "pod遠(yuǎn)程提交"
          lane :custom_lane do |options|
          # 參數(shù)一:提交代碼的備注
          commit_message = options[:message]
          # 參數(shù)二:版本號(hào)
          commit_tagName = options[:tagName]
          # 參數(shù)三:spec 文件的名字
          commit_specName = options[:specName]
          # 參數(shù)四:倉庫的本地檢索庫的名字
          commit_repositoryName = options[:repositoryName]
          # 1搪柑、提交代碼到本地暫緩區(qū)
          git_add(path: ".")
          # 2聋丝、提交代碼到本地倉庫
          git_commit(path: ".", message: "#{commit_message}")
          # 3、提交代碼到遠(yuǎn)程倉庫
          push_to_git_remote
          # 4工碾、驗(yàn)證tag是否存在,如果存在, 應(yīng)該刪除本地標(biāo)簽和遠(yuǎn)程標(biāo)簽
          # 如果判斷標(biāo)簽是否存在
          if git_tag_exists(tag: commit_tagName)
                 UI.message("發(fā)現(xiàn)tag:#{commit_tagName} 已經(jīng)存在, 即將執(zhí)行, 刪除動(dòng)作 ??")
                 # 執(zhí)行刪除本地/遠(yuǎn)程標(biāo)簽
                 remove_tag(tag:commit_tagName)
          end
          # 5. git tag 標(biāo)簽名稱
          add_git_tag(
                tag: commit_tagName
          )
          # 6. 提交tag到服務(wù)器  git push --tags
          push_git_tags
          # 7. 驗(yàn)證spec文件是否有問題
          pod_lib_lint(allow_warnings: true)
          # 8. 推送 spec 文件到本地和服務(wù)器
          pod_push(path: "#{commit_specName}.podspec", repo: "#{commit_repositoryName}", allow_warnings: true)
    
          end
     end
    

    使用方式:把fastlane文件夾拖到和spec文件同一目錄下弱睦,cd 進(jìn)入 spec 文件所在的目錄,執(zhí)行下面的命令

    命令: fastlane custom_lane message:提交內(nèi)容說明 tagName: 版本號(hào) specName: spec文件名字 repositoryName: 倉庫名字

    提示:一定要有 fastlane文件夾渊额,里面有Fastfile文件

十三况木、其他組內(nèi)成員如何使用?

  • 13.1、分配權(quán)限給同事

    把創(chuàng)建的遠(yuǎn)程代碼私有庫以及遠(yuǎn)程spec私有庫都添加你同事進(jìn)來旬迹,讓他注冊(cè)碼云賬號(hào)火惊,添加這兩個(gè)遠(yuǎn)程私有庫

  • 13.2、添加本地私有庫
    重復(fù) 一 里面的 1.2在本地添加一個(gè)spec倉庫

  • 13.3奔垦、配置Podfile文件


    配置Podfile文件

遠(yuǎn)程公有庫
本地私有庫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屹耐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宴倍,更是在濱河造成了極大的恐慌张症,老刑警劉巖仓技,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俗他,居然都是意外死亡脖捻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門兆衅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來地沮,“玉大人,你說我怎么就攤上這事羡亩∧σ桑” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵畏铆,是天一觀的道長(zhǎng)雷袋。 經(jīng)常有香客問我,道長(zhǎng)辞居,這世上最難降的妖魔是什么楷怒? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瓦灶,結(jié)果婚禮上鸠删,老公的妹妹穿的比我還像新娘。我一直安慰自己贼陶,他們只是感情好刃泡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碉怔,像睡著了一般烘贴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眨层,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天庙楚,我揣著相機(jī)與錄音,去河邊找鬼趴樱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酪捡,可吹牛的內(nèi)容都是我干的叁征。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼逛薇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼捺疼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起永罚,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤啤呼,失蹤者是張志新(化名)和其女友劉穎卧秘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體官扣,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翅敌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惕蹄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚯涮。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卖陵,靈堂內(nèi)的尸體忽然破棺而出遭顶,到底是詐尸還是另有隱情,我是刑警寧澤泪蔫,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布棒旗,位于F島的核電站,受9級(jí)特大地震影響撩荣,放射性物質(zhì)發(fā)生泄漏铣揉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一婿滓、第九天 我趴在偏房一處隱蔽的房頂上張望老速。 院中可真熱鬧,春花似錦凸主、人聲如沸橘券。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旁舰。三九已至,卻和暖如春嗡官,著一層夾襖步出監(jiān)牢的瞬間箭窜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工衍腥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磺樱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓婆咸,卻偏偏與公主長(zhǎng)得像竹捉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尚骄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容