国内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提交开源代码。
其他还可阅读:
number1
number2