pindo 4.6.9 → 4.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/aeshelper.rb +75 -0
  3. data/lib/pindo/base/funlog.rb +89 -0
  4. data/lib/pindo/base/githelper.rb +35 -18
  5. data/lib/pindo/base/plaininformative.rb +3 -0
  6. data/lib/pindo/base/standarderror.rb +1 -0
  7. data/lib/pindo/base/xcodeconst.rb +251 -0
  8. data/lib/pindo/client/applovinclient.rb +6 -3
  9. data/lib/pindo/client/aws3sclient.rb +33 -46
  10. data/lib/pindo/client/bossclient.rb +1 -1
  11. data/lib/pindo/client/bossconfigclient.rb +3 -3
  12. data/lib/pindo/client/pgyerclient.rb +159 -100
  13. data/lib/pindo/command/appstore/iap.rb +43 -0
  14. data/lib/pindo/command/appstore/itcapp.rb +41 -0
  15. data/lib/pindo/command/appstore/metadata.rb +43 -0
  16. data/lib/pindo/command/appstore/screenshots.rb +43 -0
  17. data/lib/pindo/command/appstore/upload.rb +40 -0
  18. data/lib/pindo/command/appstore.rb +17 -0
  19. data/lib/pindo/command/deploy/build.rb +109 -0
  20. data/lib/pindo/{deploy → command/deploy}/bundleid.rb +1 -1
  21. data/lib/pindo/command/deploy/cert.rb +183 -0
  22. data/lib/pindo/command/deploy/configproj.rb +105 -0
  23. data/lib/pindo/{deploy → command/deploy}/getitcinfo.rb +1 -1
  24. data/lib/pindo/{deploy → command/deploy}/iap.rb +30 -9
  25. data/lib/pindo/{deploy → command/deploy}/itcapp.rb +0 -1
  26. data/lib/pindo/{deploy → command/deploy}/itcinfo.rb +2 -3
  27. data/lib/pindo/{deploy → command/deploy}/pem.rb +3 -2
  28. data/lib/pindo/{deploy → command/deploy}/resign.rb +14 -63
  29. data/lib/pindo/command/deploy.rb +44 -0
  30. data/lib/pindo/{dev → command/dev}/autobuild.rb +28 -76
  31. data/lib/pindo/{dev → command/dev}/autoresign.rb +21 -64
  32. data/lib/pindo/command/dev/build.rb +94 -0
  33. data/lib/pindo/{dev → command/dev}/createbuild.rb +0 -2
  34. data/lib/pindo/{dev → command/dev}/debug.rb +6 -2
  35. data/lib/pindo/command/dev/pgyercert.rb +75 -0
  36. data/lib/pindo/command/dev.rb +26 -0
  37. data/lib/pindo/command/env.rb +17 -0
  38. data/lib/pindo/{ipa → command/ipa}/autoresign.rb +22 -70
  39. data/lib/pindo/{ipa → command/ipa}/import.rb +48 -103
  40. data/lib/pindo/{ipa → command/ipa}/output.rb +43 -135
  41. data/lib/pindo/command/ipa.rb +16 -0
  42. data/lib/pindo/{lib → command/lib}/update.rb +23 -14
  43. data/lib/pindo/command/lib.rb +16 -0
  44. data/lib/pindo/{pgyer → command/pgyer}/apptest.rb +7 -29
  45. data/lib/pindo/{pgyer → command/pgyer}/comment.rb +7 -30
  46. data/lib/pindo/{pgyer → command/pgyer}/download.rb +35 -30
  47. data/lib/pindo/{pgyer → command/pgyer}/login.rb +3 -4
  48. data/lib/pindo/command/pgyer/resign.rb +111 -0
  49. data/lib/pindo/command/pgyer/upload.rb +123 -0
  50. data/lib/pindo/command/pgyer.rb +18 -0
  51. data/lib/pindo/{repo.rb → command/repo.rb} +4 -4
  52. data/lib/pindo/{utils → command/utils}/applovin.rb +43 -33
  53. data/lib/pindo/{utils → command/utils}/boss.rb +3 -3
  54. data/lib/pindo/command/utils/icon.rb +81 -0
  55. data/lib/pindo/{utils → command/utils}/renewproj.rb +1 -0
  56. data/lib/pindo/command/utils.rb +26 -0
  57. data/lib/pindo/command.rb +23 -26
  58. data/lib/pindo/config/pindoconfig.rb +27 -0
  59. data/lib/pindo/module/appselect.rb +9 -8
  60. data/lib/pindo/module/build/swarkhelper.rb +95 -0
  61. data/lib/pindo/module/cert/certhelper.rb +187 -0
  62. data/lib/pindo/module/cert/keychainhelper.rb +150 -0
  63. data/lib/pindo/module/{pemcreate.rb → cert/pemhelper.rb} +3 -1
  64. data/lib/pindo/module/cert/provisioninghelper.rb +137 -0
  65. data/lib/pindo/module/cert/xcodecerthelper.rb +326 -0
  66. data/lib/pindo/module/{pgyerhelper.rb → pgyer/pgyerhelper.rb} +246 -36
  67. data/lib/pindo/module/xcode/xcodeappconfig.rb +188 -0
  68. data/lib/pindo/module/xcode/xcodebuildconfig.rb +12 -0
  69. data/lib/pindo/module/xcode/xcodebuildhelper.rb +312 -0
  70. data/lib/pindo/module/xcode/xcoderesconstant.rb +248 -0
  71. data/lib/pindo/module/xcode/xcodereshandler.rb +198 -0
  72. data/lib/pindo/module/xcode/xcodereshelper.rb +119 -0
  73. data/lib/pindo/options/appconfigoptions.rb +1 -0
  74. data/lib/pindo/options/deployoptions.rb +38 -42
  75. data/lib/pindo/version.rb +1 -1
  76. metadata +110 -97
  77. data/lib/pindo/deploy/Fastfile +0 -233
  78. data/lib/pindo/deploy/build.rb +0 -167
  79. data/lib/pindo/deploy/cert.rb +0 -508
  80. data/lib/pindo/deploy/configproj.rb +0 -89
  81. data/lib/pindo/deploy.rb +0 -44
  82. data/lib/pindo/dev.rb +0 -23
  83. data/lib/pindo/env/flutter.rb +0 -59
  84. data/lib/pindo/env/flutter.sh +0 -116
  85. data/lib/pindo/env.rb +0 -17
  86. data/lib/pindo/ipa.rb +0 -22
  87. data/lib/pindo/lib.rb +0 -18
  88. data/lib/pindo/module/buildconfighelper.rb +0 -13
  89. data/lib/pindo/module/buildhelper.rb +0 -76
  90. data/lib/pindo/module/config_project.sh +0 -143
  91. data/lib/pindo/module/configprojhelper.rb +0 -631
  92. data/lib/pindo/module/icon_contents.json +0 -116
  93. data/lib/pindo/module/imessage_icon.json +0 -91
  94. data/lib/pindo/module/imgset_contents.json +0 -21
  95. data/lib/pindo/module/launchimg_contents.json +0 -21
  96. data/lib/pindo/module/xcodebuildpre.rb +0 -258
  97. data/lib/pindo/pgyer/upload.rb +0 -234
  98. data/lib/pindo/pgyer.rb +0 -17
  99. data/lib/pindo/utils/icon.rb +0 -91
  100. data/lib/pindo/utils/icon.sh +0 -133
  101. data/lib/pindo/utils/podindex.rb +0 -56
  102. data/lib/pindo/utils/podindex.sh +0 -30
  103. data/lib/pindo/utils.rb +0 -29
  104. /data/lib/pindo/{deploy → command/deploy}/check.rb +0 -0
  105. /data/lib/pindo/{deploy → command/deploy}/confusecode.rb +0 -0
  106. /data/lib/pindo/{deploy → command/deploy}/confuseproj.rb +0 -0
  107. /data/lib/pindo/{deploy → command/deploy}/fabric.rb +0 -0
  108. /data/lib/pindo/{deploy → command/deploy}/initconfig.rb +0 -0
  109. /data/lib/pindo/{deploy → command/deploy}/pullconfig.rb +0 -0
  110. /data/lib/pindo/{deploy → command/deploy}/pushconfig.rb +0 -0
  111. /data/lib/pindo/{deploy → command/deploy}/quswark.rb +0 -0
  112. /data/lib/pindo/{deploy → command/deploy}/quswauth.rb +0 -0
  113. /data/lib/pindo/{deploy → command/deploy}/reportbug.rb +0 -0
  114. /data/lib/pindo/{deploy → command/deploy}/tag.rb +0 -0
  115. /data/lib/pindo/{deploy → command/deploy}/updateconfig.rb +0 -0
  116. /data/lib/pindo/{deploy → command/deploy}/uploadipa.rb +0 -0
  117. /data/lib/pindo/{dev → command/dev}/confusecode.rb +0 -0
  118. /data/lib/pindo/{dev → command/dev}/confuseproj.rb +0 -0
  119. /data/lib/pindo/{dev → command/dev}/pub.rb +0 -0
  120. /data/lib/pindo/{dev → command/dev}/renewcert.rb +0 -0
  121. /data/lib/pindo/{env → command/env}/dreamstudio.rb +0 -0
  122. /data/lib/pindo/{env → command/env}/quarkenv.rb +0 -0
  123. /data/lib/pindo/{env → command/env}/swarkenv.rb +0 -0
  124. /data/lib/pindo/{env → command/env}/workhard.rb +0 -0
  125. /data/lib/pindo/{lib → command/lib}/forcepush.rb +0 -0
  126. /data/lib/pindo/{lib → command/lib}/lint.rb +0 -0
  127. /data/lib/pindo/{lib → command/lib}/push.rb +0 -0
  128. /data/lib/pindo/{repo → command/repo}/clone.rb +0 -0
  129. /data/lib/pindo/{repo → command/repo}/create.rb +0 -0
  130. /data/lib/pindo/{repo → command/repo}/login.rb +0 -0
  131. /data/lib/pindo/{repo → command/repo}/search.rb +0 -0
  132. /data/lib/pindo/{setup.rb → command/setup.rb} +0 -0
  133. /data/lib/pindo/{upgrade.rb → command/upgrade.rb} +0 -0
  134. /data/lib/pindo/{utils → command/utils}/clearcert.rb +0 -0
  135. /data/lib/pindo/{utils → command/utils}/device.rb +0 -0
  136. /data/lib/pindo/{utils → command/utils}/tgate.rb +0 -0
  137. /data/lib/pindo/{utils → command/utils}/xcassets.rb +0 -0
  138. /data/lib/pindo/{utils → command/utils}/xcassets.sh +0 -0
  139. /data/lib/pindo/module/{appstore_in_app_purchase.rb → appstore/appstore_in_app_purchase.rb} +0 -0
  140. /data/lib/pindo/module/{appstore_metadata_connect_api_helper.rb → appstore/appstore_metadata_connect_api_helper.rb} +0 -0
  141. /data/lib/pindo/module/{appstore_metadata_fastlane_helper.rb → appstore/appstore_metadata_fastlane_helper.rb} +0 -0
  142. /data/lib/pindo/module/{iap_tier.json → appstore/iap_tier.json} +0 -0
  143. /data/lib/pindo/module/{commonconfuseproj.rb → build/commonconfuseproj.rb} +0 -0
  144. /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
@@ -25,7 +25,7 @@ module Pindo
25
25
  [
26
26
  ['--sign', 'sign flags'],
27
27
  ].concat(super)
28
- end
28
+ end
29
29
 
30
30
  def initialize(argv)
31
31
  @args_sign_flag = argv.flag?('sign', false)
@@ -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
@@ -12,7 +12,7 @@ module Pindo
12
12
 
13
13
  include Command::DeployOptions
14
14
 
15
- include Xcodebuildpre
15
+ include XcodeCertHelper
16
16
  include AppstoreMetadataConnectApiHelper
17
17
 
18
18
 
@@ -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
- boss_iap_json["client_vip"] = {}
166
- boss_iap_json["offer_map"] = {}
167
- boss_iap_json["client_vip"]["style"] = "tribble_style"
168
- boss_iap_json["client_vip"]["best_deal"] = "offer.id." + vip_mode + "0"
169
- boss_iap_json["client_vip"]["offer"] = []
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
- boss_iap_json["client_vip"]["offer"] << boss_iap_item["offer_id"]
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)
@@ -1,4 +1,3 @@
1
- require 'pindo/deploy/bundleid'
2
1
 
3
2
  module Pindo
4
3
  class Command