cocoapods-imy-bin 0.2.3 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 90a2186037a4453cf504673b70e3c314854c1b76
4
- data.tar.gz: ea47e0cb5a52db8a8d179225a73d42ec9d24e0ac
2
+ SHA256:
3
+ metadata.gz: a03eee369ef1acbf03c386b400c2f55dcfb02cabd60a02f21ac5ba8392489a9e
4
+ data.tar.gz: f42893c6d370ed5bbe06b438ae52295ddf3a1dc7d4370246e0e11c3e78e3254a
5
5
  SHA512:
6
- metadata.gz: 007fb6fc0ca55422f2e1bff92a16a998410e78825e7c1c2d590dfbb384ed889538086fd8947f5dd5f424bb454c0262adf17b854f5bdd3fe20dcdddd244541c2b
7
- data.tar.gz: 10e970ad5b2712a3b720054f444e78050babed63f52fe3ec8581e2fd71cf118c59af926568fc1fc3c15686de255a003106f244a386e87004084269c8e506376b
6
+ metadata.gz: 665d22d827cef79270ad243b26515338fea285a80ddb3cb462ca88aae5e12ef734ef0cfce7c69301b4843bd3a85eba7c065b1616bc03a326c7c91ac13fbf12b5
7
+ data.tar.gz: 32c4315f9884e64a7f8afb3283eae3d042aa5844354a098002d659b12aa3c07226a1a03064c850d0cfe4994400a5d0183733a85ce3b184dc640d17b1f50530c8
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
 
@@ -29,6 +29,7 @@ module Pod
29
29
  ['--sources', '私有源地址,多个用分号区分'],
30
30
  ['--framework-output', '输出framework文件'],
31
31
  ['--no-zip', '不压缩静态库 为 zip'],
32
+ ['--configuration', 'Build the specified configuration (e.g. Debug). Defaults to Release'],
32
33
  ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
33
34
  ].concat(Pod::Command::Gen.options).concat(super).uniq
34
35
  end
@@ -51,6 +52,8 @@ module Pod
51
52
  @sources = argv.option('sources') || []
52
53
  @platform = Platform.new(:ios)
53
54
 
55
+ @config = argv.option('configuration', 'Release')
56
+
54
57
  @framework_path
55
58
  super
56
59
 
@@ -81,7 +84,8 @@ module Pod
81
84
  @framework_output,
82
85
  @zip,
83
86
  @spec,
84
- CBin::Config::Builder.instance.white_pod_list.include?(@spec.name))
87
+ CBin::Config::Builder.instance.white_pod_list.include?(@spec.name),
88
+ @config)
85
89
  builder.build
86
90
  builder.clean_workspace if @clean && !@all_make
87
91
  end
@@ -119,9 +123,12 @@ module Pod
119
123
  @platform,
120
124
  @framework_output,
121
125
  @zip,
122
- @spec)
126
+ @spec,
127
+ false ,
128
+ @config)
123
129
  builder.build
124
- rescue
130
+ rescue Object => exception
131
+ UI.puts exception
125
132
  fail_build_specs << spec
126
133
  end
127
134
  end
@@ -148,6 +155,7 @@ module Pod
148
155
  "--sources=#{sources_option(@code_dependencies, @sources)}",
149
156
  "--gen-directory=#{CBin::Config::Builder.instance.gen_dir}",
150
157
  '--clean',
158
+ '--use-podfile',
151
159
  *@additional_args
152
160
  ]
153
161
 
@@ -19,6 +19,7 @@ module Pod
19
19
  ['--framework-output', '输出framework文件'],
20
20
  ['--no-zip', '不压缩静态 framework 为 zip'],
21
21
  ['--all-make', '对该组件的依赖库,全部制作为二进制组件'],
22
+ ['--configuration', 'Build the specified configuration (e.g. Release ). Defaults to Debug'],
22
23
  ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
23
24
  ]
24
25
  end
@@ -38,6 +39,9 @@ module Pod
38
39
  @zip = argv.flag?('zip', true)
39
40
  @all_make = argv.flag?('all-make', false )
40
41
  @verbose = argv.flag?('verbose',true)
42
+
43
+ @config = argv.option('configuration', 'Debug')
44
+
41
45
  super
42
46
  end
43
47
 
@@ -113,7 +117,7 @@ module Pod
113
117
  if @env
114
118
  argvs += ["--env=#{@env}"]
115
119
  end
116
-
120
+ argvs += ["--configuration=#{@config}"]
117
121
 
