國內cocoapods鏡像:
https://gitee.com/mirrors/CocoaPods-Specs.git
從podspec打包靜態庫
安裝cocoapods-packager
gem install cocoapods-packager
然后,執行
pod package podname.podspec
pod search 搜索類庫失敗
重裝CocoaPods后,執行 pod search MJExtension
提示如下:
[!] Unable to find a pod with name, author, summary, or description matching xxxxx
解決方法:
先執行rm ~/Library/Caches/CocoaPods/search_index.json
刪除索引,再執行pod setup
,現在就可以正常的pod search xxx
了。
補充: pod search xxx
中,對xxx
大小寫不敏感。
驗證
1、驗證.podspec會先測試本地.podspec文件是否存在語法錯誤。測試成功再根據.podspec文件找到遠端倉庫對應的版本clone到本地并進行配置。最后測試文件是否能夠編譯成功。
2、再次驗證
如果錯誤發生在.podspec中。當修改完時,不需要再次提交就可以直接驗證。如果錯誤發生在代碼中,則需要再次提交才能驗證。
3、pod spec相對于pod lib 會更為精確,pod lib相當于只驗證一個本地倉庫,pod spec會同時驗證本地倉庫和遠程倉庫。
4、—sources變量的使用
當你的.podspec文件依賴其他私有庫時要引入source
pod spec lint React.podspec —allow-warnings —sources=lcoal_spec_name,master
lint通過之后push的時候依然需要—sources
pod push local_spec_name React.podspec —allow-warning —source=local_spec_name,master
# s.libraries 表示這個pod依賴的 蘋果官方的庫,也就是類似libstdc++.a ,libsqlite.a 等等的a文件;
# s.vendored_libraries 就表示用戶自己的a文件,比如新浪微博SDK的libWeiboSDK.a, 微信libWeChatSDK.a;
# s.frameworks 表示pod依賴的 蘋果的framework, 比如 UIKit,SystemConfiguration等等
# s.vendored_frameworks, 表示pod依賴的自己的framework,比如QQSDK的TencentOpenAPI.framework,JSPatch熱更新JSPatchPlatform.framework;
# .a 或者 libz.tbd 后綴不要,名字里lib開頭的三個字母不要,libz.tbd 應寫成 'z'
例如:
# s.library = 'z'
s.libraries = 'iconv','sqlite3','stdc++','z'
s.vendored_libraries = 'Resources/lib/**/*.{a}'
s.vendored_frameworks = 'Resources/Framework/**/*.{framework}'
依賴版本:
//使用本地索引庫里的最新的版本
pod 'SSZipArchive'
//指定使用某個版本
pod 'SSZipArchive', '2.1.3'
//2.1.3與2.2版本之間的最新版本
pod 'SSZipArchive', '~> 2.1.3'
//使用大于等于2.1.3的最新版本(可以是2.1.4)
pod 'SSZipArchive', '>= 2.1.3'
Build配置
//只有在debug模式下才使用PonyDebugger庫
pod 'SSZipArchive', :configuration => 'Debug'
Subspecs 配置
#Subspecs 配置, 只使用pod中某一個或者某一些子pod 庫
//使用QueryKit下的Attribute庫: pod 'QueryKit/Attribute'
//使用QueryKit下的Attribute庫和QuerySet庫: pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
設置pod庫
//使用master分支 pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
//使用指定分支 pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
//使用指定tag pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
//使用某一次commit pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af
設置podSpec的來源
pod 'AFNetworking', :podspec => 'https://example.com/AFNetworking.podspec'
本地pod庫(cocoapod會在指定的文件夾下找podspec,所以當前文件夾下一定要有podspec文件)
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
inherit!:給當前target設置集成模式
:complete : 全部繼承父target
:none :全部不繼承
:search_paths :只繼承父target的searchPaths
例如:
target 'App' do
target 'AppTests' do
inherit! :search_paths
end
end
Target配置
platform: 兩個參數。一個是name, 一個是target
name屬性
osx for OS X, :ios for iOS, :tvos for tvOS, or :watchos for watchOS.
target:版本
例如:
platform :ios, '4.0'
platform :ios
inhibit_all_warnings : 忽略所有庫中的警告,也可以指定某一個具體庫的警告。
例如:
//全部忽略
platform :ios, '8.0'
inhibit_all_warnings!
source 'https://github.com/CocoaPods/Specs.git'
target 'TestPod' do
pod 'SummerOCProjectFrame', '~> 0.0'
end
//某一個忽略
pod 'SummerOCProjectFrame', '~> 0.0', :inhibit_warnings => true
Source : 可以指定CocoaPods Master Repository,也可以自定義的Repository。
例如:
source 'https://github.com/artsy/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'
pre_install:在pod下載完初始化前可以通過它做邏輯處理。
例如:
pre_install do |installer|
# Do something fancy!
end
post_install:在形成project后寫入本地前可以通過它做邏輯處理。
比如設置target的build setting, 代碼如下:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
end
end
end
def name end。 如果project依賴的庫很多,比如有自己開發的庫,有第三方的庫,可以對這些庫進行分類。例如:
def myPods
pod xxx
pod xxx1
pod xxx2
end
def thirdPods
pod yyy
pod yyy1
pod yyy2
end
target 'xxx' do
myPods
thirdPods
end
關于實戰,可參考我的另一篇文章:向CocoaPods提交開源代碼。