CocoaPods私有庫(kù)制作

前言

在前面的章節(jié)中有介紹過(guò)CocoaPods的使用:

制作CocoaPods公有庫(kù)以及私有庫(kù)的區(qū)別
[制作Framework以及上傳至CocoaPods庫(kù)]

(http://www.reibang.com/p/a832740aa491)
此篇文章會(huì)著重介紹下制作過(guò)程以及記錄過(guò)程遇到的一些問(wèn)題和解決辦法。

制作過(guò)程

首先膜毁,我們要先了解整個(gè)制作過(guò)程氛改,這樣我們可以快速的熟悉制作的整體流程宵呛,并且可以很好的控制過(guò)程中可能出現(xiàn)的問(wèn)題。

  • 創(chuàng)建私有的源倉(cāng)庫(kù)
  • 創(chuàng)建私有的Pod倉(cāng)庫(kù)
  • 添加私有庫(kù)源文件 (添加代碼蝠嘉、資源、包等等)
  • 修改.podSpec文件
  • 驗(yàn)證.podSpec文件
  • 提交代碼至遠(yuǎn)程倉(cāng)庫(kù)
  • 推送.podSpec文件
創(chuàng)建私有的源倉(cāng)庫(kù)

1.在遠(yuǎn)端倉(cāng)庫(kù)中,創(chuàng)建一個(gè)源索引庫(kù)PodSpecs翅楼。 (遠(yuǎn)端倉(cāng)庫(kù)可以選擇githubgitlab真慢、碼云

2.將遠(yuǎn)端索引庫(kù)添加到本地源中(使用終端輸入以及命令)

/**
pod repo add [repoName] [source]
*/ 
pod repo add component https://github.com/component/specs.git
創(chuàng)建私有的Pod倉(cāng)庫(kù)

1.在遠(yuǎn)端倉(cāng)庫(kù)中毅臊,創(chuàng)建一個(gè)源代碼pod庫(kù)。 注意??:這里先不著急關(guān)聯(lián)到本地黑界;

  1. 選擇一個(gè)目錄下管嬉,創(chuàng)建本地Pod庫(kù)工程。
/**
pod lib create  Pod庫(kù)名
*/
pod lib create RTCComponent

執(zhí)行完成后朗鸠,命令行會(huì)有一系例的問(wèn)題蚯撩,按需填寫(xiě)即可;

To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide: 
 - https://guides.cocoapods.org/making/using-pod-lib-create.html
 ( hold cmd and double click links to open in a browser. )


What platform do you want to use?? [ iOS / macOS ]
 > iOS

What language do you want to use?? [ Swift / ObjC ]
 > Swift

Would you like to include a demo application with your library? [ Yes / No ]
 > yes

Which testing frameworks will you use? [ Quick / None ]
 > none

Would you like to do view based testing? [ Yes / No ]
 > no

命令執(zhí)行完后會(huì)幫我們創(chuàng)建一個(gè)Workspace烛占,里面包含了兩個(gè)Project胎挎, RTCComponent是我們Pod庫(kù)的運(yùn)行Demo項(xiàng)目沟启;Pods是我們開(kāi)發(fā)庫(kù)的代碼項(xiàng)目

項(xiàng)目層級(jí)

添加私有庫(kù)源文件

我們可以在Pods/Development Pods/RTCComponent目錄下導(dǎo)入我們的代碼文件或者framework。在這一步就是將我們代碼以及資源文件都放置到項(xiàng)目中犹菇,導(dǎo)入的文件以及資源目錄后面需要在.podSpec文件中配置德迹, 這里就不過(guò)多說(shuō)明。

修改.podSpec文件
Pod::Spec.new do |s|
  s.name             = 'RTCComponent'
  s.version          = '0.1.0'
  s.summary          = '組件'
  s.description      = 'xxxxxxxxxxxxxxxxx'
  s.homepage         = 'http://xxxx/component'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }. 
  s.author           = { 'xxxxxxxx' => 'xxxxxxxxx@qq.com' }
  s.source           = { :git => 'http://xxxx/component/RTCComponent.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
  s.ios.deployment_target = '9.0'

  # 這里是源文件的路徑 
  s.source_files = 'RTCComponent/Classes/**/*'
  
  # 這里是資源文件的路徑 
  # s.resource_bundles = {
  #   'RTCComponent' => ['RTCComponent/Assets/*.png']
  # }
  # 這里是頭文件的路徑 
  # s.public_header_files = 'Pod/Classes/**/*.h'

  # 如果導(dǎo)入了framework
  s.frameworks = 'OpenAL', 'Accelerate'

  # 如果依賴了library(記得把lib前綴揭芍,以及.tbd去掉)
  s.libraries  = 'sqlite3', 'resolv', 'c++', 'z'

  # 如果依賴了三方pod庫(kù)
  s.dependency 'HandyJSON', '~> 5.0.2'
  s.dependency 'TXLiteAVSDK_Professional', '~> 8.9.10382'
  s.dependency 'SwiftyBeaver', '~> 1.9.3' # Log
  s.dependency 'SwifterSwift/SwiftStdlib'

  # 如果需要修改pod中的target設(shè)置胳搞,寫(xiě)在這里
  s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64', 'ENABLE_BITCODE' => 'NO' }
  #  s.user_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' }
end

這里如果需要設(shè)置請(qǐng)參照 CocoaPods官網(wǎng)文檔

驗(yàn)證.podSpec文件

cd到該目錄下;執(zhí)行以下操作:

/** 網(wǎng)絡(luò)校驗(yàn) */
pod spec lint 

/** 本地校驗(yàn) */
pod lib lint

常用附加處理:

  • 查看詳細(xì)信息称杨,請(qǐng)?jiān)诿詈蠹尤?--verbose
  • 忽略警告流酬,請(qǐng)?jiān)诿詈蠹尤?code>--allow-warnings
  • 使用本地庫(kù),請(qǐng)?jiān)诿詈蠹尤?--use-libraries
  • 檢查所有問(wèn)題列另,請(qǐng)?jiān)诿詈蠹尤?--no-clean
  • 依賴了私有庫(kù)芽腾,需要添加源,請(qǐng)?jiān)诿詈蠹尤?--sources= (注意如果依賴了公有庫(kù)页衙,還需要添加公有庫(kù)源:https://github.com/CocoaPods/Specs--sources=私有庫(kù)名,https://github.com/CocoaPods/Specs
提交代碼至遠(yuǎn)程倉(cāng)庫(kù)

將本地pod庫(kù)工程提交推送到遠(yuǎn)程倉(cāng)庫(kù)摊滔,打上Tag發(fā)布。
1.提交本地倉(cāng)庫(kù)店乐,并推送

/** cd Pod工程目錄 */  
cd PodProject
/** git commit -m "提交信息" */  
git commit -m "commit"
/** git branch -M 分支 */  
git branch -M main
/** git remote add origin git倉(cāng)庫(kù)地址 */  
git remote add origin https://github.com/XXXX.git
/** git push -u origin 分支 */  
git push -u origin main

2.打上Tag發(fā)布

/** 新建tag git tag [tagName] */
git tag "0.0.1" 
/** 推送單個(gè)tag至遠(yuǎn)端 git push origin [tagName] */
git push origin "0.0.1" 
/** 推送本地所有tag  git push origin --tags */
git push origin --tags
推送.podSpec文件

檢查下本地repo艰躺,如果有,繼續(xù)下一步眨八,反之腺兴,則重新在添加一次(pod repo add [name] [源倉(cāng)庫(kù)git地址]);

pod repo list

本地倉(cāng)庫(kù)檢查無(wú)誤后廉侧,開(kāi)始將創(chuàng)建的Pod庫(kù)中的.podspec文件推送至指定源倉(cāng)庫(kù)页响;
首先,還是cd.podspec文件的目錄下段誊,執(zhí)行以下操作:

/** 推送命令: pod repo push [repoName] [name].podspec */ 
pod repo push component RTCComponent.podspec 

到這里所有流程已經(jīng)完成闰蚕;整個(gè)過(guò)程中的驗(yàn)證過(guò)程可能是最容易出問(wèn)題的,如果驗(yàn)證通過(guò)连舍,那么發(fā)布就不會(huì)有什么問(wèn)題没陡,所以如果驗(yàn)證沒(méi)有通過(guò)的話,發(fā)布也是不會(huì)成功的索赏;

文章的最后盼玄,我會(huì)把制作過(guò)程中所遇到的問(wèn)題一一匯總。

問(wèn)題匯總(Error)

  • 問(wèn)題1: 校驗(yàn)失敗
** BUILD FAILED **
The following build commands failed:
    CompileSwift normal x86_64
    CompileSwiftSources normal i386 com.apple.xcode.tools.swift.compiler
    CompileSwift normal i386
    CompileSwift normal arm64
(4 failures)
Testing with `xcodebuild`. 

解決辦法:在.podspec文件中加入;參考iOS 指令集架構(gòu)

s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' }
  • 問(wèn)題2: 組件中依賴的第三方庫(kù)中有framework或者.a文件潜腻, pod install 報(bào)錯(cuò)
target has transitive dependencies that include statically linked binaries:

解決辦法: 在podfile文件中加入以下代碼埃儿;

pre_install do |installer| Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
end
  • 問(wèn)題3: Xcode setting ENABLE_BITCODE
You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE) 