118
122
  archive = Pod::Command::Bin::Archive.new(CLAide::ARGV.new(argvs))
119
123
  archive.validate!
@@ -83,11 +83,6 @@ module Pod
83
83
  FileUtils.rm_rf(target_path)
84
84
 
85
85
  find_dependency = find_dependency(name)
86
- # 意义不大,需要可以使用--source参数 对 github-ios 仓库对做特殊处理
87
- # if find_dependency && find_dependency.external_source[:podspec].include?(http_gitlib_GitHub_iOS_path)
88
- # github_ios = find_dependency.external_source[:podspec]
89
- # find_dependency.external_source[:podspec] = github_ios.gsub(http_gitlib_GitHub_iOS_path,http_gitlib_iOS_path)
90
- # end
91
86
 
92
87
  spec = fetch_external_source(find_dependency, @config.podfile,@config.lockfile, @config.sandbox,true )
93
88
 
@@ -106,7 +101,6 @@ module Pod
106
101
  break
107
102
  end
108
103
  end
109
-
110
104
  find_dependency
111
105
  end
112
106
 
@@ -150,6 +144,7 @@ module Pod
150
144
  FileUtils.rm_rf(File.join(dir,basename))
151
145
  `ln -s #{target_path} #{dir}/#{basename}`
152
146
  end
147
+
153
148
  check(lib_file,dir,basename)
154
149
  end
155
150
 
@@ -73,6 +73,18 @@ module Pod
73
73
 
74
74
  podfile.instance_eval do
75
75
  begin
76
+
77
+ # podfile HASH_KEYS才有plugins字段,否则会被限制
78
+ if local_podfile.plugins.any?
79
+ hash_plugins = podfile.plugins || {}
80
+ hash_plugins = hash_plugins.merge(local_podfile.plugins)
81
+ set_hash_value(%w[plugins].first, hash_plugins)
82
+
83
+ # 加入源码白名单,避免本地库被二进制了
84
+ podfile.set_use_source_pods(local_podfile.use_source_pods) if local_podfile.use_source_pods
85
+ podfile.use_binaries!(local_podfile.use_binaries?)
86
+ end
87
+
76
88
  # 在target把local-target中到dependencies值删除了,再设置
77
89
  # 把本地和原始到dependencies 合并,设置dependencies
78
90
  local_podfile&.target_definition_list&.each do |local_target|
@@ -120,18 +132,6 @@ module Pod
120
132
  end
121
133
  end
122
134
 
123
- # podfile HASH_KEYS才有plugins字段,否则会被限制
124
- if local_podfile.plugins.any?
125
- hash_plugins = podfile.plugins || {}
126
- hash_plugins = hash_plugins.merge(local_podfile.plugins)
127
- set_hash_value(%w[plugins].first, hash_plugins)
128
-
129
- # 加入源码白名单,避免本地库被二进制了
130
- podfile.set_use_source_pods(local_podfile.use_source_pods) if local_podfile.use_source_pods
131
- podfile.use_binaries!(local_podfile.use_binaries?)
132
- end
133
-
134
-
135
135
  end
136
136
 
137
137
  if local_pre_install_callback
@@ -1,6 +1,6 @@
1
1
 
2
2
  module CBin
3
- VERSION = '0.2.3'
3
+ VERSION = '0.2.9'
4
4
  end
5
5
 
6
6
  module Pod
@@ -51,7 +51,7 @@ module CBin
51
51
  source_dir = Dir.pwd
52
52
  file_accessor = Sandbox::FileAccessor.new(Pathname.new('.').expand_path, @spec.consumer(@platform))
53
53
  Dir.chdir(workspace_directory) do
54
- builder = CBin::Framework::Builder.new(@spec, file_accessor, @platform, source_dir,@isRootSpec)
54
+ builder = CBin::Framework::Builder.new(@spec, file_accessor, @platform, source_dir, @isRootSpec, @build_model )
55
55
  @@build_defines = builder.build if @isRootSpec
56
56
  begin
57
57
  @framework_path = builder.lipo_build(@@build_defines) unless @skip_archive
@@ -10,7 +10,7 @@ module CBin
10
10
  class Builder
11
11
  include Pod
12
12
  #Debug下还待完成
13
- def initialize(spec, file_accessor, platform, source_dir, isRootSpec = true, build_model="Release")
13
+ def initialize(spec, file_accessor, platform, source_dir, isRootSpec = true, build_model="Debug")
14
14
  @spec = spec
