CocoaPods使用
一、CocoaPods简介
CocoaPods
是一款XCode
工程的三方库包管理工具,只需要在对应的配置文件中引用需要使用的三方库,就可以使用对应的pod命令进行库的安装、更新等操作。
二、基本使用
1、安装CocoaPods
mac
可以使用ruby
的gem
工具来安装CocoaPods
# Xcode 8 + 9
$ sudo gem install cocoapods
在Mac El Capitan cocoapods
系统中,由于苹果限制了部分文件的读写权限,需要使用rvm
来更新到最新的ruby
版本,才可以正常安装和更新CocoaPods
。
参看:El Capitan cocoapods 等gem命令不能正常使用
2、更新CocoaPods
可以直接覆盖安装:
[sudo] gem install cocoapods
也可安装pre-release
版本
[sudo] gem install cocoapods --pre
3、使用CocoaPods
在XCode
工程管理三方库
在XCode工程目录下执行下面命令创建Podfile
:
pod init
在Podfile
中指定最低支持的版本:
platform :ios, '9.0'
在Podfile
中添加需要使用的三方库:
target 'MyApp' do
pod 'AFNetworking', '~> 3.0'
pod 'FBSDKCoreKit', '~> 4.9'
end
执行下面命令,生成XCode
工程.xcworkspace
文件:
pod install
打开MyApp.xcworkspace
即可。
4、pod install vs. pod update
pod install
- 已经存在
Podfile
文件的情况下,使用pod install
来安装新添加的三方库,
- 已经存在
pod update
- 想要单独更新某个库时
pod update [PODNAME]
- 想要更新所有库时
pod update
- 想要单独更新某个库时
三、创建Pod
库
1、使用Pod Lib Create
创建Pod
库
使用以下命令创建私有库
pod lib create MyLibrary
根据提示选择以下操作:
- Objective-C or Swift
- Making a Demo Application
- Choosing a Test Framework(Specta/Expecta or Kiwi)
- View-based Testing
- Prefixes for Objective-C
选择完成后,会自动创建MyApp.xcworkspace
文件,并打开。
然后编辑podspec
文件,完善相应信息。
示例:
Pod::Spec.new do |s|
s.name = "WTAlert"
s.version = "0.1.0"
s.summary = "You can use WTAlert show alert by class method."
s.description = <<-DESC
You can use WTAlert show alert by class method. That is simple.
DESC
s.homepage = "https://github.com/wusuowei/WTAlert"
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
s.license = 'MIT'
s.author = { "wentianen" => "1206860151@qq.com" }
s.source = { :git => "https://github.com/wusuowei/WTAlert.git", :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.platform = :ios, '7.0'
s.requires_arc = true
s.source_files = 'Pod/Classes/**/*'
s.resource_bundles = {
'WTAlert' => ['Pod/Assets/*.png']
}
s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
2、开放为公开库
注册信息到公开库:
pod trunk register EMAIL [YOUR_NAME]
示例:
pod trunk register eloy@example.com 'Eloy Durán' --description='Personal Laptop'
pod trunk register eloy@example.com --description='Work Laptop'
pod trunk register eloy@example.com
可以使用下面命令来查看已注册的信息:
pod trunk me
使用下面命令将Pod
库信息上传到官方公开库:
pod trunk push [NAME.podspec]
如果上传失败,可以使用下面指令查看podspec
文件是否存在语法错误:
pod spec lint [NAME.podspec]
// or
pod lib lint
3、 生成私有库
-
创建私有 Spec Repo
如果你需要使用自己的一些pods库的集合的话,建议你创建私有的spec repo,一个只有你们的这些库的使用者才能访问到的私有库。
你不需要fork Cocoapods/Specs主repo,只需要确认你们的团队成员都可以正常访问就行,没有公开的必要。 -
添加你的私有Repo到你的CocoaPods
$ pod repo add REPO_NAME SOURCE_URL
注意:在你创建本地pods库的时候,需要检查你推送到源地址的权限。
你可以使用下面两条指令去检查你的安装是否完成:
$ cd ~/.cocoapods/repos/REPO_NAME $ pod repo lint .
-
添加你的Podspec到你的repo
确认你打了适当的tag和version标记,然后执行:$ pod repo push REPO_NAME SPEC_NAME.podspec
执行这个命令的时候,会执行对.podspec文件的语法检查,请注意你的podspec文件配置细节部分。
你的repo的结构应该像下面一样:
.
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
-
在工程中使用私有repo
私有repo的使用和官方库一样,也是基于Podfile的,你可以在你工程的Podfile文件中指定spec仓库源地址就可以了:source 'URL_TO_REPOSITORY'
四、CocoaPods私有库创建遇到的问题
私有库的创建这里不再赘述,在互联网上已经有许多博客你可以进行参考,当然你也可以查看官方文档。
1.私有库的dependency找不到
假如你已经创建好私有库A,并想在私有库B中使用私有库A,在库B的.podspec文件中你需要制定依赖:
s.dependency 'pod projectName(A)', '~> version'
校验sepc可用性时,执行以下命令:
pod sepc lint 文件名.podspec
此时由于你当前工程B依赖的工程是私有库,于是会报错:
- ERROR | [iOS] unknown: Encountered an unknown error (Unable to find a specification for `XSLKeyChainCache (~> 0.1.0)` depended upon by `XSLOpenUDID`) during validation.
原因:
校验podspec文件时会到远程podspec库查找相关依赖,默认只会到官方specs库校验,此时需要指定远程specs库去校验。
解决:
-
指定pod spec文件校验地址
pod sepc lint 文件名.podspec --sources='http://[privateLibName]/cocoaspecs.git,https://github.com/CocoaPods/Specs.git'
-
引用当前私有库的podFile中指定source为私有库地址
source http://[privateLibName]/cocoaspecs.git' source 'https://github.com/CocoaPods/Specs.git'
2.将本地podspec
推送到远程私有spec
库时因为警告失败
当你想把本地.podspec文件推送到远程specs仓库时,你需要执行:
Pod repo push 本地spec库名 本地.podsepc文件
如果.podspec文件存在警告时不能成功push。
解决:
Pod repo push 本地spec库名 本地.podsepc文件 --allow-warnings
不过为了严谨,最好把产生的警告解决掉再推送到远程仓库,以免对你的同事造成困扰。
更多相关指令你都可以用–help查看:
pod repo push --help