cocoapods-bin 0.0.9 → 0.1.0

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
2
  SHA1:
3
- metadata.gz: f342602d96ee53fc2007e37834b6d85dd525d1c5
4
- data.tar.gz: 9cfb51a1b306bbe877a6e52e889e92fa18b532c6
3
+ metadata.gz: '099b776f3a313bc711cd177c6d0f2e8d6093ca5b'
4
+ data.tar.gz: c248bed6b96f9d7ab0c1f1b1a2beb39791ba6de8
5
5
  SHA512:
6
- metadata.gz: 01bd2ad57ad43af67be44582edca253362797869d5c3ebbd4e5571e9aca1a78bb450f2c892dc8fbab03169897bd5f337406aa18e9dbbd15ad50727a46ff092c6
7
- data.tar.gz: de8a6e0ae25a8dfe2f55c491100294c23981cc14b323d1b2324eccfd00e25c21d964538824c6a6fce67c46a71627ea73fa48c469ed2cfbb1d10da9469f296f1d
6
+ metadata.gz: 94a788389b9f95791a8306f53877b152941874c54ef7821c533af03f76a60dc8e95972376798f88a5b74aa326c2d87334cd274de9e796131f46140ed9e92f914
7
+ data.tar.gz: b08348f047c8caba57940c126123126d5e3583a7914e0ac2ca8c956261c90206c1dbfec02b479fba57e0f2bdf948aed71fb0298e408c5ae066b088284e4b58e1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cocoapods-bin (0.0.9)
4
+ cocoapods-bin (0.1.0)
5
5
  cocoapods (~> 1.4)
6
6
  parallel
7
7
 
@@ -68,7 +68,7 @@ GEM
68
68
  nanaimo (0.2.6)
69
69
  nap (1.1.0)
70
70
  netrc (0.11.0)
71
- parallel (1.12.1)
71
+ parallel (1.13.0)
72
72
  prettybacon (0.0.2)
73
73
  bacon (~> 1.2)
74
74
  rake (12.3.2)
data/README.md CHANGED
@@ -31,21 +31,21 @@
31
31
 
32
32
  开始设置二进制化初始信息.
33
33
  所有的信息都会保存在 /Users/songruiwang/.cocoapods/bin.yml 文件中.
34
- 你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息如下:
34
+ 你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
35
35
 
36
36
  ---
37
- code_repo_url: 源码私有源 Git 地址,如> git@git.2dfire.net:ios/cocoapods-spec.git
38
- binary_repo_url: 二进制私有源 Git 地址,如> git@git.2dfire.net:ios/cocoapods-spec-binary.git
39
- binary_download_url: 二进制下载地址,内部会依次传入组件名称与版本,替换字符串中的 %s ,如> http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
37
+ code_repo_url: git@git.2dfire.net:ios/cocoapods-spec.git
38
+ binary_repo_url: git@git.2dfire.net:ios/cocoapods-spec-binary.git
39
+ binary_download_url: http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
40
+ download_file_type: zip
40
41
 
41
42
 
42
- 源码私有源 Git 地址,如> git@git.2dfire.net:ios/cocoapods-spec.git
43
+ 源码私有源 Git 地址
43
44
  旧值:git@git.2dfire.net:ios/cocoapods-spec.git
44
45
  >
45
-
46
46
  ```
47
47
 
48
- 按提示输入源码私有源、二进制私有源、二进制下载地址后,插件就配置完成了。
48
+ 按提示输入源码私有源、二进制私有源、二进制下载地址、下载文件类型后,插件就配置完成了。
49
49
 
50
50
  `cococapod-bin` 也支持从 url 下载配置文件,方便对多台机器进行配置:
51
51
 
@@ -60,13 +60,12 @@ binary_download_url: 二进制下载地址,内部会依次传入组件名称
60
60
  code_repo_url: git@git.2dfire.net:ios/cocoapods-spec.git
61
61
  binary_repo_url: git@git.2dfire.net:ios/cocoapods-spec-binary.git
62
62
  binary_download_url: http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
63
+ download_file_type: zip
63
64
  ```
