pindo 4.6.9 → 4.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pindo/base/aeshelper.rb +75 -0
- data/lib/pindo/base/funlog.rb +89 -0
- data/lib/pindo/base/githelper.rb +35 -18
- 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/bossconfigclient.rb +3 -3
- data/lib/pindo/client/pgyerclient.rb +159 -100
- 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 +183 -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 +28 -76
- data/lib/pindo/{dev → command/dev}/autoresign.rb +21 -64
- data/lib/pindo/command/dev/build.rb +94 -0
- 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 +26 -0
- data/lib/pindo/command/env.rb +17 -0
- data/lib/pindo/{ipa → command/ipa}/autoresign.rb +22 -70
- data/lib/pindo/{ipa → command/ipa}/import.rb +48 -103
- data/lib/pindo/{ipa → command/ipa}/output.rb +43 -135
- data/lib/pindo/command/ipa.rb +16 -0
- data/lib/pindo/{lib → command/lib}/update.rb +23 -14
- 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/config/pindoconfig.rb +27 -0
- data/lib/pindo/module/appselect.rb +9 -8
- data/lib/pindo/module/build/swarkhelper.rb +95 -0
- data/lib/pindo/module/cert/certhelper.rb +187 -0
- data/lib/pindo/module/cert/keychainhelper.rb +150 -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 +326 -0
- data/lib/pindo/module/{pgyerhelper.rb → pgyer/pgyerhelper.rb} +246 -36
- 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 +119 -0
- data/lib/pindo/options/appconfigoptions.rb +1 -0
- data/lib/pindo/options/deployoptions.rb +38 -42
- data/lib/pindo/version.rb +1 -1
- metadata +110 -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
@@ -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
|
+
|
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
|
@@ -0,0 +1,183 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'match'
|
3
|
+
require 'pindo/module/build/swarkhelper'
|
4
|
+
require 'pindo/module/cert/xcodecerthelper'
|
5
|
+
require 'pindo/module/cert/certhelper'
|
6
|
+
|
7
|
+
module Pindo
|
8
|
+
class Command
|
9
|
+
class Deploy < Command
|
10
|
+
class Cert < Deploy
|
11
|
+
|
12
|
+
include Command::DeployOptions
|
13
|
+
include XcodeCertHelper
|
14
|
+
include CertHelper
|
15
|
+
include SwarkHelper
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
self.summary = '创建证书并使用设置工程的证书'
|
20
|
+
|
21
|
+
self.description = <<-DESC
|
22
|
+
根据config.json中的bundle id获取最新证书,默认不创建证书。如果在工程目录下,会自动设置工程证书。用法 pindo deploy cert
|
23
|
+
默认创建appstore证书。 如果需要重新创建dev 证书, 用法:pindo deploy cert --dev --renew
|
24
|
+
DESC
|
25
|
+
|
26
|
+
self.arguments = [
|
27
|
+
CLAide::Argument.new('path/to/config.json', true),
|
28
|
+
]
|
29
|
+
|
30
|
+
def self.options
|
31
|
+
|
32
|
+
[
|
33
|
+
['--dev', '操作dev证书'],
|
34
|
+
['--adhoc', '操作adhoc证书'],
|
35
|
+
['--clean', '删除本地缓存的证书'],
|
36
|
+
['--cleangit', '删除远程仓库中的证书'],
|
37
|
+
['--upload', '生成上传pgyer的证书'],
|
38
|
+
['--match', '生成上传pgyer的证书'],
|
39
|
+
['--renew', '重新生成证书']
|
40
|
+
].concat(super)
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(argv)
|
44
|
+
@clean_flag = argv.flag?('clean', false)
|
45
|
+
@clean_git_flag = argv.flag?('cleangit', false)
|
46
|
+
@upload_flag = argv.flag?('upload', false)
|
47
|
+
@renew_cert_flag = argv.flag?('renew', false)
|
48
|
+
@match_flag = argv.flag?('match', false)
|
49
|
+
|
50
|
+
super
|
51
|
+
|
52
|
+
@build_type = "appstore"
|
53
|
+
if @args_adhoc_flag
|
54
|
+
@build_type = "adhoc"
|
55
|
+
end
|
56
|
+
if @args_dev_flag
|
57
|
+
@build_type = "development"
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
def run
|
63
|
+
|
64
|
+
if @clean_flag
|
65
|
+
puts "Clear cert at local ..."
|
66
|
+
Pindo::Command::Utils::Clearcert::run([])
|
67
|
+
end
|
68
|
+
|
69
|
+
if @renew_cert_flag && @clean_git_flag
|
70
|
+
pindo_dir = pindo_single_config.pindo_dir
|
71
|
+
git_url = pindo_single_config.deploy_cert_giturl
|
72
|
+
if @apple_id.eql?(pindo_single_config.demo_apple_id)
|
73
|
+
git_url = pindo_single_config.dev_cert_giturl
|
74
|
+
end
|
75
|
+
cert_repo_dir = getcode_to_dir(reponame:get_repo_base_name(repo_url:git_url), remote_url:git_url, path:pindo_dir, new_branch:@apple_id)
|
76
|
+
FileUtils.rm_rf(File.join(cert_repo_dir, "certs"))
|
77
|
+
FileUtils.rm_rf(File.join(cert_repo_dir, "profiles"))
|
78
|
+
git_addpush_repo(path:cert_repo_dir, message:"remove #{@apple_id} certs")
|
79
|
+
end
|
80
|
+
|
81
|
+
bundle_id_array = get_bundle_id_map.values
|
82
|
+
provisioning_info_array = nil
|
83
|
+
|
84
|
+
if @renew_cert_flag || @match_flag
|
85
|
+
values = get_create_cert_match_values(apple_id:@apple_id, bundle_id_array:bundle_id_array, build_type:@build_type, renew_flag:@renew_cert_flag)
|
86
|
+
config = FastlaneCore::Configuration.create(Match::Options.available_options, values)
|
87
|
+
Match::Runner.new.run(config)
|
88
|
+
provisioning_info_array = create_provisioning_info_array(build_type:@build_type)
|
89
|
+
pindo_single_config.set_cert_info(dict: provisioning_info_array)
|
90
|
+
|
91
|
+
else
|
92
|
+
cert_git_url = pindo_single_config.deploy_cert_giturl
|
93
|
+
if @apple_id.eql?(pindo_single_config.demo_apple_id)
|
94
|
+
cert_git_url = pindo_single_config.dev_cert_giturl
|
95
|
+
end
|
96
|
+
cert_reponame = cert_git_url.split("/").last.chomp(".git")
|
97
|
+
certs_dir = getcode_to_dir(reponame:cert_reponame, remote_url:cert_git_url, path: pindo_single_config.pindo_dir, new_branch:@apple_id)
|
98
|
+
|
99
|
+
install_certs(cert_url:cert_git_url, certs_dir:certs_dir, cert_type:@build_type)
|
100
|
+
bundle_id_map = get_bundle_id_map
|
101
|
+
provisioning_info_array = install_provisionfiles(cert_url:cert_git_url, certs_dir:certs_dir, bundle_id_map:bundle_id_map, cert_type:@build_type)
|
102
|
+
pindo_single_config.set_cert_info(dict: provisioning_info_array)
|
103
|
+
end
|
104
|
+
|
105
|
+
provisioning_info_array = provisioning_info_array || []
|
106
|
+
unless provisioning_info_array.size > 0
|
107
|
+
raise Informative, "未找到证书信息"
|
108
|
+
end
|
109
|
+
|
110
|
+
@team_id_vaule = provisioning_info_array.first["team_id"]
|
111
|
+
|
112
|
+
#发布机需要给swark注册bundle id
|
113
|
+
add_swark_authorize_json
|
114
|
+
|
115
|
+
if @args_adhoc_flag || @args_appstore_flag
|
116
|
+
cert_type = "Development".downcase
|
117
|
+
if @args_adhoc_flag
|
118
|
+
cert_type = "Adhoc".downcase
|
119
|
+
end
|
120
|
+
if @upload_flag
|
121
|
+
create_upload_cert_info(apple_id:@apple_id, cert_type:cert_type, provisioning_info_array:provisioning_info_array)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
new_project_dir = Dir.pwd
|
126
|
+
new_project_fullname = Dir.glob(File.join(new_project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
127
|
+
if !new_project_fullname.nil? && File.exist?(new_project_fullname) && !provisioning_info_array.nil? && provisioning_info_array.size > 0
|
128
|
+
new_proj_name = File.basename(new_project_fullname, ".xcodeproj")
|
129
|
+
Funlog.instance.fancyinfo_start("正在给Xcode配置证书...")
|
130
|
+
config_project_cert(new_proj_name:new_proj_name, new_project_dir:new_project_dir, cert_type:@build_type, team_id_vaule:@team_id_vaule, provisioning_info_array:provisioning_info_array)
|
131
|
+
config_infoplist_cert(new_proj_name:new_proj_name, new_project_dir:new_project_dir, icloud_id:@icloud_id, group_id:@group_id, provisioning_info_array:provisioning_info_array)
|
132
|
+
Funlog.instance.fancyinfo_success("Xcode配置证书完成!")
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def get_create_cert_match_values(apple_id:nil, bundle_id_array:nil, build_type:nil, renew_flag:false)
|
138
|
+
|
139
|
+
if build_type.eql?("appstore") && (apple_id.eql?(pindo_single_config.demo_apple_id))
|
140
|
+
raise Informative, "#{apple_id} 是测试账号,不能创建appstore证书!!!"
|
141
|
+
end
|
142
|
+
if !build_type.eql?("appstore") && !apple_id.eql?(pindo_single_config.demo_apple_id)
|
143
|
+
raise Informative, "账号#{apple_id} 不能创建dev或者adhoc证书!!!"
|
144
|
+
end
|
145
|
+
|
146
|
+
git_url = pindo_single_config.deploy_cert_giturl
|
147
|
+
if @apple_id.eql?(pindo_single_config.demo_apple_id)
|
148
|
+
git_url = pindo_single_config.dev_cert_giturl
|
149
|
+
end
|
150
|
+
|
151
|
+
force_for_new_devices_flag = true
|
152
|
+
if build_type.eql?("appstore")
|
153
|
+
force_for_new_devices_flag = false
|
154
|
+
end
|
155
|
+
|
156
|
+
platform_type = "ios"
|
157
|
+
if @config_json && @config_json['project_info'] && @config_json['project_info']['build_type'].include?("MacOS")
|
158
|
+
platform_type = "macos"
|
159
|
+
end
|
160
|
+
|
161
|
+
values = {
|
162
|
+
username:apple_id,
|
163
|
+
app_identifier: bundle_id_array,
|
164
|
+
type: build_type,
|
165
|
+
keychain_password:"goodcert1",
|
166
|
+
git_url: git_url,
|
167
|
+
readonly:!renew_flag,
|
168
|
+
force:renew_flag,
|
169
|
+
clone_branch_directly:!renew_flag,
|
170
|
+
include_mac_in_profiles:true,
|
171
|
+
include_all_certificates:true,
|
172
|
+
generate_apple_certs:true,
|
173
|
+
shallow_clone:!renew_flag,
|
174
|
+
git_branch: apple_id,
|
175
|
+
platform:platform_type,
|
176
|
+
force_for_new_devices:force_for_new_devices_flag
|
177
|
+
}
|
178
|
+
return values
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
require 'find'
|
3
|
+
require 'cocoapods-core'
|
4
|
+
require 'pindo/module/xcode/xcodebuildhelper'
|
5
|
+
require 'pindo/module/xcode/xcodeappconfig'
|
6
|
+
require 'pindo/module/build/swarkhelper'
|
7
|
+
|
8
|
+
module Pindo
|
9
|
+
class Command
|
10
|
+
class Deploy < Command
|
11
|
+
class Configproj < Deploy
|
12
|
+
|
13
|
+
include Command::DeployOptions
|
14
|
+
|
15
|
+
include XcodeBuildHelper
|
16
|
+
include XcodeAppConfig
|
17
|
+
include XcodeCertHelper
|
18
|
+
|
19
|
+
include SwarkHelper
|
20
|
+
|
21
|
+
# include Configprojhelper
|
22
|
+
|
23
|
+
self.summary = '修改Xcode工程编译参数'
|
24
|
+
|
25
|
+
self.description = <<-DESC
|
26
|
+
根据config.json修改Xcode工程编译参数, 用法:工程目录下执行pindo deploy configproj
|
27
|
+
DESC
|
28
|
+
|
29
|
+
self.arguments = [
|
30
|
+
CLAide::Argument.new('path/to/config.json', true),
|
31
|
+
]
|
32
|
+
|
33
|
+
def run
|
34
|
+
|
35
|
+
check_config_version
|
36
|
+
|
37
|
+
current_dir = Dir.pwd
|
38
|
+
|
39
|
+
app_config_dir = clong_buildconfig_repo(repo_name: @deploy_repo_name)
|
40
|
+
|
41
|
+
project_fullname = Dir.glob(File.join(current_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
42
|
+
if project_fullname.nil? || !File.exist?(project_fullname) then
|
43
|
+
raise "找到多个.xcodeproj文件,请检查"
|
44
|
+
end
|
45
|
+
@proj_name = File.basename(project_fullname, ".xcodeproj")
|
46
|
+
|
47
|
+
|
48
|
+
Funlog.instance.fancyinfo_start("正在替换google-info.plist...")
|
49
|
+
google_info_config_dir = clong_buildconfig_repo(repo_name: @bundle_id)
|
50
|
+
install_google_plist(project_dir:current_dir, app_config_dir:google_info_config_dir)
|
51
|
+
Funlog.instance.fancyinfo_success("替换google-info.plist完成!")
|
52
|
+
|
53
|
+
|
54
|
+
icon_name = File.join(app_config_dir,"fastlane","icon.png")
|
55
|
+
time = Time.now.strftime('%m%d-%H%M%S')
|
56
|
+
new_icon_dir = File.join(current_dir, "icon_"+time)
|
57
|
+
|
58
|
+
Funlog.instance.fancyinfo_start("正在创建icon...")
|
59
|
+
XcodeResHelper.create_icons(icon_name: icon_name, new_icon_dir: new_icon_dir)
|
60
|
+
Funlog.instance.fancyinfo_success("创建icon完成!")
|
61
|
+
|
62
|
+
Funlog.instance.fancyinfo_start("正在替换icon...")
|
63
|
+
XcodeResHelper.install_icon(proj_dir: current_dir, new_icon_dir: new_icon_dir)
|
64
|
+
Funlog.instance.fancyinfo_success("替换icon完成!")
|
65
|
+
|
66
|
+
begin
|
67
|
+
FileUtils.rm_rf(new_icon_dir)
|
68
|
+
rescue StandardError => err
|
69
|
+
end
|
70
|
+
|
71
|
+
Funlog.instance.fancyinfo_start("正在替换启动页...")
|
72
|
+
launchimg_filename = File.join(app_config_dir,"launch","w768_h1024@2x.png")
|
73
|
+
XcodeResHelper.install_launchimg(proj_dir:current_dir, launchimg_filename:launchimg_filename)
|
74
|
+
Funlog.instance.fancyinfo_success("启动页处理完成!")
|
75
|
+
|
76
|
+
add_project_modue(project_dir:current_dir, proj_name:@proj_name, config_json:@config_json)
|
77
|
+
|
78
|
+
Funlog.instance.fancyinfo_start("正在修改工程配置...")
|
79
|
+
modify_info_plist(project_dir:current_dir, proj_name:@proj_name, config_json:@config_json)
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
modify_project_config(project_dir:current_dir, proj_name:@proj_name, config_json:@config_json)
|
84
|
+
|
85
|
+
appprefix_file = "AppPrefix.plist"
|
86
|
+
if @config_json && @config_json['project_info']['appprefix_plist'] then
|
87
|
+
appprefix_file = @config_json['project_info']['appprefix_plist']
|
88
|
+
end
|
89
|
+
modify_appprefix_plist(project_dir:current_dir, appprefix_file:appprefix_file, config_json:@config_json)
|
90
|
+
|
91
|
+
Funlog.instance.fancyinfo_success("工程配置修改完成!")
|
92
|
+
|
93
|
+
check_swark_authorize(config_json:@config_json)
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -161,17 +161,26 @@ module Pindo
|
|
161
161
|
|
162
162
|
appstore_iap_items = vip_group_item["items"] || vip_group_item["subscription_items"]
|
163
163
|
|
164
|
-
boss_iap_json = {
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
164
|
+
boss_iap_json = {
|
165
|
+
"client_vip" => {
|
166
|
+
"situation_list" => [],
|
167
|
+
"style_list" => []
|
168
|
+
},
|
169
|
+
"offer_map" => {}
|
170
|
+
}
|
171
|
+
|
172
|
+
situation_list_item = {
|
173
|
+
"situation" => "launch",
|
174
|
+
"style" => "tribble_style"
|
175
|
+
}
|
176
|
+
style_list_item = {
|
177
|
+
"style" => "tribble_style",
|
178
|
+
"best_deal" => "offer.id." + vip_mode + "0",
|
179
|
+
"offer" => []
|
180
|
+
}
|
170
181
|
|
171
182
|
if !appstore_iap_items.nil? && appstore_iap_items.size > 0
|
172
|
-
|
173
183
|
appstore_iap_items.each do |appstore_iap_item|
|
174
|
-
|
175
184
|
boss_iap_item = {}
|
176
185
|
boss_iap_item["offer_id"] = "offer.id." + vip_mode
|
177
186
|
boss_iap_item["kind"] = "vip"
|
@@ -213,10 +222,22 @@ module Pindo
|
|
213
222
|
end
|
214
223
|
|
215
224
|
boss_iap_json["offer_map"][boss_iap_item["offer_id"]] = boss_iap_item
|
216
|
-
|
225
|
+
style_list_item["offer"] << boss_iap_item["offer_id"]
|
226
|
+
end
|
217
227
|
|
228
|
+
if style_list_item["offer"].size == 3
|
229
|
+
situation_list_item["style"] = "tribble_style"
|
230
|
+
style_list_item["style"] = "tribble_style"
|
231
|
+
elsif style_list_item["offer"].size == 2
|
232
|
+
situation_list_item["style"] = "double_style"
|
233
|
+
style_list_item["style"] = "double_style"
|
234
|
+
elsif style_list_item["offer"].size == 1
|
235
|
+
situation_list_item["style"] = "single_style"
|
236
|
+
style_list_item["style"] = "single_style"
|
218
237
|
end
|
219
238
|
|
239
|
+
boss_iap_json["client_vip"]["situation_list"] << situation_list_item
|
240
|
+
boss_iap_json["client_vip"]["style_list"] << style_list_item
|
220
241
|
end
|
221
242
|
|
222
243
|
puts JSON.pretty_generate(boss_iap_json)
|