- 需要做的工作包括以下幾點(diǎn)
- 創(chuàng)建一個(gè)本地的倉庫颓遏,將自己想要公開的代碼搞進(jìn)去
- 將自己的代碼上傳到遠(yuǎn)程公開倉庫中去
- 創(chuàng)建一個(gè)pods 的描述文件 .podspec
- 修改.podspec描述文件中的相關(guān)的描述信息
- 將當(dāng)前本地的.podspec文件傳到CocoaPods官方的索引庫中
- 測試一下,有沒有上傳到CocoaPods的索引庫中
- 后期的升級維護(hù)
- 具體詳細(xì)的步驟如下
- 創(chuàng)建遠(yuǎn)程倉庫注意點(diǎn)
- 正規(guī)的倉庫都有一個(gè)license文件奥帘,Pods依賴庫對這個(gè)文件要求比較嚴(yán)格,需要有這個(gè)文件慰枕,建議使用MIT類型的license魔熏,沒有
MIT
后面pod
驗(yàn)證會有警告 - 代碼版本要打tag(要在代碼版本上傳以后打tag)
- pod 支持 .a靜態(tài)庫、.framework 以及文件悬嗓,不一定要是可運(yùn)行的工程里面的某個(gè)組件
- 放代碼的倉庫不一定非要是Git倉庫,只要是可以獲取到相關(guān)代碼文件就可以砂沛,可以是SVN的烫扼,也可以是zip包,區(qū)別就是在podspec中的source項(xiàng)填寫的內(nèi)容不同
- 創(chuàng)建一個(gè)pods 的描述文件 .podspec
$ pod spec create MyViewExtension<這個(gè)名稱一般和創(chuàng)建的項(xiàng)目名稱一樣就可以>
- 修改.podspec描述文件中的相關(guān)的描述信息
詳情可參考CocoaPods的官網(wǎng)的PodSpec語法
Pod::Spec.new do |s|
# 項(xiàng)目的名稱
s.name = "MyViewExtension"
# 項(xiàng)目的版本號碍庵,通過項(xiàng)目git的tag標(biāo)簽進(jìn)行對應(yīng)映企,這里的標(biāo)簽代表的版本
s.version = "0.0.1"
# 項(xiàng)目簡單的描述信息
s.summary = "Just Testing."
# 項(xiàng)目的詳細(xì)描述信息悟狱,注意,這里的文字的長度堰氓,一定要比上面的s.summary長挤渐,不然會認(rèn)為格式不合格
s.description = <<-DESC
this project provide all kind of KeychainDeviceID for iOS developer
DESC
# 項(xiàng)目的網(wǎng)頁主頁信息,這里可以直接寫自己的遠(yuǎn)程倉庫的主頁的地址
s.homepage = "https://github.com/RunOfTheSnail/MyViewExtension"
# 開源協(xié)議
s.license = "MIT"
# 作者信息
s.author = { "zhangyan" => "17***24@163.com" }
# 這個(gè)比較重要双絮,指的就是git的對應(yīng)的遠(yuǎn)程倉庫的地址以及版本號浴麻,版本號直接獲取的是上面的s.version
# 項(xiàng)目地址,這里不支持ssh的地址囤攀,驗(yàn)證不通過软免,只支持HTTP和HTTPS,最好使用HTTPS
# Supported Keys:
# :git => :tag, :branch, :commit, :submodules
# :svn => :folder, :tag, :revision
# :hg => :revision
# :http => :flatten, :type, :sha256, :sha1
s.source = { :git => "https://github.com/RunOfTheSnail/MyViewExtension.git", :tag => s.version }
# 支持的平臺及版本
s.platform = :ios, "11.0"
# 支持的ios最低版本
s.ios.deployment_target = "7.0"
# 如果是 Swift 的話指定 Swift 編譯版本
# s.swift_version = "4.0"
# 必備項(xiàng)焚挠,代碼源文件地址膏萧,如果有多個(gè)目錄下則用逗號分開,否則"public_header_files"等不可用
s.source_files = "GSLXYKeychainDeviceID/KeychainDeviceID/**/*.{h,m}"
# 公開頭文件地址
# s.public_header_files = "Pod/Classes/**/*.h"
# 所需的系統(tǒng)framework,多個(gè)用逗號隔開蝌衔,不需要后綴名
# s.ios.framework = "SomeFramework"
s.frameworks = "UIKit", "AnotherFramework"
# 需要弱鏈接的框架
# s.weak_framework = "Twitter"
# s.weak_frameworks = "Twitter", "SafariServices"
#項(xiàng)目依賴的庫文件(這個(gè)是系統(tǒng)的庫文件),不需要后綴名,比如sqlite,libz等.以lib開頭的需要省略掉lib這三個(gè)字母.例如:libz需要簡寫為z否則報(bào)錯(cuò)
# s.ios.library = "iconv"
# s.libraries = "iconv", "xml2"
# 第三方或自己創(chuàng)建的 .Framework的名稱
# s.vendored_frameworks = "YostarLib.framework"
# 第三方或自己創(chuàng)建的 .a靜態(tài)庫的名稱
# s.vendored_libraries = "libYostarStaticLib.a"
# 添加資源文件
# s.resource = "XXX/XXXX/**/*.bundle"
# s.resources = "XXX/XXXX/**/*.bundle"
# CocoaPods會把這個(gè)庫配置成static framework榛泛,同時(shí)支持Swift和Objective-C
# s.static_framework = true
# 依賴關(guān)系,該項(xiàng)目所依賴的其他噩斟,當(dāng)在加載的時(shí)候也會一塊把相關(guān)的依賴的庫加載下來曹锨,如果有多個(gè)需要填寫多個(gè)
# s.dependency "JSONKit", "~> 1.4"
# 是否使用ARC,如果指定具體文件剃允,則具體的文件使用ARC
s.requires_arc = true
# 指定項(xiàng)目配置沛简,如HEADER_SEARCH_PATHS、OTHER_LDFLAGS等
# s.xcconfig = {"OTHER_LDFLAGS" => "-ObjC"}
# s.user_target_xcconfig = {"OTHER_LDFLAGS" => "-ObjC", "LD_RUNPATH_SEARCH_PATHS" => "/usr/lib/swift", "LIBRARY_SEARCH_PATHS" => "$(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)"}
# s.pod_target_xcconfig = { 'VALID_ARCHS' => 'arm64 x86_64 armv7' }
# s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64 i386' }
end
補(bǔ)充說明:
xcconfig
:修改pod SDK
硅急、Pod 生成的.a 庫
和引用主工程
的配置
user_target_xcconfig
:修改Pod 生成的.a 庫
和引用主工程
的配置
pod_target_xcconfig
:只修改pod SDK
的配置
xcconfig
=user_target_xcconfig
+pod_target_xcconfig
現(xiàn)在官方已經(jīng)沒有xcconfig
這個(gè)字段的說明了修改完畢之后進(jìn)行檢驗(yàn)一下.podspec的格式有木有問題
$ pod lib lint
完整lint格式
$ pod lib lint --allow-warnings --use-libraries --verbose --no-clean --sources='http://10.11.180.29/mobileDevelopers/YZT-Loan-Pod-Spec.git'
$ pod lib lint GSCoreKit.podspec --allow-warnings --use-libraries --verbose --no-clean 檢查指定podspec
--verbose:打印錯(cuò)誤
--allow-warnings:允許警告,默認(rèn)有警告的podspec會驗(yàn)證失敗
--fail-fast:遇到錯(cuò)誤馬上停止覆享,默認(rèn)會完成全過程再停止
--use-libraries:如果自己私有庫包含library,引用了.a、.framework,在驗(yàn)證和提交時(shí)需要加
--no-clean:檢查問題
--sources:如果依賴了其他不包含在官方specs里的pod营袜,則用它來指明源(repo庫不是源碼庫),比如依賴了某個(gè)私有庫丑罪。多個(gè)值以逗號分隔
--skip-import-validation:跳過驗(yàn)證
- 將當(dāng)前本地的podspec文件傳到CocoaPods官方的索引庫中
5.1. 第一次需要上傳需要注冊
$ pod trunk register zy_iOS2163.com 'zy' --description='macbook air' --verbose
你注冊的時(shí)候需要替換郵箱和名字荚板,加上 --verbose 可以看到詳細(xì)信息,然后你會收到一份郵件吩屹,需要點(diǎn)擊驗(yàn)證
驗(yàn)證完成
5.2. 使用$ pod trunk me
查看注冊信息是否注冊成功
5.3. 如果你的pod是由多人維護(hù)的跪另,你也可以添加其他維護(hù)者
$ pod trunk add-owner JLC kyle@163.com(即:pod trunk add-owner 庫名 郵箱)
移除某個(gè)管理員
$ pod trunk remove-owner TTLockSDK 郵箱地址(即:pod trunk remove-owner 庫名 郵箱)
$ pod trunk info TTLockSDK
查看庫當(dāng)前狀態(tài),版本煤搜,所有人等
5.4. 在提交 spec 文件前免绿,如果發(fā)布的是 Swift 框架,需要指定 Swift 的版本擦盾,否則會報(bào)錯(cuò)嘲驾,執(zhí)行$ echo "4.0" > .swift-version
即可指定版本為 4.0
5.5. 執(zhí)行命令淌哟,將 .podspec push到cocopods的trunk中
$ pod trunk push MyViewExtension.podspec
- 測試一下,有沒有上傳到CocoaPods的索引庫中
-
$ pod search SGExtension
如果沒有搜到辽故,可能就是本地倉庫沒有更新 - 更新本地倉庫
$ pod repo update
再次執(zhí)行$ pod search SGExtension
- 如果還搜索不到徒仓,執(zhí)行
$ rm ~/Library/Caches/CocoaPods/search_index.json
這句話是移除已經(jīng)生成的搜索目錄緩存文件,移除之后,執(zhí)行pod search會重新生成一份最新的緩存列表 - 查看本地索引庫:
$ open ~/.cocoapods/repos
- 在個(gè)人項(xiàng)目中增加剛剛制作好的Podfile并使用
新建一個(gè)測試工程測試,用CocoaPods初始化項(xiàng)目誊垢,編輯Podfile文件:
#CocoaPods官方spec倉庫
source 'https://github.com/CocoaPods/Specs.git'
#自己私有spec倉庫
source 'https://github.com/wenmobo/WBSpecs.git'
platform :ios, '8.0'
target 'TestDemo' do
#防Crash庫
pod 'WBAvoidCrash'
end
編輯好podfile文件之后掉弛,終端執(zhí)行:
$ pod install 安裝時(shí)使用,更新庫使用update命令
或
$ pod update 更新時(shí)使用
- 后期的升級維護(hù)
8.1. 更新遠(yuǎn)程公開庫中的代碼
8.2. 修改.podspec中的配置喂走,version升級一個(gè)版本
8.3. 給當(dāng)前的遠(yuǎn)程倉庫的代碼殃饿,重新打個(gè)tag,tag和.podspec的version一樣
8.4. 遠(yuǎn)程倉庫的代碼更新完畢芋肠,接下來執(zhí)行上面的 5.將當(dāng)前本地的spec文件傳到CocoaPods官方的索引庫中
8.5. 檢查使用上面的 6.測試一下乎芳,有沒有上傳到CocoaPods的索引庫中
- 移除索引版本,糾正意外推送
- 移除該版本业栅,然后重新push秒咐,在終端執(zhí)行下面指令
$ pod trunk delete TTLockSDK 2.6.4(即:pod trunk delete 庫名 版本號)
- 也可以放棄整個(gè)pod和所有版本
$ pod trunk deprecate TTLockSDK(即:pod trunk deprecate 庫名)
確認(rèn)時(shí),回復(fù)一個(gè)"y"(小寫字母 y) -
清理CocoaPods本地緩存
特殊情況下碘裕,由于網(wǎng)絡(luò)或者別的原因携取,通過CocoaPods下載的文件可能會有問題
- 手動刪除(
~/Library/Caches/CocoaPods/Pods/Release
目錄) - 打開終端,輸入
$ pod cache list
,會列出所有本地已經(jīng)緩存的第三方庫,在終端中輸入$ pod cache clean AAA
會刪除AAA緩存庫帮孔,使用$ pod cache clean --all
清除所有緩存