15
15
  @source_dir = source_dir
16
16
  @file_accessor = file_accessor
@@ -38,7 +38,7 @@ module CBin
38
38
  end
39
39
 
40
40
  def lipo_build(defines)
41
- UI.section("Building static framework #{@spec}") do
41
+ UI.section("Building static Library #{@spec}") do
42
42
  # defines = compile
43
43
 
44
44
  # build_sim_libraries(defines)
@@ -68,19 +68,147 @@ module CBin
68
68
  `cp -fa #{@platform}/#{framework_name} #{target_dir}`
69
69
  end
70
70
 
71
+ #模拟器,目前只支持 debug x86-64
71
72
  def build_sim_libraries(defines)
72
73
  UI.message 'Building simulator libraries'
73
74
 
74
- if is_debug_model
75
- # archs = %w[i386 x86_64]
76
- archs = %w[x86_64]
75
+ # archs = %w[i386 x86_64]
76
+ archs = ios_architectures_sim
77
+ archs.map do |arch|
78
+ xcodebuild(defines, "-sdk iphonesimulator ARCHS=\'#{arch}\' ", "build-#{arch}",@build_model)
79
+ end
80
+
81
+ end
82
+
83
+
84
+ def static_libs_in_sandbox(build_dir = 'build')
85
+ file = Dir.glob("#{build_dir}/lib#{target_name}.a")
86
+ unless file
87
+ UI.warn "file no find = #{build_dir}/lib#{target_name}.a"
88
+ end
89
+ file
90
+ end
91
+
92
+ def build_static_library_for_ios(output)
93
+ UI.message "Building ios libraries with archs #{ios_architectures}"
94
+ static_libs = static_libs_in_sandbox('build') + static_libs_in_sandbox('build-simulator') + @vendored_libraries
95
+ # if is_debug_model
96
+ ios_architectures.map do |arch|
97
+ static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
98
+ end
99
+ ios_architectures_sim do |arch|
100
+ static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
101
+ end
102
+ # end
103
+
104
+ build_path = Pathname("build")
105
+ build_path.mkpath unless build_path.exist?
106
+
107
+ # if is_debug_model
108
+ libs = (ios_architectures + ios_architectures_sim) .map do |arch|
109
+ library = "build-#{arch}/lib#{@spec.name}.a"
110
+ library
111
+ end
112
+ # else
113
+ # libs = ios_architectures.map do |arch|
114
+ # library = "build/package-#{@spec.name}-#{arch}.a"
115
+ # # libtool -arch_only arm64 -static -o build/package-armv64.a build/libIMYFoundation.a build-simulator/libIMYFoundation.a
116
+ # # 从liBFoundation.a 文件中,提取出 arm64 架构的文件,命名为build/package-armv64.a
117
+ # UI.message "libtool -arch_only #{arch} -static -o #{library} #{static_libs.join(' ')}"
118
+ # `libtool -arch_only #{arch} -static -o #{library} #{static_libs.join(' ')}`
119
+ # library
120
+ # end
121
+ # end
122
+
123
+ UI.message "lipo -create -output #{output} #{libs.join(' ')}"
124
+ `lipo -create -output #{output} #{libs.join(' ')}`
125
+ end
126
+
127
+ def ios_build_options
128
+ "ARCHS=\'#{ios_architectures.join(' ')}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'"
129
+ end
130
+
131
+ def ios_architectures
132
+ # >armv7
133
+ # iPhone4
134
+ # iPhone4S
135
+ # >armv7s 去掉
136
+ # iPhone5
137
+ # iPhone5C
138
+ # >arm64
139
+ # iPhone5S(以上)
140
+ # >i386
141
+ # iphone5,iphone5s以下的模拟器
142
+ # >x86_64
143
+ # iphone6以上的模拟器
144
+ archs = %w[arm64 armv7]
145
+ # archs = %w[x86_64 arm64 armv7s i386]
146
+ # @vendored_libraries.each do |library|
147
+ # archs = `lipo -info #{library}`.split & archs
148
+ # end
149
+ archs
150
+ end
151
+
152
+ def ios_architectures_sim
153
+
154
+ archs = %w[x86_64]
155
+ # TODO 处理是否需要 i386
156
+ archs
157
+ end
158
+
159
+ def compile
160
+ defines = "GCC_PREPROCESSOR_DEFINITIONS='$(inherited)'"
161
+ defines += ' '
162
+ defines += @spec.consumer(@platform).compiler_flags.join(' ')
163
+
164
+ options = ios_build_options
165
+ # if is_debug_model
166
+ archs = ios_architectures
167
+ # archs = %w[arm64 armv7 armv7s]
77
168
  archs.map do |arch|
