iOS. 自己Framework上傳Cocospods 流程處理與問(wèn)題解決

前因:

因公司需要做一些自定義動(dòng)態(tài)庫(kù) 且適應(yīng)多項(xiàng)目使用,鑒于方便管理,變想放入Cocoapods管理,然后經(jīng)歷一番波折,寫(xiě)下此篇問(wèn)題解方案

正題:

一、電腦具有cocoapods環(huán)境

1.
2.
3.常用命令:
pod trunk register 郵箱 '名字' --description='description'// 注冊(cè),然后CocoaPods會(huì)發(fā)送一封郵件到你的郵箱,按照提示打開(kāi)一個(gè)連接激活就ok拉,最后再重復(fù)前面步驟,提交到CocoaPods官方倉(cāng)庫(kù)
pod cache clean --all // 清除pod緩存
pod lib lint JYUtils.podspec --allow-warnings // 校驗(yàn)
pod trunk push XXXX.podspec --allow-warnings // 提交到CocoaPods官方倉(cāng)庫(kù)
pod lib lint XXXX.podspec --allow-warnings --use-libraries //如果在自己的庫(kù)中有引用到其他公有庫(kù),例如MBProgressHUD、AFNetworking等庫(kù),則需要在后面加上命令:–use-libraries
pod search // 命令重新搜索庫(kù)
pod repo update     // 更新本地庫(kù)

二、創(chuàng)建cocoapods trunk賬戶(hù)(有賬號(hào)略過(guò))

1.用你的電子郵件地址注冊(cè)一個(gè)帳戶(hù),這將在當(dāng)前設(shè)備上開(kāi)始一個(gè)會(huì)話(huà)。注冊(cè)cocoapods trunk命令:
$ pod trunk register 你的郵箱 '用戶(hù)名' --description='描述內(nèi)容' (郵箱參數(shù)是必須的,用戶(hù)名和--description參數(shù)可省略)

注冊(cè)后cocoapods會(huì)給你的郵箱發(fā)送一個(gè)確認(rèn)cocoapods會(huì)話(huà)的郵件,打開(kāi)你的郵箱,點(diǎn)擊鏈接確認(rèn)cocoapods會(huì)話(huà)(這個(gè)鏈接是驗(yàn)證你的帳戶(hù)與當(dāng)前計(jì)算機(jī)之間的連接)。
2.查看你的注冊(cè)信息(必須在確認(rèn)cocoapods會(huì)話(huà)后,才執(zhí)行)
$ pod trunk me
顯示注冊(cè)信息如下所示:
- Name: 名稱(chēng)
- Email: 郵箱(GitHub賬號(hào))
- Since: August 2nd, 2018 19:27
- Pods:
- Test0
- JYTest0
- Sessions:
    - 
    - 
3.常用命令:
將.podspec文件提交到Cocoapods命令:
$ pod trunk push 文件名.podspec
將公共庫(kù)的.podspec文件,部署到自己的私有庫(kù)中,命令如下:
$ pod repo push REPO 文件名.podspec # REPO 私有索引庫(kù)名
添加其他人共同維護(hù)某庫(kù),命令:
$ pod trunk add-owner 公共庫(kù)名 已注冊(cè)trunk的郵箱地址
移除某個(gè)維護(hù)人員,命令:
$ pod trunk remove-owner 公共庫(kù)名 已注冊(cè)trunk的郵箱地址
刪除已發(fā)的某個(gè)版本對(duì)應(yīng)的工程信息
pod trunk delete 工程名 版本號(hào)
查看trunk的所有可執(zhí)行命令,運(yùn)行:
$ pod trunk

三、開(kāi)始創(chuàng)建測(cè)試庫(kù)

1. 打開(kāi)終端,cd <文件目錄地址>(任意文件夾地址,可以是桌面),進(jìn)入指定文件夾,本文測(cè)試文件夾名TestSDK_iOS
cd /Users/***/Desktop/TestSDK_iOS
2. 在你進(jìn)入的目錄下從cocoaPod官方下載一個(gè)模版,會(huì)自動(dòng)生成一個(gè)demo。
pod lib create TestSDK_iOS
3. 緊接著會(huì)提示輸入一些信息,回車(chē)之后會(huì)在我們cd的目錄下幫我們創(chuàng)建好一個(gè)xcode模版,并自動(dòng)打開(kāi)項(xiàng)目,如果未打開(kāi)項(xiàng)目則需要自己進(jìn)入項(xiàng)目文件夾進(jìn)行pod install 安裝cocoapods資源并打開(kāi)項(xiàng)目
What is your email?
//這是輸入你開(kāi)源中國(guó)申請(qǐng)的git郵箱賬號(hào)
What platform do you want to use?? [ iOS / macOS ]
// 這里輸入你使用的平臺(tái)
 > iOS
