cocoapods-imy-bin 0.2.6 → 0.3.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -540
  3. data/lib/cocoapods-imy-bin/command/bin/archive.rb +43 -4
  4. data/lib/cocoapods-imy-bin/command/bin/auto.rb +9 -7
  5. data/lib/cocoapods-imy-bin/command/bin/code.rb +1 -6
  6. data/lib/cocoapods-imy-bin/command/bin/local.rb +16 -7
  7. data/lib/cocoapods-imy-bin/config/config.rb +1 -1
  8. data/lib/cocoapods-imy-bin/config/config_builder.rb +39 -2
  9. data/lib/cocoapods-imy-bin/gem_version.rb +1 -1
  10. data/lib/cocoapods-imy-bin/helpers.rb +1 -0
  11. data/lib/cocoapods-imy-bin/helpers/Info.plist +0 -0
  12. data/lib/cocoapods-imy-bin/helpers/build_helper.rb +15 -7
  13. data/lib/cocoapods-imy-bin/helpers/build_utils.rb +63 -0
  14. data/lib/cocoapods-imy-bin/helpers/framework.rb +25 -2
  15. data/lib/cocoapods-imy-bin/helpers/framework_builder.rb +172 -57
  16. data/lib/cocoapods-imy-bin/helpers/library.rb +2 -2
  17. data/lib/cocoapods-imy-bin/helpers/local/local_build_helper.rb +38 -6
  18. data/lib/cocoapods-imy-bin/helpers/local/local_framework.rb +20 -0
  19. data/lib/cocoapods-imy-bin/helpers/local/local_framework_builder.rb +91 -38
  20. data/lib/cocoapods-imy-bin/helpers/sources_helper.rb +5 -2
  21. data/lib/cocoapods-imy-bin/helpers/spec_source_creator.rb +65 -8
  22. data/lib/cocoapods-imy-bin/helpers/upload_helper.rb +8 -3
  23. data/lib/cocoapods-imy-bin/native.rb +4 -0
  24. data/lib/cocoapods-imy-bin/native/analyzer.rb +2 -0
  25. data/lib/cocoapods-imy-bin/native/file_accessor.rb +28 -0
  26. data/lib/cocoapods-imy-bin/native/pod_target_installer.rb +94 -0
  27. data/lib/cocoapods-imy-bin/native/podfile_generator.rb +11 -2
  28. data/lib/cocoapods-imy-bin/native/target_validator.rb +41 -0
  29. data/lib/cocoapods-imy-bin/native/validator.rb +1 -38
  30. metadata +7 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bcb63ef530c6ebfb4e17dd2678c7accf04c62b21
4
- data.tar.gz: 4b2c8dd37d15b0fd3c6f0a449767f3e10d891e10
3
+ metadata.gz: 053c2971deff73611963c8a4382c4bd1291ddc13
4
+ data.tar.gz: 4026e712a30ad0a92cc5f2b77638362cf183c688
5
5
  SHA512:
