iOS 制作組件庫上傳到CocoaPods和BUG總結(jié)

前言

  • 制作屬于自己的組件庫并上傳至CocoaPods

Demo下載地址

一、先將代碼傳到github上

1.創(chuàng)建本地倉庫 git init
2.添加名稱為origin的遠程連接 git remote add origin 'Github項目地址'
3.將本地代碼加入到本地倉庫 git add .
4.提交修改到本地倉庫 git commit -m '修改記錄'
5.推送master分支的代碼到名稱為orgigin的遠程倉庫 git push origin master

二那婉、給你git打上tag

打tag的目的就相當于給你的開源框架制定版本號,每個版本一個tag

1.cd倉庫目錄
2.查看本地tag git tag
3.添加本地tag 1.0.0 git tag -a 1.0.0 -m 'release 1.0.0'

image

4.將tag傳到遠程 git push origin --tags

tag的其他操作

1.刪除本地tag git tag -d 1.0.0
2.刪除遠程tag git push origin -d tag 1.0.0

三忽妒、注冊Trunk

1.注冊Trunk pod trunk register 郵箱 '用戶名' --description='描述'

image

成功的話就會受到一份郵件,點擊郵件中的鏈接后驗證一下:

2.打開郵箱點擊地址:https://trunk.cocoapods.org/sessions/verify/965b5e96
點擊紅色terminal跳轉(zhuǎn)回到終端

image

3.注冊 pod trunk me
成功會看到如下類似字段:

image

4.如果你的pod是由多人維護的兼贸,你也可以添加其他維護者
pod trunk add-owner 名稱 郵箱

四段直、獲取MIT文件

1.網(wǎng)頁鏈接 https://choosealicense.com/

image

復制,修改相應(yīng)的數(shù)據(jù)
image

2.將生成的LICENSE文件同步至Github

五寝受、創(chuàng)建自己項目的Podspec描述文件

1.創(chuàng)建podspec文件 pod spec create KJEmitterView
2.podspec文件代碼

Pod::Spec.new do |s|
  s.name         = "KJEmitterView"
  s.version      = "1.0.0"
  s.summary      = "Some iOS Emitter"
  s.homepage     = "https://github.com/yangKJ/KJEmitterView"
  s.license      = "MIT"
  s.license      = { :type => "MIT", :file => "LICENSE" }
  s.license      = "Copyright (c) 2018 yangkejun"
  s.author       = { "77" => "ykj310@126.com" }
  s.platform     = :iOS
  s.source       = { :git => "https://github.com/yangKJ/KJEmitterView.git", :tag => "#{s.version}" }
  s.framework    = "UIKit"
  # s.dependency "JSONKit", "~> 1.4"
  s.requires_arc = true

  s.subspec 'Classes' do |ss|
    ss.source_files = "KJEmitterView/Classes/**/*.{h,m}" # 添加文件
    ss.public_header_files = 'KJEmitterView/Classes/*.h',"KJEmitterView/Classes/**/*.h"   # 添加頭文件
    ss.resources    = "KJEmitterView/Classes/**/*.{bundle}" # 添加數(shù)據(jù)資料
  end
  
end

3.驗證你本地的podspec文件 pod spec lint KJEmitterView.podspec
4.忽略警告 pod spec lint KJEmitterView.podspec --allow-warnings
驗證成功坷牛,

image

六、傳到CocoaPods上

1.首先驗證你本地的podspec文件很澄,之后會上傳spec文件到trunk
2.將podspec文件傳到trunk上 pod trunk push KJEmitterView.podspec
成功如下:

image

3.一直處于Updating spec repo master 狀態(tài)
可以選擇更新下 pod repo update --verbose
4.檢查是否上傳成功: pod search KJEmitterView

七京闰、Bug總結(jié)

1颜及、[!] There was an error registering with trunk: getaddrinfo: nodename nor servname provided, or not known

2俏站、- WARN | [iOS] license: Unable to find a license file

  • 原因:沒有找到License文件,根據(jù)規(guī)則也可以直接把文本寫在podspec文件里
  • 解決方案:podspec文件里面添加
  • s.license = "Copyright (c) 2018 yangkejun"

3痊土、- WARN | source: The version should be included in the Git tag.

  • 原因:podspec里的version要跟git上的tag相匹配
  • 解決方案:
  • 查看當前tag: git tag
  • 推到遠端: git push --tags
4肄扎、[!] Unable to accept duplicate entry for: KJEmitterDemo (1.0.0)
  • 原因:重復
  • 解決方案:
  • 4.1.重新給git庫添加tag git tag -a 1.0.1 -m'release 1.0.1'
  • 4.2.上傳到遠端 git push origin --tags
  • 4.3.重新修改podspec文件 s.version = "1.0.1"
  • 4.4.再次校驗 pod spec lint KJEmitterDemo.podspec --allow-warnings
  • 4.5.最后上傳到trunk pod trunk push KJEmitterDemo.podspec

5、[!] Unable to find a pod with name, author, summary, or description matching KJEmitterDemo

  • 原因:審核過程是要兩三天
  • 解決方案:
  • 執(zhí)行pod setup命令進行本地依賴庫更新赁酝,然后再搜索
  • 如果還是不行刪除~/Library/Caches/CocoaPods目錄下的search_index.json文件
  • 執(zhí)行rm ~/Library/Caches/CocoaPods/search_index.json
  • 然后再執(zhí)行搜索pod search KJEmitterDemo
  • 成功如下:


    image

6犯祠、校驗不通過

