開篇
作為一名iOS開發(fā)者肺然,一定用過CocoaPods吧?如果沒有用過芜茵,可以查看CocoaPods官網(wǎng)夷都。
CocoaPods是一款用來幫助我們管理第三方依賴庫的工具。它可以解決庫與庫之間的依賴關系尤莺,下載庫中源代碼旅敷,同時通過創(chuàng)建一個.xcworkspace文件來將這些第三方依賴庫和我們的工程連接起來,供我們開發(fā)使用颤霎。其目的是讓我們能夠更直觀媳谁、集中地管理第三方庫。
下面介紹一下如何將自己的動態(tài)庫添加到CocoaPods中友酱。由于在創(chuàng)建的過程中晴音,遇到了許多坑,這篇文章希望可以讓后來者少走一些彎路缔杉。
一. 準備工作
1.申請GitHub賬號(如果已有賬號锤躁,可以忽略該步驟)
GitHub官網(wǎng) 具體申請流程這里就不說了,可以根據(jù)提示完成注冊 (ps:完成注冊之后GitHub會發(fā)送驗證郵件到你的郵箱或详,先驗證一下)
2. 創(chuàng)建GitHub倉庫
(1)登錄成功之后系羞,右上角自己的頭像下方,選擇“New repository”霸琴,如圖1-2-1
(2)創(chuàng)建新倉庫椒振,如圖1-2-2
說明:LICENSE文件,開源協(xié)議梧乘,建議選擇澎迎。會自動生成一個格式是 MIT的文本文件,里面有開發(fā)者名字和年份。當然也可以不選擇,copy別人工程里的LICENSE文件到自己的工程中(ps:順便修改一下里面的年份和作者信息)袭厂。如果沒有LICENSE文件,在后續(xù)驗證.podspec文件的時候哮洽,會出現(xiàn)警告。.podspec文件在下文會詳細介紹枝笨。
(4)創(chuàng)建完成之后袁铐,如果沒什么問題的話,GitHub倉庫里面有LICENSE文件横浑。
3. 將本地項目上傳到GitHub倉庫
下載GitHub客戶端剔桨,將自己的代碼上傳至GitHub!
之后在github倉庫里面會有添加的本地文件,如圖1-3-9
或者用終端傳上去徙融,具體可參考我寫的Mac如何用終端將本地項目上傳到自己的github
此時洒缀,所有的準備工作就已經(jīng)完成。
二. 創(chuàng)建podspec文件流程
1. 注冊trunk賬號
(1)在注冊trunk之前,通過 pod --version 查看當前的CocoaPods版本是否足夠新树绩。trunk需要pod在0.33及以上版本萨脑,如果版本太低,需要升級版本饺饭,執(zhí)行以下命令:
$ sudo gem install cocoapods
(2)等待升級完成之后渤早,執(zhí)行注冊操作:
$ pod trunk register 你自己的郵箱 '你自己的用戶名' --description='imac' --verbose
說明:需要替換成你自己的郵箱和名字,--description是簡介瘫俊,加不加都可以鹊杖,加上 --verbose 可以看到詳細信息。如果順利的話你會收到一份郵件扛芽,需要點擊驗證骂蓖。
(3)查看自己的注冊信息,如圖2-1-3:
$ pod trunk me
附:如果你的pod是由多人維護的川尖,你也可以添加其他維護者
$ pod trunk add-owner 項目的POD名稱 其他人的郵箱
2.配置podspec文件
(1)添加podspec文件
$ cd 到工程目錄下登下,添加podspec文件
$ pod spec create SDKManager
之后會出現(xiàn)以下界面,你會發(fā)現(xiàn)本地文件目錄下多了一個.podspec文件
說明:該.podspec文件是自動生成的叮喳,里面有一些文件規(guī)范被芳,可以根據(jù)里面的注釋填寫,下文會詳細介紹到嘲更。
(2)podspec文件講解
spec.name 必須和這個文件的名字相同
spec.version 當前的版本號筐钟,要與稍后的GitHub上的tag同步
spec.summary 簡單描述
spec.description = <<-DESC
詳細描述
DESC
spec.homepage GitHub倉庫地址
spec.license 和創(chuàng)建時候填一樣的 MIT
spec.author 名字和郵箱
spec.platform 系統(tǒng)和最低支持的版本
spec.source git的地址和tag號 tag => specversion 即可
spec.source_files 這個是以后通過pod下載下來的代碼文件揩瞪,注意路徑赋朦,第一個雙引號內(nèi)是本地倉庫的名字,第二個雙引號是具體的.h和.m的路徑李破,從工程名字開始宠哄,如果要包含MyLogin和他的子文件夾中的所有.h和.m,第二個雙引號可以這么寫"MyLoginDemo/MyLoginDemo/MyLogin/**/*.{h,m}"
spec.frameworks 用到的系統(tǒng)框架嗤攻,這里可以寫多個毛嫉,用逗號分隔
spec.libraries 依賴的系統(tǒng)資源
spec.vendored_frameworks 用到的你手動拖入工程的三方SDK,這些到時候在使用時也會跟著一起下載下來妇菱,同樣注意路徑承粤,這里可以寫多個,用逗號分隔
spec.resource 用到的資源文件闯团,如果有多個可以這么寫( MyLoginDemo/MyLoginDemo/MyLogin/**/*.{bundle, plist,json} )
spec.vendored_libraries 用到的你手動拖入工程的三方.a辛臊,同樣是注意路徑
spec.dependency 依賴的第三方庫,通過pod導入的房交,如( spec.dependency “SDWebImage”, “~> 3.8” )彻舰,可以寫多個,后邊最好跟版本號,避免不必要的錯誤
spec.requires_arc 支持ARC
spec.pod_target_xcconfig 這個是稍后驗證的時候刃唤,當報這個錯的時候添加的:
( 去除模擬器可寫為 spec.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => '' } )
示例文件如下:
Pod::Spec.new do |s|
s.name = "Demo"
s.version = "1.0.0" # 版本號
s.summary = "This is a Demo"
s.description = <<-DESC
‘This is a Demo file’
DESC
s.license = { :type => "MIT", :file => "LICENSE" }
s.author = { "Demo" => "text@email.com" }
s.homepage = "https://github.com/demo/Demo"
s.source = { :git => "https://github.com/demo/Demo.git", :tag => s.version.to_s }
s.platform = :ios, "10.0"
s.ios.deployment_target = '10.0'
s.frameworks = 'UIKit', 'Foundation'
s.libraries = 'c++', 'c++abi', 'xml2'
s.vendored_frameworks = 'Demo.framework'
s.vendored_libraries = 'Demo_Test/*.a'
s.resources = ['Demo.bundle']
s.source_files = ['Demo_Test/*.h']
s.xcconfig = { "OTHER_LDFLAGS" => "-ObjC" }
s.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => '' }
s.dependency 'SDWebImage', '~> 5.0' # 依賴的第三方庫
end
說明:以上就是.podspec文件的解釋隔心,podspec文件是開發(fā)整個SDK的關鍵性文件,里面有一些不常用的屬性只是做了簡單介紹尚胞,如果有興趣的小伙伴硬霍,可以深入研究,一起探討笼裳。
(3)驗證.podspec文件的正確性
$ pod lib lint --verbose --allow-warnings
說明:
① pod lib lint是利用腳本執(zhí)行代碼文件须尚,--verbose是查看詳細執(zhí)行過程,--allow-warnings是允許warn出現(xiàn)侍咱。
② 此處可以根據(jù)提示信息修改podspec文件配置耐床,由于情況比較多,此處就不一一給大家介紹了楔脯,錯誤大多數(shù)出現(xiàn)在分組形式的依賴關系錯誤撩轰,所以在xcode工程里引用頭文件尤其注意,組與組之間切記不可相互引用昧廷,否則在驗證podspec文件時報錯堪嫂。
③ 如果不是分組情況,應該沒什么問題木柬,無非是引入文件夾時皆串,文件夾沒有響應的文件。
注意:建議大家在每次修改完.podspec文件之后執(zhí)行上面命令眉枕,這樣有利于Code Review恶复,什么是Code Review?
(4)驗證成功之后速挑,提交code到git倉庫中谤牡,打上tag版本號并上傳。
$ git tag -a 0.0.1 -m "update tag is v0.0.1"
$ git push origin 0.0.1
如果上傳成功姥宝,則出現(xiàn)如圖2-2-4所示
注意:先提交再打tag
(5)通過trunk推送podspec文件
$ pod trunk push YXLaunchAD.podspec
這個過程比較耗時翅萤,休息一下,喝口茶...
如果出現(xiàn)上圖所示信息腊满,那么套么,恭喜你,你完成了一個CocoaPods私有庫的提交碳蛋,別人可以在Podfile里面使用這個私有庫了胚泌。
附錄
一、為了減少靜態(tài)庫的體積疮蹦,我們只發(fā)布支持真機的SDK诸迟,在驗證.podspec文件出現(xiàn)了error,解決方式如下:
- 設置VALID_ARCHS
在 podspec 文件中添加 s.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => '' }
,如果項目已經(jīng)設置 pod_target_xcconfig阵苇,添加到已有值的后面
- 驗證時跳過驗證
pod repo lint XXX.podspec --skip-import-validation
- 發(fā)布更新跳過驗證
pod repo push XXX.podspec --skip-import-validation
- 發(fā)布跳過驗證
pod trunk push XXX.podspec --skip-import-validation
如果有提示下面這種情況壁公,代表身份過期需要驗證
[!] Authentication token is invalid or unverified. Either verify it with the email that was sent or register a new session.
解決辦法:
在終端執(zhí)行命令:
pod trunk register '你的郵箱' '你的名稱' --description='iMac'
然后會在你的郵箱收到一條鏈接,點擊它绅项,此時可以回到終端驗證身份:
pod trunk me
如果打印你的信息了紊册,證明驗證完成!
一些相關指令
添加其他人員寫作開發(fā)
pod trunk add-owner PODNAME OWNER-EMAIL(注冊Trunk的郵箱)
刪除一個所有者(開發(fā)維護人員)
pod trunk remove-owner PODNAME OWNER-EMAIL
查看pod Trunk 信息
pod trunk info PODNAME
關于自己
pod trunk me
刪除Pod庫
pod trunk delete PODNAME VERSION
二快耿、更新pod庫
首先修改podspec文件的
s.version
值囊陡,然后提交代碼和改動的.podspec
最后再執(zhí)行上面的(3)(4)(5)步驟即可
3. 搜索私有庫
$ pod search YXLaunchAD
搜索過程比較耗時,耐心等待...堅持就是勝利掀亥。
如果搜索成功撞反,會出現(xiàn)如圖2-3-1所示
如果搜索失敗,請移步 pod search 搜索類庫失敗的解決辦法
[!] Unable to find a pod with name, author, summary, or description matching
YXLaunchAD
三. 導入到測試Demo中
(1)在測試Demo的PodFile文件引用YXLaunchAD
$ pod 'YXLaunchAD', :git => 'https://github.com/xiaofu666/YQAdvertisement_SDK'
保存搪花,執(zhí)行 pod install 之后遏片,如圖3-1-1
pod會把私有庫所依賴的其他三方庫也一并下載下來。另外撮竿,在寫文件名吮便、Category方法名、利用typedef修飾的屬性名的時候幢踏,盡量加上前綴髓需,避免不必要的錯誤。