- 前提:打開終端 執(zhí)行 pod search <名字>,查看在cocoapods官網(wǎng)上,是否已有同名的第三方庫 ,有則修改。
例:pod search MyThirdPartySDK
一、創(chuàng)建倉庫
- 倉庫名為 組件名稱(在GitHub平臺創(chuàng)建一個新的工程項目 :名字為前提中的<名字>)

創(chuàng)建好后,先放置一邊;
二、創(chuàng)建本地組件代碼庫
在本地創(chuàng)建一個存放組件的文件夾
打開終端 先cd到該文件夾下;
pod lib create<組件名>
例:pod lib create MyThirdPartySDK
執(zhí)行后,會出現(xiàn)一系列的選擇,按照步驟進(jìn)行選擇就OK;
1.Whatisyour email?What platformdoyou want to use??[iOS/macOS]//選擇平臺:
2.IOSWhat languagedoyou want to use??[Swift/ObjC]//選擇語言:
3.ObjCWould you like to include a demo applicationwithyourlibrary?[Yes/No]//是否自動生成一個demo:
4.YesWhich testing frameworks will you use?[Specta/Kiwi/None]//None
5.Would you like todoview based testing?[Yes/No]//No
6.Whatisyourclassprefix?//生成類的前綴
fixed:6 有可能沒有
最終生成一個組件項目,會自動打開項目;在項目的目錄下,其中有個Example的目錄,打開就可以看到目錄結(jié)構(gòu);
三、在組件項目中添加組件
在這個項目中,Classes和Assets文件夾就是放組件文件的地方;
ReplaceMe.m這個文件,是生成項目時,自動生成的,可以刪除;
在Classes放入組件的文件,Assets組件放資源文件;

四、pod組件到項目中
cd Example,到Example目錄,有Podfile文件的地方;
執(zhí)行pod install;
執(zhí)行完畢后,在工程目錄下,可以看到組件已pod到工程中;
五、索引文件XXX..podspec
打開工程的XXX..podspec文件,根據(jù)需要修改;
Pod::Spec.new do |s|
s.name = 'MyThirdPartySDK' //SDK名字
s.version = '0.1.0' //版本號,后面和GitHub上的tag要保持一致
s.summary = 'A short description of MyThirdPartySDK.' //簡介
s.description = <<-DESC
TODO: Add long description of the pod here. //描述
DESC
s.homepage = 'https://github.com/[GitHub名字]/MyThirdPartySDK'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' } //開源默認(rèn)證書
s.author = { 'XXX' => 'XXX@qq.com' } //作者
s.source = { :git => 'https://github.com/[GitHub名字]/MyThirdPartySDK.git', :tag => s.version.to_s } //項目地址和tag
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0'
# s.source_files = 'MyThirdPartySDK/Classes/**/*' //pod庫的源文件
s.vendored_frameworks = "MyThirdPartySDK/Classes/*.framework" //pod庫中framework的路徑
# s.resource_bundles = {
# 'MyThirdPartySDK' => ['MyThirdPartySDK/Assets/*.png']
# }
s.resource = "MyThirdPartySDK/Assets/*.bundle" //指定的資源直接復(fù)制到客戶端目標(biāo)
s.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => '' }
# s.public_header_files = 'Pod/Classes/**/*.h' //pod庫暴露給用戶工程的頭文件
#s.frameworks = 'UIKit', 'MapKit' //依賴的系統(tǒng)庫
s.dependency 'AFNetworking', '~> 4.0.1' //依賴的第三方庫
end
六、提交到遠(yuǎn)程倉庫
在工程根目錄下執(zhí)行,即在XXX.podspec所在的文件夾;
git add .
git commit -m "第一次添加組件"
git remote add origin <GitHub倉庫地址>
git push origin master
git tag <版本號> (和XXX.podspec里的一致,如:0.1.0)
git push --tags
七、驗證cocoapods索引文件
在工程根目錄下執(zhí)行,即在XXX.podspec所在的文件夾;
pod spec lint --verbose --allow-warnings
//或
pod spec lint --skip-import-validation --allow-warnings --use-libraries
校驗成功:
XXX.podspec passed validation.
校驗失?。?br>
會標(biāo)出錯誤的說明,可以根據(jù)說明進(jìn)行處理;
[!] The spec did not pass validation, due to 1 error.
八、發(fā)布
在工程根目錄下執(zhí)行,即在XXX.podspec所在的文件夾;
先查看是否注冊trunk;
pod trunk me

- 如果沒有注冊,則先注冊
pod trunk register <郵箱xxx@qq.com> "<名字>" --verbose
注冊完成后,會發(fā)送一個確認(rèn)郵件,里面有鏈接,點擊后,確認(rèn);
注冊完畢后,進(jìn)行發(fā)布;(在工程根目錄下)
pod trunk push xxx.podspec
//或
pod trunk push xxx.podspec --allow-warnings //允許警告
//或
pod trunk push xxx.podspec --allow-warnings --skip-import-validation //跳過驗證pod是否導(dǎo)入
發(fā)布成功
Updating spec repo `trunk`
Validating podspec
-> MyThirdPartySDK (0.1.0)
Updating spec repo `trunk`
--------------------------------------------------------------------------------
?? Congrats
?? MyThirdPartySDK (0.1.0) successfully published
?? January 26th, 00:41
?? https://cocoapods.org/pods/MyThirdPartySDK
?? Tell your friends!
--------------------------------------------------------------------------------
九、驗證
- 將組建在cocoapods發(fā)布成功后,可以使用search命令搜索;
pod search <庫名字>
查找成功
-> MyThirdPartySDK (0.1.0)
A short description of MyThirdPartySDK.
pod 'MyThirdPartySDK', '~> 0.1.0'
- Homepage: https://github.com/[GitHub名字]/MyThirdPartySDK //對應(yīng)XXX.podspec
配置的
- Source: https://github.com/[GitHub名字]/MyThirdPartySDK.git
- Versions: 0.1.0 [trunk repo]
查找失敗,會出現(xiàn)紅色一行字,提示找不到
找不到的原因:
1- 發(fā)布成功后,需要隔一段時間,可能是還在審核中;
2- 可能第二天早上執(zhí)行以下,就可以找到了;
[!] Unable to find a pod with name, author, summary, or description matching `MyThirdPartySDK `
附1:
- 更新已發(fā)布的庫
使用下面方法或重復(fù) 六、七、八步驟
//1-先修改XXX.podspec里面的tag
//2- 更新改動到遠(yuǎn)程倉庫
git pull origin master
//3- 打tag,和XXX.podspec里面的tag一致;
git tag <版本號>
git push --tags
//4- 執(zhí)行發(fā)布命令
pod trunk push xxx.podspec --allow-warnings --skip-import-validation
附2:
- 刪除已發(fā)布的庫的某一版本
pod trunk delete MyThirdPartySDK 0.1.0