image
  • 可能原因:github上面的tag文件格式已經(jīng)確定,下圖位置下載下來看一下,是否和本地的文件格式保持一致酌呆。如果不一致按照下列方式解決bug衡载。

  • 查看git上面的文件格式


    image
  • Github上面下載下來的文件格式:


    image
  • 本地文件格式:


    image
  • 需要校驗的格式:


    image
  • 解決方案:很明顯不一樣
  • 刪除本地tag: git tag -d 1.0.0
  • 刪除遠端tag: git push origin -d tag 1.0.0
  • 重新添加本地tag:git tag -a 1.0.0 -m ‘release 1.0.0’
  • 重新上傳到遠端:git push origin --tags
  • 再次校驗:pod spec lint KJEmitterView.podspec

7、[!] There was an error pushing a new version to trunk: execution expired

  • 原因:推送過期
  • 解決方案:重新將podspec文件傳到trunk上 pod trunk push KJEmitterView.podspec

8隙袁、- ERROR | [iOS] public_header_files: The pattern includes header files that are not listed in source_files

  • 原因:文件夾層次結(jié)構(gòu)過淺痰娱,導致無法找到對應(yīng)的文件
  • 解決方案:默認的頭文件目錄設(shè)置為:
  • s.public_header_files = 'KJEmitterView/Classes/** / *.h'
  • 但是如果Classes目錄中,你的代碼文件夾層次結(jié)構(gòu)超過兩級菩收,就會出現(xiàn)該錯誤梨睁。修改文件層級

9、搜索不到最新版本pod庫

  • 原因:沒有更新pod庫
  • 解決方案:更新pod庫
  • pod update 要更新庫的名字
  • 查看Podfile文件中的依賴庫的最新版本:pod outdated

10娜饵、代碼中有__weak typeof(self) weakSelf = self;

  • 原因:有__weak就一直驗證不通過
  • 解決方案:s.frameworks當中加入可以用__weak的庫

11坡贺、代碼中有dispatch_source_t庫相關(guān)

  • 原因:有dispatch_source_t相關(guān)的庫函數(shù),也一直驗證不通過
  • 解決方案:s.frameworks當中加入可以用dispatch_source_t的庫

12箱舞、- ERROR | [KJEmitterView/Classes] xcodebuild: KJEmitterView/KJEmitterView/Classes/AlertView/KJAlertView.m:163:116: error: property 'height' not found on object of type 'UILabel *'

image
  • 原因:未引入頭文件UIView+KJFrame在KJAlertView當中
  • 解決方案:引入頭文件

13拴念、- NOTE | [iOS] [KJEmitterView/Classes] xcodebuild: KJEmitterView/KJEmitterView/Classes/AlertView/KJAlertView.m:10:9: fatal error: 'UIView+KJFrame.h' file not found

image
  • 原因:不在同一個文件夾下面
  • 解決方案:修改不引入該頭文件的錯誤,或者將需要引入的頭文件和KJAlertView放在同一個文件夾之下褐缠。

14、ERROR | name: The name of the spec should match the name of the file.

  • 原因:文件名字不一樣
  • 解決方案:xxx.podspec 文件名必須和文件里面的 s.name 文件名 "xxx" 保持一致

15风瘦、ERROR | [iOS] unknown: Encountered an unknown error (Could not find a ios simulator (valid values: com.apple.coresimulator.simruntime.ios-12-2, com.apple.coresimulator.simruntime.tvos-12-2, com.apple.coresimulator.simruntime.watchos-5-2). Ensure that Xcode -> Window -> Devices has at least one ios simulator listed or otherwise add one.) during validation.

  • 解決方案:升級CocoaPods队魏,終端執(zhí)行 sudo gem install cocoapods 代碼即可
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市万搔,隨后出現(xiàn)的幾起案子胡桨,更是在濱河造成了極大的恐慌,老刑警劉巖瞬雹,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昧谊,死亡現(xiàn)場離奇詭異,居然都是意外死亡酗捌,警方通過查閱死者的電腦和手機呢诬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門涌哲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尚镰,你說我怎么就攤上這事阀圾。” “怎么了狗唉?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵初烘,是天一觀的道長。 經(jīng)常有香客問我分俯,道長肾筐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任缸剪,我火速辦了婚禮吗铐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘橄登。我一直安慰自己抓歼,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布拢锹。 她就那樣靜靜地躺著谣妻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卒稳。 梳的紋絲不亂的頭發(fā)上蹋半,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音充坑,去河邊找鬼减江。 笑死,一個胖子當著我的面吹牛捻爷,可吹牛的內(nèi)容都是我干的辈灼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼也榄,長吁一口氣:“原來是場噩夢啊……” “哼巡莹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起甜紫,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤降宅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后囚霸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腰根,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年拓型,在試婚紗的時候發(fā)現(xiàn)自己被綠了额嘿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘸恼。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖岩睁,靈堂內(nèi)的尸體忽然破棺而出钞脂,到底是詐尸還是另有隱情,我是刑警寧澤捕儒,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布冰啃,位于F島的核電站,受9級特大地震影響刘莹,放射性物質(zhì)發(fā)生泄漏阎毅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一点弯、第九天 我趴在偏房一處隱蔽的房頂上張望扇调。 院中可真熱鬧,春花似錦抢肛、人聲如沸狼钮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熬芜。三九已至,卻和暖如春福稳,著一層夾襖步出監(jiān)牢的瞬間涎拉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工的圆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鼓拧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓越妈,卻偏偏與公主長得像季俩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子梅掠,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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