78
- xcodebuild(defines, "-sdk iphonesimulator ARCHS=\'#{arch}\' ", "build-#{arch}","Debug")
169
+ xcodebuild(defines, "ARCHS=\'#{arch}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'","build-#{arch}",@build_model)
79
170
  end
171
+ # else
172
+ # xcodebuild(defines,options)
173
+ # end
174
+
175
+ defines
176
+ end
177
+
178
+ def is_debug_model
179
+ @build_model == "Debug"
180
+ end
181
+
182
+ def target_name
183
+ #区分多平台,如配置了多平台,会带上平台的名字
184
+ # 如libwebp-iOS
185
+ # if @spec.available_platforms.count > 1
186
+ # "#{@spec.name}-#{Platform.string_name(@spec.consumer(@platform).platform_name)}"
187
+ # else
188
+ @spec.name
189
+ # end
190
+ end
191
+
192
+ def xcodebuild(defines = '', args = '', build_dir = 'build', build_model = 'Debug')
193
+
194
+ unless File.exist?("Pods.xcodeproj") #cocoapods-generate v2.0.0
195
+ command = "xcodebuild #{defines} #{args} CONFIGURATION_BUILD_DIR=#{File.join(File.expand_path("..", build_dir), File.basename(build_dir))} clean build -configuration #{build_model} -target #{target_name} -project ./Pods/Pods.xcodeproj 2>&1"
80
196
  else
81
- xcodebuild(defines, "-sdk iphonesimulator ", 'build-simulator')
197
+ command = "xcodebuild #{defines} #{args} CONFIGURATION_BUILD_DIR=#{build_dir} clean build -configuration #{build_model} -target #{target_name} -project ./Pods.xcodeproj 2>&1"
82
198
  end
83
199
 
200
+ UI.message "command = #{command}"
201
+ output = `#{command}`.lines.to_a
202
+
203
+ if $CHILD_STATUS.exitstatus != 0
204
+ raise <<~EOF
205
+ Build command failed: #{command}
206
+ Output:
207
+ #{output.map { |line| " #{line}" }.join}
208
+ EOF
209
+
210
+ Process.exit
211
+ end
84
212
  end
85
213
 
86
214
  def copy_headers
@@ -89,12 +217,17 @@ module CBin
89
217
 
90
218
  #by slj 如果没有头文件,去 "Headers/Public"拿
91
219
  # if public_headers.empty?
92
- Dir.chdir("./Headers/Public/#{@spec.name}") do
93
- headers = Dir.glob('*.h')
94
- headers.each do |h|
95
- public_headers << Pathname.new(File.join(Dir.pwd,h))
96
- end
220
+ spec_header_dir = "./Headers/Public/#{@spec.name}"
221
+ unless File.exist?(spec_header_dir)
222
+ spec_header_dir = "./Pods/Headers/Public/#{@spec.name}"
223
+ end
224
+ raise "copy_headers #{spec_header_dir} no exist " unless File.exist?(spec_header_dir)
225
+ Dir.chdir(spec_header_dir) do
226
+ headers = Dir.glob('*.h')
227
+ headers.each do |h|
228
+ public_headers << Pathname.new(File.join(Dir.pwd,h))
97
229
  end
230
+ end
98
231
  # end
99
232
 
100
233
  # UI.message "Copying public headers #{public_headers.map(&:basename).map(&:to_s)}"
@@ -110,7 +243,7 @@ module CBin
110
243
  module_map_file = @file_accessor.module_map
111
244
  if Pathname(module_map_file).exist?
112
245
  module_map = File.read(module_map_file)
113
- end
246
+ end
114
247
  elsif public_headers.map(&:basename).map(&:to_s).include?("#{@spec.name}.h")
115
248
  module_map = <<-MAP
116
249
  framework module #{@spec.name} {
@@ -126,7 +259,7 @@ module CBin
126
259
  UI.message "Writing module map #{module_map}"
127
260
  unless framework.module_map_path.exist?
128
261
  framework.module_map_path.mkpath
129
- end
262
+ end
130
263
  File.write("#{framework.module_map_path}/module.modulemap", module_map)
131
264
  end
132
265
  end
