cocoapods-imy-bin 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9571b93573cfc8a24a73661aa4d8d0e27a13fdc797fef8d63cc5b5f1641f4031
|
4
|
+
data.tar.gz: 428ca79deaa2875849911dd1f52ffdb32906eabcc8445d9a5cafc75f8326031f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a18e4e0f9693c4718fc07910e23b24e51723f77f73ac1afe282a2ee433fade499f4b744ebd9cbd75067fea4da470d91da5c5b44044d66cda282c68a0903597bb
|
7
|
+
data.tar.gz: 78b83b8d6ba156fde03afdd718a0c838deb4716d3e5474f88eba38ea351298d41d436b46e7b40e919cf2aa53298970482be2d7153f17fca8a305e262945ab4aa
|
data/README.md
CHANGED
@@ -1,431 +1,351 @@
|
|
1
|
-
#
|
1
|
+
# Cocoapods-imy-bin
|
2
2
|
|
3
|
-
|
3
|
+
## 一、概要
|
4
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
5
|
|
7
|
-
|
6
|
+
cocoapods-imy-bin功能点:
|
8
7
|
|
9
|
-
|
8
|
+
1. 组件二进制化,`无入侵式`支持组件二进制化,完全自动化,无需手动操作。致力于解决Ci打包速度慢、研发编译慢等编译问题。
|
9
|
+
2. 本地配置文件 - `Podfile_local`
|
10
|
+
3. 二进制源码调试`pod bin code`,类似[美团 iOS 工程 zsource 命令背后的那些事儿](https://links.jianshu.com/go?to=https%3A%2F%2Ftech.meituan.com%2F2019%2F08%2F08%2Fthe-things-behind-the-ios-project-zsource-command.html)的效果。
|
11
|
+
4. 命令快捷键`pod bin imy`,如游戏快捷键,根据配置会在特定目录执行特定命令(如任意终端目录下,执行某个特定目录的pod update --no-repo-update命令),减少其他繁琐操作。支持任意个快捷键。
|
10
12
|
|
11
|
-
|
13
|
+
cocoapods-imy-bin插件所关联的组件二进制化策略:
|
12
14
|
|
13
|
-
|
15
|
+
预先将打包成 `.a` 的组件保存到静态服务器上,并在 `install` 时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件发布等操作的目的。
|
14
16
|
|
15
|
-
|
17
|
+
关于 插件具体的架构部署实践和更详细的资源,可以参考
|
16
18
|
|
17
|
-
|
19
|
+
> [iOS编译速度如何稳定提高10倍以上](https://www.jianshu.com/p/08cffdfa2885)
|
20
|
+
>
|
21
|
+
> [Demo](https://github.com/su350380433/cocoapods-imy-bin-demo)
|
22
|
+
>
|
18
23
|
|
19
|
-
```ruby
|
20
|
-
# BinPodfile
|
21
24
|
|
22
|
-
|
23
|
-
|
25
|
+
## 二、准备工作
|
26
|
+
|
24
27
|
|
28
|
+
|
29
|
+
### 1、安装插件
|
30
|
+
|
31
|
+
```shell
|
32
|
+
sudo gem install cocoapods-imy-bin
|
25
33
|
```
|
26
34
|
|
27
35
|
|
28
|
-
## 概要
|
29
36
|
|
30
|
-
|
37
|
+
## 三、使用二进制组件
|
31
38
|
|
32
|
-
预先将打包成 `.a` 或者 `.framework` 的组件(目前接入此插件必须使用 `.framework`,最好是静态 framework)保存到静态服务器上,并在 `install` 时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件 lint、组件发布等操作的目的。
|
33
39
|
|
34
|
-
|
40
|
+
### 1、环境搭建
|
35
41
|
|
36
|
-
|
37
|
-
- 源码私有源(保存组件源码版本 podspec)
|
38
|
-
- 二进制私有源(保存组件二进制版本 podspec)
|
42
|
+
<br/>
|
39
43
|
|
40
|
-
|
44
|
+
[环境搭建详细教程](https://github.com/su350380433/cocoapods-imy-bin-demo)
|
41
45
|
|
42
|
-
|
46
|
+
使用二进制时,本插件需要提供以下资源:
|
43
47
|
|
44
|
-
|
48
|
+
- 静态资源服务器( [binary-server](https://github.com/su350380433/binary-server),附详细使用教程)
|
49
|
+
- 二进制私有源仓库(保存组件二进制版本 podspec)
|
45
50
|
|
46
|
-
安装 `cocoapods-bin`:
|
47
51
|
|
48
|
-
$ gem install cocoapods-bin
|
49
52
|
|
50
|
-
|
53
|
+
### 2、初始化插件
|
51
54
|
|
52
|
-
```shell
|
53
|
-
|
55
|
+
``` shell
|
56
|
+
xx:Demo slj$ pod bin init
|
57
|
+
|
58
|
+
====== dev 环境 ========
|
54
59
|
|
55
60
|
开始设置二进制化初始信息.
|
56
|
-
所有的信息都会保存在 /Users/
|
61
|
+
所有的信息都会保存在 /Users/slj/.cocoapods/bin_dev.yml 文件中.
|
62
|
+
%w[bin_dev.yml bin_debug_iphoneos.yml bin_release_iphoneos.yml]
|
57
63
|
你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
|
58
64
|
|
59
65
|
---
|
60
|
-
|
61
|
-
|
62
|
-
|
66
|
+
configuration_env: dev
|
67
|
+
code_repo_url: git@github.com:su350380433/example_spec_source.git
|
68
|
+
binary_repo_url: git@github.com:su350380433/example_spec_bin_dev.git
|
69
|
+
binary_download_url: http://localhost:8080/frameworks/%s/%s/zip
|
63
70
|
download_file_type: zip
|
64
71
|
|
65
72
|
|
66
|
-
|
67
|
-
|
68
|
-
|
73
|
+
编译环境
|
74
|
+
可选值:[ dev / debug_iphoneos / release_iphoneos ]
|
75
|
+
旧值:dev
|
69
76
|
```
|
70
77
|
|
71
|
-
|
78
|
+
按提示输入`所属环境`、源码私有源、二进制私有源、二进制下载地址、下载文件类型后,插件就配置完成了。其中 `binary_download_url` 需要预留组件名称与组件版本占位符,插件内部会依次替换 `%s` 为相应组件的值。
|
72
79
|
|
73
80
|
`cococapod-bin` 也支持从 url 下载配置文件,方便对多台机器进行配置:
|
74
81
|
|
75
82
|
```shell
|
76
|
-
➜ ~ pod bin init --bin-url=
|
83
|
+
➜ ~ pod bin init --bin-url=https://github.com/su350380433/cocoapods-imy-bin-configs/raw/master/bin_dev.yml
|
77
84
|
```
|
78
85
|
|
79
86
|
配置文件模版内容如下,根据不同团队的需求定制即可:
|
80
87
|
|
81
|
-
```
|
88
|
+
```shell
|
82
89
|
---
|
83
|
-
|
84
|
-
|
85
|
-
|
90
|
+
configuration_env: dev
|
91
|
+
code_repo_url: git@github.com:su350380433/example_spec_source.git
|
92
|
+
binary_repo_url: git@github.com:su350380433/example_spec_bin_dev.git
|
93
|
+
binary_download_url: http://localhost:8080/frameworks/%s/%s/zip
|
86
94
|
download_file_type: zip
|
95
|
+
|
87
96
|
```
|
88
97
|
|
89
98
|
配置时,不需要手动添加源码和二进制私有源的 repo,插件在找不到对应 repo 时会主动 clone。
|
90
99
|
|
91
|
-
|
100
|
+
记得启动 `sudo mongod`服务,静态资源服务。
|
92
101
|
|
93
|
-
这里额外说下打包工具 [cocoapods-packager](https://github.com/CocoaPods/cocoapods-packager) 和 [Carthage](https://github.com/Carthage/Carthage/issues) ,前者可以通过 podspec 进行打包,只要保证 lint 通过了,就可以打成 `.framework`,很方便,但是作者几乎不维护了,后者需要结合组件工程。具体使用哪个可以结合自身团队,甚至可以自己写打包脚本,或者使用本插件的打包命令。
|
94
102
|
|
95
|
-
|
103
|
+
<br/>
|
96
104
|
|
97
|
-
|
105
|
+
## 四、制作二进制组件
|
98
106
|
|
99
|
-
|
100
|
-
# 1 打出二进制产物 && 提交产物至静态文件服务器
|
101
|
-
pod bin archive YOUR_OPTIONS
|
102
|
-
curl xxxxxxx
|
107
|
+
<br/>
|
103
108
|
|
104
|
-
|
105
|
-
pod bin repo push --binary YOUR_OPTIONS
|
109
|
+
[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91)
|
106
110
|
|
107
|
-
|
108
|
-
pod bin repo push YOUR_OPTIONS
|
109
|
-
```
|
111
|
+
### 1、制作命令
|
110
112
|
|
111
|
-
|
113
|
+
可以直接使用插件的 `pod bin auto`命令,在插件初始化配置完成后,目录下只要有包含podspec文件,根据podspec文件的version版本号会自动化执行build、组装二进制组件、制作二进制podspec、上传二进制文件、上传二进制podspec到私有源仓库。
|
112
114
|
|
113
|
-
|
115
|
+
```shell
|
116
|
+
pod bin auto
|
117
|
+
```
|
114
118
|
|
115
|
-
|
119
|
+
带上`—all-make`参数会把当前组件所依赖的组件都自动化制作成二进制组件。
|
116
120
|
|
117
121
|
```shell
|
118
|
-
|
119
|
-
|
122
|
+
pod bin local
|
123
|
+
```
|
120
124
|
|
121
|
-
|
125
|
+
pod bin local 是配合其他三方编译产物的命令,需要配置编译产物的目录。
|
122
126
|
|
123
|
-
|
127
|
+
`BinArchive.json`是制作二进制的一些配置项,放在项目跟目录下:
|
124
128
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
129
|
+
``` json
|
130
|
+
{
|
131
|
+
"//": "archive-white-pod-list 不制作二进制白名单,",
|
132
|
+
"archive-white-pod-list" : [
|
133
|
+
"YYTargetDemo",
|
134
|
+
"YYModel"
|
135
|
+
],
|
136
|
+
"//": "ignore-git-list 不制作二进制 所属git白名单,",
|
137
|
+
"ignore-git-list": [
|
138
|
+
"git@gitlab.xxx.com:Github-iOS"
|
139
|
+
],
|
140
|
+
"//": "ignore-http-list 不制作二进制 所属https白名单,",
|
141
|
+
"ignore-http-list": [
|
142
|
+
"https://gitlab.xxx.com/Github-iOS"
|
143
|
+
],
|
144
|
+
"//": "xcode_build_path 设置编译缓存完整路径, 默认地址如下",
|
145
|
+
"xcode_build_path" : "xcode-build/Build/Intermediates.noindex/ArchiveIntermediates/#{target_name}/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/",
|
146
|
+
}
|
135
147
|
```
|
136
148
|
|
137
|
-
### 构建二进制产物
|
138
149
|
|
139
|
-
|
140
|
-
➜ ~ pod bin archive --help
|
141
|
-
Usage:
|
150
|
+
<br/>
|
142
151
|
|
143
|
-
|
152
|
+
### 2. 二进制Podspec
|
144
153
|
|
145
|
-
|
154
|
+
通过`pod bin auto`和`pod bin local`二进制Podspec 会自动生成、上传,无需关心。
|
146
155
|
|
147
|
-
Options:
|
148
156
|
|
149
|
-
|
150
|
-
--allow-prerelease 允许使用 prerelease 的版本
|
151
|
-
--use-modular-headers 使用 modular headers (modulemap)
|
152
|
-
--no-clean 保留构建中间产物
|
153
|
-
--no-zip 不压缩静态 framework 为 zip
|
154
|
-
...
|
155
|
-
```
|
157
|
+
<br/>
|
156
158
|
|
157
|
-
|
159
|
+
### 3、查看结果
|
158
160
|
|
159
|
-
|
161
|
+
二进制存储服务:http://localhost:8080/frameworks/(默认本地8080端口)
|
160
162
|
|
161
|
-
|
163
|
+
二进制私有源参考:https://github.com/su350380433/example_spec_bin_dev.git(自定义)
|
162
164
|
|
163
|
-
一般来说,在接入插件前,组件源码 podspec 是已经存在的,所以我们只需要向二进制私有源推送组件的二进制 podspec 即可。如果有条件的话,二进制和源码 podspec 的发布可以走 GitLab CI ,这也是我推荐的做法。
|
164
165
|
|
165
|
-
|
166
|
+
<br/>
|
166
167
|
|
167
|
-
|
168
|
+
### 4、使用二进制
|
168
169
|
|
169
|
-
|
170
|
-
➜ ~ pod bin spec create --help
|
171
|
-
Usage:
|
170
|
+
<br/>
|
172
171
|
|
173
|
-
|
172
|
+
[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91)
|
174
173
|
|
175
|
-
|
174
|
+
在Podfile文件中,加入这两行代码,对已经制作二进制的就会生效,自动转换二进制组件依赖。
|
176
175
|
|
177
|
-
|
176
|
+
``` ruby
|
177
|
+
plugin 'cocoapods-imy-bin'
|
178
|
+
use_binaries!
|
179
|
+
```
|
178
180
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
181
|
+
|
182
|
+
<br/>
|
183
|
+
|
184
|
+
## 五、扩展功能
|
185
|
+
|
186
|
+
<br/>
|
187
|
+
|
188
|
+
### 1、本地配置文件 - Podfile_local
|
189
|
+
|
190
|
+
本地组件配置文件 Podfile_local,目前已支持Podfile下的大部分功能,可以把一些本地配置的语句放到Podfile_local。
|
191
|
+
|
192
|
+
<img src="https://raw.githubusercontent.com/MeetYouDevs/cocoapods-imy-bin/master/img/Podfile_local.png" style="zoom:50%;" />
|
193
|
+
|
194
|
+
场景:
|
195
|
+
|
196
|
+
1. 不希望把本地采用的源码/二进制配置、本地库传到远程仓库。
|
197
|
+
2. 避免直接修改Podfile文件,引起更新代码时冲突、或者误提交。
|
198
|
+
|
199
|
+
如Podfile本地库的写法:
|
200
|
+
```ruby
|
201
|
+
pod YYModel :path => '../' #提交的时候往往要修改回来才提交,操作繁琐
|
184
202
|
```
|
203
|
+
用法:
|
185
204
|
|
186
|
-
|
205
|
+
在与Podfile同级目录下,新增一个`Podfile_local`文件,模板可到这里下载Podfile_local
|
187
206
|
|
188
|
-
以 A 组件举例,如果 A 的 podspec 如下:
|
189
207
|
|
190
208
|
```ruby
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
209
|
+
#target 'Seeyou' do 不同的项目注意修改下Seeyou的值
|
210
|
+
#:path => '../IMYYQHome',根据实际情况自行修改,与之前在podfile写法一致
|
211
|
+
|
212
|
+
|
213
|
+
plugin 'cocoapods-imy-bin'
|
214
|
+
#是否启用二进制插件,想开启把下面注释去掉
|
215
|
+
# use_binaries!
|
216
|
+
|
217
|
+
#设置使用【源码】版本的组件。
|
218
|
+
#set_use_source_pods ['YYKit','SDWebImaage']
|
219
|
+
|
220
|
+
#需要替换Podfile里面的组件才写到这里
|
221
|
+
#在这里面的所写的组件库依赖,默认切换为【源码】依赖
|
222
|
+
target 'Seeyou' do
|
223
|
+
#本地库引用
|
224
|
+
#pod 'YYModel', :path => '../YYModel'
|
225
|
+
|
226
|
+
#覆盖、自定义组件
|
227
|
+
#pod 'YYCache', :podspec => 'http://覆盖、自定义/'
|
208
228
|
end
|
209
229
|
```
|
210
230
|
|
211
|
-
|
231
|
+
```ruby
|
232
|
+
以前的 pod update --no-repo-update 命令加个前缀 `bin` 变成
|
233
|
+
```
|
212
234
|
|
213
|
-
```
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
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
|
-
}
|
235
|
+
```shell
|
236
|
+
pod bin update --no-repo-update
|
237
|
+
```
|
238
|
+
or
|
239
|
+
```shell
|
240
|
+
pod bin install
|
248
241
|
```
|
249
242
|
|
250
|
-
|
243
|
+
支持 pod install/update 命令参数
|
251
244
|
|
252
|
-
|
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
|
245
|
+
并将其加入 .gitignore ,再也不用担心我误提交或者冲突了,Podfile_local 中的配置选项优先级比 Podfile 高,支持和 Podfile 相同的配置语句,同时支持**pre_install** or **post_install**。
|
275
246
|
|
276
|
-
```
|
277
247
|
|
278
|
-
|
248
|
+
如果您不习惯Podfile_local的使用方式,可以把命令写在Podfile里面,pod时不需要加bin,依旧是 pod update/install。
|
279
249
|
|
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
250
|
|
306
|
-
|
251
|
+
<br/>
|
307
252
|
|
308
|
-
|
253
|
+
### 2、二进制源码调试
|
309
254
|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
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
|
-
}
|
255
|
+
<br/>
|
256
|
+
|
257
|
+
[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91)
|
258
|
+
|
259
|
+
在项目根目录下,输入命令:
|
260
|
+
|
261
|
+
```ruby
|
262
|
+
pod bin code YYModel
|
363
263
|
```
|
364
264
|
|
365
|
-
|
265
|
+
`YYModel`为需要源码调试的组件库名称。成功之后像平时一样单步调试,控制台打印变量。让我们同时拥有使用二进制的便利和源码调试的能力。
|
366
266
|
|
367
|
-
```shell
|
368
|
-
|
267
|
+
``` shell
|
268
|
+
$ pod bin code --help [11:37:50]
|
369
269
|
Usage:
|
370
270
|
|
371
|
-
$ pod bin
|
271
|
+
$ pod bin code [NAME]
|
372
272
|
|
373
|
-
|
273
|
+
通过将二进制对应源码放置在临时目录中,让二进制出现断点时可以跳到对应的源码,方便调试。 在不删除二进制的情况下为某个组件添加源码调试能力,多个组件名称用空格分隔
|
374
274
|
|
375
275
|
Options:
|
376
276
|
|
377
|
-
--
|
378
|
-
--
|
379
|
-
|
380
|
-
--
|
381
|
-
--code-dependencies 使用源码依赖进行 lint
|
382
|
-
--loose-options 添加宽松的 options, 包括 --use-libraries
|
383
|
-
(可能会造成 entry point (start)
|
384
|
-
undefined)
|
385
|
-
...
|
277
|
+
--all-clean 删除所有已经下载的源码
|
278
|
+
--clean 删除所有指定下载的源码
|
279
|
+
--list 展示所有一级下载的源码以及其大小
|
280
|
+
--source 源码路径,本地路径,会去自动链接本地源码
|
386
281
|
```
|
387
282
|
|
388
|
-
|
283
|
+
效果与演示参考[链接1](https://juejin.im/post/5eccceb9f265da76f30e4e13#heading-48)、[视频](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91)
|
389
284
|
|
390
|
-
|
285
|
+
|
286
|
+
<br/>
|
287
|
+
|
288
|
+
### 3、快捷键命令
|
289
|
+
|
290
|
+
<br/>
|
291
|
+
|
292
|
+
在任意的终端执行命令,都能执行特定目录下特定命令
|
293
|
+
|
294
|
+
使用命令:
|
391
295
|
|
392
296
|
```shell
|
297
|
+
pod bin imy
|
298
|
+
```
|
393
299
|
|
394
|
-
|
395
|
-
Usage:
|
300
|
+
or
|
396
301
|
|
397
|
-
|
302
|
+
``` shell
|
303
|
+
pod bin imy 2 #2 是自定义的快捷键
|
304
|
+
```
|
398
305
|
|
399
|
-
|
306
|
+
使用场景:
|
400
307
|
|
401
|
-
|
308
|
+
1. 在任意目录下,执行项目A的pod update --no-repo-update命令
|
309
|
+
|
310
|
+
命令快捷键配置
|
311
|
+
|
312
|
+
```shell
|
313
|
+
$ pod bin inithk [11:37:58]
|
314
|
+
|
315
|
+
开始设置快捷键 pod bin imy.
|
316
|
+
所有的信息都会保存在 /Users/ci/.cocoapods/hot_key_1.yml 文件中.
|
317
|
+
%w[hot_key.yaml]
|
318
|
+
你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
|
402
319
|
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
320
|
+
---
|
321
|
+
hot_key_index: '1'
|
322
|
+
hot_key_dir: '/User/ci/自定义目录'
|
323
|
+
hot_key_cmd: pod bin update --no-repo-update
|
324
|
+
|
325
|
+
|
326
|
+
快捷键
|
327
|
+
可选值:[ 1 / 2 / 3... ]
|
328
|
+
旧值:1
|
412
329
|
```
|
413
330
|
|
414
|
-
`pod bin repo push` 用来发布组件,其余特性和 `pod bin spec lint` 一致。
|
415
331
|
|
416
|
-
|
332
|
+
<br/>
|
333
|
+
|
334
|
+
## 六、 DSL参数解释
|
417
335
|
|
418
|
-
|
336
|
+
|
337
|
+
|
338
|
+
首先,开发者需要在 Podfile 中需要使用 `plugin 'cocoapods-imy-bin'` 语句引入插件
|
419
339
|
|
420
340
|
```ruby
|
421
|
-
plugin 'cocoapods-bin'
|
341
|
+
plugin 'cocoapods-imy-bin'
|
422
342
|
```
|
423
343
|
|
424
344
|
顺带可以删除 Podfile 中的 source ,因为插件内部会自动帮你添加两个私有源。
|
425
345
|
|
426
346
|
`cocoapods-bin `插件提供二进制相关的配置语句有 `use_binaries!`、`use_binaries_with_spec_selector!` 以及 `set_use_source_pods`,下面会分别介绍。
|
427
347
|
|
428
|
-
|
348
|
+
##### use_binaries!
|
429
349
|
|
430
350
|
全部组件使用二进制版本。
|
431
351
|
|
@@ -435,48 +355,7 @@ plugin 'cocoapods-bin'
|
|
435
355
|
use_binaries! (ENV['DEBUG'].nil? || ENV['DEBUG'] == 'true')
|
436
356
|
```
|
437
357
|
|
438
|
-
|
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
|
358
|
+
##### set_use_source_pods
|
480
359
|
|
481
360
|
设置使用源码版本的组件。
|
482
361
|
|
@@ -488,7 +367,7 @@ set_use_source_pods ['YYModel']
|
|
488
367
|
|
489
368
|
如果 CocoaPods 版本为 1.5.3 ,终端会输出以下内容,表示 YYModel 的参照源从二进制私有源切换到了源码私有源:
|
490
369
|
|
491
|
-
```
|
370
|
+
```ruby
|
492
371
|
Analyzing dependencies
|
493
372
|
Fetching podspec for `A` from `../`
|
494
373
|
Downloading dependencies
|
@@ -500,7 +379,7 @@ Sending stats
|
|
500
379
|
Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.
|
501
380
|
```
|
502
381
|
|
503
|
-
|
382
|
+
##### use_binaries_with_spec_selector!
|
504
383
|
|
505
384
|
过滤出需要使用二进制版本组件。
|
506
385
|
|
@@ -531,7 +410,29 @@ use_binaries_with_spec_selector! do |spec|
|
|
531
410
|
end
|
532
411
|
```
|
533
412
|
|
534
|
-
|
413
|
+
##### 切换Dev/Debug_iPhoneos/Release_iPhoneos环境初始化设置
|
414
|
+
|
415
|
+
|
416
|
+
```shell
|
417
|
+
#dev 初始化插件配置 默认dev环境
|
418
|
+
pod bin init --bin-url=https://gitlab.xxx.com/cocoapods-imy-bin-config/raw/master/bin_dev.yml
|
419
|
+
|
420
|
+
#Debug_iPhoneos 初始化插件配置
|
421
|
+
pod bin init --bin-url=https://gitlab.xxx.com/cocoapods-imy-bin-config/raw/master/bin_debug_iphoneos.yml
|
422
|
+
|
423
|
+
|
424
|
+
#release_iPhoneos 初始化插件配置
|
425
|
+
pod bin init --bin-url=https://gitlab.xxx.com/cocoapods-imy-bin-config/raw/master/bin_release_iphoneos.yml
|
426
|
+
```
|
427
|
+
|
428
|
+
使用时在podfile 或者 podfile_local指定设置
|
429
|
+
|
430
|
+
```shell
|
431
|
+
#在podfile 或者 podfile_local 文件下加这句话
|
432
|
+
set_configuration_env('debug_iphoneos')
|
433
|
+
```
|
434
|
+
|
435
|
+
##### 其他设置
|
535
436
|
|
536
437
|
插件默认开启多线程下载组件资源,如果要禁用这个功能,Podfile 添加以下代码即可:
|
537
438
|
|
@@ -539,3 +440,15 @@ end
|
|
539
440
|
install! 'cocoapods', { install_with_multi_threads: false }
|
540
441
|
```
|
541
442
|
|
443
|
+
|
444
|
+
<br/>
|
445
|
+
|
446
|
+
## 七、感谢
|
447
|
+
|
448
|
+
|
449
|
+
|
450
|
+
**[cocoapods-bin](https://github.com/tripleCC/cocoapods-bin)**
|
451
|
+
|
452
|
+
[美团 iOS 工程 zsource 命令背后的那些事儿](https://links.jianshu.com/go?to=https%3A%2F%2Ftech.meituan.com%2F2019%2F08%2F08%2Fthe-things-behind-the-ios-project-zsource-command.html)
|
453
|
+
|
454
|
+
#### 您有什么更好的想法,可以提出来,我们一起来实现,共创一个强大的平台,同时也欢迎给我们提PR。
|
@@ -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
|
|
@@ -194,9 +194,13 @@ module CBin
|
|
194
194
|
end
|
195
195
|
|
196
196
|
def xcodebuild(defines = '', args = '', build_dir = 'build',build_model = 'Debug')
|
197
|
-
|
198
|
-
|
199
|
-
|
197
|
+
|
198
|
+
unless File.exist?("Pods.xcodeproj") #cocoapods-generate v2.0.0
|
199
|
+
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"
|
200
|
+
else
|
201
|
+
command = "xcodebuild #{defines} #{args} CONFIGURATION_BUILD_DIR=#{build_dir} clean build -configuration #{build_model} -target #{target_name} -project ./Pods.xcodeproj 2>&1"
|
202
|
+
end
|
203
|
+
|
200
204
|
UI.message "command = #{command}"
|
201
205
|
output = `#{command}`.lines.to_a
|
202
206
|
|
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.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 苏良锦
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06
|
11
|
+
date: 2020-07-06 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
|
-
|
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
|