iOS 組件化-遠程私有庫(實操)

遠程私有庫(實操)

本教程一步一步教會如何制作自己的遠程私有庫,一步一步實操,制作過程還是有點小繁瑣的。

目錄:


寫在前面:所需要的幾種倉庫

  1. 主工程(宿主工程)倉庫 【1個】

  2. 組件倉庫 【1個或多個】

    • 功能組件
    • 業(yè)務組件
  3. 索引倉庫 【1個或多個】
    如果是多個,可按項目來分類或自定義分類。每個索引倉庫可管理多個組件倉庫。


〇、準備工作-創(chuàng)建遠程私有索引庫(管理私有組件spec文件)

創(chuàng)建遠程私有倉庫存放私有的spec文件并將源添加到本地索引庫repo

因為spec文件中保存著庫的源碼地址,而我們制作的遠程私有庫是不希望別人看到源碼的,所以要將spec文件也變?yōu)樗接小_@樣,就需要另一個專門管理多個spec的遠程私有倉庫。

  1. 在遠程創(chuàng)建一個專用存放多個spec文件的遠程私有倉庫

  2. 先查看本地repo
    $ pod repo

  3. 將這個倉庫地址添加到本地repo源
    兩種方式:01-https方式;02-ssh方式(ssh方式需提前配置SSH
    $ pod repo add YourName git@xxx.git
    ‘YourName’為給spec源起的名稱

  4. 再次查看本地repo
    $ pod repo
    可以發(fā)現(xiàn),本地多了一個剛添加的源

  5. 補充命令:

    • 刪除本地repo
      $ pod repo remove name
    • 更新本地的Pod 索引庫的緩存信息
      $ pod repo update [--verbose]

一、遠程私有組件庫制作、發(fā)布與使用

第一步 創(chuàng)建本地私有組件庫

  1. 手動創(chuàng)建 (按照本地私有庫的步驟一步一步手動配置)

    1. cd進入到將要創(chuàng)建倉庫的文件夾
      # 全局設置默認分支為master (可設置可不設置)
          $ git config --global init.defaultBranch master
      # 使用init命令初始化本地倉庫
          $ git init
      
    2. 創(chuàng)建并配置.podspec文件
    3. 創(chuàng)建庫對應的測試工程
    4. 測試工程可以使用pod本地依賴的方式引入私有庫來使用
  2. 使用模板自動創(chuàng)建一個庫和對應的測試工程

    1. 創(chuàng)建
      $ pod lib create xxx
    2. 測試工程使用pod本地依賴的方式引入私有庫來使用

第二步、創(chuàng)建遠程私有倉庫并與本地組件倉庫關聯(lián)

  1. 創(chuàng)建遠程私有倉庫,用于存儲庫源碼

  2. 將本地和遠程關聯(lián)
    $ git remote add origin git@xxx.git
    沒有輸出就表示關聯(lián)成功

  3. 將遠程倉庫pull到本地
    $ git pull
    關聯(lián)成功后,一定要先做這步pull操作!否則會出現(xiàn)分支沖突的問題

  4. 本地添加文件,提交代碼

    $ git add .
    $ git commit -m '描述'
    $ git push
    

注意:

  1. 一般會出現(xiàn)這樣的提示
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

這里系統(tǒng)給了2中提示,如果先用方式二git branch --set-upstream-to=origin/<branch> master來處理,即

$ git branch --set-upstream-to=origin/master master

之后提示

Branch 'master' set up to track remote branch 'master' from 'origin'.

設置好了之后,再進行拉取

$ git pull

或者直接用方式一git pull <remote> <branch> 的方式處理,如:

$ git pull git@xxx.git master

需要注意的是,不管用那種方式都需要拉取,拉取就可能會有下面的提示:
“refusing to merge unrelated histories”(拒絕合并無關歷史記錄),還有一堆提示

hint: Pulling without specifying how to reconcile divergent branches is
hint: discouraged. You can squelch this message by running one of the following
hint: commands sometime before your next pull:
hint: 
hint:   git config pull.rebase false  # merge (the default strategy)
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.

那我們就按照提示使用命令git config pull.rebase false # merge (the default strategy),即

$ git config pull.rebase false

會發(fā)現(xiàn)還是提示“refusing to merge unrelated histories”(拒絕合并無關歷史記錄)
這時候可以允許合并不同的版本,使用下面的命令

$ git pull origin master --allow-unrelated-histories

這樣會將遠程倉庫的下載下來,但是會發(fā)生不同版本的沖突。
一般是發(fā)生在 README.md 文件,所以我們就要打開這個文件來解決沖突。

解決沖突之后,正常提交代碼

$ git add .
$ git commit -m '描述'

最后推送代碼

$ git push --set-upstream origin master

或者

$ git push -u origin master

問題解決。

  1. 還可能出現(xiàn)以下情況
    • 如果本地已經(jīng)commit提交過代碼,那么使用如下方式
      • 本地修改代碼commit
      • 關聯(lián)遠程
        $ git remote add origin https://xxxxx.git
      • push到遠程倉庫
        $ git push -u origin master
    • 如果出現(xiàn)錯誤如 【 ![rejected] master -> master (non-fast-forward) error:failed to pus some refs to xxxxxx】之類的,有兩種解決方法:
      • 第一種,先備份,再拉取覆蓋本地(一定先踏馬的備份?。?/strong>)
        • 備份代碼
        • 強制拉取到本地
          $ git pull --rebase origin master
        • 推送
          $ git push origin master
      • 第二種,強制推送覆蓋遠程文件(這個命令在團隊開發(fā)的時候最好不要用,否則可能會有踏馬的‘生命, 危, 險. Danger to life
        $ git push -f origin master
      • 綜上所述,還是用第一種方法吧?。?!

第三步、配置spec文件與發(fā)布

  1. 查看本地repo源,并找到管理spec的源
    $ pod repo

  2. 配置spec文件

    • version
    • homepage 其url使用遠程私有庫主頁
    • licence
    • source
      • ①git 設置為倉庫的地址
      • ②tag: s.version.to_s
    • source_files
  3. commit提交代碼并push到遠程倉庫

  4. 給庫打tag,并將tag推送push到遠程倉庫

    1. 查看tag
      $ git tag
    2. 設置tag 【跟version一致!】
      $ git tag '0.1.1'
    3. 將設置好的tag推送到遠程
      $ git push --tags
    4. 補充命令:刪除某個tag并將改動推送到遠程
      01-本地刪除tag
      $ git tag -d 0.1.1
      02-將刪除改動推送到遠端
      $ git push origin :0.1.1
  5. 檢測驗證spec文件

    1. 驗證本地spec文件
      $ pod lib lint --verbose --no-clean
      注意homepage的設置
    2. 驗證遠程spec文件
      $ pod spec lint --verbose --no-clean
      遠程必須要有對應版本的tag

      提示:-> xxx (0.1.0)
      驗證成功會提示:xxx.podspec passed validation.

  6. 發(fā)布,將spec文件push到遠程私有索引庫

    1. 查看本地源
      $ pod repo
    2. 發(fā)布,將spec提交到本地源關聯(lián)的遠程私有索引庫
      $ pod repo push YourName xxx.podspec [--verbose] [--allow-warnings]
      # ‘YourName’為spec源的名稱,使用【$ pod repo】命令可以查看
      # ‘xxx.podspec’為組件的podspec文件名
      
      注意:
      • 如果出現(xiàn)錯誤,建議直接刪除本地源,之后重新關聯(lián)
      • 如果為 repo not clean 的錯誤,如下:
        [!] The repo 'YourName' at '../xxxxx/.cocoapods/repos/NAME' is not clean
        則可以cd到對應路徑下,執(zhí)行clean命令來清理
        $ git clean -f
    3. 本地源對應的文件夾中,也會出現(xiàn)剛提交的庫及版本文件夾
  7. 搜索遠程私有庫
    $ pod search xxx
    注意:如果私有庫提交成功但還是搜索不到,有可能是CocoaPods緩存的問題資源庫-Caches-CocoaPods-search_idnex.json,可以將索引文件刪除,重新執(zhí)行search命令,會重新生成本地索引文件。

  8. 更新遠程私有庫

    1. 修改庫代碼
    2. 更新xxx.podspec文件中的version
    3. 提交代碼commit并push到遠程
    4. 給庫打新的tag,對應新的version,并push --tags
    5. 驗證spec $ pod spec lint
    6. 發(fā)布 $ pod repo push YourName xxx.podspec

第四步、使用遠程私有庫

發(fā)布成功之后,庫的測試工程和主工程都可以按照遠程pod的方式來使用遠程私有庫

  1. 配置Podfile文件
    遠程私有庫不能像公有庫那樣直接pod使用,需要在Podfile文件中設置遠程私有庫的源

    1. 查看源
      $ pod repo
    2. Podfile文件中,target外層設置遠程私有庫的源(一般在文件一開始設置)
      source 'git@xxx.git'
  2. 安裝遠程私有庫
    $ pod install


二、遠程私有庫依賴別的框架

  1. 修改spec文件中的s.dependency
    s.dependency 'AFNetworking', '~> 3.0'

  2. 提交、tag、驗證、發(fā)布

  3. 使用遠程私有庫

    1. Podfile文件中要同時添加所依賴的別的框架的源
      source 'https://xxxxx' #遠程私有庫源
      source 'https://xxxxx' #其他框架源
      
    2. 重新安裝
      $ pod install

三、單個子庫的安裝

  • 首先,CocoaPods中默認只有兩層文件結(jié)構(gòu),要想在pod安裝之后的文件系統(tǒng)中分層次顯示,需要給庫設置子庫分類。

  • 其次,設置好子庫之后,如果僅僅某個子庫依賴別的框架,那么只給這個子庫設置依賴。

  1. 配置spec文件
    s.source_files下面,做子庫配置

    s.source_files = 'xxx/Classes/**/*'
        # 常用工具
        s.subspec 'Tool' do |t|
            t.source_files = 'xxx/Classes/Tool/**/*'
        end
        #
        # 網(wǎng)絡工具
        s.subspec 'MyAFNetworkingTool' do |nt|
            nt.source_files = 'xxx/Classes/MyAFNetworkingTool/**/*'
            nt.dependency 'AFNetworking', '~> 3.0'
        end
    

    注意:

    • 注意s.subspec全部小寫
    • 每個子庫中都要配置其source_files
    • 由于MyAFNetworkingTool才依賴AFN,所以要保證安裝了MyAFNetworkingTool才會同時安裝所依賴的AFN,所以把對應的dependency配置放在對應的子庫下。
  2. 走更新遠程私有庫步驟
    提交、tag、驗證、發(fā)布

  3. 搜索
    $ pod search xxxxx

  4. 單獨使用子庫
    Podfile文件中這樣使用
    pod 'xxxxx/MyAFNetworkingTool'
    注意:如果子庫引用了第三方庫,還需要在Podfile中設置第三方庫的源URL

  5. 安裝使用
    $ pod install



因為spec文件中保存著庫的源碼地址,而我們制作的遠程私有庫是不希望別人看到源碼的,所以要將spec文件也變?yōu)樗接?。這樣,就需要另一個專門管理多個spec的遠程私有倉庫。

  1. 注冊
    1. 首先使用您的電子郵件注冊一個賬戶。這樣的話就會在當前的設備上開啟一個會話。建議再會話中添加描述信息,便于區(qū)分。
      $ pod trunk register youremail@xxx.com 'NAME名稱' [--description='描述-比如你的設備'] [--verbose] [--allow-warnings]
      中括號內(nèi)容可以省略;--verbose為顯示一些詳細信息到控制臺
    2. 單擊電子郵件剛收到的鏈接,以驗證Trunk賬戶和當前計算機之間的鏈接。
    3. 列出會話
      $ pod trunk me
  2. 提交
    $ pod trunk push xxx.podspec
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

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