iOS-如何將自己的動態(tài)庫上傳到CocoaPods

開篇

作為一名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

image

(2)創(chuàng)建新倉庫椒振,如圖1-2-2

image

說明: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

image

或者用終端傳上去徙融,具體可參考我寫的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

image

附:如果你的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所示

image

注意:先提交再打tag

(5)通過trunk推送podspec文件

$ pod trunk push YXLaunchAD.podspec

這個過程比較耗時翅萤,休息一下,喝口茶...

image

如果出現(xiàn)上圖所示信息腊满,那么套么,恭喜你,你完成了一個CocoaPods私有庫的提交碳蛋,別人可以在Podfile里面使用這個私有庫了胚泌。


附錄


一、為了減少靜態(tài)庫的體積疮蹦,我們只發(fā)布支持真機的SDK诸迟,在驗證.podspec文件出現(xiàn)了error,解決方式如下:

  1. 設置VALID_ARCHS

在 podspec 文件中添加 s.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => '' },如果項目已經(jīng)設置 pod_target_xcconfig阵苇,添加到已有值的后面

  1. 驗證時跳過驗證

pod repo lint XXX.podspec --skip-import-validation

  1. 發(fā)布更新跳過驗證

pod repo push XXX.podspec --skip-import-validation

  1. 發(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庫

  1. 首先修改podspec文件的s.version值囊陡,然后提交代碼和改動的.podspec

  2. 最后再執(zhí)行上面的(3)(4)(5)步驟即可


3. 搜索私有庫

$ pod search YXLaunchAD

搜索過程比較耗時,耐心等待...堅持就是勝利掀亥。

如果搜索成功撞反,會出現(xiàn)如圖2-3-1所示

image

如果搜索失敗,請移步 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

image

pod會把私有庫所依賴的其他三方庫也一并下載下來。另外撮竿,在寫文件名吮便、Category方法名、利用typedef修飾的屬性名的時候幢踏,盡量加上前綴髓需,避免不必要的錯誤。

附:文章中所出現(xiàn)的技術(shù)鏈接整理

  1. 什么是Code Review房蝉?

  2. pod search 搜索類庫失敗的解決辦法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末僚匆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惨驶,更是在濱河造成了極大的恐慌白热,老刑警劉巖敛助,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粗卜,死亡現(xiàn)場離奇詭異,居然都是意外死亡纳击,警方通過查閱死者的電腦和手機续扔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焕数,“玉大人纱昧,你說我怎么就攤上這事”づ猓” “怎么了识脆?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我灼捂,道長离例,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任悉稠,我火速辦了婚禮宫蛆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘的猛。我一直安慰自己耀盗,他們只是感情好,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布卦尊。 她就那樣靜靜地躺著叛拷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岂却。 梳的紋絲不亂的頭發(fā)上胡诗,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音淌友,去河邊找鬼煌恢。 笑死,一個胖子當著我的面吹牛震庭,可吹牛的內(nèi)容都是我干的瑰抵。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼器联,長吁一口氣:“原來是場噩夢啊……” “哼二汛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拨拓,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤肴颊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渣磷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婿着,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年醋界,在試婚紗的時候發(fā)現(xiàn)自己被綠了竟宋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡形纺,死狀恐怖丘侠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逐样,我是刑警寧澤蜗字,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布打肝,位于F島的核電站,受9級特大地震影響挪捕,放射性物質(zhì)發(fā)生泄漏闯睹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一担神、第九天 我趴在偏房一處隱蔽的房頂上張望楼吃。 院中可真熱鬧,春花似錦妄讯、人聲如沸孩锡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躬窜。三九已至,卻和暖如春炕置,著一層夾襖步出監(jiān)牢的瞬間荣挨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工朴摊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留默垄,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓甚纲,卻偏偏與公主長得像口锭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子介杆,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容