@@ -138,8 +271,11 @@ module CBin
138
271
  end
139
272
 
140
273
  def copy_resources
274
+ resource_dir = './build/*.bundle'
275
+ resource_dir = './build-armv7/*.bundle' if File.exist?('./build-armv7')
276
+ resource_dir = './build-arm64/*.bundle' if File.exist?('./build-arm64')
141
277
 
142
- bundles = Dir.glob('./build/*.bundle')
278
+ bundles = Dir.glob(resource_dir)
143
279
 
144
280
  bundle_names = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
145
281
  consumer = spec.consumer(@platform)
@@ -160,7 +296,13 @@ module CBin
160
296
  `cp -rp #{bundle_files} #{framework.resources_path} 2>&1`
161
297
  end
162
298
 
163
- real_source_dir = @isRootSpec ? @source_dir : Pathname.new(File.join(Dir.pwd,"#{@spec.name}"))
299
+ spec_source_dir = File.join(Dir.pwd,"#{@spec.name}")
300
+ unless File.exist?(spec_source_dir)
301
+ spec_source_dir = File.join(Dir.pwd,"Pods/#{@spec.name}")
302
+ end
303
+ raise "copy_resources #{spec_source_dir} no exist " unless File.exist?(spec_source_dir)
304
+
305
+ real_source_dir = @isRootSpec ? @source_dir : spec_source_dir
164
306
  resources = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
165
307
  expand_paths(real_source_dir, spec.consumer(@platform).resources)
166
308
  end.compact.uniq
@@ -173,122 +315,14 @@ module CBin
173
315
  if resources.count > 0
174
316
  #把 路径转义。 避免空格情况下拷贝失败
175
317
  escape_resource = []
176
- resources.each do |source|
177
- escape_resource << Shellwords.join(source)
318
+ resources.each do |source|
319
+ escape_resource << Shellwords.join(source)
178
320
  end
179
321
  UI.message "Copying resources #{escape_resource}"
180
322
  `cp -rp #{escape_resource.join(' ')} #{framework.resources_path}`
181
323
  end
182
324
  end
183
325
 
