Cocopods原理:根據Podfile描述,找到對應代碼庫的podspec⽂件而後根據podspec中的描述,找到代碼庫,而且找到以後,拷⻉須要的⽂件到⾃己的⼯程中。
ios
pod spec create spec文件名
Pod::Spec.new do |s| #設置組件庫的名稱
s.name =
"YuntxIMLib"
#設置組件庫的版本號 s.version = "5.4.9"
#組件庫的簡介
s.summary = "容聯雲通信IM SDK(若是看不到最新版本,請使⽤pod repo update 命令更新一下本地pod倉庫)"
# 組件庫的詳情描述,要求⽐簡介的字數多些 s.description = <<-DESC
#設置倉庫主頁 s.homepage
#設置許可 s.license
#設置做者 s.author
容聯雲通信SDK YuntxIMLib. (若是看不到最新版本,請使用 pod repo update 命令更新⼀下本地pod倉庫) DESC
= "https://www.yuntongxun.com/"
= "MIT"
= { "author" => "xxxx@qq.com" }
#設置支持的最低系統版本 s.ios.deployment_target = "8.0"
#設置倉庫源,表示在哪能夠找到組件⼯工程
s.source = { :git => "https://gitlab.com/YuntxSDK/YuntxIMLib.git", :tag => "#{s.version}" }
#資源⽂文件
s.resources = "sdk/CCPSDKBundle.bundle"
#設置源⽂件路徑,不是整個⼯程的文件,⽽是⾃己封裝的須要暴露出來的代碼,之後別的⼯程引⼊,就會引⼊這裏的代碼。 s.source_files = "sdk/*.h"
#設置使用的靜態庫(非系統) s.vendored_library = 'sdk/*.a'
#設置依賴庫(系統),不須要 lib,例如: libicucore寫成icucore便可
s.libraries = "resolv.9","icucore","sqlite3","z","xml2","bz2.1.0","c++"
#設置依賴的 framework(系統),寫的時候不須要後綴名
s.framework = "CoreTelephony","MediaPlayer","CFNetwork","SystemConfiguration","MobileCoreServices","AudioToolbox","AVFoundation","Vide oToolbox"
#設置使用的framework(非系統) # vendored_frameworks = ""
#設置⼦目錄
s.subspec 'Delegate' do |ss| ss.source_files = "sdk/Delegate/*.h"
end
s.subspec 'enums' do |ss| ss.source_files = "sdk/enums/*.h" end
s.subspec 'Manager' do |ss| ss.source_files = "sdk/Manager/*.h" end
s.subspec 'private' do |ss| ss.source_files = "sdk/private/*.h" end
s.subspec 'types' do |ss|
ss.source_files = "sdk/types/*.h","sdk/types/LiveChatRoomType/*.h" end
s.subspec 'board' do |ss| ss.source_files = "sdk/board/*.h" end
#設置組件庫是不是基於 ARC 內存管理的,默認爲 true,若是不是,會自動添加-fno-objc-arc s.requires_arc = true
#若是部分是ARC
#spec.requires_arc = false
#spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm'] //指定 MRC 的⽂件
#設置依賴的其餘 pod 庫
# s.dependency "JSONKit", "~> 1.4"
#設置xcconfig s.xcconfig = {
'OTHER_LINKER_FLAGS' => '-ObjC',
'ENABLE_BITCODE' => 'NO' }
end
複製代碼
- 文件名匹配
- * 匹配全部⽂件
- c* 匹配以名字C開頭的文件
- *c 匹配以名字c結尾的文件
- *c* 匹配全部名字包含c的文件
- ** 文件夾以及遞歸子文件夾
- ? 任意⼀個字符(注意是⼀個字符)
- [set] 匹配多個字符,⽀持取反
- {p,q} 匹配名字包括p 或者 q的⽂件
複製代碼
git tag 0.0.1
git push --tags
複製代碼
pod lib lint
--verbose
打印詳細 log--allow-warnings
當出現警告,可是不影響 pod 庫的使⽤的時候會驗證經過--use-libraries
使⽤了⾃己的私有庫,不加可能會驗證不經過,加了就沒問題pod trunk push --verbose --allow-warnings --use-libraries
,後⾯的命令做用同上pod search
組件庫名稱pod trunk push
成功了,說明本地pod索引庫沒有更新1. rm ~/Library/Caches/CocoaPods/search_index.json
2. pod setup
3. pod search name
複製代碼
1. pod trunk delete name tag
2. rm ~/Library/Caches/CocoaPods/search_index.json
3. pod setup
4. pod search name
複製代碼
pod lib lint/repo push不支持i386編譯&只能真機運⾏行行的庫
c++
gem which cocoapods
/usr/local/lib/ruby/gems/2.5.0/gems/cocoapods-1.6.0.beta.1/lib
validator.rb
⽂件
validator.rb
⽂件,因此用命令: sudo vim validator.rb
⽂件路徑 ,輸⼊密碼後便可編輯,將上圖紅框中部分該成下面,這樣就能繞過 pod lib lint 檢測了# command += %w(CODE_SIGN_IDENTITY=- -sdk iphonesimulator)
# command += Fourflusher::SimControl.new.destination(:oldest, 'iOS', deployment_target)
command += %w(--help)#爲了了繞過模擬器器檢測不不經過的 bug
複製代碼
上⾯講到的⽅法是將組件庫託管到公有遠程倉庫,任何人均可如下載集成組件庫。可是有時候咱們公司內部的⼀些大型項目也使用了組件化⽅方式來開發,這時候咱們的組件庫就不須要專⻔放到遠程倉庫來託管,照樣也可使用CocoaPods來管理。git
MainTarget
是主工程,ComponentA
,ComponentB
分別是兩個不一樣的組件⼯程
podspec
⽂件Pod::Spec.new do |spec|
spec.name
spec.version
spec.summary
spec.homepage
spec.license
spec.author
spec.source
spec.source_files = "ComponentA/Class/*.{h,m}"
= "ComponentA"
= "0.0.1"
= "A short description of ComponentA." = "https://www.yuntongxun.com/"
= "MIT"
= { "author" => "xxxx@yuntongxun.com" } = { :path => 'ComponentA.podspec' }
end
複製代碼
這裏主要是 spec.source
組件路徑要指向自身,其餘的配置根據實際須要能夠添加sql
MainTarget
的 Podfile⽂件target 'MainTarget' do
pod 'ComponentA' , :path => '../ComponentA'
end
複製代碼
執行 pod install
後, MainTarget 主⼯程就會將 ComponentA 組件集成進來json