What language do you want to use?? [ Swift / ObjC ]
//這里輸入你使用的語(yǔ)言
 > ObjC
Would you like to include a demo application with your library? [ Yes / No ]
//這里輸入你是否需要生成一個(gè) demo 應(yīng)用
//這里最好 Yes 這樣你可以查看你創(chuàng)建的庫(kù)是否可以使用
 > NO
Which testing frameworks will you use? [ Specta / Kiwi / None ]
// 這里輸入你需要用到的測(cè)試框架,隨意選
 > None
Would you like to do view based testing? [ Yes / No ]
//是否做基于視圖的測(cè)試 Yes/No 都可以
 > No
What is your class prefix?
//輸入前綴
 > XR
4. 進(jìn)入項(xiàng)目文件內(nèi),把自定義的Framework包放在TestSDK_iOS/TestSDK_iOS/Classes 文件夾下
番外:同級(jí)Assets 文件夾是放置項(xiàng)目資源的 比如圖片音頻之類(lèi)的
5. 配置信息,在 demo 工程中有一個(gè) Podspec Metadata 文件夾,查看里面的白文件: 工程名. podspec 配置里面的信息,這個(gè)根據(jù)具體情況自行配置,下文有字段說(shuō)明:
s.name        = 'TestSDK_iOS' #項(xiàng)目名稱(chēng)
s.version      = "1.0.1" #版本號(hào) 要和接下來(lái)上傳git的tag版本號(hào)一致
s.summary      = "Test For TestSDK_iOS." #這里對(duì)你寫(xiě)的庫(kù)進(jìn)行簡(jiǎn)要的概述一下
s.description  = <<-DESC
這就是一個(gè)測(cè)試,沒(méi)別的,你信不信?(這里對(duì)你寫(xiě)的庫(kù)進(jìn)行具體的使用方法說(shuō)明及其他描述,稍微寫(xiě)一下就行后期再整改)
                   DESC