184
- def static_libs_in_sandbox(build_dir = 'build')
185
- file = Dir.glob("#{build_dir}/lib#{target_name}.a")
186
- unless file
187
- UI.warn "file no find = #{build_dir}/lib#{target_name}.a"
188
- end
189
- file
190
- end
191
-
192
- def build_static_library_for_ios(output)
193
- UI.message "Building ios libraries with archs #{ios_architectures}"
194
- static_libs = static_libs_in_sandbox('build') + static_libs_in_sandbox('build-simulator') + @vendored_libraries
195
- if is_debug_model
196
- ios_architectures.map do |arch|
197
- static_libs += static_libs_in_sandbox("build-#{arch}") + static_libs_in_sandbox('build-simulator') + @vendored_libraries
198
- end
199
- end
200
-
201
- build_path = Pathname("build")
202
- build_path.mkpath unless build_path.exist?
203
-
204
- libs = ios_architectures.map do |arch|
205
- library = "build/package-#{@spec.name}-#{arch}.a"
206
- # libtool -arch_only arm64 -static -o build/package-armv64.a build/libIMYFoundation.a build-simulator/libIMYFoundation.a
207
- # 从liBFoundation.a 文件中,提取出 arm64 架构的文件,命名为build/package-armv64.a
208
- UI.message "libtool -arch_only #{arch} -static -o #{library} #{static_libs.join(' ')}"
209
- `libtool -arch_only #{arch} -static -o #{library} #{static_libs.join(' ')}`
210
- library
211
- end
212
- UI.message "lipo -create -output #{output} #{libs.join(' ')}"
213
- `lipo -create -output #{output} #{libs.join(' ')}`
214
- end
215
-
216
- def ios_build_options
217
- "ARCHS=\'#{ios_architectures.join(' ')}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'"
218
- end
219
-
220
- def ios_architectures
221
- # >armv7
222
- # iPhone4
223
- # iPhone4S
224
- # >armv7s 去掉
225
- # iPhone5
226
- # iPhone5C
227
- # >arm64
228
- # iPhone5S(以上)
229
- # >i386
230
- # iphone5,iphone5s以下的模拟器
231
- # >x86_64
232
- # iphone6以上的模拟器
233
- archs = %w[x86_64 arm64 armv7]
234
- # archs = %w[x86_64 arm64 armv7s i386]
235
- @vendored_libraries.each do |library|
236
- archs = `lipo -info #{library}`.split & archs
237
- end
238
- archs
239
- end
240
-
241
- def compile
242
- defines = "GCC_PREPROCESSOR_DEFINITIONS='$(inherited)'"
243
- defines += ' '
244
- defines += @spec.consumer(@platform).compiler_flags.join(' ')
245
-
246
- options = ios_build_options
247
- if is_debug_model
248
- archs = %w[arm64 armv7]
249
- # archs = %w[arm64 armv7 armv7s]
250
- archs.map do |arch|
251
- xcodebuild(defines, "ARCHS=\'#{arch}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'","build-#{arch}",@build_model)
252
- end
253
- else
254
- xcodebuild(defines,options)
255
- end
256
-
257
- defines
258
- end
259
-
260
- def is_debug_model
261
- @build_model == "Debug"
262
- end
263
-
264
- def target_name
265
- #区分多平台,如配置了多平台,会带上平台的名字
266
- # 如libwebp-iOS
267
- # if @spec.available_platforms.count > 1
268
- # "#{@spec.name}-#{Platform.string_name(@spec.consumer(@platform).platform_name)}"
269
- # else
270
- @spec.name
271
- # end
272
- end
273
-
274
- def xcodebuild(defines = '', args = '', build_dir = 'build',build_model = 'Release')
275
- #xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$(inherited)' ARCHS='x86_64 arm64 armv7 armv7s i386' OTHER_CFLAGS='-fembed-bitcode -Qunused-arguments' CONFIGURATION_BUILD_DIR=build clean build -configuration Debug -target IMYTCP -project ./Pods.xcodeproj 2>&1
276
- # xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$(inherited)' -sdk iphoneos CONFIGURATION_BUILD_DIR=build-simulator clean build -configuration Release -target IMYFoundation -project ./Pods/Pods.xcodeproj 2>&1
277
- command = "xcodebuild #{defines} #{args} CONFIGURATION_BUILD_DIR=#{build_dir} clean build -configuration #{build_model} -target #{target_name} -project ./Pods.xcodeproj 2>&1"
278
- UI.message "command = #{command}"
279
- output = `#{command}`.lines.to_a
280
-
281
- if $CHILD_STATUS.exitstatus != 0
282
- raise <<~EOF
283
- Build command failed: #{command}
284
- Output:
285
- #{output.map { |line| " #{line}" }.join}
286
- EOF
287
-
288
- Process.exit
289
- end
290
- end
291
-
292
326
  def expand_paths(source_dir, path_specs)
293
327
  path_specs.map do |path_spec|
294
328
  Dir.glob(File.join(source_dir, path_spec))
@@ -302,6 +336,8 @@ module CBin
302
336
  framework
303
337
  end
304
338
  end
339
+
340
+
305
341
  end
306
342
  end
307
343
  end
@@ -38,12 +38,12 @@ module CBin
38
38
 
39
39
  def make_headers
40
40
  @headers_path = @versions_path + Pathname.new('Headers')
41
- # @headers_path.mkpath unless @headers_path.exist?
41
+ @headers_path.mkpath unless @headers_path.exist?
42
42
  end
43
43
 
44
44
  def make_resources
45
45
  @resources_path = @versions_path + Pathname.new('Resources')
46
- # @resources_path.mkpath unless @resources_path.exist?
46
+ @resources_path.mkpath unless @resources_path.exist?
47
47
  end
48
48
 
49
49
  def make_root
@@ -21,8 +21,11 @@ module CBin
21
21
  # 只允许二进制的 specification subspec 比源码的 specification subspec 多
22
22
  #
23
23
  def valid_sources(code_dependencies = false)
24
- sources = [binary_source, code_source]
25
- sources.reverse! if code_dependencies
24
+ sources = [code_source]
25
+ unless code_dependencies
26
+ sources << binary_source
27
+ sources.reverse!
28
+ end
26
29
  sources
27
30
  end
28
31
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-imy-bin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - 苏良锦
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-15 00:00:00.000000000 Z
11
+ date: 2020-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel
@@ -169,8 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  - !ruby/object:Gem::Version
170
170
  version: '0'
171
171
  requirements: []
172
- rubyforge_project:
173
- rubygems_version: 2.5.2.3
172
+ rubygems_version: 3.0.1
174
173
  signing_key:
175
174
  specification_version: 4
176
175
  summary: cocoapods-imy-bin is a plugin which helps develpers switching pods between