創建私有 CocoaPods 倉庫
iOS 開發中我們經常用 CocoaPods 來安裝第三方庫,CocoaPods 可以幫助我們處理依賴,管理版本等等,還是挺方便的,如果我們公司內部有一個比較獨立的組件,不相開源但是又想用 CocoaPods 來管理,可不可以呢?當然是可以的,CocoaPods 也提供了比較好的支持,可以自定義源,這樣只要我們把 Pods 源和組件的源代碼的權限放到私有的空間里,其他和公開倉庫的作法是類似的。下面就簡單說一下怎么創建私有的 CocoaPods 倉庫。
下文中的 CocoaPods 使用的是 1.0.0 版本
創建樣板工程
CocoaPods 提供了工具可以創建一個樣板工程,在終端中 cd 到一個方便操作的目錄,運行如下命令:
$ pod libcreateCPYPrivatePodsDemo
CPYPrivatePodsDemo 根據自己的需要替換,這個就是組件的名字了。
CoccoaPods 會問幾個問題
- 要使用的語言
- 是否需要樣例工程
- 是否需要一個測試框架
- 是否需要基于 View 的測試
- 還有類的前綴
我們這里不對這些選項做深入的探討,我們只需要一個 Example demo 工程,前綴必選的,其他選 No
完成后在當前目錄會出現一個 CPYPrivatePodsDemo 目錄,cd 到這個目錄中,我們可以看到如下文件
這樣我們就得到一個樣板工程,完成創建后 CocoaPods 會打開樣例工程的 .xcworkspace 文件。
把組件相關的類放到工程中
把組件相關的類放到 CPYPrivatePodsDemo/Classes 目錄中,這是里之所以要放到這個目錄下是因為 Example 工程是中生成 Podfile 文件中指定了這個目錄是源文件地址,我們按照默認的走就好。這里我們創建了一個測試文件和一個頭文件,導入了這個測試文件,共三個文件放到 Classes 文件夾,如下:
之后我們需要更新 Example 工程,在終端中 cd 到 Example 目錄下并運行 pod install 命令
CocoaPods 會更新 pod,這里直接從之前的 Classes 文件夾中獲取文件更新,完成后我們再看回 Xcode 是上目錄樹,添加的三個文件出現在了 Development Pods 下
此時我們可以在測試一下,在 ViewController 導入這個框架,看看能不能創建 CPYTestView
嗯。。。好像編譯通過了,這樣就完成一半了,剩下的就是把這個 pod 發布,放到一個大家都可以訪問的地方。
發布組件到 Git 倉庫中
上面完成后,我們就可以把創建出來的這個模板創建放到遠程的 Git 倉庫中,這里我們在 Coding.net 上創建一個倉庫,然后把代碼 push 到遠程
git commit -m "first commit"
git remote add originhttps://git.coding.net/cielpy/CPYPrivatePodsDemo.git
git push-uoriginmaster
Podfile 指定的版本號的話在 pod install 時會找指定的 tag,所以我們這里需要打一個 tag
git tag-m"first release"0.1.0
git push --tags #推送tag到遠端倉庫
編輯 podspec 文件
接下來我們要編輯 podspec 文件,在樣板工程的根目錄下有一個 CPYPrivatePodsDemo.podspec 文件,用文本編輯器打開,需要 summary, homepage 和 source 字段,其中 source 字段是剛剛把源碼上傳到的 Git 倉庫地址,需要用 HTTPS 鏈接,source_files 字段和默認的一樣,不用修改,因為我們之前就是把源文件放到這個目錄的。
#
# Be sure to run `pod lib lint CPYPrivatePodsDemo.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.newdo|s|
s.name = 'CPYPrivatePodsDemo'
s.version = '0.1.0'
s.summary = 'A private pod test demo'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add longdescription of the pod here.
DESC
s.homepage = 'https://coding.net/u/cielpy/p/CPYPrivatePodsDemo'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file =>'LICENSE'}
s.author = { 'Cielpy'=>'beijiu572@gmail.com'}
s.source = { :git => 'https://git.coding.net/cielpy/CPYPrivatePodsDemo.git', :tag => s.version.to_s }
# s.social_media_url = 'https://推ter.com/<推ter_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'CPYPrivatePodsDemo/Classes/**/*'
# s.resource_bundles = {
# 'CPYPrivatePodsDemo' => ['CPYPrivatePodsDemo/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
本地測試 podspec 文件是否可用
用 pod 提供的工具檢查 podspec 文件是否合法,命令如下:
pod liblintCPYPrivatePodsDemo.podspec
如果結果顯示如下,說明是合法的
然后我們在另建一個工程,運行 pod init 初始化 Podfile,加入 pod 并指定 podspec 路徑,這里指定本地的 podspec 文件的路徑。
use_frameworks!
target 'PodTest'do
pod 'CPYPrivatePodsDemo',:podspec=>'/Users/xx/Downloads/CPYPrivatePodsDemo/CPYPrivatePodsDemo.podspec'
end
然后執行 pod install ,順利的話就可以安裝成功了。如圖
發布 podspec
接下來剩最后一步,這們指定文件絕對路徑是不科學的,我們不可能每次更新文件都修改一個 podspec 文件再 pod install 吧,方法就是發布 podspec 文件到遠程,既然我們要做私有的 pod,就不能放在公共的倉庫里,這里我們新建一個倉庫,專門放我們的私有 podspec 文件。
在 coding.net 上另外建一個名字為 spec 的倉庫,作為我們私有的 podspec 專用倉庫,然后在本地添加一個新的源
pod repo add privatehttps://git.coding.net/cielpy/spec.git
然后發布我們剛才編輯的 podspec 文件
顯已添加到遠程倉庫中。
去遠程倉庫中看看
有了!
最后一步
剩最后一步了,替換掉原來測試工程中的 Podfile 中指定的 podspec 路徑,改成如下的正常的方式:
source 'https://git.coding.net/cielpy/spec.git'
use_frameworks!
target 'PodTest'do
pod 'CPYPrivatePodsDemo'
end
不指定版本號會取最新的一個版本,然后 pod update 更新版本的 podspec 并安裝,正常的話,得到如下結果。
到這里就完成了。
因為我們的倉庫都是私有的,所以在哪里需要安裝的話,需要有對這兩個私有倉庫的訪問權限就好,發布僅有的類似,只是發布到了官方的 podspec 倉庫。
來自:https://imciel.com/2016/07/25/create-private-pods/