|
| 1 | +CocoaPods 备忘清单 |
| 2 | +=== |
| 3 | + |
| 4 | +[CocoaPods](https://en.wikipedia.org/wiki/Cron) 是 [Swift](./swift.md) 和 Objective-C Cocoa 项目的依赖管理器,此快速参考备忘单显示了它的常用命令使用清单。 |
| 5 | + |
| 6 | +入门 |
| 7 | +--- |
| 8 | + |
| 9 | +### 安装 |
| 10 | +<!--rehype:wrap-class=row-span-2--> |
| 11 | + |
| 12 | +```bash |
| 13 | +$ sudo gem install cocoapods |
| 14 | +``` |
| 15 | + |
| 16 | +无 Sudo 安装,不想为此过程授予 `RubyGems` 管理员权限 |
| 17 | + |
| 18 | +```bash |
| 19 | +export GEM_HOME=$HOME/.gem |
| 20 | +export PATH=$GEM_HOME/bin:$PATH |
| 21 | +``` |
| 22 | + |
| 23 | +编辑 `.bash_profile` 配置文件,添加上面内容 |
| 24 | + |
| 25 | +```bash |
| 26 | +$ gem install cocoapods --user-install |
| 27 | +$ gem which cocoapods |
| 28 | +/Users/wcj/.gem/ruby/2.0.0/gems/cocoapods-0.29.0/lib/cocoapods.rb |
| 29 | +$ /Users/wcj/.gem/ruby/2.0.0/bin/pod install |
| 30 | +``` |
| 31 | +<!--rehype:className=wrap-text--> |
| 32 | + |
| 33 | +### 更新 CocoaPods |
| 34 | + |
| 35 | +```bash |
| 36 | +$ gem install cocoapods |
| 37 | +``` |
| 38 | + |
| 39 | +或者对于预发布版本 |
| 40 | + |
| 41 | +```bash |
| 42 | +$ gem install cocoapods --pre |
| 43 | +``` |
| 44 | + |
| 45 | +### 安装 |
| 46 | +<!--rehype:wrap-class=row-span-2--> |
| 47 | + |
| 48 | +```bash |
| 49 | +$ pod install |
| 50 | +``` |
| 51 | + |
| 52 | +在您的项目中安装新的 `pod`,即使你已经有一个 `Podfile` 并且之前运行过 `pod install`; 因此,即使您只是在已经使用 `CocoaPods` 的项目中添加/删除 `pod` |
| 53 | + |
| 54 | +- 会在 `Podfile.lock` 文件中为每个 pod 写入已安装的版本,此文件跟踪每个 pod 的已安装版本并锁定这些版本 |
| 55 | +- 它只会解析 `Podfile.lock` 中尚未列出的 pod 的依赖关系 |
| 56 | +- 对于 `Podfile.lock` 中列出的 pod,会下载 `Podfile.lock` 中列出的显式版本,而不尝试检查是否有更新的版本可用 |
| 57 | + |
| 58 | +下载 `Podfile` 中定义的所有依赖项,并在 `./Pods` 中创建一个 `Xcode Pods` 库项目 |
| 59 | + |
| 60 | +### 更新过时的依赖 |
| 61 | + |
| 62 | +```bash |
| 63 | +$ pod outdated |
| 64 | +``` |
| 65 | + |
| 66 | +显示当前 `Podfile.lock` 中过时的 `pod`,但仅显示来自规范 `repos` 的那些,而不是来自本地/外部来源的那些 |
| 67 | + |
| 68 | +### 更新依赖 |
| 69 | + |
| 70 | +```bash |
| 71 | +$ pod update |
| 72 | +$ pod update PODNAME |
| 73 | +``` |
| 74 | + |
| 75 | +更新由指定 `pod` 名称标识的 `Pod`。 如果没有指定 `Pod` 名称,它会更新所有 `Pod`,而忽略 `Podfile.lock` 的内容。 此命令保留用于更新依赖项,应使用 `pod install` 安装对 `Podfile` 的更改 |
| 76 | + |
| 77 | +### 清理 Pods 依赖 |
| 78 | + |
| 79 | +```bash |
| 80 | +$ pod deintegrate |
| 81 | +``` |
| 82 | + |
| 83 | +从 `CocoaPods` 中分离您的项目。 从您的 `Xcode` 项目中删除所有 `CocoaPods` 的痕迹。如果未指定 `xcodeproj`,则将在当前目录中搜索 `Xcode` 项目 |
| 84 | + |
| 85 | +### pod env |
| 86 | + |
| 87 | +```bash |
| 88 | +$ pod env |
| 89 | +``` |
| 90 | + |
| 91 | +显示 pod 环境 |
| 92 | + |
| 93 | +### 将 Pod 添加到 Xcode 项目 |
| 94 | + |
| 95 | +- 创建一个 Podfile,并添加您的依赖项 |
| 96 | + |
| 97 | + ```ruby |
| 98 | + # Podfile |
| 99 | + target 'MyApp' do |
| 100 | + pod 'AFNetworking', '~> 3.0' |
| 101 | + pod 'FBSDKCoreKit', '~> 4.9' |
| 102 | + end |
| 103 | + ``` |
| 104 | + |
| 105 | +- 在您的项目目录中运行 `$ pod install` |
| 106 | +- 打开 `App.xcworkspace` 并构建 |
| 107 | +<!--rehype:className=style-timeline--> |
| 108 | + |
| 109 | +### 创建一个新的 Cocoapod |
| 110 | + |
| 111 | +命令 | 说明 |
| 112 | +:-- | -- |
| 113 | +`pod lib create pod_name` | 为您创建一个新的 pod 项目 |
| 114 | +`pod trunk push pod_name.podspec` | 将 podspec 推送到 trunk |
| 115 | +`pod spec create pod_name` | 为您创建 podspec 模板 |
| 116 | +<!--rehype:className=style-list--> |
| 117 | + |
| 118 | +### 浏览 |
| 119 | + |
| 120 | +- `pod search QUERY` 搜索名称、摘要、描述或作者与 QUERY 匹配的 pod,忽略大小写。 如果指定了 --simple 选项,这将只搜索 pod 的名称 |
| 121 | +- `pod list` 列出所有可用的 pod |
| 122 | +- `pod try NAME|URL` 下载具有给定名称(或 Git URL)的 Pod,如果需要,安装其依赖项并打开其演示项目。 如果提供了 Git URL,则使用 repo 的头部。 如果指定了 Git URL,则可以提供 --podspec_name,如果 podspec 名称由于某种原因与 git 存储库不同 |
| 123 | + |
| 124 | +### 规格 |
| 125 | +<!--rehype:wrap-class=col-span-2--> |
| 126 | + |
| 127 | +- `pod spec create [NAME\|https://github.com/USER/REPO]` 在当前工作目录中创建一个名为 NAME.podspec 的 PodSpec。如果传递了 GitHub url,则预先填充规范。 |
| 128 | +- `pod spec lint [NAME.podspec|DIRECTORY|http://PATH/NAME.podspec ...]` 验证 NAME.podspec。 如果提供了 DIRECTORY,它会验证找到的 podspec 文件,包括子文件夹。 如果省略参数,则默认为当前工作目录。 |
| 129 | +- `pod spec cat [QUERY]` 将名称与 QUERY 匹配的 podspec 的内容打印到标准输出。 |
| 130 | +- `pod spec which [QUERY]` 打印名称与 QUERY 匹配的 .podspec 文件的路径 |
| 131 | +- `pod spec edit [QUERY]` 打开要编辑的与 QUERY 匹配的 podspec。 |
| 132 | + |
| 133 | +### Repos |
| 134 | +<!--rehype:wrap-class=row-span-2--> |
| 135 | + |
| 136 | +命令 | 说明 |
| 137 | +:-- | -- |
| 138 | +`pod repo add NAME URL [BRANCH]` | 在 `~/.cocoapods/repos/` 的本地 spec-repos 目录中克隆 URL。远程可以稍后由 NAME 引用 |
| 139 | +`pod repo update [NAME]` | 更新 spec-repo NAME 的本地克隆。如果 NAME 被省略,这将更新 ~/.cocoapods/repos 中的所有 spec-repos |
| 140 | +`pod repo lint [NAME\|DIRECTORY]` | 对 spec-repo NAME 进行 lints。如果提供了目录,则假定它是存储库的根目录。最后,如果没有提供 NAME,这将 lint CocoaPods 已知的所有规范库 |
| 141 | +`pod repo list` | 从 `~/.cocoapods/repos/` 的本地 spec-repos 目录中列出 repos |
| 142 | +`pod repo remove NAME` | 从 `~/.cocoapods/repos/` 的本地 spec-repos 目录中删除名为 NAME 的远程 |
| 143 | +`pod repo push REPO [NAME.podspec]` | 验证当前工作目录中的 `NAME.podspec` 或 \*.podspec,在 REPO 的本地副本 (`~/.cocoapods/repos/[REPO]`) 中为 pod 创建目录和版本文件夹,将 podspec 文件复制到版本中目录,最后它将 REPO 推送到其远程 |
| 144 | +`pod setup` | 在 `~/.cocoapods/repos` 创建一个目录,该目录将保存您的规范存储库。它将在这里创建公共主规范仓库的克隆:<https://github.com/CocoaPods/Specs> 如果克隆已经存在,它将确保它是最新的 |
| 145 | +<!--rehype:className=style-list-arrow--> |
| 146 | + |
| 147 | +### Trunk |
| 148 | +<!--rehype:wrap-class=col-span-2--> |
| 149 | + |
| 150 | +- `pod trunk add-owner POD OWNER-EMAIL` 将具有指定 OWNER-EMAIL 的注册用户添加为给定 POD 的 `owner` |
| 151 | +- `pod trunk info NAME` 返回有关 Pod 的信息 |
| 152 | +- `pod trunk me` 包括有关您的注册的信息,然后是您的所有会话 |
| 153 | +- `pod trunk push [PATH]` 在 PATH 发布 podspec 以使其可供 `master` 规范存储库的所有用户使用 |
| 154 | +- `pod trunk register EMAIL [NAME]` 注册一个新帐户,或创建一个新会话 |
| 155 | +- `pod trunk remove-owner POD OWNER-EMAIL` 将具有指定 OWNER-EMAIL 的用户从给定 POD 的 owner 中移除 |
| 156 | +- `pod trunk deprecate NAME` 弃用 pod |
| 157 | +- `pod trunk delete NAME VERSION` *警告*:删除其他人所依赖的 Pod 版本通常被认为是不良行为!请考虑改用 <red>`deprecate`</red> 命令 |
| 158 | + |
| 159 | +什么是 Podfile? |
| 160 | +--- |
| 161 | + |
| 162 | +### 简单配置 |
| 163 | + |
| 164 | +```ruby |
| 165 | +target 'MyApp' do |
| 166 | + use_frameworks! |
| 167 | + pod 'Alamofire', '~> 3.0' |
| 168 | +end |
| 169 | +``` |
| 170 | + |
| 171 | +Podfile 可以非常简单,这会将 Alamofire 添加到单个目标 |
| 172 | + |
| 173 | +### 添加测试 |
| 174 | +<!--rehype:wrap-class=row-span-2--> |
| 175 | + |
| 176 | +```ruby |
| 177 | +source 'https://github.com/CocoaPods/Specs.git' |
| 178 | +source 'https://github.com/Artsy/Specs.git' |
| 179 | + |
| 180 | +platform :ios, '9.0' |
| 181 | +inhibit_all_warnings! |
| 182 | + |
| 183 | +target 'MyApp' do |
| 184 | + pod 'GoogleAnalytics', '~> 3.1' |
| 185 | + |
| 186 | + # 拥有自己的 OCMock 副本 |
| 187 | + # 并且可以通过应用访问 GoogleAnalytics |
| 188 | + # 承载测试目标 |
| 189 | + |
| 190 | + target 'MyAppTests' do |
| 191 | + inherit! :search_paths |
| 192 | + pod 'OCMock', '~> 2.0.1' |
| 193 | + end |
| 194 | +end |
| 195 | + |
| 196 | +post_install do |installer| |
| 197 | + installer.pods_project.targets.each do |target| |
| 198 | + puts target.name |
| 199 | + end |
| 200 | +end |
| 201 | +``` |
| 202 | +<!--rehype:className=wrap-text--> |
| 203 | + |
| 204 | +链接应用程序及其测试包的更复杂 Podfile 的示例 |
| 205 | + |
| 206 | +### 指定 pod 版本 |
| 207 | + |
| 208 | +在开始一个项目时,希望使用最新版本的 Pod。这种情况,只需忽略版本要求 |
| 209 | + |
| 210 | +```ruby |
| 211 | +pod 'SSZipArchive' |
| 212 | +``` |
| 213 | + |
| 214 | +稍后在项目中,您可能希望冻结到特定版本的 Pod,在这种情况下,您可以指定该版本号 |
| 215 | + |
| 216 | +```ruby |
| 217 | +pod 'Objection', '0.9' |
| 218 | +``` |
| 219 | + |
| 220 | +### 隐式抽象目标 |
| 221 | + |
| 222 | +Podfile 的根目录存在隐式抽象目标,因此您可以将上面的示例编写为 |
| 223 | + |
| 224 | +```ruby |
| 225 | +pod 'ShowsKit' |
| 226 | +pod 'Fabric' |
| 227 | + |
| 228 | +# 拥有自己的 ShowsKit + ShowWebAuth 副本 |
| 229 | +target 'ShowsiOS' do |
| 230 | + pod 'ShowWebAuth' |
| 231 | +end |
| 232 | + |
| 233 | +# 拥有自己的 ShowsKit + ShowTVAuth 副本 |
| 234 | +target 'ShowsTV' do |
| 235 | + pod 'ShowTVAuth' |
| 236 | +end |
| 237 | +``` |
| 238 | + |
| 239 | +### 多个目标共享同一个 pod |
| 240 | + |
| 241 | +```ruby |
| 242 | +# 在任何 Xcode 项目中都没有名为“Shows”的目标 |
| 243 | +abstract_target 'Shows' do |
| 244 | + pod 'ShowsKit' |
| 245 | + pod 'Fabric' |
| 246 | + # 拥有自己的 ShowsKit + ShowWebAuth 副本 |
| 247 | + target 'ShowsiOS' do |
| 248 | + pod 'ShowWebAuth' |
| 249 | + end |
| 250 | + # 拥有自己的 ShowsKit + ShowTVAuth 副本 |
| 251 | + target 'ShowsTV' do |
| 252 | + pod 'ShowTVAuth' |
| 253 | + end |
| 254 | +end |
| 255 | +``` |
| 256 | + |
| 257 | +另见 |
| 258 | +---- |
| 259 | + |
| 260 | +- [CocoaPods 官方网站](https://cocoapods.org/) *(cocoapods.org)* |
| 261 | +- [Cocoapods Cheatsheet](https://github.com/SebastianBoldt/Cocoapods-Cheatsheet) *(github.com)* |
0 commit comments