6
- metadata.gz: 72dd406415ec81288859a7804c87f62d53ddf0af353b3f57462eb87d8f45cf56fe424787e0ee8131d2f8469e401fb36bb2fe885ac33585f5393acaedeeabe58c
7
- data.tar.gz: f19462b39382125c4bc9ee0bf4ebcfb71c1b8ff4418b9d9739a154c2c35a85b727b3f214eebf72a434ac3b48507673346cb7799228d6376f5cea8031eeffdb10
6
+ metadata.gz: 1aa193c1293ffceaa47ef0a926db26749e182771a86bad1bcd1be7a9227d7e7b601ea0efce9cfd71454c1796c2ec1ffb4fae8ab8c475b11b7269f67fe1644ca6
7
+ data.tar.gz: e5cff6c4998c8ca5bf56bd1c4b85802af2a465fb5f28e9cad9968998f9588948559332401da006724db91524abdae7dfce767837f43742ad2af5b8a374669181
data/README.md CHANGED
@@ -1,541 +1 @@
1
- # cocoapods-bin
2
-
3
- 组件二进制化插件。
4
-
5
- [基于 CocoaPods 的组件二进制化实践](https://triplecc.github.io/2019/01/21/%E5%9F%BA%E4%BA%8ECocoaPods%E7%9A%84%E7%BB%84%E4%BB%B6%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8C%96%E5%AE%9E%E8%B7%B5/)
6
-
7
- [Demo 工程](https://github.com/for-example-test/cocoapods-bin-example)
8
-
9
- ## 更新
10
-
11
- #### 0.1.28
12
-
13
- 新增本地组件依赖配置文件 BinPodfile ,
14
-
15
- 场景: 不希望把本地采用的源码/二进制配置传到远程仓库。
16
-
17
- 使用: 在 Podfile 同级目录下创建 BinPodfile ,并将其加入 .gitignore 。BinPodfile 中的配置选项优先级比 Podfile 高,支持和 Podfile 相同的配置语句,如 :
18
-
19
- ```ruby
20
- # BinPodfile
21
-
22
- use_binaries!
23
- set_use_source_pods ['YYModel']
24
-
25
- ```
26
-
27
-
28
- ## 概要
29
-
30
- 本插件所关联的组件二进制化策略:
31
-
32
- 预先将打包成 `.a` 或者 `.framework` 的组件(目前接入此插件必须使用 `.framework`,最好是静态 framework)保存到静态服务器上,并在 `install` 时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件 lint、组件发布等操作的目的。
33
-
34
- 使用本插件需要提供以下资源:
35
-
36
- - 静态资源服务器(可参考 [binary-server](https://github.com/tripleCC/binary-server.git))
37
- - 源码私有源(保存组件源码版本 podspec)
38
- - 二进制私有源(保存组件二进制版本 podspec)
39
-
40
- 在所有组件都依赖二进制版本的情况下,本插件支持切换指定组件的依赖版本。
41
-
42
- 推荐结合 GitLab CI 使用本插件,可以实现自动打包发布,并显著减少其 pipeline 耗时。关于 GitLab CI 的实践,可以参考 [火掌柜 iOS 团队 GitLab CI 集成实践](https://triplecc.github.io/2018/06/23/2018-06-23-ji-gitlabcide-ci-shi-jian/)。虽然后来对部分 stage 和脚本都进行了优化,但总体构建思路还是没变的。
43
-
44
- ## 准备工作
45
-
46
- 安装 `cocoapods-bin`:
47
-
48
- $ gem install cocoapods-bin
49
-
50
- 初始化插件:
51
-
52
- ```shell
53
- ➜ ~ pod bin init
54
-
55
- 开始设置二进制化初始信息.
56
- 所有的信息都会保存在 /Users/songruiwang/.cocoapods/bin.yml 文件中.
57
- 你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
58
-
59
- ---
60
- code_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec.git
61
- binary_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec-binary.git
62
- binary_download_url: http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
63
- download_file_type: zip
64
-
65
-
66
- 源码私有源 Git 地址
67
- 旧值:git@git.xxxxxx.net:ios/cocoapods-spec.git
68
- >
69
- ```
70
-
71
- 按提示输入源码私有源、二进制私有源、二进制下载地址、下载文件类型后,插件就配置完成了。其中 `binary_download_url` 需要预留组件名称与组件版本占位符,插件内部会依次替换 `%s` 为相应组件的值。
72
-
73
- `cococapod-bin` 也支持从 url 下载配置文件,方便对多台机器进行配置:
74
-
75
- ```shell
76
- ➜ ~ pod bin init --bin-url=http://git.xxxxxx.net/qingmu/cocoapods-tdfire-binary-config/raw/master/bin.yml
77
- ```
78
-
79
- 配置文件模版内容如下,根据不同团队的需求定制即可:
80
-
81
- ```yaml
82
- ---
83
- code_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec.git
84
- binary_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec-binary.git
85
- binary_download_url: http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
86
- download_file_type: zip
87
- ```
88
-
89
- 配置时,不需要手动添加源码和二进制私有源的 repo,插件在找不到对应 repo 时会主动 clone。
90
-
91
- 插件配置完后,就可以部署静态资源服务器了。对于静态资源服务器,这里不做赘述,只提示一点:在生成二进制 podspec 时,插件会根据 `download_file_type` 设置 source 的 `:type` 字段。在下载 http/https 资源时,CocoaPods 会根据 `:type` 字段的类型采取相应的解压方式,如果设置错误就会抛错。这里提到了 **二进制 podspec 的自动生成**,后面会详细介绍。
92
-
93
- 这里额外说下打包工具 [cocoapods-packager](https://github.com/CocoaPods/cocoapods-packager) 和 [Carthage](https://github.com/Carthage/Carthage/issues) ,前者可以通过 podspec 进行打包,只要保证 lint 通过了,就可以打成 `.framework`,很方便,但是作者几乎不维护了,后者需要结合组件工程。具体使用哪个可以结合自身团队,甚至可以自己写打包脚本,或者使用本插件的打包命令。
94
-
95
- ## 使用插件
96
-
97
- 接入二进制版本后,常规的发布流程需要做如下变更:
98
-
99
- ```shell
100
- # 1 打出二进制产物 && 提交产物至静态文件服务器
101
- pod bin archive YOUR_OPTIONS
102
- curl xxxxxxx
103
-
104
- # 2.1 发布二进制 podspec
105
- pod bin repo push --binary YOUR_OPTIONS
106
-
107
- # 2.2 发布源码 podspec
108
- pod bin repo push YOUR_OPTIONS
109
- ```
110
-
111
- 如果团队内部集成了 CI 平台,那么上面的每大步都可以对应一个 CI stage,源码和二进制版本可并行发布,对应一个 stage 中的两个 job。
112
-
113
- ### 基本信息
114
-
115
- `cocoapods-bin` 命令行信息可以输入以下命令查看:
116
-
117
- ```shell
118
- ➜ ~ pod bin --help
119
- Usage:
120
-
121
- $ pod bin [COMMAND]
122
-
123
- 组件二进制化插件。利用源码私有源与二进制私有源实现对组件依赖类型的切换。
124
-
125
- Commands:
126
- + archive 将组件归档为静态 framework.
127
- + init 初始化插件.
128
- + lib 管理二进制 pod.
129
- + list 展示二进制 pods .
130
- > open 打开 workspace 工程.
131
- + repo 管理 spec 仓库.
132
- + search 查找二进制 spec.
133
- + spec 管理二进制 spec.
134
- + umbrella 生成伞头文件 .
135
- ```
136
-
137
- ### 构建二进制产物
138
-
139
- ```shell
140
- ➜ ~ pod bin archive --help
141
- Usage:
142
-
143
- $ pod bin archive [NAME.podspec]
144
-
145
- 将组件归档为静态 framework,仅支持 iOS 平台 此静态 framework 不包含依赖组件的 symbol
146
-
147
- Options:
148
-
149
- --code-dependencies 使用源码依赖
150
- --allow-prerelease 允许使用 prerelease 的版本
151
- --use-modular-headers 使用 modular headers (modulemap)
152
- --no-clean 保留构建中间产物
153
- --no-zip 不压缩静态 framework 为 zip
154
- ...
155
- ```
156
-
157
- `pod bin archive` 会根据 podspec 文件构建静态 framework ,此静态 framework 不会包含依赖组件的符号信息。命令内部利用 [cocoapods-generate](https://github.com/square/cocoapods-generate) 插件生成工程,并移植了 [cocoapods-packager](https://github.com/CocoaPods/cocoapods-packager) 插件的部分打包功能,以构建前者生成的工程,默认条件下,命令会生成一个 zip 压缩包。
158
-
159
- ### 二进制 podspec
160
-
161
- `cocoapods-bin` 针对一个组件,同时使用了两种 podspec,分别为源码 podspec 和二进制 podspec,这种方式在没有工具支撑的情况下,势必会增加开发者维护组件的工作量。做为开发者来说,我是不希望同时维护两套 podspec 的。为了解决这个问题, 插件提供了自动生成二进制 podspec 功能,开发者依旧只需要关心源码 podspec 即可。
162
-
163
- 一般来说,在接入插件前,组件源码 podspec 是已经存在的,所以我们只需要向二进制私有源推送组件的二进制 podspec 即可。如果有条件的话,二进制和源码 podspec 的发布可以走 GitLab CI ,这也是我推荐的做法。
164
-
165
- 下面介绍下和二进制 podspec 相关的 `cocoapods-bin` 命令。
166
-
167
- #### pod bin spec create
168
-
169
- ```shell
170
- ➜ ~ pod bin spec create --help
171
- Usage:
172
-
173
- $ pod bin spec create
174
-
175
- 根据源码 podspec 文件,创建对应的二进制 podspec 文件.
176
-
177
- Options:
178
-
179
- --platforms=ios 生成二进制 spec 支持的平台
180
- --template-podspec=A.binary-template.podspec 生成拥有 subspec 的二进制 spec 需要的模版
181
- podspec, 插件会更改 version 和 source
182
- --no-overwrite 不允许覆盖
183
- ...
184
- ```
185
-
186
- `pod bin spec create` 会根据源码 podspec ,创建出二进制 podspec 文件。如果组件存在 subspec ,需要开发者提供 podspec 模版信息,以生成二进制 podspec。插件会根据源码 podspec 更改模版中的 version 字段,并且根据插件配置的 `binary_download_url` 生成 source 字段,最终生成二进制 podspec。
187
-
188
- 以 A 组件举例,如果 A 的 podspec 如下:
189
-
190
- ```ruby
191
- Pod::Spec.new do |s|
192
- s.name = 'A'
193
- s.version = '0.1.0'
194
- s.summary = 'business A short description of A.'
195
- s.description = <<-DESC
196
- TODO: Add long description of the pod here.
197
- DESC
198
- s.homepage = 'http://git.2dfire-inc.com/ios/A'
199
- s.license = { :type => 'MIT', :file => 'LICENSE' }
200
- s.author = { 'qingmu' => 'qingmu@2dfire.com' }
201
- s.source = { :git => 'http://git.2dfire-inc.com/qiandaojiang/A.git', :tag => s.version.to_s }
202
- s.ios.deployment_target = '8.0'
203
- s.source_files = 'A/Classes/**/*'
204
- s.public_header_files = 'A/Classes/**/*.{h}'
205
- s.resource_bundles = {
206
- 'A' => ['A/Assets/*']
207
- }
208
- end
209
- ```
210
-
211
- 那么生成的 `A.binary.podspec.json` 如下:
212
-
213
- ```json
214
- {
215
- "name": "A",
216
- "version": "0.1.0",
217
- "summary": "business A short description of A.",
218
- "description": "TODO: Add long description of the pod here.",
219
- "homepage": "http://git.2dfire-inc.com/ios/A",
220
- "license": {
221
- "type": "MIT",
222
- "file": "LICENSE"
223
- },
224
- "authors": {
225
- "qingmu": "qingmu@2dfire.com"
226
- },
227
- "source": {
228
- "http": "http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/A/0.1.0.zip",
229
- "type": "zip"
230
- },
231
- "platforms": {
232
- "ios": "8.0"
233
- },
234
- "source_files": [
235
- "A.framework/Headers/*",
236
- "A.framework/Versions/A/Headers/*"
237
- ],
238
- "public_header_files": [
239
- "A.framework/Headers/*",
240
- "A.framework/Versions/A/Headers/*"
241
- ],
242
- "vendored_frameworks": "A.framework",
243
- "resources": [
244
- "A.framework/Resources/*.bundle",
245
- "A.framework/Versions/A/Resources/*.bundle"
246
- ]
247
- }
248
- ```
249
-
250
- 如果 A 拥有 subspec:
251
-
252
- ```ruby
253
- Pod::Spec.new do |s|
254
- s.name = 'A'
255
- s.version = '0.1.0'
256
- s.summary = 'business A short description of A.'
257
- s.description = <<-DESC
258
- TODO: Add long description of the pod here.
259
- DESC
260
- s.homepage = 'http://git.2dfire-inc.com/ios/A'
261
- s.license = { :type => 'MIT', :file => 'LICENSE' }
262
- s.author = { 'qingmu' => 'qingmu@2dfire.com' }
263
- s.source = { :git => 'http://git.2dfire-inc.com/qiandaojiang/A.git', :tag => s.version.to_s }
264
- s.ios.deployment_target = '8.0'
265
- s.source_files = 'A/Classes/**/*'
266
- s.public_header_files = 'A/Classes/**/*.{h}'
267
- s.resource_bundles = {
268
- 'A' => ['A/Assets/*']
269
- }
270
- s.subspec 'B' do |ss|
271
- ss.dependency 'YYModel'
272
- ss.source_files = 'A/Classes/**/*'
273
- end
274
- end
275
-
276
- ```
277
-
278
- 那么就需要开发者提供 `A.binary-template.podspec`(此模版中的写法假定组件的所有 subspec 都打进一个 `.framework` 里,如果 subpsec 都有属于自己的 `.framework` ,就可以采用其他写法。),**这里要注意源码版本 subspec 集合需要为二进制版本 subspec 集合的子集,否则会出现源码拉取失败或抛出 subspec 不存在错误的情况**:
279
-
280
- ```ruby
281
- Pod::Spec.new do |s|
282
- s.name = 'A'
283
- s.summary = 'business A short description of A.'
284
- s.description = <<-DESC
285
- TODO: Add long description of the pod here.
286
- DESC
287
- s.homepage = 'http://git.2dfire-inc.com/ios/A'
288
- s.license = { :type => 'MIT', :file => 'LICENSE' }
289
- s.author = { 'qingmu' => 'qingmu@2dfire.com' }
290
- s.ios.deployment_target = '8.0'
291
-
292
- s.subspec "Binary" do |ss|
293
- ss.vendored_frameworks = "#{s.name}.framework"
294
- ss.source_files = "#{s.name}.framework/Headers/*", "#{s.name}.framework/Versions/A/Headers/*"
295
- ss.public_header_files = "#{s.name}.framework/Headers/*", "#{s.name}.framework/Versions/A/Headers/*"
296
- # 结合实际打包后的资源产出文件类型编写
297
- ss.resources = "#{s.name}.framework/Resources/*.{bundle}", "#{s.name}.framework/Versions/A/Resources/*.{bundle}"
298
- ss.dependency 'YYModel'
299
- end
300
-
301
- s.subspec 'B' do |ss|
302
- ss.dependency "#{s.name}/Binary"
303
- end
304
- end
305
-
306
- ```
307
-
308
- 最终生成的二进制 podspec 如下:
309
-
310
- ```json
311
- {
312
- "name": "A",
313
- "summary": "business A short description of A.",
314
- "description": "TODO: Add long description of the pod here.",
315
- "homepage": "http://git.2dfire-inc.com/ios/A",
316
- "license": {
317
- "type": "MIT",
318
- "file": "LICENSE"
319
- },
320
- "authors": {
321
- "qingmu": "qingmu@2dfire.com"
322
- },
323
- "platforms": {
324
- "ios": "8.0"
325
- },
326
- "version": "0.1.0",
327
- "source": {
328
- "http": "http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/A/0.1.0.zip",
329
- "type": "zip"
330
- },
331
- "subspecs": [
332
- {
333
- "name": "Binary",
334
- "vendored_frameworks": "A.framework",
335
- "source_files": [
336
- "A.framework/Headers/*",
337
- "A.framework/Versions/A/Headers/*"
338
- ],
339
- "public_header_files": [
340
- "A.framework/Headers/*",
341
- "A.framework/Versions/A/Headers/*"
342
- ],
343
- "resources": [
344
- "A.framework/Resources/*.{bundle}",
345
- "A.framework/Versions/A/Resources/*.{bundle}"
346
- ],
347
- "dependencies": {
348
- "YYModel": [
349
-
350
- ]
351
- }
352
- },
353
- {
354
- "name": "B",
355
- "dependencies": {
356
- "A/Binary": [
357
-
358
- ]
359
- }
360
- }
361
- ]
362
- }
363
- ```
364
-
365
- #### pod bin spec lint
366
-
367
- ```shell
368
- ➜ ~ pod bin spec lint --help
369
- Usage:
370
-
371
- $ pod bin spec lint [NAME.podspec|DIRECTORY|http://PATH/NAME.podspec ...]
372
-
373
- spec lint 二进制组件 / 源码组件
374
-
375
- Options:
376
-
377
- --binary lint 组件的二进制版本
378
- --template-podspec=A.binary-template.podspec 生成拥有 subspec 的二进制 spec 需要的模版
379
- podspec, 插件会更改 version 和 source
380
- --reserve-created-spec 保留生成的二进制 spec 文件
381
- --code-dependencies 使用源码依赖进行 lint
382
- --loose-options 添加宽松的 options, 包括 --use-libraries
383
- (可能会造成 entry point (start)
384
- undefined)
385
- ...
386
- ```
387
-
388
- `pod bin spec lint` 默认使用二进制依赖进行 lint,在添加 `--binary` 会去 lint 当前组件的二进制 podspec(动态生成)。在添加 `--code-dependencies` 将会使用源码依赖进行 lint ,个人推荐使用二进制依赖 lint,可以极大地减少编译时间。
389
-
390
- #### pod bin repo push
391
-
392
- ```shell
393
-
394
- ➜ ~ pod bin repo push --help
395
- Usage:
396
-
397
- $ pod bin repo push [NAME.podspec]
398
-
399
- 发布二进制组件 / 源码组件
400
-
401
- Options:
402
-
403
- --binary 发布组件的二进制版本
404
- --template-podspec=A.binary-template.podspec 生成拥有 subspec 的二进制 spec 需要的模版
405
- podspec, 插件会更改 version 和 source
406
- --reserve-created-spec 保留生成的二进制 spec 文件
407
- --code-dependencies 使用源码依赖进行 lint
408
- --loose-options 添加宽松的 options, 包括
409
- --use-libraries (可能会造成 entry
410
- point (start) undefined)
411
- ...
412
- ```
413
-
414
- `pod bin repo push` 用来发布组件,其余特性和 `pod bin spec lint` 一致。
415
-
416
- ### Podfile DSL
417
-
418
- 首先,开发者需要在 Podfile 中需要使用 `plugin 'cocoapods-bin'` 语句引入插件 :
419
-
420
- ```ruby
421
- plugin 'cocoapods-bin'
422
- ```
423
-
424
- 顺带可以删除 Podfile 中的 source ,因为插件内部会自动帮你添加两个私有源。
425
-
426
- `cocoapods-bin `插件提供二进制相关的配置语句有 `use_binaries!`、`use_binaries_with_spec_selector!` 以及 `set_use_source_pods`,下面会分别介绍。
427
-
428
- #### use_binaries!
429
-
430
- 全部组件使用二进制版本。
431
-
432
- 支持传入布尔值控制是否使用二进制版本,比如 DEBUG 包使用二进制版本,正式包使用源码版本,Podfile 关联语句可以这样写:
433
-
434
- ```ruby
435
- use_binaries! (ENV['DEBUG'].nil? || ENV['DEBUG'] == 'true')
436
- ```
437
-
438
- 当组件没有二进制版本时,插件会强制工程依赖该组件的源码版本。开发者可以通过执行 `pod install--verbose` option ,在分析依赖步骤查看哪些组件没有二进制版本:
439
-
440
- ```shell
441
- ...
442
- Resolving dependencies of `Podfile`
443
- 【AMapFrameworks | 0.0.4】组件无对应二进制版本 , 将采用源码依赖.
444
- 【ActivityForRestApp | 0.2.1】组件无对应二进制版本 , 将采用源码依赖.
445
- 【AssemblyComponent | 0.5.9】组件无对应二进制版本 , 将采用源码依赖.
446
- 【Bugly | 2.4.6】组件无对应二进制版本 , 将采用源码依赖.
447
- 【Celebi | 0.6.4】组件无对应二进制版本 , 将采用源码依赖.
448
- 【CocoaAsyncSocket/RunLoop | 7.4.3】组件无对应二进制版本 , 将采用源码依赖.
449
- 【CocoaLumberjack | 3.4.1】组件无对应二进制版本 , 将采用源码依赖.
450
- 【CocoaLumberjack/Default | 3.4.1】组件无对应二进制版本 , 将采用源码依赖.
451
- 【CocoaLumberjack/Extensions | 3.4.1】组件无对应二进制版本 , 将采用源码依赖.
452
- 【CodePush | 0.3.1】组件无对应二进制版本 , 将采用源码依赖.
453
- 【CodePush/Core | 0.3.1】组件无对应二进制版本 , 将采用源码依赖.
454
- 【CodePush/SSZipArchive | 0.3.1】组件无对应二进制版本 , 将采用源码依赖.
455
- 【ESExchangeSkin | 0.3.2】组件无对应二进制版本 , 将采用源码依赖.
456
- ...
457
- ```
458
-
459
- 也可以通过 Podfile.lock 中的 `SPEC REPOS` 字段,查看哪些组件采用了源码版本,哪些采用了二进制版本:
460
-
461
- ```yaml
462
- ...
463
- SPEC REPOS:
464
- "git@git.xxxxxx.net:ios/cocoapods-spec-binary.git":
465
- - AFNetworking
466
- - Aspects
467
- - CocoaSecurity
468
- - DACircularProgress
469
- ...
470
- "git@git.xxxxxx.net:ios/cocoapods-spec.git":
471
- - ActivityForRestApp
472
- - AMapFrameworks
473
- - AssemblyComponent
474
- ...
475
- ...
476
- ```
477
-
478
-
479
- #### set_use_source_pods
480
-
481
- 设置使用源码版本的组件。
482
-
483
- 实际开发中,可能需要查看 YYModel 组件的源码,这时候可以这么设置:
484
-
485
- ```ruby
486
- set_use_source_pods ['YYModel']
487
- ```
488
-
489
- 如果 CocoaPods 版本为 1.5.3 ,终端会输出以下内容,表示 YYModel 的参照源从二进制私有源切换到了源码私有源:
490
-
491
- ```shell
492
- Analyzing dependencies
493
- Fetching podspec for `A` from `../`
494
- Downloading dependencies
495
- Using A (0.1.0)
496
- Installing YYModel 1.0.4.2 (source changed to `git@git.xxxxxx.net:ios/cocoapods-spec.git` from `git@git.xxxxxx.net:ios/cocoapods-spec-binary.git`)
497
- Generating Pods project
498
- Integrating client project
499
- Sending stats
500
- Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.
501
- ```
502
-
503
- #### use_binaries_with_spec_selector!
504
-
505
- 过滤出需要使用二进制版本组件。
506
-
507
- 假如开发者只需要 `YYModel` 的二进制版本,那么他可以在 Podfile 中添加以下代码:
508
-
509
- ```ruby
510
- use_binaries_with_spec_selector! do |spec|
511
- spec.name == 'YYModel'
512
- end
513
- ```
514
-
515
- **需要注意的是,如果组件有 subspec ,使用组件名作为判断条件应如下**:
516
-
517
- ```ruby
518
- use_binaries_with_spec_selector! do |spec|
519
- spec.name.start_with? == '组件名'
520
- end
521
- ```
522
-
523
- 如果像上个代码块一样,**直接对比组件名,则插件会忽略此组件的所有 subspec,导致资源拉取错误**,这种场景下,最好通过 `set_use_source_pods` 语句配置依赖。
524
-
525
- 一个实际应用是,三方组件采用二进制版本,团队编写的组件依旧采用源码版本。如果三方组件都在 `cocoapods-repo` 组下,就可以使用以下代码过滤出三方组件:
526
-
527
- ```ruby
528
- use_binaries_with_spec_selector! do |spec|
529
- git = spec.source && spec.source['git']
530
- git && git.include?('cocoapods-repo')
531
- end
532
- ```
533
-
534
- #### 其他设置
535
-
536
- 插件默认开启多线程下载组件资源,如果要禁用这个功能,Podfile 添加以下代码即可:
537
-
538
- ```ruby
539
- install! 'cocoapods', { install_with_multi_threads: false }
540
- ```
541
1