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
|
@@ -42,14 +42,15 @@ module Pindo
|
|
|
42
42
|
|
|
43
43
|
def do_login(force_login:false)
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
|
|
47
|
+
login_success = false
|
|
47
48
|
@token = load_token()
|
|
48
49
|
if !@token.nil? && !@token["token"].nil? && !force_login
|
|
49
50
|
login_success = true
|
|
50
51
|
|
|
51
|
-
puts "用户#{@token["username"]}登录pgyer成功!!!"
|
|
52
|
-
puts
|
|
52
|
+
# puts "用户#{@token["username"]}登录pgyer成功!!!"
|
|
53
|
+
# puts
|
|
53
54
|
|
|
54
55
|
else
|
|
55
56
|
username = nil
|
|
@@ -66,11 +67,11 @@ module Pindo
|
|
|
66
67
|
login_success = true
|
|
67
68
|
end
|
|
68
69
|
end
|
|
70
|
+
|
|
69
71
|
return login_success
|
|
70
72
|
end
|
|
71
73
|
|
|
72
74
|
def do_login_req(username:nil, checksum_password:nil)
|
|
73
|
-
puts "do logn pgyer --- "
|
|
74
75
|
|
|
75
76
|
|
|
76
77
|
login_name = username
|
|
@@ -78,7 +79,7 @@ module Pindo
|
|
|
78
79
|
login_name = ask('请输入pgger网站的usernmae:') || nil
|
|
79
80
|
end
|
|
80
81
|
|
|
81
|
-
puts "
|
|
82
|
+
puts "用户: #{login_name} "
|
|
82
83
|
|
|
83
84
|
result_data = do_send_code(username:login_name)
|
|
84
85
|
|
|
@@ -93,6 +94,8 @@ module Pindo
|
|
|
93
94
|
|
|
94
95
|
# puts "passwork: #{checksum_pass}"
|
|
95
96
|
|
|
97
|
+
Funlog.instance.fancyinfo_start("正在登录pgyer...")
|
|
98
|
+
|
|
96
99
|
boss_url = @baseurl + @request_config["do_login"]
|
|
97
100
|
body_params = {
|
|
98
101
|
username:login_name,
|
|
@@ -115,10 +118,12 @@ module Pindo
|
|
|
115
118
|
|
|
116
119
|
|
|
117
120
|
if !res.body.nil?
|
|
121
|
+
|
|
118
122
|
login_response_data = JSON.parse(res.body)
|
|
119
123
|
end
|
|
120
124
|
|
|
121
125
|
rescue => error
|
|
126
|
+
Funlog.instance.fancyinfo_error("pgyer登录失败!")
|
|
122
127
|
puts "登录失败,请重试!!!"
|
|
123
128
|
end
|
|
124
129
|
|
|
@@ -127,18 +132,20 @@ module Pindo
|
|
|
127
132
|
# puts JSON.pretty_generate(login_response_data)
|
|
128
133
|
|
|
129
134
|
if !login_response_data.nil? && !login_response_data["code"].nil? && login_response_data["code"].to_s.eql?("200")
|
|
130
|
-
puts "登录成功!!!"
|
|
131
135
|
|
|
132
136
|
token = {}
|
|
133
137
|
token= login_response_data["data"]
|
|
134
138
|
token["password"] = checksum_pass
|
|
135
139
|
# puts JSON.pretty_generate(token)
|
|
136
140
|
store_token(token:token)
|
|
141
|
+
|
|
142
|
+
Funlog.instance.fancyinfo_success("用户:#{@token["username"]}登录pgyer成功!")
|
|
143
|
+
|
|
137
144
|
else
|
|
138
145
|
if File.exist?(@pgyer_token_file)
|
|
139
146
|
FileUtils.rm_rf(@pgyer_token_file)
|
|
140
147
|
end
|
|
141
|
-
|
|
148
|
+
Funlog.instance.fancyinfo_error("pgyer登录失败!")
|
|
142
149
|
end
|
|
143
150
|
|
|
144
151
|
return token
|
|
@@ -148,6 +155,7 @@ module Pindo
|
|
|
148
155
|
def load_token()
|
|
149
156
|
|
|
150
157
|
@token = nil
|
|
158
|
+
Funlog.instance.fancyinfo_success("正在读取pgyer token...")
|
|
151
159
|
if File.exist?(@pgyer_token_file)
|
|
152
160
|
begin
|
|
153
161
|
data = File.read(@pgyer_token_file)
|
|
@@ -157,7 +165,7 @@ module Pindo
|
|
|
157
165
|
temp_token = JSON.parse(data_string)
|
|
158
166
|
if !temp_token.nil? && !temp_token["token"].nil? && !temp_token["username"].nil?
|
|
159
167
|
@token = temp_token
|
|
160
|
-
|
|
168
|
+
Funlog.instance.fancyinfo_success("读取pgyer token成功!")
|
|
161
169
|
end
|
|
162
170
|
rescue => error
|
|
163
171
|
puts error
|
|
@@ -165,10 +173,11 @@ module Pindo
|
|
|
165
173
|
if File.exist?(@pgyer_token_file)
|
|
166
174
|
FileUtils.rm_rf(@pgyer_token_file)
|
|
167
175
|
end
|
|
176
|
+
Funlog.instance.fancyinfo_error("pgyer token文件不存在!")
|
|
168
177
|
@token = nil
|
|
169
178
|
end
|
|
170
179
|
else
|
|
171
|
-
|
|
180
|
+
Funlog.instance.fancyinfo_error("pgyer token文件不存在!")
|
|
172
181
|
end
|
|
173
182
|
|
|
174
183
|
return @token
|
|
@@ -183,11 +192,10 @@ module Pindo
|
|
|
183
192
|
File.open(@pgyer_token_file, "w") do |f|
|
|
184
193
|
f.write(data_string)
|
|
185
194
|
end
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
puts error
|
|
195
|
+
Funlog.instance.fancyinfo_success("token 存储成功!")
|
|
196
|
+
# puts "store pgyer token---- sucess !!!"
|
|
197
|
+
rescue => error
|
|
198
|
+
Funlog.instance.fancyinfo_error("token存储失败!")
|
|
191
199
|
end
|
|
192
200
|
end
|
|
193
201
|
|
|
@@ -428,6 +436,62 @@ module Pindo
|
|
|
428
436
|
end
|
|
429
437
|
|
|
430
438
|
|
|
439
|
+
# puts JSON.pretty_generate(result_date)
|
|
440
|
+
|
|
441
|
+
return result_date
|
|
442
|
+
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
def get_cert_list( )
|
|
446
|
+
|
|
447
|
+
params = {} if params.nil?
|
|
448
|
+
boss_url = @baseurl + @request_config["get_cert_list"]
|
|
449
|
+
|
|
450
|
+
con = HttpClient.create_instance_with_proxy
|
|
451
|
+
res = con.get do |req|
|
|
452
|
+
req.url boss_url
|
|
453
|
+
req.headers['Content-Type'] = 'application/json'
|
|
454
|
+
req.headers['token'] = @token["token"]
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
result_date = nil
|
|
458
|
+
if !res.body.nil?
|
|
459
|
+
result_date = JSON.parse(res.body)
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
# puts JSON.pretty_generate(result_date)
|
|
464
|
+
|
|
465
|
+
return result_date
|
|
466
|
+
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
def post_resign(appVersionId:nil, certId:nil)
|
|
470
|
+
|
|
471
|
+
boss_url = @baseurl + @request_config["post_resign"]
|
|
472
|
+
|
|
473
|
+
body_params = {
|
|
474
|
+
appVersionId:appVersionId,
|
|
475
|
+
certId:certId
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
con = HttpClient.create_instance_with_proxy
|
|
480
|
+
|
|
481
|
+
res = con.post do |req|
|
|
482
|
+
req.url boss_url
|
|
483
|
+
req.headers['Content-Type'] = 'application/json'
|
|
484
|
+
req.headers['token'] = @token["token"]
|
|
485
|
+
req.body = body_params.to_json
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
result_date = nil
|
|
490
|
+
if !res.body.nil?
|
|
491
|
+
result_date = JSON.parse(res.body)
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
|
|
431
495
|
# puts JSON.pretty_generate(result_date)
|
|
432
496
|
|
|
433
497
|
return result_date
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'highline/import'
|
|
2
|
+
require 'xcodeproj'
|
|
3
|
+
require 'find'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
|
|
6
|
+
module Pindo
|
|
7
|
+
class Command
|
|
8
|
+
class Appstore < Command
|
|
9
|
+
class Iap < Appstore
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
self.summary = 'Appstore中iap相关操作'
|
|
13
|
+
|
|
14
|
+
self.description = <<-DESC
|
|
15
|
+
Appstore中iap相关操作,配置目录下执行:pindo appstore iap, 默认创建iap购买项
|
|
16
|
+
DESC
|
|
17
|
+
|
|
18
|
+
self.arguments = [
|
|
19
|
+
CLAide::Argument.new('path/to/config.json', false),
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
def self.options
|
|
23
|
+
[
|
|
24
|
+
['--download', '下载app的所有购买项,用法:pindo ipa output --download'],
|
|
25
|
+
].concat(super)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def initialize(argv)
|
|
29
|
+
|
|
30
|
+
@args_download_name = argv.option('download')
|
|
31
|
+
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def run
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'highline/import'
|
|
2
|
+
require 'xcodeproj'
|
|
3
|
+
require 'find'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
|
|
6
|
+
module Pindo
|
|
7
|
+
class Command
|
|
8
|
+
class Appstore < Command
|
|
9
|
+
class Itcapp < Appstore
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
self.summary = 'Appstore中创建app'
|
|
13
|
+
|
|
14
|
+
self.description = <<-DESC
|
|
15
|
+
Appstore中创建app,配置目录下执行:pindo appstore itcapp
|
|
16
|
+
DESC
|
|
17
|
+
|
|
18
|
+
self.arguments = [
|
|
19
|
+
CLAide::Argument.new('path/to/config.json', false),
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
def self.options
|
|
23
|
+
[
|
|
24
|
+
|
|
25
|
+
].concat(super)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def initialize(argv)
|
|
29
|
+
|
|
30
|
+
super
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def run
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'highline/import'
|
|
2
|
+
require 'xcodeproj'
|
|
3
|
+
require 'find'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
|
|
6
|
+
module Pindo
|
|
7
|
+
class Command
|
|
8
|
+
class Appstore < Command
|
|
9
|
+
class Metadata < Appstore
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
self.summary = 'Appstore中metadata相关操作'
|
|
13
|
+
|
|
14
|
+
self.description = <<-DESC
|
|
15
|
+
Appstore中metadata相关操作, 用法:pindo appstre metadata
|
|
16
|
+
DESC
|
|
17
|
+
|
|
18
|
+
self.arguments = [
|
|
19
|
+
CLAide::Argument.new('path/to/config.json', false),
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
def self.options
|
|
23
|
+
[
|
|
24
|
+
['--download', '下载app的所有购买项,用法:pindo appstore metadata --download'],
|
|
25
|
+
].concat(super)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def initialize(argv)
|
|
29
|
+
|
|
30
|
+
@args_download_name = argv.option('download')
|
|
31
|
+
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def run
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'highline/import'
|
|
2
|
+
require 'xcodeproj'
|
|
3
|
+
require 'find'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
|
|
6
|
+
module Pindo
|
|
7
|
+
class Command
|
|
8
|
+
class Appstore < Command
|
|
9
|
+
class Screenshots < Appstore
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
self.summary = 'Appstore中screenshots相关操作'
|
|
13
|
+
|
|
14
|
+
self.description = <<-DESC
|
|
15
|
+
Appstore中screenshots相关操作, 用法:pindo appstre screenshots
|
|
16
|
+
DESC
|
|
17
|
+
|
|
18
|
+
self.arguments = [
|
|
19
|
+
CLAide::Argument.new('path/to/config.json', false),
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
def self.options
|
|
23
|
+
[
|
|
24
|
+
['--download', '下载app的所有购买项,用法:pindo appstore screenshots --download'],
|
|
25
|
+
].concat(super)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def initialize(argv)
|
|
29
|
+
|
|
30
|
+
@args_download_name = argv.option('download')
|
|
31
|
+
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def run
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'highline/import'
|
|
2
|
+
require 'xcodeproj'
|
|
3
|
+
require 'find'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
|
|
6
|
+
module Pindo
|
|
7
|
+
class Command
|
|
8
|
+
class Appstore < Command
|
|
9
|
+
class Upload < Appstore
|
|
10
|
+
|
|
11
|
+
self.summary = '上传ipa到appstore'
|
|
12
|
+
|
|
13
|
+
self.description = <<-DESC
|
|
14
|
+
上传ipa到appstore:pindo appstore upload
|
|
15
|
+
DESC
|
|
16
|
+
|
|
17
|
+
self.arguments = [
|
|
18
|
+
CLAide::Argument.new('path/to/config.json', false),
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
def self.options
|
|
22
|
+
[
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
].concat(super)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def initialize(argv)
|
|
29
|
+
|
|
30
|
+
super
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def run
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
require 'pindo/command/appstore/iap'
|
|
3
|
+
require 'pindo/command/appstore/itcapp'
|
|
4
|
+
require 'pindo/command/appstore/metadata'
|
|
5
|
+
require 'pindo/command/appstore/screenshots'
|
|
6
|
+
require 'pindo/command/appstore/upload'
|
|
7
|
+
|
|
8
|
+
module Pindo
|
|
9
|
+
class Command
|
|
10
|
+
|
|
11
|
+
class Appstore < Command
|
|
12
|
+
self.abstract_command = true
|
|
13
|
+
self.summary = 'appstore的相关命令'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
require 'highline/import'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'xcodeproj'
|
|
5
|
+
require 'gym'
|
|
6
|
+
|
|
7
|
+
module Pindo
|
|
8
|
+
class Command
|
|
9
|
+
class Deploy < Command
|
|
10
|
+
class Build < Deploy
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
self.summary = '编译工程'
|
|
14
|
+
|
|
15
|
+
self.description = <<-DESC
|
|
16
|
+
编译工程. 用法:在工程目录下执行 pindo deploy build
|
|
17
|
+
DESC
|
|
18
|
+
|
|
19
|
+
self.arguments = [
|
|
20
|
+
CLAide::Argument.new('path/to/config.json', true),
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
def initialize(argv)
|
|
24
|
+
super
|
|
25
|
+
@additional_args = argv.remainder!
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def run
|
|
29
|
+
|
|
30
|
+
new_project_dir = Dir.pwd
|
|
31
|
+
project_fullname = Dir.glob(File.join(new_project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
|
32
|
+
|
|
33
|
+
if File.exist?(File.join(new_project_dir, "build"))
|
|
34
|
+
FileUtils.rm_rf(File.join(new_project_dir, "build"))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
gym_options = get_gym_build_values(project_fullname:project_fullname)
|
|
39
|
+
|
|
40
|
+
config = FastlaneCore::Configuration.create(Gym::Options.available_options, gym_options)
|
|
41
|
+
Gym::Manager.new.work(config)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def get_gym_build_values(project_fullname:nil)
|
|
48
|
+
|
|
49
|
+
if project_fullname.nil?
|
|
50
|
+
raise "请指定要编译的工程"
|
|
51
|
+
end
|
|
52
|
+
project_path = File.dirname(project_fullname)
|
|
53
|
+
proj_name = File.basename(project_fullname, ".xcodeproj")
|
|
54
|
+
project_obj = Xcodeproj::Project.open(project_fullname)
|
|
55
|
+
main_target = project_obj.targets.select { |target| target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) }.first
|
|
56
|
+
provisioning_profile_name = main_target.build_configurations.first.build_settings['PROVISIONING_PROFILE_SPECIFIER'].downcase.split(" ")
|
|
57
|
+
|
|
58
|
+
build_type = "app-store"
|
|
59
|
+
icloud_env = "Production"
|
|
60
|
+
if provisioning_profile_name.include?("adhoc")
|
|
61
|
+
build_type = "ad-hoc"
|
|
62
|
+
icloud_env = "Development"
|
|
63
|
+
elsif provisioning_profile_name.include?("development")
|
|
64
|
+
build_type = "development"
|
|
65
|
+
icloud_env = "Development"
|
|
66
|
+
else
|
|
67
|
+
build_type = "app-store"
|
|
68
|
+
icloud_env = "Production"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
app_ipaname_temp = main_target.build_configurations.first.build_settings['INFOPLIST_KEY_CFBundleDisplayName'] || main_target.display_name
|
|
73
|
+
app_ipaname_temp = app_ipaname_temp.gsub(/ /, '');
|
|
74
|
+
app_ipaname_temp = app_ipaname_temp.gsub(/\'/, '');
|
|
75
|
+
|
|
76
|
+
values = {
|
|
77
|
+
project: "#{proj_name}.xcodeproj",
|
|
78
|
+
scheme:"#{proj_name}",
|
|
79
|
+
configuration: "Release",
|
|
80
|
+
clean: true,
|
|
81
|
+
export_method: build_type,
|
|
82
|
+
output_directory:"./build/",
|
|
83
|
+
output_name: "#{app_ipaname_temp}.ipa"
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
if File.exist?(File.join(project_path, "Podfile"))
|
|
88
|
+
values[:workspace] = "#{proj_name}.xcworkspace"
|
|
89
|
+
values[:project] = nil
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
values[:export_options] ||={}
|
|
93
|
+
values[:export_options][:compileBitcode] = false
|
|
94
|
+
values[:export_options][:stripSwiftSymbols] = true
|
|
95
|
+
values[:export_options][:uploadSymbols] = false
|
|
96
|
+
|
|
97
|
+
if !@deploy_icloud_id.nil?
|
|
98
|
+
values[:export_options][:iCloudContainerEnvironment] = icloud_env
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
return values
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|