s.homepage     = "https://github.com/*********/TestSDK_iOS.git"# 你git庫(kù)的地址首頁(yè),可以在開(kāi)元中國(guó)創(chuàng)建你的庫(kù),不需要使用什么初始化方法,不要勾選 readme
s.license          = { :type => 'MIT', :file => 'LICENSE' } #這里不需要改變,使用默認(rèn),文件指向的文件名與工程中文件名要一致。
s.author           = { '名字' => '**********@qq.com' } #作者信息:賬戶(hù)名,賬戶(hù)郵箱地址
s.source           = { :git => 'https://github.com/**********/TestSDK_iOS.git', :tag => s.version.to_s } # 這里輸入郵箱如果你在開(kāi)元中國(guó)申請(qǐng)的 git 賬號(hào),那么把你在開(kāi)元中國(guó)創(chuàng)建的項(xiàng)目的 https 網(wǎng)址輸入到這里,
s.platform     = :ios
s.platform     = :ios, "9.0" #iOS 支持的最低級(jí)別,這里最低9.0
s.frameworks = "CoreVideo","OpenGLES","AVFoundation","CoreMedia","VideoToolbox","AudioToolbox" #這里輸入需要用到的依賴(lài)庫(kù),如果沒(méi)有特別的需要可以不用輸入直接注釋掉
s.vendored_frameworks = 'TestSDK_iOS/Classes/TestSDK.framework' #靜態(tài)庫(kù)文件的依賴(lài),意思是執(zhí)行到Classes文件夾下檢索.framework類(lèi)型的文件,我們放入的是動(dòng)態(tài)庫(kù)文件需要寫(xiě)入進(jìn)行標(biāo)注
s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' }  # 如果項(xiàng)目已經(jīng)設(shè)置 pod_target_xcconfig,添加到已有值的后面。此處解決了模擬器和真機(jī)包合并問(wèn)題
6. 在git上創(chuàng)建我們的遠(yuǎn)程庫(kù),輸入項(xiàng)目名稱(chēng),項(xiàng)目描述,選擇開(kāi)發(fā)語(yǔ)言,我們做的是公開(kāi)庫(kù),這里選擇公開(kāi), 我們不要初始化這個(gè)工程,因?yàn)槲覀兊墓こ淌菑谋镜厣蟼魃先?所以三個(gè)初始化方式都不要勾選,然后點(diǎn)擊創(chuàng)建,完成我們遠(yuǎn)程庫(kù)的創(chuàng)建。
7. 然后獲取我們遠(yuǎn)程項(xiàng)目庫(kù)的 https 地址,在第6步配置 s.name、s.source、s.homepage, 這里輸入我們?cè)陂_(kāi)元中國(guó)創(chuàng)建的遠(yuǎn)程庫(kù)的 https 網(wǎng)址
8. 在終端中輸入命令行,先關(guān)聯(lián)本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)
// 關(guān)聯(lián)項(xiàng)目
cd “你工程文件夾名(Example 的上層)”
git add .
git commit -m "自定義提交信息"
git remote add origin "你工程遠(yuǎn)程倉(cāng)庫(kù)的地址,也就是你在git上創(chuàng)建的項(xiàng)目倉(cāng)庫(kù)地址"
// 上傳項(xiàng)目
git branch -M main   
git push -u origin main
9. 校驗(yàn)我們的配置信息。這里有兩個(gè)指令,一個(gè)是本地校驗(yàn)(lib),一個(gè)是遠(yuǎn)程校驗(yàn)(spec),當(dāng)出現(xiàn)passed validation.時(shí)表示校驗(yàn)通過(guò),此處先進(jìn)行本地校驗(yàn),看看本地配置是否有問(wèn)題,在提交遠(yuǎn)程的時(shí)候需要進(jìn)行遠(yuǎn)程校驗(yàn)
$ pod lib lint --allow-warnings
10. 添加信任在pod上注冊(cè)你的git賬號(hào),兩種方案(一繁一簡(jiǎn)),終端命令:
pod trunk register git賬號(hào)(郵箱) '名稱(chēng)' --description='描述內(nèi)容隨意寫(xiě)'
pod trunk register git賬號(hào)(郵箱)  
----------------------------------------
說(shuō)明:
1、 git賬號(hào)郵箱,是你在開(kāi)源中國(guó)申請(qǐng)的 git 賬號(hào)
2、'名稱(chēng)',可以是你的賬號(hào)昵稱(chēng),也可以是你的真是名稱(chēng),也可以不寫(xiě)
3、 descrition=''這里可以隨意填寫(xiě)也可以不寫(xiě)
如果出現(xiàn)
Please verify the session by clicking the link in the verification email that has been sent to ‘你的郵箱’
去你自己的郵箱拷貝發(fā)送的網(wǎng)絡(luò)連接并打開(kāi),出現(xiàn)You can go back to your terminal now.說(shuō)明驗(yàn)證成功,以后你這臺(tái)設(shè)備,以及這個(gè)賬號(hào)就不要再次驗(yàn)證了,如果你有多個(gè)賬號(hào),這個(gè)方法也是在告訴你的 git 推送你的庫(kù)到哪個(gè)賬號(hào)上去
命令:pod trunk me可在終端查看驗(yàn)證是否通過(guò)
-----------------------------------------
11. 提交項(xiàng)目到遠(yuǎn)程庫(kù)在提交之前最好先進(jìn)行遠(yuǎn)程校驗(yàn)pod spec lint,直到出現(xiàn)passed validation.
12. 推送版本號(hào)這里必須先推送項(xiàng)目,之后推送版本號(hào),順序不能錯(cuò)
git tag "0.1.0"     這個(gè)版本要要與你podspec文件中定義的版本號(hào)一致
git push --tags     推送版本號(hào)
13. 最后所有配置完成 提交到cocospods
pod trunk push TestSDK_iOS.podspec --allow-warnings
--------------------------------------------------------------------------------
 ??  Congrats

 ??  ADYLiveSDK_iOS (0.1.6) successfully published
 ??  August 26th, 03:46
 ??  https://cocoapods.org/pods/ADYLiveSDK_iOS
 ??  Tell your friends!
--------------------------------------------------------------------------------

14. 成功 新建項(xiàng)目進(jìn)行測(cè)試 pod 'TestSDK_iOS' 時(shí),記得更新本地Cocoapods庫(kù):pod repo update 或者 pod install --repo-update

問(wèn)題總結(jié):

其他問(wèn)題網(wǎng)絡(luò)應(yīng)該很多可以自行百度,說(shuō)明我遇到的問(wèn)題
使用自定義Framework會(huì)遇到模擬器和真機(jī)合并問(wèn)題,自行測(cè)試動(dòng)態(tài)庫(kù)沒(méi)問(wèn)題但是使用上傳到cocoapods時(shí)就會(huì)報(bào)錯(cuò)
- ERROR | [iOS] unknown: Encountered an unknown error (The 'Pods-App' target has transitive dependencies that include statically linked binaries:
等等 這種情況下可以用 --allow-warnings 來(lái)允許警告。
Ld .../Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/arm64/Binary/App normal arm64
上面的錯(cuò)誤就是我今天遇到的 下面是解決辦法
在 podspec 文件中添加 s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' },如果項(xiàng)目已經(jīng)設(shè)置 pod_target_xcconfig,添加到已有值的后面。
使用以上方式 讓編譯通過(guò)

閑聊

制作 FrameWork時(shí)可以剔除i386 畢竟很老舊的機(jī)型了
制作和申請(qǐng)過(guò)程下次在補(bǔ)上 因?yàn)榫W(wǎng)上眾多教程這里就不詳細(xì)寫(xiě)入了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容