使用Cocoapods快速创建自己的podspec,让你的框架支持cocoapods,podspec
2019獨角獸企業重金招聘Python工程師標準>>>
使用Cocoapods快速創建自己的podspec,讓你的框架支持cocoapods,podspec
Cocoapods簡介
當你開發iOS應用時,會經常使用到很多第三方開源類庫,比如JSONKit,AFNetWorking等等。如果使 用他們,傳統的方法是,在git上把他們下載下來,然后去配置。這個工作很繁瑣,而且也容易出錯。不 過有了Cocoapods你就會從這些繁瑣的工作中解脫出來。
Cocoapods是Swif和Objective-C的cocoa項目依賴關系管理的工具。
安裝CocoaPods
Ruby默認源有改變,下面有介紹:
移除現有Ruby默認源
$gem sources --remove https://rubygems.org/使用新的源
$gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/注意: 如果之前用的淘寶Ruby默認源的話 https://ruby.taobao.org/ 請求重定向到 Ruby China 鏡像 ,詳細請見:https://ruby.taobao.org/
有關 最新 RubyGems 鏡像- Ruby China ,請見 https://gems.ruby-china.org/
驗證新源是否替換成功
$gem sources -l https://gems.ruby-china.org確保只有 gems.ruby-china.org
$gem install rails執行安裝CocoaPods命令
$sudo gem install cocoapods備注:蘋果系統升級 OS X EL Capitan 后改為
$sudo gem install -n /usr/local/bin cocoapods --pre初始化
$pod setup更新gem
$sudo gem update --system驗證是否安裝成功
$pod search 第三方 ,例如:執行 $pod search KYBarrageKit出現如下所示,即表明您安裝成功了,請愉快的玩Cocoapods了!
kinglydeMacBook-Air:~ kingly$ pod search KYBarrageKit Creating search index for spec repo 'master'.. Done!-> KYBarrageKit (0.0.2)KYBarrageKit this is a high availability, easy to use barrage Framework Library.pod 'KYBarrageKit', '~> 0.0.2'- Homepage: https://github.com/kingly09/KYBarrageKit- Source: https://github.com/kingly09/KYBarrageKit.git- Versions: 0.0.2, 0.0.1 [master repo] (END)安裝OK啦!
以下是我用以前的安裝流程安裝時出現的一些錯誤以及解決方法,供大家參考。
錯誤1:
Error fetching http://ruby.taobao.org/:
bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
解決方案: 把安裝流程中 $gem sources -a http://ruby.taobao.org/ ---改為----> $gem sources -a https://gems.ruby-china.org/
錯誤2:
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/pod
解決方案: 蘋果系統升級OS X EL Capitan后會出現的插件錯誤,將安裝流程 4.安裝CocoaPods 的 (1)sudo gem install cocoapods ——>改為sudo gem install -n /usr/local/bin cocoapods
錯誤3:
[!] Unable to satisfy the following requirements: - AVOSCloud (~> 3.1.6.3) required by Podfile
Specs satisfying the AVOSCloud (~> 3.1.6.3) dependency were found, but they required a higher minimum deployment target.
解決方案: 安裝流程:Podfile文件 中 platform:ios, ‘6.0’ 后邊的 6.0 是平臺版本號 ,一定要加上
錯誤4:
podfile升級之后到最新版本為1.0.1后,pod里的內容必須明確指出所用第三方庫的target,否則會出現The dependency `` is not used in any concrete target這樣的錯誤。 解決方案:(詳細請見 http://blog.sina.com.cn/s/blog_6ff6523d0102x86c.html)
錯誤5:
[!] The spec did not pass validation, due to 1 error.
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.1/lib/cocoapods/command/spec/lint.rb:77:in run' /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0/lib/claide/command.rb:334:inrun' /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.1/lib/cocoapods/command.rb:50:in run' /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.1/bin/pod:55:in' /usr/local/bin/pod:23:in load' /usr/local/bin/pod:23:in' kinglydeMacBook-Air:LBinTabBarController kingly$ pod spec lint LBTab.podspec --allow-warnings
-> LBTab (0.0.2) - ERROR | [iOS] unknown: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation.
解決方案: 出現 unknown: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation 因為的 cocoapods的版本低了,需要 cocoapods的版本為cocoapods-1.1.0.rc.2以上
執行:sudo gem install cocoapods --pre 即可。
錯誤6:
cocoapods找不到第三方庫Unable to find a pod with name, author, summary, or descriptionmatching
刪除cocoapods的索引,然后重新search
在terminal下
rm ~/Library/Caches/CocoaPods/search_index.json會觸發cocoapods重新拉這個索引文件,即可
安裝的問題完了,接下來怎么創建自己的的podspec了
創建自己的podspec詳細
讓自己的工程支持cocoapods 其實很簡單,只需要按照下面幾步操作即可。
代碼提交到github平臺,建立git倉庫
Cococapods是基于git的,所以我們需要使用git來做版本管理,我使用的是github的免費服務,將自己的代碼上傳到 github 這里不是唯一的,上傳到任何平臺上都可以,前提是項目是開源的至于怎么將自己的項目提交到github上,代碼使用github平臺管理,這里不做詳細講解,請另查閱資料,網上有很多相關資料與介紹。
建立git倉庫,如下圖所示:
創建.podspec文件
然后cd到你項目的目錄,執行命令
kinglydeMacBook-Air:Lbin kingly$ cd KYBarrageKit kinglydeMacBook-Air:KYBarrageKit kingly$ pwd /Users/kingly/Documents/demo/Lbin/KYBarrageKit kinglydeMacBook-Air:KYBarrageKit kingly$ ls KYBarrageKit LICENSE images KYBarrageKit.podspec README.md KYBarrageKitDemo README_cn.md kinglydeMacBook-Air:KYBarrageKit kingly$執行命令
// 注 KYBarrageKit 這個是你框架的名稱 $ pod spec create KYBarrageKit在 當前目錄會顯示 一個叫 KYBarrageKit.podspec 的文件,即創建成功,當然你也可以直接使用Vim命令創建,只要創建就可以了。
編輯.podspec編輯
創建好后打開, 前面有#的為注釋,刪掉無用的注釋(這個不是必須的,為了規范還是刪掉喲)
kinglydeMacBook-Air:Lbin kingly$ vim KYBarrageKit.podspec內容如下:
Pod::Spec.new do |s| s.name = "KYBarrageKit" s.summary = "KYBarrageKit this is a high availability, easy to use barrage Framework Library." s.version = '0.0.2' s.homepage = "https://github.com/kingly09/KYBarrageKit" s.license = { :type => "MIT", :file => "LICENSE" } s.author = { "kingly" => "libintm@163.com" } s.platform = :ios, "7.0" s.source = { :git => "https://github.com/kingly09/KYBarrageKit.git", :tag => s.version.to_s } s.social_media_url = "https://github.com/kingly09" s.source_files = 'KYBarrageKit/*.{h,m}' s.framework = "UIKit" s.requires_arc = true end那么,每一行是神馬意思尼?,大家不要急,接下來講解一下每行代碼的含義:
s.name:名稱,pod search 搜索的關鍵詞,注意這里一定要和.podspec的名稱一樣,否則報錯
s.version:版本號
s.ios.deployment_target:支持的pod最低版本
s.summary: 簡介
s.homepage:項目主頁地址
s.license:許可證
s.author:作者
s.social_media_url:社交網址,這里我寫的微博默認是Twitter,如果你寫Twitter的話,你的 podspec發布成功后會@你
s.source:項目的地址
s.source_files:需要包含的源文件
s.public_header_files 公共的頭文件地址
s.resources: 資源文件
s.requires_arc: 是否支持ARC
s.framework = "UIKit" 所需的framework
s.frameworks = 'MobileCoreServices', 'CFNetwork', 'CoreGraphics' 所需的framework,多個用逗號隔開 s.libraries 依賴的動態庫,多個用逗號隔開
s.dependency 'AFNetworking', '~> 2.3' 依賴關系,該項目所依賴的其他庫,如果有多個需要填寫多個s.dependency
podspec文件的詳細說明可以看 Podspec Syntax Reference
創建LICENSE(許可證/授權)文件
這個文件是必須要的,當建立git倉庫的時候,不需要選擇 MIT 協議,自動會生成 LICENSE 文件,如果沒有手動創建,工程目錄如下圖所示:
LICENSE 內容如下,只需要把前面的版權改一下就行了,后面的都一樣:
MIT LicenseCopyright (c) 2016 KYBarrageKit Software (https://github.com/kingly09/KYBarrageKit) by kingly inc.Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.使用Git上傳到github
將包含配置好的 .podspec, LICENSE 的項目提交 github 上
打tag
因為cocoapods是依賴tag版本的,所以必須打tag, 以后再次更新只需要把你的項目打一個tag 然后修改.podspec文件中的版本接著提交到cocoapods官方就可以了,提交命令請看下面
// 為git打tag $ git tag 0.0.3 // 將tag推送到遠程倉庫 $ git push --tags驗證.podspec文件
到此檢查一下你工程下面的文件, 你的項目, .podspec文件, LICENSE文件是否存在;
驗證會先測試本地 .podspec 文件是否存在語法錯誤.
然后執行命令
// --verbose 如果驗證失敗會報錯誤信息 pod spec lint KYBarrageKit.podspec --verbose驗證過程中:
-> KYBarrageKit出現如下面的字樣,證明驗證成功:
KYBarrageKit.podspec passed validation.注冊Trunk
trunk需要CocoaPods 0.33版本以上,用 pod --version命令查看版本
如果版本低,需要升級:
sudo gen install cocoapods pod setup已經注冊過的不需要注冊,怎么看自己有沒有注冊,執行下面的命令:
pod trunk me下面是我的注冊信息:
kinglydeMacBook-Air:KYBarrageKit kingly$ pod trunk me- Name: kingly09- Email: libintm@163.com- Since: September 23rd, 03:34- Pods:- KYBarrageKit- Sessions:- September 23rd, 03:34 - February 25th, 20:28. IP: 113.116.78.56 Description:macbook air- September 25th, 22:46 - April 4th, 03:26. IP: 183.17.252.175 kinglydeMacBook-Air:KYBarrageKit kingly$如果沒有注冊過,執行
pod trunk register libintm@163.com "kingly09" --verbose注冊完成之后會給你的郵箱發個郵件,進入郵箱郵件里面有個鏈接,需要點擊確認一下
發布
發布時會驗證 Pod 的有效性,如果你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符,那么發布的時候也應該使用相同的字段修飾,否則出現相同的報錯。
// --use-libraries --allow-warnings pod trunk push KYBarrageKit.podspec驗證中
Validating podspec-> KYBarrageKit (0.0.3)發布成功
kinglydeMacBook-Air:KYBarrageKit kingly$ pod trunk push KYBarrageKit.podspec Updating spec repo `master`CocoaPods 1.2.0.beta.1 is available. To update use: `sudo gem install cocoapods --pre` [!] This is a test version we'd love you to try.For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.2.0.beta.1Validating podspec-> KYBarrageKit (0.0.3)Updating spec repo `master`CocoaPods 1.2.0.beta.1 is available. To update use: `sudo gem install cocoapods --pre` [!] This is a test version we'd love you to try.For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.2.0.beta.1- Data URL: https://raw.githubusercontent.com/CocoaPods/Specs/9d4bb18a14436a82c5487c73e13283561db549c0/Specs/d/f/4/KYBarrageKit/0.0.3/KYBarrageKit.podspec.json- Log messages:- November 27th, 03:43: Push for `KYBarrageKit 0.0.3' initiated.- November 27th, 03:43: Push for `KYBarrageKit 0.0.3' has been pushed (0.164832082 s). kinglydeMacBook-Air:KYBarrageKit kingly$最后趕快驗證一下
pod search KYBarrageKit出現如下信息,即大功告成了!
-> KYBarrageKit (0.0.3)KYBarrageKit this is a high availability, easy to use barrage FrameworkLibrary.pod 'KYBarrageKit', '~> 0.0.3'- Homepage: https://github.com/kingly09/KYBarrageKit- Source: https://github.com/kingly09/KYBarrageKit.git- Versions: 0.0.3, 0.0.2, 0.0.1 [master repo] (END)擴展閱讀
-
Podspec Syntax Reference
-
Developing private static library for iOS with CocoaPods
-
Automatic build of static library for iOS and many architectures
-
Avoiding dependency collisions in iOS static library managed by CocoaPods
現在很多人都會使用CocoaPods來管理自己使用的第三方開源代碼,這兩天我的工程中碰到了這樣一個問題,當我使用CocoaPods來進行三方源碼的引入,但是在實際的工程當中引入出現了這樣一個問題,就是頭文件找不到!!!頭文件居然找不到!!!可是他明明好好的躺在那里啊,為什么找不到,這時候想到肯定是路徑或者引用的問題。
研究了半天,終于摸到了門路,流程就是PROJECT -> info -> Configurations ->Debug/Release -> AppTests 后面的None改為Pods,好了,經過這個流程之后,重新編譯你的工程,這個問題就解決了~
轉載于:https://my.oschina.net/kinglyphp/blog/795027
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的使用Cocoapods快速创建自己的podspec,让你的框架支持cocoapods,podspec的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 定时执行shell脚本 定时
- 下一篇: OceanBase架构浅析(一)