pindo 4.6.9 → 4.7.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 +4 -4
- data/lib/pindo/base/aeshelper.rb +48 -2
- data/lib/pindo/base/funlog.rb +89 -0
- data/lib/pindo/base/githelper.rb +30 -12
- data/lib/pindo/base/plaininformative.rb +3 -0
- data/lib/pindo/base/standarderror.rb +1 -0
- data/lib/pindo/base/xcodeconst.rb +251 -0
- data/lib/pindo/client/applovinclient.rb +6 -3
- data/lib/pindo/client/aws3sclient.rb +33 -46
- data/lib/pindo/client/bossclient.rb +1 -1
- data/lib/pindo/client/pgyerclient.rb +78 -14
- data/lib/pindo/command/appstore/iap.rb +43 -0
- data/lib/pindo/command/appstore/itcapp.rb +41 -0
- data/lib/pindo/command/appstore/metadata.rb +43 -0
- data/lib/pindo/command/appstore/screenshots.rb +43 -0
- data/lib/pindo/command/appstore/upload.rb +40 -0
- data/lib/pindo/command/appstore.rb +17 -0
- data/lib/pindo/command/deploy/build.rb +109 -0
- data/lib/pindo/{deploy → command/deploy}/bundleid.rb +1 -1
- data/lib/pindo/command/deploy/cert.rb +179 -0
- data/lib/pindo/command/deploy/configproj.rb +105 -0
- data/lib/pindo/{deploy → command/deploy}/getitcinfo.rb +1 -1
- data/lib/pindo/{deploy → command/deploy}/iap.rb +30 -9
- data/lib/pindo/{deploy → command/deploy}/itcapp.rb +0 -1
- data/lib/pindo/{deploy → command/deploy}/itcinfo.rb +2 -3
- data/lib/pindo/{deploy → command/deploy}/pem.rb +3 -2
- data/lib/pindo/{deploy → command/deploy}/resign.rb +14 -63
- data/lib/pindo/command/deploy.rb +44 -0
- data/lib/pindo/{dev → command/dev}/autobuild.rb +17 -80
- data/lib/pindo/{dev → command/dev}/autoresign.rb +17 -64
- data/lib/pindo/{dev → command/dev}/createbuild.rb +0 -2
- data/lib/pindo/{dev → command/dev}/debug.rb +6 -2
- data/lib/pindo/command/dev/pgyercert.rb +75 -0
- data/lib/pindo/command/dev.rb +25 -0
- data/lib/pindo/command/env.rb +17 -0
- data/lib/pindo/{ipa → command/ipa}/autoresign.rb +18 -70
- data/lib/pindo/{ipa → command/ipa}/import.rb +47 -102
- data/lib/pindo/{ipa → command/ipa}/output.rb +38 -135
- data/lib/pindo/command/ipa.rb +16 -0
- data/lib/pindo/{lib → command/lib}/update.rb +19 -10
- data/lib/pindo/command/lib.rb +16 -0
- data/lib/pindo/{pgyer → command/pgyer}/apptest.rb +7 -29
- data/lib/pindo/{pgyer → command/pgyer}/comment.rb +7 -30
- data/lib/pindo/{pgyer → command/pgyer}/download.rb +35 -30
- data/lib/pindo/{pgyer → command/pgyer}/login.rb +3 -4
- data/lib/pindo/command/pgyer/resign.rb +111 -0
- data/lib/pindo/command/pgyer/upload.rb +123 -0
- data/lib/pindo/command/pgyer.rb +18 -0
- data/lib/pindo/{repo.rb → command/repo.rb} +4 -4
- data/lib/pindo/{utils → command/utils}/applovin.rb +43 -33
- data/lib/pindo/{utils → command/utils}/boss.rb +3 -3
- data/lib/pindo/command/utils/icon.rb +81 -0
- data/lib/pindo/{utils → command/utils}/renewproj.rb +1 -0
- data/lib/pindo/command/utils.rb +26 -0
- data/lib/pindo/command.rb +23 -26
- data/lib/pindo/module/build/swarkhelper.rb +95 -0
- data/lib/pindo/module/cert/certhelper.rb +176 -0
- data/lib/pindo/module/cert/keychainhelper.rb +138 -0
- data/lib/pindo/module/{pemcreate.rb → cert/pemhelper.rb} +3 -1
- data/lib/pindo/module/cert/provisioninghelper.rb +137 -0
- data/lib/pindo/module/cert/xcodecerthelper.rb +301 -0
- data/lib/pindo/module/{pgyerhelper.rb → pgyer/pgyerhelper.rb} +246 -35
- data/lib/pindo/module/xcode/xcodeappconfig.rb +188 -0
- data/lib/pindo/module/xcode/xcodebuildconfig.rb +12 -0
- data/lib/pindo/module/xcode/xcodebuildhelper.rb +312 -0
- data/lib/pindo/module/xcode/xcoderesconstant.rb +248 -0
- data/lib/pindo/module/xcode/xcodereshandler.rb +198 -0
- data/lib/pindo/module/xcode/xcodereshelper.rb +120 -0
- data/lib/pindo/options/appconfigoptions.rb +1 -0
- data/lib/pindo/options/deployoptions.rb +38 -41
- data/lib/pindo/version.rb +1 -1
- metadata +109 -97
- data/lib/pindo/deploy/Fastfile +0 -233
- data/lib/pindo/deploy/build.rb +0 -167
- data/lib/pindo/deploy/cert.rb +0 -508
- data/lib/pindo/deploy/configproj.rb +0 -89
- data/lib/pindo/deploy.rb +0 -44
- data/lib/pindo/dev.rb +0 -23
- data/lib/pindo/env/flutter.rb +0 -59
- data/lib/pindo/env/flutter.sh +0 -116
- data/lib/pindo/env.rb +0 -17
- data/lib/pindo/ipa.rb +0 -22
- data/lib/pindo/lib.rb +0 -18
- data/lib/pindo/module/buildconfighelper.rb +0 -13
- data/lib/pindo/module/buildhelper.rb +0 -76
- data/lib/pindo/module/config_project.sh +0 -143
- data/lib/pindo/module/configprojhelper.rb +0 -631
- data/lib/pindo/module/icon_contents.json +0 -116
- data/lib/pindo/module/imessage_icon.json +0 -91
- data/lib/pindo/module/imgset_contents.json +0 -21
- data/lib/pindo/module/launchimg_contents.json +0 -21
- data/lib/pindo/module/xcodebuildpre.rb +0 -258
- data/lib/pindo/pgyer/upload.rb +0 -234
- data/lib/pindo/pgyer.rb +0 -17
- data/lib/pindo/utils/icon.rb +0 -91
- data/lib/pindo/utils/icon.sh +0 -133
- data/lib/pindo/utils/podindex.rb +0 -56
- data/lib/pindo/utils/podindex.sh +0 -30
- data/lib/pindo/utils.rb +0 -29
- /data/lib/pindo/{deploy → command/deploy}/check.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/confusecode.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/confuseproj.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/fabric.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/initconfig.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/pullconfig.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/pushconfig.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/quswark.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/quswauth.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/reportbug.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/tag.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/updateconfig.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/uploadipa.rb +0 -0
- /data/lib/pindo/{dev → command/dev}/confusecode.rb +0 -0
- /data/lib/pindo/{dev → command/dev}/confuseproj.rb +0 -0
- /data/lib/pindo/{dev → command/dev}/pub.rb +0 -0
- /data/lib/pindo/{dev → command/dev}/renewcert.rb +0 -0
- /data/lib/pindo/{env → command/env}/dreamstudio.rb +0 -0
- /data/lib/pindo/{env → command/env}/quarkenv.rb +0 -0
- /data/lib/pindo/{env → command/env}/swarkenv.rb +0 -0
- /data/lib/pindo/{env → command/env}/workhard.rb +0 -0
- /data/lib/pindo/{lib → command/lib}/forcepush.rb +0 -0
- /data/lib/pindo/{lib → command/lib}/lint.rb +0 -0
- /data/lib/pindo/{lib → command/lib}/push.rb +0 -0
- /data/lib/pindo/{repo → command/repo}/clone.rb +0 -0
- /data/lib/pindo/{repo → command/repo}/create.rb +0 -0
- /data/lib/pindo/{repo → command/repo}/login.rb +0 -0
- /data/lib/pindo/{repo → command/repo}/search.rb +0 -0
- /data/lib/pindo/{setup.rb → command/setup.rb} +0 -0
- /data/lib/pindo/{upgrade.rb → command/upgrade.rb} +0 -0
- /data/lib/pindo/{utils → command/utils}/clearcert.rb +0 -0
- /data/lib/pindo/{utils → command/utils}/device.rb +0 -0
- /data/lib/pindo/{utils → command/utils}/tgate.rb +0 -0
- /data/lib/pindo/{utils → command/utils}/xcassets.rb +0 -0
- /data/lib/pindo/{utils → command/utils}/xcassets.sh +0 -0
- /data/lib/pindo/module/{appstore_in_app_purchase.rb → appstore/appstore_in_app_purchase.rb} +0 -0
- /data/lib/pindo/module/{appstore_metadata_connect_api_helper.rb → appstore/appstore_metadata_connect_api_helper.rb} +0 -0
- /data/lib/pindo/module/{appstore_metadata_fastlane_helper.rb → appstore/appstore_metadata_fastlane_helper.rb} +0 -0
- /data/lib/pindo/module/{iap_tier.json → appstore/iap_tier.json} +0 -0
- /data/lib/pindo/module/{commonconfuseproj.rb → build/commonconfuseproj.rb} +0 -0
- /data/lib/pindo/module/{xcodehelper.rb → xcode/xcodehelper.rb} +0 -0
|
@@ -12,6 +12,9 @@ module Pindo
|
|
|
12
12
|
|
|
13
13
|
class PgyerHelper
|
|
14
14
|
|
|
15
|
+
|
|
16
|
+
include Pindo::Githelper
|
|
17
|
+
|
|
15
18
|
class << self
|
|
16
19
|
attr_writer :instance
|
|
17
20
|
end
|
|
@@ -20,6 +23,172 @@ module Pindo
|
|
|
20
23
|
@instance ||= new
|
|
21
24
|
end
|
|
22
25
|
|
|
26
|
+
|
|
27
|
+
def initialize()
|
|
28
|
+
@force_login = false
|
|
29
|
+
@has_login = false
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def setForeLogin(beforeLogin:nil)
|
|
33
|
+
@force_login = beforeLogin
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def login
|
|
37
|
+
@pgyer_client = PgyerClient.new
|
|
38
|
+
if @force_login || !@has_login
|
|
39
|
+
@has_login = @pgyer_client.do_login(force_login:@force_login)
|
|
40
|
+
@force_login = false
|
|
41
|
+
end
|
|
42
|
+
return @has_login
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def prepare_upload(working_directory:nil, proj_name:nil)
|
|
46
|
+
upload_proj_name = proj_name
|
|
47
|
+
app_info_obj = nil
|
|
48
|
+
if login
|
|
49
|
+
|
|
50
|
+
if !proj_name.nil?
|
|
51
|
+
app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
if !app_info_obj.nil?
|
|
55
|
+
return app_info_obj
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
proj_name_array = []
|
|
59
|
+
if File.exist?(File.join(working_directory, "config.json"))
|
|
60
|
+
config_json = JSON.parse(File.read(File.join(working_directory, "config.json")))
|
|
61
|
+
proj_name_array << config_json["project_info"]["project_name"]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
|
65
|
+
upload_proj_name = File.basename(xcodeproj_file_name, ".xcodeproj") if xcodeproj_file_name
|
|
66
|
+
if !upload_proj_name.nil? && !upload_proj_name.empty?
|
|
67
|
+
proj_name_array << upload_proj_name
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
puts
|
|
71
|
+
dir_base_name = File.basename(working_directory)
|
|
72
|
+
unless ["Desktop", "Documents", "Downloads"].include?(dir_base_name)
|
|
73
|
+
proj_name_array << dir_base_name
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
proj_name_array << "自定义输入Pyger上的App代号"
|
|
77
|
+
|
|
78
|
+
if proj_name_array.size > 1
|
|
79
|
+
cli = HighLine.new
|
|
80
|
+
upload_proj_name = cli.choose do |menu|
|
|
81
|
+
menu.prompt = "请选择对应的Pgyer App代号:"
|
|
82
|
+
menu.choices(*proj_name_array)
|
|
83
|
+
end
|
|
84
|
+
if upload_proj_name.include?("自定义输入")
|
|
85
|
+
upload_proj_name = ask('请输入对应Pyger上的App代号(大小写空格忽略):') || nil
|
|
86
|
+
upload_proj_name = upload_proj_name.strip
|
|
87
|
+
end
|
|
88
|
+
else
|
|
89
|
+
upload_proj_name = ask('请输入对应Pyger上的App代号(大小写空格忽略):') || nil
|
|
90
|
+
upload_proj_name = upload_proj_name.strip
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
|
|
95
|
+
|
|
96
|
+
if app_info_obj.nil?
|
|
97
|
+
upload_proj_name = ask('请输入对应Pyger上的App代号(大小写空格忽略):') || nil
|
|
98
|
+
upload_proj_name = upload_proj_name.strip
|
|
99
|
+
app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
if app_info_obj.nil?
|
|
103
|
+
raise Informative, "#{upload_proj_name} 错误, 请输入正确的App代号, pgyer网站没有该App"
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
app_info_obj
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def start_upload(app_info_obj:nil, ipa_file_upload:nil, description:nil)
|
|
110
|
+
|
|
111
|
+
args_ipa_file_dir = File.expand_path(File::dirname(ipa_file_upload))
|
|
112
|
+
ipa_file_upload=File.join(args_ipa_file_dir, File.basename(ipa_file_upload))
|
|
113
|
+
|
|
114
|
+
current_project_dir = Dir.pwd
|
|
115
|
+
puts "current_project_dir : #{current_project_dir}"
|
|
116
|
+
puts description
|
|
117
|
+
puts File.exist?(File.join(current_project_dir, ".git"))
|
|
118
|
+
if description.nil? && File.exist?(File.join(current_project_dir, ".git"))
|
|
119
|
+
commit_id_info = git_latest_commit_id(local_repo_dir:current_project_dir)
|
|
120
|
+
if commit_id_info
|
|
121
|
+
description = "commit " + commit_id_info
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
puts "description : #{description}"
|
|
126
|
+
|
|
127
|
+
addtach_file = nil
|
|
128
|
+
if ipa_file_upload.include?(File.join(current_project_dir, "build")) && File.exist?(File.join(current_project_dir, "VMData"))
|
|
129
|
+
|
|
130
|
+
server_file_directory = Dir.glob(File.join(current_project_dir, "VMData/Archives/*")).max_by {|f| File.mtime(f)}
|
|
131
|
+
zip_base_name = File.basename(server_file_directory)
|
|
132
|
+
|
|
133
|
+
server_zipfile_name = File.join(current_project_dir, "VMData", zip_base_name+".zip")
|
|
134
|
+
|
|
135
|
+
if File.exist?(server_zipfile_name)
|
|
136
|
+
FileUtils.rm_rf(server_zipfile_name)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
Zip::File.open(server_zipfile_name, Zip::File::CREATE) do |zipfile|
|
|
140
|
+
Dir.chdir server_file_directory
|
|
141
|
+
Dir.glob("**/*").reject {|fn| File.directory?(fn) }.each do |file|
|
|
142
|
+
zipfile.add(file.sub(server_file_directory + '/', ''), file)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
addtach_file = server_zipfile_name
|
|
147
|
+
Dir.chdir current_project_dir
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
puts
|
|
152
|
+
puts "上传项目: #{app_info_obj["appName"]}"
|
|
153
|
+
puts "上传备注: #{description}"
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
aws_client = AWSS3Client.new
|
|
157
|
+
upload_res = aws_client.upload_file(binary_file:ipa_file_upload)
|
|
158
|
+
|
|
159
|
+
attach_key_url = nil
|
|
160
|
+
attachFileUrls = []
|
|
161
|
+
|
|
162
|
+
begin
|
|
163
|
+
if !addtach_file.nil? && File.exist?(addtach_file)
|
|
164
|
+
puts "存在附件, 继续上传附件..."
|
|
165
|
+
attach_key_url = aws_client.upload_file(binary_file:addtach_file, isAttach:true)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
if !attach_key_url.nil?
|
|
169
|
+
attachFileUrls << attach_key_url
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
rescue => error
|
|
173
|
+
puts "附件上传失败".bold.red
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
if !upload_res.nil? && !app_info_obj.nil?
|
|
177
|
+
|
|
178
|
+
puts attachFileUrls
|
|
179
|
+
|
|
180
|
+
result_data = @pgyer_client.post_app_update_binary(appId:app_info_obj["appId"], params:{
|
|
181
|
+
description: description,
|
|
182
|
+
s3Url: upload_res,
|
|
183
|
+
attachFileUrls:attachFileUrls
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
return result_data
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
end
|
|
191
|
+
|
|
23
192
|
def get_user_local_wechat_url( )
|
|
24
193
|
|
|
25
194
|
wechat_msg_url = nil
|
|
@@ -147,10 +316,15 @@ module Pindo
|
|
|
147
316
|
end
|
|
148
317
|
|
|
149
318
|
def find_app_info_with_obj_list(proj_name:nil)
|
|
319
|
+
|
|
150
320
|
if proj_name.nil?
|
|
151
321
|
return nil
|
|
152
322
|
end
|
|
153
323
|
|
|
324
|
+
Funlog.instance.fancyinfo_start("正在拉取app信息列表,查找app信息...")
|
|
325
|
+
|
|
326
|
+
get_app_list_in_pgyer()
|
|
327
|
+
|
|
154
328
|
key_proj_name = proj_name.downcase.strip.gsub(/[\s\-_]/, '')
|
|
155
329
|
|
|
156
330
|
app_info_list = Pindoconfig.instance.get_pgyerapps_info_list()
|
|
@@ -159,12 +333,14 @@ module Pindo
|
|
|
159
333
|
app_info_item_name.eql?(key_proj_name) && app_info_item["appType"].eql?("iOS")
|
|
160
334
|
end
|
|
161
335
|
|
|
336
|
+
Funlog.instance.fancyinfo_success("拉取app信息列表完成,app信息获取成功!")
|
|
337
|
+
|
|
162
338
|
app_info_obj
|
|
163
339
|
end
|
|
164
340
|
|
|
165
|
-
def get_app_version(
|
|
341
|
+
def get_app_version(appId:nil, app_version_index:nil, latest_version:true)
|
|
166
342
|
|
|
167
|
-
version_data =
|
|
343
|
+
version_data = @pgyer_client.get_app_version_list_req(appId:appId)
|
|
168
344
|
|
|
169
345
|
version_item_obj = nil
|
|
170
346
|
if latest_version
|
|
@@ -180,9 +356,9 @@ module Pindo
|
|
|
180
356
|
return version_item_obj
|
|
181
357
|
end
|
|
182
358
|
|
|
183
|
-
def get_app_list_in_pgyer(
|
|
359
|
+
def get_app_list_in_pgyer()
|
|
360
|
+
|
|
184
361
|
|
|
185
|
-
puts "正在向pgyer拉取app信息列表, 查找app信息..."
|
|
186
362
|
params = {
|
|
187
363
|
pageNo:1,
|
|
188
364
|
pageSize:1000
|
|
@@ -190,7 +366,7 @@ module Pindo
|
|
|
190
366
|
|
|
191
367
|
app_info_list = Pindoconfig.instance.get_pgyerapps_info_list()
|
|
192
368
|
if app_info_list.nil?
|
|
193
|
-
res_data =
|
|
369
|
+
res_data = @pgyer_client.get_app_list_req(params:params)
|
|
194
370
|
# puts JSON.pretty_generate(res_data)
|
|
195
371
|
if !res_data["data"].nil? && res_data["data"].size > 0
|
|
196
372
|
app_info_list = res_data["data"]
|
|
@@ -199,7 +375,7 @@ module Pindo
|
|
|
199
375
|
end
|
|
200
376
|
|
|
201
377
|
if app_info_list.nil?
|
|
202
|
-
res_data =
|
|
378
|
+
res_data = @pgyer_client.get_app_list_req(params:params)
|
|
203
379
|
# puts JSON.pretty_generate(res_data)
|
|
204
380
|
if !res_data["data"].nil? && res_data["data"].size > 0
|
|
205
381
|
app_info_list = res_data["data"]
|
|
@@ -208,15 +384,20 @@ module Pindo
|
|
|
208
384
|
end
|
|
209
385
|
|
|
210
386
|
if app_info_list.nil?
|
|
387
|
+
Funlog.instance.fancyinfo_error("拉取app信息列表失败!")
|
|
211
388
|
raise Informative, "Pgyer网络数据异常!!!"
|
|
212
389
|
end
|
|
390
|
+
|
|
391
|
+
|
|
213
392
|
return app_info_list
|
|
214
393
|
end
|
|
215
394
|
|
|
216
|
-
def get_versioon_history_item(
|
|
395
|
+
def get_versioon_history_item(app_info_obj:nil, list_select_flat:false)
|
|
396
|
+
|
|
397
|
+
Funlog.instance.fancyinfo_start("正在拉取app上传记录...")
|
|
217
398
|
|
|
218
399
|
appId = app_info_obj["appId"]
|
|
219
|
-
version_data =
|
|
400
|
+
version_data = @pgyer_client.get_app_version_list_req(appId:appId) || {}
|
|
220
401
|
|
|
221
402
|
if version_data["data"].nil? || version_data["data"].size <=0
|
|
222
403
|
raise Informative, "#{proj_name} 错误, 没有找到上传记录"
|
|
@@ -240,10 +421,11 @@ module Pindo
|
|
|
240
421
|
version_array_temp.each do |item|
|
|
241
422
|
puts "版本:#{item["appVersion"]} Build号:#{item["incId"]} bundleId:#{item["bundleId"]} 上传时间:#{item["updateTime"]}"
|
|
242
423
|
end
|
|
243
|
-
puts
|
|
244
424
|
app_incId_index = ask('请选择上面的Build号:')
|
|
245
425
|
|
|
246
426
|
end
|
|
427
|
+
|
|
428
|
+
Funlog.instance.fancyinfo_success("拉取app上传记录完成!")
|
|
247
429
|
|
|
248
430
|
version_item_obj = nil
|
|
249
431
|
if !app_incId_index.nil?
|
|
@@ -252,6 +434,7 @@ module Pindo
|
|
|
252
434
|
version_item_obj = version_data["data"].find{ |item| item["latest"]}
|
|
253
435
|
end
|
|
254
436
|
|
|
437
|
+
|
|
255
438
|
version_item_obj
|
|
256
439
|
|
|
257
440
|
end
|
|
@@ -277,7 +460,7 @@ module Pindo
|
|
|
277
460
|
return comment_str
|
|
278
461
|
end
|
|
279
462
|
|
|
280
|
-
def modify_coment(
|
|
463
|
+
def modify_coment(app_info_obj:nil, version_item_obj:nil)
|
|
281
464
|
|
|
282
465
|
comment_str = get_description()
|
|
283
466
|
puts
|
|
@@ -300,36 +483,64 @@ module Pindo
|
|
|
300
483
|
raise Informative, "暂停修改!!"
|
|
301
484
|
end
|
|
302
485
|
|
|
303
|
-
|
|
486
|
+
@pgyer_client.post_update_upload_comment(appId:app_info_obj["appId"], id:version_item_obj["id"], comment:comment_str.strip)
|
|
304
487
|
|
|
305
488
|
puts "备注信息修改成功!!"
|
|
306
489
|
|
|
307
490
|
end
|
|
308
491
|
|
|
309
|
-
def
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
492
|
+
def get_cert_list( )
|
|
493
|
+
|
|
494
|
+
Funlog.instance.fancyinfo_start("正在获取可用证书...")
|
|
495
|
+
result = @pgyer_client.get_cert_list()
|
|
496
|
+
|
|
497
|
+
Funlog.instance.fancyinfo_success("获取可用证书完成!")
|
|
498
|
+
return result["data"]
|
|
499
|
+
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
def resign(version_id:nil, cert_id:nil)
|
|
503
|
+
|
|
504
|
+
Funlog.instance.fancyinfo_start("正在重签名...")
|
|
505
|
+
result = @pgyer_client.post_resign(appVersionId:version_id, certId:cert_id)
|
|
506
|
+
if !result.nil? && result["code"] == 200 && result["data"] == "success"
|
|
507
|
+
Funlog.instance.fancyinfo_success("重签名成功!")
|
|
508
|
+
return true
|
|
509
|
+
else
|
|
510
|
+
Funlog.instance.fancyinfo_error("重签名失败!")
|
|
511
|
+
return false
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
def make_msg_data(app_info_obj:nil, app_version_info_obj:nil)
|
|
519
|
+
|
|
520
|
+
msg_from = @pgyer_client.token["username"]
|
|
521
|
+
|
|
522
|
+
app_name = app_info_obj["appName"]
|
|
523
|
+
download_password = app_info_obj["password"]
|
|
524
|
+
download_url = app_info_obj["downloadUrl"] + "?" + "id=" + app_version_info_obj["id"]
|
|
525
|
+
bundle_id = app_version_info_obj["bundleId"]
|
|
526
|
+
app_version = app_version_info_obj["appVersion"]
|
|
527
|
+
index_num = app_version_info_obj["incId"]
|
|
528
|
+
time = app_version_info_obj["updateTime"]
|
|
529
|
+
description = app_version_info_obj["description"]
|
|
530
|
+
msg_from = msg_from || " "
|
|
531
|
+
msg_data ={
|
|
532
|
+
app_name: app_name,
|
|
533
|
+
download_password: download_password,
|
|
534
|
+
download_url: download_url,
|
|
535
|
+
bundle_id: bundle_id,
|
|
536
|
+
app_version: app_version,
|
|
537
|
+
index_num: index_num,
|
|
538
|
+
time: time,
|
|
539
|
+
description: description,
|
|
540
|
+
msg_from:msg_from
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return msg_data
|
|
333
544
|
|
|
334
545
|
end
|
|
335
546
|
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'xcodeproj'
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module Pindo
|
|
6
|
+
|
|
7
|
+
module XcodeAppConfig
|
|
8
|
+
|
|
9
|
+
def auto_increase_buildnumber(app_config_file:nil)
|
|
10
|
+
|
|
11
|
+
if !File.exist?(app_config_file)
|
|
12
|
+
config_json = JSON.parse(File.read(app_config_file))
|
|
13
|
+
app_version = config_json['app_info']['app_version']
|
|
14
|
+
app_build_version = config_json['app_info']['app_build_version']
|
|
15
|
+
|
|
16
|
+
app_version_array = app_version.split('.') || []
|
|
17
|
+
app_build_version_array = app_build_version.split('.') || []
|
|
18
|
+
|
|
19
|
+
while app_build_version_array.size < app_version_array.size + 1 do
|
|
20
|
+
app_version_array << "0"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
last_numer = app_build_version_array.pop.to_s
|
|
24
|
+
new_last_numer = last_numer.to_i + 1
|
|
25
|
+
app_build_version_array << new_last_numer.to_s
|
|
26
|
+
app_build_version = app_build_version_array.join(".")
|
|
27
|
+
|
|
28
|
+
config_json['app_info']['app_build_version'] = app_build_version
|
|
29
|
+
File.open(app_origin_config, "w") do |file|
|
|
30
|
+
file.write(JSON.pretty_generate(config_json))
|
|
31
|
+
file.close
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def add_project_modue(project_dir:nil, proj_name:nil, config_json:nil)
|
|
37
|
+
|
|
38
|
+
module_dict = config_json['project_info']['project_module']
|
|
39
|
+
if !module_dict.nil?
|
|
40
|
+
module_dict.each do |key, module_item|
|
|
41
|
+
# puts module_item
|
|
42
|
+
# puts module_item['module_type']
|
|
43
|
+
if module_item && module_item['module_type'] = 'pod'
|
|
44
|
+
add_pod_modue(project_dir:project_dir, pod_name:key, pod_version:module_item['module_git_tag'])
|
|
45
|
+
elsif module_item && module_item['module_type'] = 'sub_git'
|
|
46
|
+
|
|
47
|
+
elsif module_item && module_item['module_type'] = 'package'
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
def remove_test_pod_modue(project_dir:nil)
|
|
55
|
+
|
|
56
|
+
pod_file = File.join(project_dir, "Podfile")
|
|
57
|
+
|
|
58
|
+
command = 'sed -i "" "/.*' + "FancySettingsPlugin" +'.*/d" ' + pod_file
|
|
59
|
+
system command
|
|
60
|
+
|
|
61
|
+
command = 'sed -i "" "/.*' + "TYSettingsPlugin" +'.*/d" ' + pod_file
|
|
62
|
+
system command
|
|
63
|
+
|
|
64
|
+
command = 'sed -i "" "/.*' + "CSSettingsPlugin" +'.*/d" ' + pod_file
|
|
65
|
+
system command
|
|
66
|
+
|
|
67
|
+
command = 'sed -i "" "/.*' + "FunnySettingsPlugin" +'.*/d" ' + pod_file
|
|
68
|
+
system command
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def add_pod_modue(project_dir:nil, pod_name:nil, pod_version:nil)
|
|
72
|
+
|
|
73
|
+
puts "Modify App Podfile: "
|
|
74
|
+
# if File.exist?(File.join(project_dir, "Podfile.lock"))
|
|
75
|
+
# FileUtils.rm_rf(File.join(project_dir, "Podfile.lock"))
|
|
76
|
+
# end
|
|
77
|
+
|
|
78
|
+
pod_file = File.join(project_dir, "Podfile")
|
|
79
|
+
|
|
80
|
+
command = 'sed -i "" "/.*' + "AppSource" +'.*/d" ' + pod_file
|
|
81
|
+
system command
|
|
82
|
+
|
|
83
|
+
command = 'sed -i "" "/.*' + "QuarkData" +'.*/d" ' + pod_file
|
|
84
|
+
system command
|
|
85
|
+
|
|
86
|
+
command = 'sed -i "" "/.*' + "VMData" +'.*/d" ' + pod_file
|
|
87
|
+
system command
|
|
88
|
+
|
|
89
|
+
command = 'sed -i "" "/.*' + pod_name +'.*/d" ' + pod_file
|
|
90
|
+
system command
|
|
91
|
+
|
|
92
|
+
if File.exist?(File.join(project_dir, "Podfile"))
|
|
93
|
+
puts " #{pod_name} #{pod_version}"
|
|
94
|
+
text = File.read(File.join(project_dir, "Podfile"))
|
|
95
|
+
|
|
96
|
+
if pod_version.nil? || pod_version == "" || pod_version.empty?
|
|
97
|
+
|
|
98
|
+
if text.include?("FirebaseAnalytics")
|
|
99
|
+
new_contents = text.gsub!(/\'FirebaseAnalytics\'.*$/, "\'FirebaseAnalytics\'\r\n pod \'#{pod_name}\' ")
|
|
100
|
+
elsif text.include?("UMCommon")
|
|
101
|
+
new_contents = text.gsub!(/\'UMCommon\'.*$/, "\'UMCommon\'\r\n pod \'#{pod_name}\' ")
|
|
102
|
+
end
|
|
103
|
+
else
|
|
104
|
+
if text.include?("FirebaseAnalytics")
|
|
105
|
+
new_contents = text.gsub!(/\'FirebaseAnalytics\'.*$/, "\'FirebaseAnalytics\'\r\n pod \'#{pod_name}\', \'#{pod_version}\' ")
|
|
106
|
+
elsif text.include?("UMCommon")
|
|
107
|
+
new_contents = text.gsub!(/\'UMCommon\'.*$/, "\'UMCommon\'\r\n pod \'#{pod_name}\', \'#{pod_version}\' ")
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
File.open(File.join(project_dir, "Podfile"), "w") {|file| file.puts new_contents }
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def find_group(group:nil, group_name:nil)
|
|
116
|
+
|
|
117
|
+
if group.display_name == group_name
|
|
118
|
+
return group
|
|
119
|
+
else
|
|
120
|
+
if group.children.count > 0
|
|
121
|
+
group.children.each do |child|
|
|
122
|
+
if Xcodeproj::Project::Object::PBXGroup == child.class
|
|
123
|
+
result = find_group(group:child, group_name:group_name)
|
|
124
|
+
if !result.nil?
|
|
125
|
+
return result
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
return nil
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def modify_appprefix_plist(project_dir:nil, appprefix_file:nil, config_json:nil)
|
|
138
|
+
|
|
139
|
+
project_fullname = Dir.glob(File.join(project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
|
140
|
+
project_obj = Xcodeproj::Project.open(project_fullname)
|
|
141
|
+
presources_group = find_group(group:project_obj.main_group, group_name:"PResources")
|
|
142
|
+
|
|
143
|
+
if presources_group.nil?
|
|
144
|
+
raise Informative, "没有找到资源目录PResources!!!!"
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
presources_path = presources_group.real_path
|
|
148
|
+
|
|
149
|
+
config_file = Dir.glob(File.join(presources_path, "**", appprefix_file)).first
|
|
150
|
+
if config_file.nil? || config_file.empty? || !File.exist?(config_file)
|
|
151
|
+
raise Informative, "工程本地配置未修改,PResources/目录下没有找到对应的配置文件 #{appprefix_file} !!!!"
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
config_json['app_setting'].each do |key, value|
|
|
156
|
+
# puts value
|
|
157
|
+
if !value.nil? && value.to_s.include?("__________config")
|
|
158
|
+
raise Informative, "config.json 配置文件key : #{key} 包含初始值未修改, 配置正确的值或者删除!!!"
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
xcode_config_value = nil
|
|
163
|
+
if config_file.end_with?(".plist") then
|
|
164
|
+
xcode_config_value = Xcodeproj::Plist.read_from_path(config_file)
|
|
165
|
+
else
|
|
166
|
+
xcode_config_value=JSON.parse(File.read(config_file))
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
new_info_plist_dict = {}
|
|
170
|
+
xcode_config_value.each do |key, value|
|
|
171
|
+
if !config_json['app_setting'][key].nil? && config_json['app_setting'][key] != ""
|
|
172
|
+
new_info_plist_dict[key] = config_json['app_setting'][key]
|
|
173
|
+
else
|
|
174
|
+
new_info_plist_dict[key] = value
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
if config_file.end_with?(".plist") then
|
|
179
|
+
Xcodeproj::Plist.write_to_path(new_info_plist_dict, config_file)
|
|
180
|
+
else
|
|
181
|
+
File.open(config_file, "w") do |f|
|
|
182
|
+
f.write(JSON.pretty_generate(new_info_plist_dict))
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
end
|
|
188
|
+
end
|