64
65
 
65
66
  配置时,不需要手动添加源码和二进制私有源的 repo,插件在找不到对应 repo 时会主动 clone。
66
67
 
67
- 插件配置完后,就可以部署静态资源服务器了。对于静态资源服务器,这里不做赘述,只提示一点:**`binary_download_url` 需要以资源类型结尾(例子为 zip 类型)**。
68
-
69
- 插件为了保证资源类型的多样性,在生成二进制 podspec 时并没有定死 source 的 `:type` 字段,所以 CocoaPods 只能从 url 中获取资源类型。在下载 http/https 资源时,CocoaPods 会根据路径的 extname 检查资源类型,不符合要求的话(zip、tgz、tar、tbz、txz、dmg)就会直接抛错。这里提到了 **二进制 podspec 的自动生成**,后面会详细介绍。
68
+ 插件配置完后,就可以部署静态资源服务器了。对于静态资源服务器,这里不做赘述,只提示一点:在生成二进制 podspec 时,插件会根据 `download_file_type` 设置 source 的 `:type` 字段。在下载 http/https 资源时,CocoaPods 会根据 `:type` 字段的类型采取相应的解压方式,如果设置错误就会抛错。这里提到了 **二进制 podspec 的自动生成**,后面会详细介绍。
70
69
 
71
70
  这里额外说下打包工具 [cocoapods-packager](https://github.com/CocoaPods/cocoapods-packager) 和 [Carthage](https://github.com/Carthage/Carthage/issues) ,前者可以通过 podspec 进行打包,只要保证 lint 通过了,就可以打成 `.framework`,很方便,但是作者几乎不维护了,后者需要结合组件工程。具体使用哪个可以结合自身团队,甚至可以自己写打包脚本。
72
71
 
@@ -164,7 +163,8 @@ end
164
163
  "qingmu": "qingmu@2dfire.com"
165
164
  },
166
165
  "source": {
167
- "http": "http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/A/0.1.0.zip"
166
+ "http": "http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/A/0.1.0.zip",
167
+ "type": "zip"
168
168
  },