解決辦法:將target下 ENABLE_BITCODE 設(shè)置為 NO

參考文檔:
CocoaPods官方制作文檔
用 CocoaPods 私有庫(kù)提高團(tuán)隊(duì)的整體效率
GitHub 將使用 main替換掉 master等術(shù)語(yǔ)

走過(guò)路過(guò)不要錯(cuò)過(guò),覺(jué)得不錯(cuò)砾赔,來(lái)杯coffee??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝌箍,一起剝皮案震驚了整個(gè)濱河市青灼,隨后出現(xiàn)的幾起案子暴心,更是在濱河造成了極大的恐慌妓盲,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件专普,死亡現(xiàn)場(chǎng)離奇詭異悯衬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)檀夹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)筋粗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人炸渡,你說(shuō)我怎么就攤上這事娜亿。” “怎么了蚌堵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵买决,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吼畏,道長(zhǎng)督赤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任泻蚊,我火速辦了婚禮躲舌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘性雄。我一直安慰自己没卸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布秒旋。 她就那樣靜靜地躺著办悟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滩褥。 梳的紋絲不亂的頭發(fā)上病蛉,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音瑰煎,去河邊找鬼铺然。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酒甸,可吹牛的內(nèi)容都是我干的魄健。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼插勤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沽瘦!你這毒婦竟也來(lái)了革骨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤析恋,失蹤者是張志新(化名)和其女友劉穎良哲,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體助隧,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筑凫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了并村。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巍实。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哩牍,靈堂內(nèi)的尸體忽然破棺而出棚潦,到底是詐尸還是另有隱情,我是刑警寧澤膝昆,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布丸边,位于F島的核電站,受9級(jí)特大地震影響外潜,放射性物質(zhì)發(fā)生泄漏原环。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一处窥、第九天 我趴在偏房一處隱蔽的房頂上張望嘱吗。 院中可真熱鬧,春花似錦滔驾、人聲如沸谒麦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绕德。三九已至,卻和暖如春摊阀,著一層夾襖步出監(jiān)牢的瞬間耻蛇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工胞此, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臣咖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓漱牵,卻偏偏與公主長(zhǎng)得像夺蛇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酣胀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • 前言 CocoaPods是一個(gè)程序依賴管理工具刁赦,使用CocoaPods可以節(jié)省設(shè)置和更新第三方開(kāi)源庫(kù)的時(shí)間娶聘,同樣的...
    Dennis_me閱讀 2,012評(píng)論 0 4
  • 一、背景 二甚脉、準(zhǔn)備私有庫(kù)平臺(tái) 三丸升、創(chuàng)建一個(gè)Git遠(yuǎn)程倉(cāng)庫(kù) 四、創(chuàng)建Pod代碼庫(kù)4.1 使用pod創(chuàng)建庫(kù):4.2 添...
    LuckyCat_A閱讀 1,609評(píng)論 0 8
  • 前言 之前項(xiàng)目中的一些組件需要拆分開(kāi)來(lái)宦焦,因?yàn)檫@些組件在不同的APP中都需要使用(比如:圖片上傳模塊发钝,工具類庫(kù)等)顿涣。...
    秦明Qinmin閱讀 1,898評(píng)論 0 13
  • 創(chuàng)建私有Spec Repo 創(chuàng)建一個(gè) Git倉(cāng)庫(kù)波闹,這個(gè)倉(cāng)庫(kù)你可以創(chuàng)建私有的也可以創(chuàng)建公開(kāi)的,不過(guò)既然私有的Spec...
    coderTian閱讀 363評(píng)論 0 0
  • 前言 之前項(xiàng)目中的一些組件需要拆分開(kāi)來(lái)涛碑,因?yàn)檫@些組件在不同的APP中都需要使用(比如:圖片上傳模塊精堕,工具類庫(kù)等)。...
    相伴幻聽(tīng)閱讀 400評(píng)論 1 0