pindo 4.7.0 → 4.7.2
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 +4 -4
- data/lib/pindo/base/aeshelper.rb +30 -2
- data/lib/pindo/base/githelper.rb +7 -9
- data/lib/pindo/client/aws3sclient.rb +1 -1
- data/lib/pindo/client/bossconfigclient.rb +3 -3
- data/lib/pindo/client/giteeclient.rb +2 -2
- data/lib/pindo/client/pgyerclient.rb +97 -102
- data/lib/pindo/command/appstore/iap.rb +1 -1
- data/lib/pindo/command/deploy/build.rb +70 -4
- data/lib/pindo/command/deploy/cert.rb +68 -67
- data/lib/pindo/command/{utils → dev}/applovin.rb +2 -2
- data/lib/pindo/command/dev/autobuild.rb +19 -7
- data/lib/pindo/command/dev/autoresign.rb +10 -6
- data/lib/pindo/command/dev/build.rb +94 -0
- data/lib/pindo/command/dev.rb +3 -6
- data/lib/pindo/command/ipa/autoresign.rb +4 -1
- data/lib/pindo/command/ipa/import.rb +45 -9
- data/lib/pindo/command/ipa/output.rb +7 -2
- data/lib/pindo/command/lib/update.rb +8 -8
- data/lib/pindo/command/pgyer/resign.rb +21 -19
- data/lib/pindo/command/pgyer/upload.rb +34 -6
- data/lib/pindo/command/utils/renewcert.rb +158 -0
- data/lib/pindo/command/utils.rb +1 -1
- data/lib/pindo/config/pindoconfig.rb +27 -0
- data/lib/pindo/module/appselect.rb +9 -8
- data/lib/pindo/module/cert/certhelper.rb +42 -36
- data/lib/pindo/module/cert/keychainhelper.rb +25 -13
- data/lib/pindo/module/cert/provisioninghelper.rb +1 -1
- data/lib/pindo/module/cert/xcodecerthelper.rb +98 -39
- data/lib/pindo/module/pgyer/pgyerhelper.rb +50 -28
- data/lib/pindo/module/xcode/xcodeappconfig.rb +2 -3
- data/lib/pindo/module/xcode/xcodereshandler.rb +41 -13
- data/lib/pindo/module/xcode/xcodereshelper.rb +2 -3
- data/lib/pindo/options/deployoptions.rb +1 -2
- data/lib/pindo/version.rb +1 -1
- metadata +5 -4
- data/lib/pindo/command/dev/renewcert.rb +0 -142
@@ -53,22 +53,22 @@ module Pindo
|
|
53
53
|
|
54
54
|
private_source = sources.select { |s| s.git? && s.url.to_s.eql?(pod_index_url)}.first
|
55
55
|
if !private_source.nil?
|
56
|
-
|
57
|
-
puts "地址:#{
|
58
|
-
puts "
|
56
|
+
|
57
|
+
puts "私有Pod地址:#{pod_index_url}"
|
58
|
+
puts "私有Pod目录:~/.cocoapods"
|
59
59
|
getcode_to_dir(reponame:File.basename(private_source.repo), remote_url: pod_index_url, path:repos_path)
|
60
60
|
else
|
61
|
-
puts "地址:#{pod_index_url}"
|
62
|
-
puts "目录:~/.cocoapods"
|
61
|
+
puts "私有Pod地址:#{pod_index_url}"
|
62
|
+
puts "私有Pod目录:~/.cocoapods"
|
63
63
|
repository_name = pod_index_url.split("/").last.chomp(".git")
|
64
64
|
getcode_to_dir(reponame:repository_name, remote_url: pod_index_url, path:repos_path)
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
|
68
68
|
if @args_install_flag
|
69
69
|
begin
|
70
|
-
if File.exist?("#{working_dir}/Podfile")
|
71
|
-
Pod::Command::Install::run(['--clean-install'])
|
70
|
+
if File.exist?("#{working_dir}/Podfile")
|
71
|
+
Pod::Command::Install::run(['--clean-install'])
|
72
72
|
end
|
73
73
|
rescue => e
|
74
74
|
puts e.message
|
@@ -13,7 +13,7 @@ module Pindo
|
|
13
13
|
self.summary = '获取pgyer中指定app的测试链接和二维码'
|
14
14
|
|
15
15
|
self.description = <<-DESC
|
16
|
-
获取pgyer中指定app的测试链接和二维码,终端运行:pindo pgyer
|
16
|
+
获取pgyer中指定app的测试链接和二维码,终端运行:pindo pgyer resign
|
17
17
|
DESC
|
18
18
|
|
19
19
|
self.arguments = [
|
@@ -23,10 +23,10 @@ module Pindo
|
|
23
23
|
def self.options
|
24
24
|
[
|
25
25
|
['--login', '强制再次登录pgyer网站'],
|
26
|
-
['--proj', '指定哪个项目(忽略大小写空格等等字符),用法:pindo pgyer
|
27
|
-
['--list', '列出上传记录并选择,用法:pindo pgyer
|
28
|
-
['--send', '上传到之后是否发送测试信息,用法:pindo pgyer
|
29
|
-
['--
|
26
|
+
['--proj', '指定哪个项目(忽略大小写空格等等字符),用法:pindo pgyer resign --proj=prancksoundv4'],
|
27
|
+
['--list', '列出上传记录并选择,用法:pindo pgyer resign --list'],
|
28
|
+
['--send', '上传到之后是否发送测试信息,用法:pindo pgyer resign --send'],
|
29
|
+
['--certid', '设置重签名的正式id,用法:pindo pgyer resign --resignid=com.test.bundleid'],
|
30
30
|
].concat(super)
|
31
31
|
end
|
32
32
|
|
@@ -37,7 +37,8 @@ module Pindo
|
|
37
37
|
@args_list_flag = argv.flag?('list', false)
|
38
38
|
@args_send_flag = argv.flag?('send', false)
|
39
39
|
@args_proj_name = argv.option('proj')
|
40
|
-
|
40
|
+
|
41
|
+
@args_cert_id = argv.option('certid')
|
41
42
|
|
42
43
|
super(argv)
|
43
44
|
@additional_args = argv.remainder!
|
@@ -56,34 +57,34 @@ module Pindo
|
|
56
57
|
raise Informative, "#{proj_name} 错误, 请输入正确的App代号名称, pgyer网站没有该App"
|
57
58
|
end
|
58
59
|
|
59
|
-
|
60
|
+
|
60
61
|
version_item_obj = PgyerHelper.share_instace.get_versioon_history_item(app_info_obj:app_info_obj, list_select_flat:@args_list_flag)
|
61
62
|
|
62
63
|
if version_item_obj.nil?
|
63
64
|
raise Informative, "没有找到上传记录"
|
64
65
|
end
|
65
|
-
|
66
|
+
|
66
67
|
cert_List = PgyerHelper.share_instace.get_cert_list()
|
67
|
-
|
68
|
+
|
68
69
|
if cert_List.nil? || cert_List.empty?
|
69
70
|
raise Informative, "没有找到上传记录"
|
70
71
|
end
|
71
72
|
|
72
|
-
if @
|
73
|
+
if @args_cert_id.nil? && cert_List.size > 0
|
73
74
|
|
74
75
|
bundle_id_list = cert_List.map { |cert| [cert["certType"],cert["mainBundleId"]].join("_") }
|
75
76
|
cli = HighLine.new
|
76
|
-
@
|
77
|
-
menu.prompt = "
|
77
|
+
@args_cert_id = cli.choose do |menu|
|
78
|
+
menu.prompt = "请选择重签名的证书:"
|
78
79
|
menu.choices(*bundle_id_list)
|
79
80
|
end
|
80
|
-
|
81
|
-
cert_item = cert_List.select{|
|
81
|
+
|
82
|
+
cert_item = cert_List.select{|certitem| [certitem["certType"],certitem["mainBundleId"]].join("_") == @args_cert_id}.first
|
82
83
|
else
|
83
|
-
cert_item = cert_List.select{|
|
84
|
+
cert_item = cert_List.select{|certitem| certitem["mainBundleId"] == @args_cert_id && certitem["certType"].downcase.include?("adhoc")}.first
|
84
85
|
end
|
85
86
|
|
86
|
-
|
87
|
+
|
87
88
|
|
88
89
|
result = PgyerHelper.share_instace.resign(version_id:version_item_obj["id"], cert_id:cert_item["id"])
|
89
90
|
|
@@ -95,12 +96,13 @@ module Pindo
|
|
95
96
|
end
|
96
97
|
msg_data = PgyerHelper.share_instace.make_msg_data(app_info_obj:app_info_obj, app_version_info_obj:version_item_obj)
|
97
98
|
PgyerHelper.share_instace.print_app_version_info(msg_data:msg_data)
|
98
|
-
|
99
|
-
|
99
|
+
|
100
|
+
if @args_send_flag
|
101
|
+
PgyerHelper.share_instace.send_apptest_wechat_msg(msg_data:msg_data, wechat_url:app_info_obj["prodWeComUrl"])
|
100
102
|
end
|
101
103
|
end
|
102
104
|
|
103
|
-
|
105
|
+
|
104
106
|
|
105
107
|
end
|
106
108
|
|
@@ -16,7 +16,7 @@ module Pindo
|
|
16
16
|
self.summary = '上传ipa包到pgyer测试网站'
|
17
17
|
|
18
18
|
self.description = <<-DESC
|
19
|
-
上传ipa包到pgyer。用法:例如:pindo pgyer upload path/to/demo.ipa
|
19
|
+
上传ipa包到pgyer。用法:例如:pindo pgyer upload path/to/demo.ipa
|
20
20
|
DESC
|
21
21
|
|
22
22
|
self.arguments = [
|
@@ -31,6 +31,8 @@ module Pindo
|
|
31
31
|
['--attach', '指定需要和ipa一起上传的附件: pindo pgyer upload --attach=path/to/attach.zip'],
|
32
32
|
['--send', '上传到之后是否发送测试信息,用法:pindo pgyer upload --send'],
|
33
33
|
['--desc', '指定上传的备注信息: -pindo pgyer upload -desc="1.upload message"'],
|
34
|
+
['--resign', '上传到之后是否重签名,用法:pindo pgyer upload --resign'],
|
35
|
+
['--certid', '设置重签名的正式id,用法:pindo pgyer upload --certid=com.test.bundleid'],
|
34
36
|
|
35
37
|
].concat(super)
|
36
38
|
end
|
@@ -50,14 +52,26 @@ module Pindo
|
|
50
52
|
|
51
53
|
@args_login_flag = argv.flag?('login', false)
|
52
54
|
@args_send_flag = argv.flag?('send', false)
|
55
|
+
@args_resign_flag = argv.flag?('resign', false)
|
56
|
+
|
53
57
|
@args_proj_name = argv.option('proj')
|
54
58
|
@args_attach_name = argv.option('attach')
|
55
59
|
@args_upload_desc = argv.option('desc')
|
60
|
+
@args_cert_id = argv.option('certid')
|
61
|
+
|
62
|
+
|
63
|
+
|
56
64
|
if @args_upload_desc && !@args_upload_desc.empty?
|
57
65
|
@args_upload_desc = @args_upload_desc.strip.gsub(/\"/, '')
|
58
66
|
end
|
59
67
|
|
60
|
-
|
68
|
+
|
69
|
+
if !@args_cert_id.nil? && !@args_cert_id.empty?
|
70
|
+
@args_resign_flag = true
|
71
|
+
end
|
72
|
+
if @args_resign_flag
|
73
|
+
@args_send_flag = true
|
74
|
+
end
|
61
75
|
|
62
76
|
super(argv)
|
63
77
|
@additional_args = argv.remainder!
|
@@ -79,7 +93,7 @@ module Pindo
|
|
79
93
|
@args_ipa_file = Dir.glob(build_path).max_by {|f| File.mtime(f)}
|
80
94
|
end
|
81
95
|
if !@args_ipa_file.nil?
|
82
|
-
answer = agree("需要上传的ipa文件是: #{@args_ipa_file} ?(Y/n)")
|
96
|
+
answer = agree("需要上传的ipa文件是: #{@args_ipa_file} ?(Y/n)")
|
83
97
|
if !answer
|
84
98
|
@args_ipa_file = nil
|
85
99
|
end
|
@@ -91,7 +105,7 @@ module Pindo
|
|
91
105
|
@args_ipa_file = @args_ipa_file.strip.gsub(/\\ /, ' ')
|
92
106
|
end
|
93
107
|
end
|
94
|
-
|
108
|
+
|
95
109
|
if !File.exist?(@args_ipa_file)
|
96
110
|
raise Informative, "#{@args_ipa_file} 文件不存在"
|
97
111
|
end
|
@@ -107,12 +121,26 @@ module Pindo
|
|
107
121
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
108
122
|
msg_data = PgyerHelper.share_instace.make_msg_data(app_info_obj:app_info_obj, app_version_info_obj:result_data["data"])
|
109
123
|
PgyerHelper.share_instace.print_app_version_info(msg_data:msg_data)
|
124
|
+
|
125
|
+
|
110
126
|
if @args_send_flag
|
111
|
-
|
127
|
+
if @args_resign_flag
|
128
|
+
args = []
|
129
|
+
args << "--send"
|
130
|
+
if !@args_cert_id.nil? && !@args_cert_id.empty?
|
131
|
+
args << "--certid=#{@args_cert_id}"
|
132
|
+
end
|
133
|
+
if !@args_proj_name.nil? && !@args_proj_name.empty?
|
134
|
+
args << "--proj=#{@args_proj_name}"
|
135
|
+
end
|
136
|
+
Pindo::Command::Pgyer::Resign::run(args)
|
137
|
+
else
|
138
|
+
PgyerHelper.share_instace.send_apptest_wechat_msg(msg_data:msg_data)
|
139
|
+
end
|
112
140
|
end
|
113
141
|
end
|
114
142
|
|
115
|
-
|
143
|
+
|
116
144
|
|
117
145
|
|
118
146
|
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'pindo/module/cert/xcodecerthelper'
|
3
|
+
require 'pindo/module/cert/certhelper'
|
4
|
+
|
5
|
+
module Pindo
|
6
|
+
class Command
|
7
|
+
class Utils < Command
|
8
|
+
class Renewcert < Utils
|
9
|
+
|
10
|
+
include Appselect
|
11
|
+
include XcodeCertHelper
|
12
|
+
include CertHelper
|
13
|
+
|
14
|
+
self.summary = '更新当前账号下所有的Provisioning Profile文件'
|
15
|
+
|
16
|
+
self.description = <<-DESC
|
17
|
+
如果不存在证书,会自动生成新证书,重新生成当前账号下所有的Provisioning Profile文件. 添加新设备或者证书过期时使用, 一般情况请勿操作!!!
|
18
|
+
用法:pindo dev renewcert
|
19
|
+
DESC
|
20
|
+
|
21
|
+
self.arguments = [
|
22
|
+
|
23
|
+
]
|
24
|
+
|
25
|
+
def self.options
|
26
|
+
[
|
27
|
+
|
28
|
+
['--fast', '快速更新证书,开发用bundle id只更新dev证书,发布bundle id只更新adhoc证书'],
|
29
|
+
['--upload', '生成上传pgyer的证书'],
|
30
|
+
['--fixedid', '重新更新bundle id的功能,检查bundle id的功能是否更新'],
|
31
|
+
['--renew', '重新生成证书']
|
32
|
+
].concat(super)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def initialize(argv)
|
37
|
+
|
38
|
+
@fast_flag = argv.flag?('fast', false)
|
39
|
+
@fixedid_flag = argv.flag?('fixedid', false)
|
40
|
+
@upload_flag = argv.flag?('upload', false)
|
41
|
+
@renew_cert_flag = argv.flag?('renew', false)
|
42
|
+
super
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def run
|
48
|
+
|
49
|
+
@dev_bundle_id_array = all_dev_bundleid()
|
50
|
+
@tool_bundle_id_array = all_tool_bundleid()
|
51
|
+
@deploy_bundle_id_array = all_release_bundleid()
|
52
|
+
fixed_bundleid_array = @dev_bundle_id_array + @deploy_bundle_id_array + @tool_bundle_id_array
|
53
|
+
|
54
|
+
puts fixed_bundleid_array
|
55
|
+
|
56
|
+
fixed_bundleid_array.each do |bundle_id|
|
57
|
+
# begin
|
58
|
+
fixed_cert(bundle_id:bundle_id, renew_flag:@renew_cert_flag, upload_flag:@upload_flag, fixed_bundleid_flag:@fixedid_flag)
|
59
|
+
# rescue => err
|
60
|
+
# puts
|
61
|
+
# puts
|
62
|
+
# puts "Fixed #{bundle_id} cert---------Error-------!!!"
|
63
|
+
# puts
|
64
|
+
# puts
|
65
|
+
# end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def fixed_cert(bundle_id:nil, renew_flag:false, upload_flag:false, fixed_bundleid_flag: false)
|
73
|
+
|
74
|
+
args_temp = []
|
75
|
+
args_temp << "#{bundle_id}"
|
76
|
+
|
77
|
+
Pindo::Command::Deploy::Pullconfig::run(args_temp)
|
78
|
+
|
79
|
+
if fixed_bundleid_flag
|
80
|
+
Pindo::Command::Deploy::Bundleid::run([])
|
81
|
+
end
|
82
|
+
|
83
|
+
if @fast_flag
|
84
|
+
|
85
|
+
if @dev_bundle_id_array.include?(bundle_id) || @tool_bundle_id_array.include?(bundle_id)
|
86
|
+
args_temp = []
|
87
|
+
args_temp << "--a=#{bundle_id}"
|
88
|
+
args_temp << "--dev"
|
89
|
+
if renew_flag
|
90
|
+
args_temp << "--renew"
|
91
|
+
end
|
92
|
+
if upload_flag
|
93
|
+
args_temp << "--upload"
|
94
|
+
end
|
95
|
+
Pindo::Command::Deploy::Cert::run(args_temp)
|
96
|
+
end
|
97
|
+
|
98
|
+
if @deploy_bundle_id_array.include?(bundle_id)
|
99
|
+
args_temp = []
|
100
|
+
args_temp << "--a=#{bundle_id}"
|
101
|
+
args_temp << "--adhoc"
|
102
|
+
if renew_flag
|
103
|
+
args_temp << "--renew"
|
104
|
+
end
|
105
|
+
if upload_flag
|
106
|
+
args_temp << "--upload"
|
107
|
+
end
|
108
|
+
Pindo::Command::Deploy::Cert::run(args_temp)
|
109
|
+
end
|
110
|
+
|
111
|
+
else
|
112
|
+
|
113
|
+
args_temp = []
|
114
|
+
args_temp << "--a=#{bundle_id}"
|
115
|
+
args_temp << "--dev"
|
116
|
+
if renew_flag
|
117
|
+
args_temp << "--renew"
|
118
|
+
end
|
119
|
+
if upload_flag
|
120
|
+
args_temp << "--upload"
|
121
|
+
end
|
122
|
+
Pindo::Command::Deploy::Cert::run(args_temp)
|
123
|
+
|
124
|
+
args_temp = []
|
125
|
+
args_temp << "--a=#{bundle_id}"
|
126
|
+
args_temp << "--adhoc"
|
127
|
+
if renew_flag
|
128
|
+
args_temp << "--renew"
|
129
|
+
end
|
130
|
+
if upload_flag
|
131
|
+
args_temp << "--upload"
|
132
|
+
end
|
133
|
+
Pindo::Command::Deploy::Cert::run(args_temp)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
def fixed_push(bundle_id:nil, fixed_bundleid: false)
|
139
|
+
|
140
|
+
Pindo::Command::Deploy::Pullconfig::run(args_temp)
|
141
|
+
|
142
|
+
args_temp = []
|
143
|
+
args_temp << "--a=#{bundle_id}"
|
144
|
+
args_temp << "--dev"
|
145
|
+
Pindo::Command::Deploy::Pem::run(args_temp)
|
146
|
+
|
147
|
+
args_temp = []
|
148
|
+
args_temp << "--a=#{bundle_id}"
|
149
|
+
args_temp << "--adhoc"
|
150
|
+
Pindo::Command::Deploy::Pem::run(args_temp)
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
data/lib/pindo/command/utils.rb
CHANGED
@@ -4,9 +4,9 @@ require 'pindo/command/utils/renewproj'
|
|
4
4
|
require 'pindo/command/utils/clearcert'
|
5
5
|
require 'pindo/command/utils/xcassets'
|
6
6
|
require 'pindo/command/utils/device'
|
7
|
-
require 'pindo/command/utils/applovin'
|
8
7
|
require 'pindo/command/utils/tgate'
|
9
8
|
require 'pindo/command/utils/boss'
|
9
|
+
require 'pindo/command/utils/renewcert'
|
10
10
|
|
11
11
|
|
12
12
|
module Pindo
|
@@ -281,6 +281,14 @@ module Pindo
|
|
281
281
|
return url
|
282
282
|
end
|
283
283
|
|
284
|
+
def cert_key_password
|
285
|
+
cert_key_password = ''
|
286
|
+
if !@pindo_user_config_json.nil? && !@pindo_user_config_json["develop_accout_info"].nil?
|
287
|
+
cert_key_password = @pindo_user_config_json["develop_accout_info"]["cert_key_password"]
|
288
|
+
end
|
289
|
+
return cert_key_password
|
290
|
+
end
|
291
|
+
|
284
292
|
def deploy_cert_giturl
|
285
293
|
url = ''
|
286
294
|
if !@pindo_user_config_json.nil? && !@pindo_user_config_json["develop_accout_info"].nil?
|
@@ -288,6 +296,16 @@ module Pindo
|
|
288
296
|
end
|
289
297
|
return url
|
290
298
|
end
|
299
|
+
|
300
|
+
def deploy_cert_decrypt_password
|
301
|
+
pass = ''
|
302
|
+
if !@pindo_user_config_json.nil? && !@pindo_user_config_json["develop_accout_info"].nil?
|
303
|
+
pass = @pindo_user_config_json["develop_accout_info"]["deploy_cert_decrypt_password"]
|
304
|
+
end
|
305
|
+
return pass
|
306
|
+
end
|
307
|
+
|
308
|
+
|
291
309
|
|
292
310
|
def dev_cert_giturl
|
293
311
|
url = ''
|
@@ -297,6 +315,15 @@ module Pindo
|
|
297
315
|
return url
|
298
316
|
end
|
299
317
|
|
318
|
+
|
319
|
+
def dev_cert_decrypt_password
|
320
|
+
pass = ''
|
321
|
+
if !@pindo_user_config_json.nil? && !@pindo_user_config_json["develop_accout_info"].nil?
|
322
|
+
pass = @pindo_user_config_json["develop_accout_info"]["dev_cert_decrypt_password"]
|
323
|
+
end
|
324
|
+
return pass
|
325
|
+
end
|
326
|
+
|
300
327
|
def demo_apple_id
|
301
328
|
url = ''
|
302
329
|
if !@pindo_user_config_json.nil? && !@pindo_user_config_json["develop_accout_info"].nil?
|
@@ -45,7 +45,6 @@ module Pindo
|
|
45
45
|
|
46
46
|
def all_tool_bundleid
|
47
47
|
setting_file = File.join(pindo_single_config.pindo_env_configdir,'bundleid_config.json')
|
48
|
-
puts setting_file
|
49
48
|
setting_json = load_setting(setting_file:setting_file)
|
50
49
|
sub_json = []
|
51
50
|
if !setting_json.nil? && !setting_json['all_tool_bundleid'].nil?
|
@@ -86,10 +85,10 @@ module Pindo
|
|
86
85
|
puts "具体参考文档: https://tower.im/teams/851356/repository_documents/714/"
|
87
86
|
puts ""
|
88
87
|
puts "App Type:"
|
89
|
-
|
88
|
+
puts
|
90
89
|
cli.choose do |menu| # you can also use constants like :blue
|
91
|
-
menu.header = "
|
92
|
-
menu.prompt = "请选择使用的
|
90
|
+
menu.header = "可用的Bundle Id如下:"
|
91
|
+
menu.prompt = "请选择使用的Bundle Id,请输入选项(1/2/3...):"
|
93
92
|
menu.index_suffix = ") "
|
94
93
|
if !sub_setting_json.nil?
|
95
94
|
sub_setting_json.each do |key, items|
|
@@ -115,9 +114,10 @@ module Pindo
|
|
115
114
|
|
116
115
|
cli = HighLine.new
|
117
116
|
menu_choice="None"
|
117
|
+
puts
|
118
118
|
cli.choose do |menu| # you can also use constants like :blue
|
119
|
-
menu.header = "
|
120
|
-
menu.prompt = "请选择使用的
|
119
|
+
menu.header = "可用的Bundle Id如下:"
|
120
|
+
menu.prompt = "请选择使用的Bundle Id,请输入选项(1/2/3...):"
|
121
121
|
if !all_bundleid.nil? && all_bundleid.length > 0
|
122
122
|
for bunld_id in all_bundleid do
|
123
123
|
menu.choice(bunld_id) do |details|
|
@@ -140,10 +140,11 @@ module Pindo
|
|
140
140
|
|
141
141
|
cli = HighLine.new
|
142
142
|
menu_choice="None"
|
143
|
+
puts
|
143
144
|
cli.choose do |menu| # you can also use constants like :blue
|
144
145
|
|
145
|
-
menu.header = "
|
146
|
-
menu.prompt = "请选择使用的
|
146
|
+
menu.header = "可用的Bundle Id如下:"
|
147
|
+
menu.prompt = "请选择使用的Bundle Id,请输入选项(1/2/3...):"
|
147
148
|
if !all_bundleid.nil? && all_bundleid.length > 0
|
148
149
|
for bunld_id in all_bundleid do
|
149
150
|
menu.choice(bunld_id) do |details|
|
@@ -9,11 +9,7 @@ require 'pindo/module/cert/provisioninghelper'
|
|
9
9
|
module Pindo
|
10
10
|
|
11
11
|
module CertHelper
|
12
|
-
|
13
|
-
def server_name(keychain_name)
|
14
|
-
["match", keychain_name].join("_")
|
15
|
-
end
|
16
|
-
|
12
|
+
|
17
13
|
def get_cert_info(cer_certificate)
|
18
14
|
# can receive a certificate path or the file data
|
19
15
|
begin
|
@@ -65,81 +61,88 @@ module Pindo
|
|
65
61
|
(/darwin/ =~ RUBY_PLATFORM) != nil
|
66
62
|
end
|
67
63
|
|
68
|
-
def install_certs(certs_dir:nil, cert_type:nil)
|
64
|
+
def install_certs(cert_url:nil, certs_dir:nil, cert_type:nil)
|
69
65
|
|
70
|
-
|
66
|
+
cert_git_dir = cert_type.downcase
|
71
67
|
if !cert_type.downcase.include?("development")
|
72
|
-
|
68
|
+
cert_git_dir = "distribution"
|
73
69
|
end
|
74
70
|
|
75
|
-
certs = Dir[File.join(certs_dir, "certs",
|
76
|
-
keys = Dir[File.join(certs_dir, "certs",
|
71
|
+
certs = Dir[File.join(certs_dir, "certs", cert_git_dir.to_s, "*.cer")]
|
72
|
+
keys = Dir[File.join(certs_dir, "certs", cert_git_dir.to_s, "*.p12")]
|
77
73
|
|
78
74
|
if certs.count == 0 || keys.count == 0
|
79
75
|
raise Informative, "No certificates found in #{certs_dir}"
|
80
76
|
else
|
81
77
|
output_dir = Dir.mktmpdir
|
82
|
-
|
83
|
-
|
78
|
+
|
79
|
+
decrypt_password = AESHelper.fetch_password(keychain_name:cert_url)
|
84
80
|
Funlog.instance.fancyinfo_start("正在安装证书...")
|
85
81
|
|
86
82
|
cert_path = AESHelper.decrypt_specific_file(src_file: certs.first, password:decrypt_password, output_dir: output_dir)
|
83
|
+
if cert_path.nil? || cert_path.empty? || !File.exist?(cert_path)
|
84
|
+
AESHelper.delete_password(keychain_name:cert_url)
|
85
|
+
raise Informative, "证书解析失败,密码错误!"
|
86
|
+
end
|
87
|
+
|
87
88
|
key_path = AESHelper.decrypt_specific_file(src_file: keys.first, password:decrypt_password, output_dir: output_dir)
|
89
|
+
if key_path.nil? || key_path.empty? || !File.exist?(key_path)
|
90
|
+
AESHelper.delete_password(keychain_name:cert_url)
|
91
|
+
raise Informative, "证书解析失败,密码错误!"
|
92
|
+
end
|
88
93
|
|
89
94
|
unless is_cert_valid?(cert_path)
|
90
|
-
raise Informative, "
|
95
|
+
raise Informative, "证书已经过期,请重新生产新证书!"
|
91
96
|
end
|
92
97
|
|
98
|
+
|
93
99
|
if isMac?
|
94
100
|
|
95
101
|
keychain_name = "login.keychain"
|
96
|
-
|
97
102
|
if FastlaneCore::CertChecker.installed?(cert_path, in_keychain: nil)
|
98
103
|
Funlog.instance.fancyinfo_success("证书#{File.basename(cert_path)}已安装,无需重复安装!")
|
99
104
|
else
|
100
|
-
|
105
|
+
|
106
|
+
cert_password = Pindoconfig.instance.cert_key_password
|
101
107
|
keychain = 'login.keychain'
|
102
108
|
keychain_path = FastlaneCore::Helper.keychain_path(keychain)
|
103
109
|
|
104
|
-
KeychainHelper.import_file(cert_path, keychain_path, keychain_password: cert_password, certificate_password:
|
105
|
-
KeychainHelper.import_file(key_path, keychain_path, keychain_password: cert_password, certificate_password:
|
106
|
-
|
110
|
+
KeychainHelper.import_file(cert_path, keychain_path, keychain_password: cert_password, certificate_password:'' )
|
111
|
+
KeychainHelper.import_file(key_path, keychain_path, keychain_password: cert_password, certificate_password: '')
|
107
112
|
|
108
113
|
Funlog.instance.fancyinfo_success("证书'#{File.basename(cert_path)}'安装完成!")
|
114
|
+
|
109
115
|
end
|
110
116
|
else
|
111
|
-
|
117
|
+
Funlog.instance.fancyinfo_error("非Mac电脑不支持安装证书!")
|
112
118
|
end
|
113
119
|
|
114
120
|
end
|
115
121
|
|
116
|
-
def install_provisionfiles(certs_dir:nil, bundle_id_map:nil, cert_type:nil)
|
122
|
+
def install_provisionfiles(cert_url:nil, certs_dir:nil, bundle_id_map:nil, cert_type:nil)
|
117
123
|
|
118
|
-
if cert_type.downcase.include?("development")
|
119
|
-
cert_type = "Development"
|
120
|
-
elsif cert_type.downcase.include?("Adhoc")
|
121
|
-
cert_type = "Adhoc"
|
122
|
-
else
|
123
|
-
cert_type = "AppStore"
|
124
|
-
end
|
125
|
-
|
126
|
-
un_exist_files = []
|
127
|
-
|
128
|
-
provisioning_info_array = []
|
129
124
|
|
125
|
+
if cert_type.downcase.include?("development")
|
126
|
+
cert_type = "Development"
|
127
|
+
elsif cert_type.downcase.include?("adhoc")
|
128
|
+
cert_type = "Adhoc"
|
129
|
+
else
|
130
|
+
cert_type = "AppStore"
|
131
|
+
end
|
130
132
|
|
133
|
+
Funlog.instance.fancyinfo_start("正在安装#{cert_type} Provisioning Profiles...")
|
131
134
|
|
135
|
+
un_exist_files = []
|
132
136
|
provisioning_info_array = []
|
133
137
|
|
134
138
|
bundle_id_map.each do |type, bundle_id_temp|
|
135
139
|
profile_filename = File.join(certs_dir, "profiles", cert_type.downcase.to_s,[cert_type.to_s, bundle_id_temp].join('_') + '.mobileprovision')
|
136
|
-
|
137
140
|
unless File.exist?(profile_filename)
|
138
141
|
un_exist_files << profile_filename
|
139
142
|
next
|
140
143
|
end
|
141
|
-
puts "正在安装 #{
|
142
|
-
decrypt_password =
|
144
|
+
# puts "正在安装 #{bundle_id_temp}..."
|
145
|
+
decrypt_password = AESHelper.fetch_password(keychain_name:cert_url)
|
143
146
|
output_dir = Dir.mktmpdir
|
144
147
|
file_decrypt = AESHelper.decrypt_specific_file(src_file: profile_filename, password:decrypt_password, output_dir: output_dir)
|
145
148
|
destpath = Provisioninghelper.install(file_decrypt)
|
@@ -151,21 +154,24 @@ module Pindo
|
|
151
154
|
provisioning_info['profile_name'] = parsed_data['Name']
|
152
155
|
provisioning_info['profile_path'] = destpath
|
153
156
|
|
157
|
+
|
154
158
|
cert_info = get_cert_info(parsed_data["DeveloperCertificates"].first.string).to_h
|
155
159
|
provisioning_info['signing_identity'] = cert_info["Common Name"]
|
156
160
|
provisioning_info['team_id'] = parsed_data["TeamIdentifier"].first
|
157
161
|
|
158
|
-
puts JSON.pretty_generate(provisioning_info)
|
162
|
+
# puts JSON.pretty_generate(provisioning_info)
|
159
163
|
provisioning_info_array << provisioning_info
|
160
164
|
end
|
161
165
|
|
162
|
-
|
166
|
+
Funlog.instance.fancyinfo_success("#{cert_type} Provisioning Profiles文件安装完成!")
|
163
167
|
|
164
168
|
if un_exist_files.size > 0
|
169
|
+
Funlog.instance.fancyinfo_error("证书 #{cert_type} Provisioning Profiles文件不存在!")
|
165
170
|
raise Informative, "The following profiles do not exist: #{un_exist_files.join(', ')}"
|
166
171
|
end
|
167
172
|
|
168
173
|
return provisioning_info_array
|
174
|
+
|
169
175
|
end
|
170
176
|
|
171
177
|
|