169
169
  "platforms": {
170
170
  "ios": "8.0"
@@ -226,16 +226,20 @@ TODO: Add long description of the pod here.
226
226
  s.license = { :type => 'MIT', :file => 'LICENSE' }
227
227
  s.author = { 'qingmu' => 'qingmu@2dfire.com' }
228
228
  s.ios.deployment_target = '8.0'
229
+
229
230
  s.subspec "Binary" do |ss|
230
231
  ss.vendored_frameworks = "#{s.name}.framework"
231
232
  ss.source_files = "#{s.name}.framework/Headers/*", "#{s.name}.framework/Versions/A/Headers/*"
232
233
  ss.public_header_files = "#{s.name}.framework/Headers/*", "#{s.name}.framework/Versions/A/Headers/*"
233
- ss.dependency 'YYModel'
234
+ # 结合实际打包后的资源产出文件类型编写
235
+ ss.resources = "#{s.name}.framework/Resources/*.{bundle}", "#{s.name}.framework/Versions/A/Resources/*.{bundle}"
234
236
  end
237
+
235
238
  s.subspec 'B' do |ss|
236
239
  ss.dependency "#{s.name}/Binary"
237
240
  end
238
241
  end
242
+
239
243
  ```
240
244
 
241
245
  最终生成的二进制 podspec 如下:
@@ -258,7 +262,8 @@ end
258
262
  },
259
263
  "version": "0.1.0",
260
264
  "source": {
261
- "http": "http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/A/0.1.0.zip"
265
+ "http": "http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/A/0.1.0.zip",
266
+ "type": "zip"
262
267
  },
263
268
  "subspecs": [
264
269
  {
@@ -271,6 +276,10 @@ end
271
276
  "public_header_files": [
272
277
  "A.framework/Headers/*",
273
278
  "A.framework/Versions/A/Headers/*"
279
+ ],
280
+ "resources": [
281
+ "A.framework/Resources/*.{bundle}",
282
+ "A.framework/Versions/A/Resources/*.{bundle}"
274
283
  ]
275
284
  },
276
285
  {
@@ -283,6 +292,7 @@ end
283
292
  }
284
293
  ]
285
294
  }
295
+
286
296
  ```
287
297
 
288
298
  #### pod bin spec lint
@@ -54,7 +54,7 @@ module Pod
54
54
  template_hash = CBin.config.template_hash
55
55
  template_hash.each do |k, v|
56
56
  default = CBin.config.send(k) rescue nil
57
- config[k] = asker.ask_with_answer(v, default)
57
+ config[k] = asker.ask_with_answer(v[:description], default, v[:selection])
58
58
  end
59
59
 
60
60
  CBin.config.sync_config(config)
@@ -6,11 +6,14 @@ module CBin
6
6
  File.expand_path("#{Pod::Config.instance.home_dir}/bin.yml")
7
7
  end
8
8
 
9
+
9
10
  def template_hash
10
11
  {
11
- 'code_repo_url' => '源码私有源 Git 地址,如> git@git.2dfire.net:ios/cocoapods-spec.git',
12
- 'binary_repo_url' => '二进制私有源 Git 地址,如> git@git.2dfire.net:ios/cocoapods-spec-binary.git',
13
- 'binary_download_url' => '二进制下载地址,内部会依次传入组件名称与版本,替换字符串中的 %s ,如> http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip'
12
+ 'code_repo_url' => { description: '源码私有源 Git 地址', default: 'git@git.2dfire.net:ios/cocoapods-spec.git' },
13
+ 'binary_repo_url' => { description: '二进制私有源 Git 地址', default: 'git@git.2dfire.net:ios/cocoapods-spec-binary.git' },
14
+ 'binary_download_url' => { description: '二进制下载地址,内部会依次传入组件名称与版本,替换字符串中的 %s ', default: 'http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip' },
15
+ # 'binary_type' => { description: '二进制打包类型', default: 'framework', selection: %w[framework library] },
16
+ 'download_file_type' => { description: '下载二进制文件类型', default: 'zip', selection: %w[zip tgz tar tbz txz dmg] },
14
17
  }
15
18
  end
16
19
 
@@ -20,24 +23,45 @@ module CBin
20
23
  end
21
24
  end
22
25
 
26
+ def default_config
27
+ @default_config ||= Hash[template_hash.map { |k, v| [k, v[:default]] }]
28
+ end
29
+
23
30
  private
24
31
 
25
32
  def load_config
26
33
  if File.exists?(config_file)
27
34
  YAML.load_file(config_file)
28
35
  else
29
- Hash[template_hash.map { |k, v| [k, v.split('>', 2).last.strip] }]
36
+ default_config
37
+ end
38
+ end
39
+
40
+ def config
41
+ @config ||= begin
42
+ @config = OpenStruct.new load_config
43
+ validate!
44
+ @config
45
+ end
46
+ end
47
+
48
+ def validate!
49
+ template_hash.each do |k, v|
50
+ selection = v[:selection]
51
+ next if !selection || selection.empty?
52
+ config_value = @config.send(k)
53
+ next unless config_value
54
+ raise Pod::Informative, "#{k} 字段的值必须限定在可选值 [ #{selection.join(' / ')} ] 内".red unless selection.include?(config_value)
30
55
  end
31
56
  end
32
57
 
33
58
  def respond_to_missing?(method, include_private = false)
34
- @config.respond_to?(method) || super
59
+ config.respond_to?(method) || super
35
60
  end
36
61
 
37
62
  def method_missing(method, *args, &block)
38
- @config ||= OpenStruct.new load_config
39
- if @config.respond_to?(method)
40
- @config.send(method, *args)
63
+ if config.respond_to?(method)
64
+ config.send(method, *args)
41
65
  elsif template_hash.keys.include?(method.to_s)
42
66
  raise Pod::Informative, "#{method} 字段必须在配置文件 #{config_file} 中设置, 请执行 init 命令配置或手动修改配置文件".red
43
67
  else
@@ -8,15 +8,17 @@ module CBin
8
8
  print ' > '.green
9
9
  end
10
10
 
11
- def ask_with_answer(question, pre_answer)
11
+ def ask_with_answer(question, pre_answer, selection)
12
12
  print "\n#{question}\n"
13
13
 
14
+ print_selection_info = -> { print "可选值:[ #{selection.join(' / ')} ]\n" if selection }
15
+ print_selection_info.call
14
16
  print "旧值:#{pre_answer}\n" unless pre_answer.nil?
15
17
 
16
18
  answer = ''
17
19
  loop do
18
20
  show_prompt
19
- answer = STDIN.gets.chomp
21
+ answer = STDIN.gets.chomp.strip
20
22
 
21
23
  if answer == '' && !pre_answer.nil?
22
24
  answer = pre_answer
@@ -24,7 +26,10 @@ module CBin
24
26
  print "\n"
25
27
  end
26
28
 
27
- break unless answer.empty?
29
+ unless answer.empty?
30
+ break if !selection || selection.include?(answer)
31
+ print_selection_info.call
32
+ end
28
33
  end
29
34
 
30
35
  answer
@@ -36,9 +41,9 @@ module CBin
36
41
 
37
42
  开始设置二进制化初始信息.
38
43
  所有的信息都会保存在 #{CBin.config.config_file} 文件中.
39
- 你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息如下:
44
+ 你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
40
45
 
41
- #{CBin.config.template_hash.to_yaml}
46
+ #{CBin.config.default_config.to_yaml}
42
47
  EOF
43
48
  end
44
49
 
@@ -1,5 +1,5 @@
1
1
  module CBin
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
4
4
 
5
5
  module Pod
@@ -97,7 +97,7 @@ module CBin
97
97
  end
98
98
 
99
99
  def binary_source
100
- { http: CBin.config.binary_download_url % [code_spec.root.name, code_spec.version] }
100
+ { http: CBin.config.binary_download_url % [code_spec.root.name, code_spec.version], type: CBin.config.download_file_type }
101
101
  end
102
102
 
103
103
  def code_spec_consumer(platform = :ios)
@@ -18,6 +18,7 @@ module Pod
18
18
  sources_manager = Config.instance.sources_manager
19
19
  use_source_pods = podfile.use_source_pods
20
20
 
21
+ missing_binary_specs = []
21
22
  specs_by_target.each do |target, rspecs|
22
23
  # use_binaries 并且 use_source_pods 不包含
23
24
  use_binary_rspecs = if podfile.use_binaries? || podfile.use_binaries_selector
@@ -61,7 +62,7 @@ module Pod
61
62
  rspec
62
63
  rescue Pod::StandardError => error
63
64
  # 没有从新的 source 找到对应版本组件,直接返回原 rspec
64
- UI.message "【#{rspec.spec.name} | #{spec_version}】组件无对应二进制版本 , 将采用源码依赖." if use_binary#.yellow
65
+ missing_binary_specs << rspec.spec if use_binary
65
66
  rspec
66
67
  end
67
68
 
@@ -69,6 +70,10 @@ module Pod
69
70
  end.compact
70
71
  end
71
72
 
73
+ missing_binary_specs.uniq.each do |spec|
74
+ UI.message "【#{spec.name} | #{spec.version}】组件无对应二进制版本 , 将采用源码依赖."
75
+ end if missing_binary_specs.any?
76
+
72
77
  specs_by_target
73
78
  end
74
79
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-bin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tripleCC
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-17 00:00:00.000000000 Z
11
+ date: 2019-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel