?? 這篇文章詳細(xì)的講解如何發(fā)布自己的開源框架到Cocoapods,比較基礎(chǔ)衡蚂,如有錯誤,歡迎指正。
要點(diǎn):
- pod的版本依賴于Git的tag勤晚,將一個tag視為工程的一次release
- 一個pod版本對應(yīng)一個tag似嗤,pod版本最好與tag一致
- pod 命令可以使用--verbose 開啟啰嗦模式查看日志
一啸臀、創(chuàng)建github repository
- 項(xiàng)目名稱:自己填寫項(xiàng)目名稱,最好是自己想發(fā)布的庫的名稱烁落,方便管理
- 項(xiàng)目描述:可選項(xiàng)乘粒,描述當(dāng)前項(xiàng)目
- 公開項(xiàng)目:選擇public別人才能看到和下載這個庫,創(chuàng)建私有庫需要$$
- README:一個好的項(xiàng)目需要一個README文件來介紹庫文件如何使用
- .gitignore: Git管理項(xiàng)目的忽略文件伤塌,一般選擇對應(yīng)語言即可谓厘,對其修改為Git管理知識,這里不做鋪開
- 開源許可證:開源許可證,根據(jù)自己的需要設(shè)置翰撑,我選擇MITcocoapods對開源許可設(shè)置比較在意舔箭,所以需要設(shè)置一個
二、克隆項(xiàng)目到本地
-
在github上找到項(xiàng)目的地址
- 克隆項(xiàng)目到本地
$ git clone git@github.com:read0nly/DemoKit.git
-
將寫好的開源庫源代碼放入本地的Git倉庫下
三他爸、注冊pod trunk
??要將一個開源庫或者私有庫發(fā)布到pods之前你需要注冊trunk
pod trunk register [email] '[name]' --description='[desc]'
- email:任意郵箱,推薦使用你注冊github的郵箱
- name:推薦使用github的name
- desc:簡單的描述信息
??例如我自己注冊一個:
pod trunk register nj.readonly@gmail.com 'read0nly' --description='macbook pro'
??注冊之后需要進(jìn)入上面填的郵箱果善,點(diǎn)擊鏈接進(jìn)行郵箱驗(yàn)證 </br>
完成之后可以使用pod trunk me檢測是否注冊成功
pod trunk me
??注冊成功后將看到如下信息:
$ pod trunk me </br>
- Name: read0nly</br>
- Email: nj.readonly@gmail.com</br>
- Since: April 12th, 08:49</br>
- Sessions:</br>
- April 12th, 08:49 - August 19th, 19:56. IP: 167.99.173.25
四诊笤、發(fā)布pod
1.創(chuàng)建.podspec
$ pod spec create [name]
- name: podspec 文件的名稱,一般與git上創(chuàng)建的repository名稱相同</br>
// 如:</br>
pod spec create DemoKit
??執(zhí)行此命令事實(shí)上是在當(dāng)前目錄創(chuàng)建了一個.podspec文件(純文本文件)巾陕,這個文件記錄了pod發(fā)布執(zhí)行的動作讨跟,以及資源配置信息。
2.修改.podspec文件
??.podspec文件生成之后里面有一個模板鄙煤,有很多的注釋和配置晾匠,比較全面,但是有些內(nèi)容可能是我們目前使用不到的梯刚。這里提供一個簡潔版的.podspec文件凉馆,如果后續(xù)有其他需求,例如子模塊之類的,可以再自行添加澜共。
Pod::Spec.new do |s|
s.name = "DemoKit"
s.version = "0.0.1"
s.summary = "A demo for cocoapods."
s.homepage = "https://github.com/read0nly/DemoKit"
s.license = { :type => "MIT", :file => "LICENSE" }
s.author = { "nj" => "nj.readonly@gmail.com" }
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/read0nly/DemoKit.git", :tag => s.version.to_s }
s.requires_arc = true
s.source_files = "DemoKit/*"
#s.exclude_files = ""
s.framework = "UIKit","Foundation"
s.swift_version = "4.0"
end
- name:pod庫的名字
- version:版本號
- summary:總結(jié)
- homepage :主頁向叉,項(xiàng)目在github上的主頁
- license :開源證書,type為類型嗦董,file是文件母谎,注意文件路徑,如果.podspec在同一目錄下京革,可以不寫路徑
- author :作者销睁,包含名字和聯(lián)系方式
- platform:支持的平臺,這里支持iOS8存崖,也可以支持OSX冻记,tvOS,watchOS等
- source:項(xiàng)目源来惧,寫自己項(xiàng)目在github上的地址冗栗,要發(fā)布的版本建議與pod版本一致
- requires_arc:是否支持arc
- source_files:要包含的文件,/*代表包含這個目錄下面的所有文件供搀,也可匹配某一個類型的文件隅居,例如:DemoKit/**/*.siwft 或者 DemoKit/**/*.{h,m}分別代表DemoKit下所有目錄的swift 或.h .m文件
- exclude_files:不包含的文件,規(guī)則同上,如果在包含文件里面沒有需要排除的文件葛虐,則刪除此行
-
framework:依賴的系統(tǒng)庫
- swift_version:swift版本胎源,對于swift項(xiàng)目來說這個參數(shù)很重要,一定要填寫庫文件所使用的swift版本屿脐,否則會導(dǎo)致編譯失敗
??其他的配置信息涕蚤,需要的時(shí)候可以到Cocoapods項(xiàng)目官方文檔podspec部分查閱
3.檢驗(yàn).podspec文件
??修改完.podspec文件之后,我們使用lint命令進(jìn)行本地測試
pod lib lint
??可以使用 --verbose 參數(shù)開啟啰嗦模式的诵,可以查看詳細(xì)日志信息
pod lib lint --verbose
??如果有錯誤万栅,可以根據(jù)錯誤提示解決錯誤,文章最后部分列舉了幾種錯誤解決方式西疤。如果有警告可以不用管烦粒,也可嘗試解決
4.將庫文件打上tag,push到github
- 查看沒有提交的文件
git status -s
- 添加所有文件
git add .
- 提交文件
git commit -m 'commit version 0.0.1'
??使用-m參數(shù)添加提交時(shí)候的日志信息代赁,一定要填
- push 代碼到github
git push
- 打上標(biāo)簽 tag
git tag '0.0.1'
??cocoapods發(fā)布依賴與標(biāo)簽tag扰她,前面.podspec文件里面的版本正是每一個tag的版本,建議tag與需要發(fā)布的版本相同
- push tag到github
git push --tag
5.push到cocoapods
??使用push命令芭碍,發(fā)布自己的版本庫到cocoapods
pod trunk push DemoKit.podspec
??如果有警告可以使用--allow-warnings選項(xiàng)允許警告
pod trunk push DemoKit.podspec --allow-warnings
??如果依賴了第三方庫徒役,需要加上 --use-libraries 選項(xiàng)
??發(fā)布成功之后可以看到如下信息:
6.查看自己的pod庫
??提交成功幾分鐘之后就可以使用pod search DemoKit 來查看自己的庫了
pod search DemoKit
??如果查詢不到,可以嘗試初始化豁跑,或者更新本地的spec
pod repo init
pod repo update
??如果還是查詢不到廉涕,可以刪除本地的pod索引文件
sudo rm ~/Library/Caches/CocoaPods/search_index.json
??刪除之后再重新執(zhí)行pod search
五泻云、lint 錯誤
<span id = 'lint_issuse' ></span>
NO.1
- ERROR | [iOS] unknown: Encountered an unknown error (The 'Pods-App' target has transitive dependencies that include static binaries: (/private/var/folders/m7/7t1r7_993fbgs40fppwxrsm80000gn/T/CocoaPods-Lint-20180301-60100-1meifl-Payment/Pods/openssl-ios-bitcode/lib/libcrypto.a and /private/var/folders/m7/7t1r7_993fbgs40fppwxrsm80000gn/T/CocoaPods-Lint-20180301-60100-1meifl-Payment/Pods/openssl-ios-bitcode/lib/libssl.a)) during validation.
??依賴了其他庫,添加--use-libraries選項(xiàng)
$ pod lib lint --use-libraries
NO.2
xcodebuild: error: Unable to find a destination matching the provided destination specifier:
{ id:6AC7A44D-6523-4371-AAAB-C5191451D58E }
Available destinations for the "App" scheme:
{ platform:iOS Simulator, id:9C15AC46-816E-4A85-9F21-A693CE34D542, OS:11.2, name:iPhone SE }
{ platform:iOS Simulator, id:626866A7-B843-4CCF-B27D-00420F5F16DB, OS:11.2, name:iPhone X }
Ineligible destinations for the "App" scheme:
{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }
Testing with xcodebuild.
??這個問題困擾了我很久艇拍,我是在查看cocoapods的issues#7454中才找了解決方案狐蜕。問題原因由于本地模擬器設(shè)置,在“Generic iOS Device”設(shè)備下無法通過編譯卸夕。目前暫行解決方式是在Xcode -> Window -> Devices & simulators 里面刪除模擬器层释,直到剩下錯誤信息中“Available destinations”下的設(shè)備,或者lint檢驗(yàn)通過快集。
??遇到問題贡羔,可以查看錯誤日志,或者查看Cocoapods的issues來解決問題个初。