pindo 4.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +7 -0
  2. data/bin/pindo +35 -0
  3. data/lib/pindo/base/aeshelper.rb +31 -0
  4. data/lib/pindo/base/deviceinfo.rb +90 -0
  5. data/lib/pindo/base/executable.rb +224 -0
  6. data/lib/pindo/base/githelper.rb +489 -0
  7. data/lib/pindo/base/hashhelper.rb +134 -0
  8. data/lib/pindo/base/plaininformative.rb +15 -0
  9. data/lib/pindo/base/plistbuddyexecutable.rb +121 -0
  10. data/lib/pindo/base/standarderror.rb +14 -0
  11. data/lib/pindo/client/applovinclient.rb +156 -0
  12. data/lib/pindo/client/aws3sclient.rb +183 -0
  13. data/lib/pindo/client/bossclient.rb +229 -0
  14. data/lib/pindo/client/bossconfigclient.rb +175 -0
  15. data/lib/pindo/client/giteeclient.rb +65 -0
  16. data/lib/pindo/client/httpclient.rb +40 -0
  17. data/lib/pindo/client/pgyerclient.rb +439 -0
  18. data/lib/pindo/client/tgateclient.rb +103 -0
  19. data/lib/pindo/command.rb +101 -0
  20. data/lib/pindo/config/pindoconfig.rb +439 -0
  21. data/lib/pindo/config/pindouserlocalconfig.rb +81 -0
  22. data/lib/pindo/deploy/Fastfile +233 -0
  23. data/lib/pindo/deploy/build.rb +167 -0
  24. data/lib/pindo/deploy/bundleid.rb +245 -0
  25. data/lib/pindo/deploy/cert.rb +508 -0
  26. data/lib/pindo/deploy/check.rb +79 -0
  27. data/lib/pindo/deploy/configproj.rb +89 -0
  28. data/lib/pindo/deploy/confusecode.rb +248 -0
  29. data/lib/pindo/deploy/confuseproj.rb +112 -0
  30. data/lib/pindo/deploy/fabric.rb +58 -0
  31. data/lib/pindo/deploy/getitcinfo.rb +248 -0
  32. data/lib/pindo/deploy/iap.rb +796 -0
  33. data/lib/pindo/deploy/initconfig.rb +128 -0
  34. data/lib/pindo/deploy/itcapp.rb +147 -0
  35. data/lib/pindo/deploy/itcinfo.rb +369 -0
  36. data/lib/pindo/deploy/pem.rb +55 -0
  37. data/lib/pindo/deploy/pullconfig.rb +46 -0
  38. data/lib/pindo/deploy/pushconfig.rb +83 -0
  39. data/lib/pindo/deploy/quswark.rb +146 -0
  40. data/lib/pindo/deploy/quswauth.rb +67 -0
  41. data/lib/pindo/deploy/reportbug.rb +135 -0
  42. data/lib/pindo/deploy/resign.rb +338 -0
  43. data/lib/pindo/deploy/tag.rb +108 -0
  44. data/lib/pindo/deploy/updateconfig.rb +129 -0
  45. data/lib/pindo/deploy/uploadipa.rb +63 -0
  46. data/lib/pindo/deploy.rb +44 -0
  47. data/lib/pindo/dev/autobuild.rb +204 -0
  48. data/lib/pindo/dev/autoresign.rb +186 -0
  49. data/lib/pindo/dev/confusecode.rb +127 -0
  50. data/lib/pindo/dev/confuseproj.rb +111 -0
  51. data/lib/pindo/dev/createbuild.rb +159 -0
  52. data/lib/pindo/dev/debug.rb +141 -0
  53. data/lib/pindo/dev/pub.rb +171 -0
  54. data/lib/pindo/dev/renewcert.rb +142 -0
  55. data/lib/pindo/dev.rb +23 -0
  56. data/lib/pindo/env/dreamstudio.rb +53 -0
  57. data/lib/pindo/env/flutter.rb +59 -0
  58. data/lib/pindo/env/flutter.sh +116 -0
  59. data/lib/pindo/env/quarkenv.rb +58 -0
  60. data/lib/pindo/env/swarkenv.rb +62 -0
  61. data/lib/pindo/env/workhard.rb +56 -0
  62. data/lib/pindo/env.rb +17 -0
  63. data/lib/pindo/ipa/autoresign.rb +188 -0
  64. data/lib/pindo/ipa/import.rb +261 -0
  65. data/lib/pindo/ipa/output.rb +396 -0
  66. data/lib/pindo/ipa.rb +22 -0
  67. data/lib/pindo/lib/forcepush.rb +159 -0
  68. data/lib/pindo/lib/lint.rb +115 -0
  69. data/lib/pindo/lib/push.rb +143 -0
  70. data/lib/pindo/lib/update.rb +75 -0
  71. data/lib/pindo/lib.rb +18 -0
  72. data/lib/pindo/module/appselect.rb +200 -0
  73. data/lib/pindo/module/appstore_in_app_purchase.rb +1803 -0
  74. data/lib/pindo/module/appstore_metadata_connect_api_helper.rb +12 -0
  75. data/lib/pindo/module/appstore_metadata_fastlane_helper.rb +922 -0
  76. data/lib/pindo/module/buildconfighelper.rb +13 -0
  77. data/lib/pindo/module/buildhelper.rb +76 -0
  78. data/lib/pindo/module/commonconfuseproj.rb +271 -0
  79. data/lib/pindo/module/config_project.sh +143 -0
  80. data/lib/pindo/module/configprojhelper.rb +631 -0
  81. data/lib/pindo/module/iap_tier.json +813 -0
  82. data/lib/pindo/module/icon_contents.json +116 -0
  83. data/lib/pindo/module/imessage_icon.json +91 -0
  84. data/lib/pindo/module/imgset_contents.json +21 -0
  85. data/lib/pindo/module/launchimg_contents.json +21 -0
  86. data/lib/pindo/module/pemcreate.rb +63 -0
  87. data/lib/pindo/module/pgyerhelper.rb +339 -0
  88. data/lib/pindo/module/xcodebuildpre.rb +258 -0
  89. data/lib/pindo/module/xcodehelper.rb +521 -0
  90. data/lib/pindo/options/appconfigoptions.rb +23 -0
  91. data/lib/pindo/options/deployoptions.rb +363 -0
  92. data/lib/pindo/pgyer/apptest.rb +104 -0
  93. data/lib/pindo/pgyer/comment.rb +95 -0
  94. data/lib/pindo/pgyer/download.rb +105 -0
  95. data/lib/pindo/pgyer/login.rb +61 -0
  96. data/lib/pindo/pgyer/upload.rb +234 -0
  97. data/lib/pindo/pgyer.rb +17 -0
  98. data/lib/pindo/repo/clone.rb +78 -0
  99. data/lib/pindo/repo/create.rb +55 -0
  100. data/lib/pindo/repo/login.rb +64 -0
  101. data/lib/pindo/repo/search.rb +60 -0
  102. data/lib/pindo/repo.rb +16 -0
  103. data/lib/pindo/setup.rb +60 -0
  104. data/lib/pindo/upgrade.rb +56 -0
  105. data/lib/pindo/utils/applovin.rb +213 -0
  106. data/lib/pindo/utils/boss.rb +209 -0
  107. data/lib/pindo/utils/clearcert.rb +60 -0
  108. data/lib/pindo/utils/device.rb +279 -0
  109. data/lib/pindo/utils/icon.rb +91 -0
  110. data/lib/pindo/utils/icon.sh +133 -0
  111. data/lib/pindo/utils/podindex.rb +56 -0
  112. data/lib/pindo/utils/podindex.sh +30 -0
  113. data/lib/pindo/utils/renewproj.rb +146 -0
  114. data/lib/pindo/utils/tgate.rb +159 -0
  115. data/lib/pindo/utils/xcassets.rb +46 -0
  116. data/lib/pindo/utils/xcassets.sh +88 -0
  117. data/lib/pindo/utils.rb +29 -0
  118. data/lib/pindo/version.rb +110 -0
  119. data/lib/pindo.rb +34 -0
  120. metadata +364 -0
@@ -0,0 +1,204 @@
1
+ require 'highline/import'
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+ require 'pindo/base/executable'
6
+
7
+ module Pindo
8
+ class Command
9
+ class Dev < Command
10
+ class Autobuild < Dev
11
+
12
+ include Appselect
13
+
14
+ self.summary = '自动编译工程,并支持上传ipa到测试网站'
15
+
16
+ self.description = <<-DESC
17
+ 自动编译工程,并支持上传ipa到测试网站. 在工程目录下运行: pindo dev autobuild
18
+ DESC
19
+
20
+ self.arguments = [
21
+
22
+ ]
23
+
24
+ def self.options
25
+ [
26
+ ['--deploy', '默认用开发的bundle id,用法:pindo ipa autobuild --deploy'],
27
+ ['--adhoc', '默认用dev证书,使用--adhoc设置使用adhoc证书编译, 用法:pindo ipa autobuild --adhoc'],
28
+ ['--proj', '指定上传到pgyer对应的项目名称(大小写空格忽略),用法:pindo ipa autobuild --proj=aichatv4'],
29
+ ['--upload', '是否上传编译后的ipa, 用法:pindo ipa autobuild --upload'],
30
+ ['--send', '上传到之后是否发送测试信息,用法:pindo ipa autobuild --send'],
31
+ ].concat(super)
32
+ end
33
+
34
+ def initialize(argv)
35
+
36
+ @args_deploy_flag = argv.flag?('deploy', false)
37
+ @args_adhoc_flag = argv.flag?('adhoc', false)
38
+ @args_upload_flag = argv.flag?('upload', false)
39
+ @args_send_flag = argv.flag?('send', false)
40
+ @args_proj_name = argv.option('proj')
41
+
42
+ super
43
+ @additional_args = argv.remainder!
44
+ end
45
+
46
+ def validate!
47
+
48
+ super
49
+ end
50
+
51
+ def run
52
+
53
+ mainapp_bundleid= nil
54
+ if @args_deploy_flag
55
+ mainapp_bundleid = get_selected_deploy_bundleid()
56
+ else
57
+ mainapp_bundleid = get_selected_dev_bundleid()
58
+ end
59
+
60
+ prepare_for_upload()
61
+
62
+ args_temp = []
63
+ args_temp << mainapp_bundleid
64
+ Pindo::Command::Deploy::Pullconfig::run(args_temp)
65
+
66
+ project_dir = Dir.pwd
67
+ Dir.chdir(project_dir)
68
+ config_json_file = File.join(project_dir,"config.json")
69
+ Debug::modify_cert_with_project(project_dir:project_dir, config_file:config_json_file)
70
+
71
+
72
+ if File.exist?(File.join(project_dir, "Podfile"))
73
+
74
+ args_temp = []
75
+ args_temp << config_json_file
76
+ Pindo::Command::Utils::Podindex::run([])
77
+
78
+ begin
79
+ if File.exist?(File.join(project_dir, "Podfile.lock"))
80
+ FileUtils.rm_rf(File.join(project_dir, "Podfile.lock"))
81
+ end
82
+ if File.exist?(File.join(project_dir,"Pods"))
83
+ FileUtils.rm_rf(File.join(project_dir, "Pods"))
84
+ end
85
+ puts "正在执行pod deintegrate..."
86
+ system 'pod deintegrate'
87
+ puts "正在执行pod install..."
88
+ system 'pod install'
89
+ rescue => error
90
+ puts(error.to_s)
91
+ raise Informative, "pod install失败!!先pod install 完成后成编译 !"
92
+ end
93
+
94
+ Dir.chdir(project_dir)
95
+ pod_lock_file = File.join(project_dir, "Podfile.lock")
96
+ if !File.exist?(pod_lock_file)
97
+ raise Informative, "pod install失败!!先pod install 完成后成编译 !"
98
+ end
99
+
100
+ end
101
+
102
+
103
+ args_temp = []
104
+ if @args_adhoc_flag
105
+ args_temp << "--adhoc"
106
+ else
107
+ args_temp << "--dev"
108
+ end
109
+
110
+ Pindo::Command::Deploy::Cert::run(args_temp)
111
+
112
+ Dir.chdir(project_dir)
113
+ Pindo::Command::Deploy::Build::run(args_temp)
114
+
115
+ puts "Buiid Done !!!"
116
+ system "open #{project_dir}"
117
+
118
+
119
+ build_path = File.join(project_dir, "build", "*.ipa")
120
+ ipa_file_upload = Dir.glob(build_path).max_by {|f| File.mtime(f)}
121
+
122
+
123
+ if !ipa_file_upload.nil? && !@args_proj_name.nil?
124
+
125
+ description = nil
126
+ if File.exist?(File.join(project_dir, ".release_info"))
127
+ description = File.read(File.join(project_dir, ".release_info"))
128
+ end
129
+ if description.nil?
130
+ commit_id_info = git_latest_commit_id(local_repo_dir:project_dir)
131
+ description = "commit " + commit_id_info
132
+ end
133
+ start_upload(pgyer_proj_name:@args_proj_name, ipa_file_upload:ipa_file_upload, description:description, args_send_flag:@args_send_flag)
134
+ end
135
+
136
+ end
137
+
138
+ def prepare_for_upload
139
+
140
+ if @args_upload_flag
141
+ if @args_proj_name.nil?
142
+ xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
143
+ proj_name = File.basename(xcodeproj_file_name, ".xcodeproj") if xcodeproj_file_name
144
+ if !proj_name.nil?
145
+ puts
146
+ answer = agree("Pgyer的App项目代号是: #{proj_name} ?(Y/n)")
147
+ if answer
148
+ @args_proj_name = proj_name
149
+ end
150
+ end
151
+ end
152
+
153
+ @pgyer_client = PgyerClient.new
154
+ app_info_obj = nil
155
+ login_success = @pgyer_client.do_login(force_login:@args_login_flag)
156
+ if login_success
157
+ PgyerHelper.share_instace.get_app_list_in_pgyer(client:@pgyer_client)
158
+ if !@args_proj_name.nil?
159
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
160
+ end
161
+
162
+ if app_info_obj.nil?
163
+ proj_name = ask('请输入Pyger上的App代号(大小写空格忽略):') || nil
164
+ @args_proj_name = proj_name
165
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
166
+ end
167
+ end
168
+
169
+ if app_info_obj.nil?
170
+ raise Informative, "#{proj_name} 错误, 请输入正确的App代号名称, pgyer网站没有该App"
171
+ end
172
+
173
+ end
174
+
175
+ end
176
+
177
+ def start_upload(pgyer_proj_name:nil, ipa_file_upload:nil, description:nil, args_send_flag:true)
178
+
179
+ if !pgyer_proj_name.nil? && !ipa_file_upload.nil?
180
+
181
+
182
+ args_temp = []
183
+ pgyer_proj_name = pgyer_proj_name.strip.gsub(/ /, '')
184
+ args_temp << "--proj=#{pgyer_proj_name}"
185
+ args_temp << "--ipa=\"#{ipa_file_upload}\""
186
+
187
+ if args_send_flag
188
+ args_temp << "--send"
189
+ end
190
+
191
+ if !description.nil?
192
+ args_temp << "--desc=\"#{description}\""
193
+ end
194
+
195
+ puts args_temp
196
+ Pindo::Command::Pgyer::Upload::run(args_temp)
197
+ end
198
+ end
199
+
200
+ end
201
+ end
202
+ end
203
+ end
204
+
@@ -0,0 +1,186 @@
1
+ require 'highline/import'
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+ require 'pindo/base/executable'
6
+
7
+ module Pindo
8
+ class Command
9
+ class Dev < Command
10
+ class Autoresign < Dev
11
+
12
+ include Appselect
13
+
14
+ self.summary = '开发阶段ipa包重签名'
15
+
16
+ self.description = <<-DESC
17
+ 用最新的证书重签名ipa. 用法:pindo dev autoresign, 默认使用dev证书给当前目录下面的ipa重签名。
18
+ 也可以加上可选参数,例如:pindo dev autoresign ~/Desktop/mydemo.ipa --adhoc --deploy --upload.
19
+ DESC
20
+
21
+ self.arguments = [
22
+ CLAide::Argument.new('path/to/demo.ipa', true),
23
+ ]
24
+
25
+ def self.options
26
+ [
27
+ ['--ipa', '指定ipa的路径,用法:pindo ipa autoresign --ipa=path/to/name.ipa'],
28
+ ['--adhoc', '默认用dev证书,使用--adhoc设置使用adhoc证书编译, 用法:pindo ipa autoresign --adhoc'],
29
+ ['--deploy', '默认用开发的bundle id,使用--deploy设置使用发布bundle id来重签名, 用法:pindo ipa autoresign --deploy'],
30
+ ['--proj', '指定上传到pgyer对应的项目名称(大小写空格忽略),用法:pindo ipa autoresign --proj=aichatv4'],
31
+ ['--upload', '是否上传编译后的ipa, 用法:pindo ipa autoresign --upload'],
32
+ ['--send', '上传到之后是否发送测试信息,用法:pindo ipa autobuild --send'],
33
+ ].concat(super)
34
+ end
35
+
36
+
37
+ def initialize(argv)
38
+
39
+ @args_ipa_file = argv.shift_argument
40
+ @args_set_ipa_name = argv.option('ipa')
41
+ @args_adhoc_flag = argv.flag?('adhoc', false)
42
+ @args_deploy_flag = argv.flag?('deploy', false)
43
+
44
+ @args_upload_flag = argv.flag?('upload', false)
45
+ @args_send_flag = argv.flag?('send', false)
46
+ @args_proj_name = argv.option('proj')
47
+
48
+ super
49
+ @additional_args = argv.remainder!
50
+ end
51
+
52
+
53
+ def run
54
+
55
+ ipa_file_name = @args_ipa_file
56
+ if !@args_set_ipa_name.nil?
57
+ ipa_file_name = @args_set_ipa_name
58
+ end
59
+
60
+ if !ipa_file_name.nil? && File.exist?(ipa_file_name)
61
+ else
62
+ current_dir = Dir.pwd
63
+ # File.basename(f).include?("_resigned") ? Time.local(0, 0, 0) : File.mtime(f)
64
+ ipa_file_name = Dir.glob(File.join(current_dir, "/*.ipa")).max_by {|f| File.basename(f).include?("_resigned") ? Time.local(0, 1, 1) : File.mtime(f)}
65
+ end
66
+
67
+ if !ipa_file_name.nil? && File.exist?(ipa_file_name)
68
+ puts
69
+ puts "正在重签名的ipa: #{ipa_file_name}"
70
+ puts "时间: #{File.mtime(ipa_file_name)}"
71
+ puts
72
+ else
73
+ return
74
+ end
75
+
76
+
77
+ mainapp_bundleid = nil
78
+
79
+ if @args_deploy_flag
80
+ mainapp_bundleid = get_selected_deploy_bundleid()
81
+ else
82
+ mainapp_bundleid = get_selected_dev_bundleid()
83
+ end
84
+ puts "mainapp_bundleid: #{mainapp_bundleid}"
85
+
86
+ args_temp = []
87
+ args_temp << mainapp_bundleid
88
+
89
+ Pindo::Command::Deploy::Pullconfig::run(args_temp)
90
+
91
+ prepare_for_upload()
92
+
93
+ args_temp = []
94
+ if @args_adhoc_flag
95
+ args_temp << "--adhoc"
96
+ else
97
+ args_temp << "--dev"
98
+ end
99
+
100
+ if !ipa_file_name.nil?
101
+
102
+ args_temp << "--ipa=#{ipa_file_name}"
103
+ Pindo::Command::Deploy::Resign::run(args_temp)
104
+
105
+
106
+ ipa_file_name = File::expand_path(ipa_file_name)
107
+ ipa_base_name = File.basename(ipa_file_name, ".ipa")
108
+ ipa_dir = File.dirname(ipa_file_name)
109
+ resign_ipa_name = File.join(ipa_dir, ipa_base_name + "_resigned.ipa")
110
+
111
+ if File.exist?(resign_ipa_name) && (@args_upload_flag || !@args_proj_name.nil?)
112
+ start_upload(pgyer_proj_name:@args_proj_name, ipa_file_upload:resign_ipa_name, description:nil, args_send_flag:@args_send_flag)
113
+ end
114
+
115
+ end
116
+
117
+
118
+
119
+ #
120
+ end
121
+
122
+ def prepare_for_upload
123
+
124
+ if @args_upload_flag
125
+ if @args_proj_name.nil?
126
+ xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
127
+ proj_name = File.basename(xcodeproj_file_name, ".xcodeproj") if xcodeproj_file_name
128
+ if !proj_name.nil?
129
+ puts
130
+ answer = agree("Pgyer的App项目代号是: #{proj_name} ?(Y/n)")
131
+ if answer
132
+ @args_proj_name = proj_name
133
+ end
134
+ end
135
+ end
136
+
137
+ @pgyer_client = PgyerClient.new
138
+ app_info_obj = nil
139
+ login_success = @pgyer_client.do_login(force_login:@args_login_flag)
140
+ if login_success
141
+ PgyerHelper.share_instace.get_app_list_in_pgyer(client:@pgyer_client)
142
+ if !@args_proj_name.nil?
143
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
144
+ end
145
+
146
+ if app_info_obj.nil?
147
+ proj_name = ask('请输入Pyger上的App代号(大小写空格忽略):') || nil
148
+ @args_proj_name = proj_name
149
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
150
+ end
151
+ end
152
+
153
+ if app_info_obj.nil?
154
+ raise Informative, "#{proj_name} 错误, 请输入正确的App代号名称, pgyer网站没有该App"
155
+ end
156
+ end
157
+
158
+ end
159
+
160
+ def start_upload(pgyer_proj_name:nil, ipa_file_upload:nil, description:nil, args_send_flag:true)
161
+
162
+ if !pgyer_proj_name.nil? && !ipa_file_upload.nil?
163
+
164
+ args_temp = []
165
+ pgyer_proj_name = pgyer_proj_name.strip.gsub(/ /, '')
166
+ args_temp << "--proj=#{pgyer_proj_name}"
167
+ args_temp << "--ipa=\"#{ipa_file_upload}\""
168
+
169
+ if args_send_flag
170
+ args_temp << "--send"
171
+ end
172
+
173
+ if !description.nil?
174
+ args_temp << "--desc=\"#{description}\""
175
+ end
176
+
177
+ puts args_temp
178
+ Pindo::Command::Pgyer::Upload::run(args_temp)
179
+ end
180
+ end
181
+
182
+ end
183
+ end
184
+ end
185
+ end
186
+
@@ -0,0 +1,127 @@
1
+ require 'highline/import'
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+
6
+ module Pindo
7
+ class Command
8
+ class Dev < Command
9
+ class Confusecode < Dev
10
+
11
+ include Command::DeployOptions
12
+
13
+ include CommonConfuseProj
14
+
15
+ self.summary = '设置混淆编译第一步'
16
+
17
+ self.description = <<-DESC
18
+ 目前该混淆方法已经废弃。设置混淆编译第一步.用法: pindo dev confusecode --type=class_method_variable_protocol_property_category_pods
19
+
20
+ DESC
21
+
22
+ self.arguments = [
23
+ CLAide::Argument.new('path/to/config.json', true),
24
+ ]
25
+
26
+ def self.options
27
+ [
28
+
29
+ ].concat(super)
30
+ end
31
+
32
+ def initialize(argv)
33
+ super
34
+ end
35
+
36
+ def validate!
37
+ super
38
+ end
39
+
40
+ def run
41
+
42
+ current_dir = Dir.pwd
43
+ current_project_dir = current_dir
44
+ app_config_dir = clong_buildconfig_repo(repo_name: @deploy_repo_name)
45
+
46
+ clang_repo_dir = clone_devclang_repo
47
+ # if !File.exist?(clang_repo_dir)
48
+ puts "#{clang_repo_dir}"
49
+ puts "There is no clang tool !!! dev confusecode"
50
+ # return
51
+ # end
52
+
53
+ symash_type = confuse_version_type(path:current_project_dir, default_type:"symash2")
54
+ if @newconfuse_flag
55
+ symash_type = "symash2"
56
+ end
57
+ confuse_tool_path = File.join(clang_repo_dir, symash_type)
58
+ puts "Confuse Tool Path: #{confuse_tool_path}"
59
+
60
+ meaning_tool = File.join(clang_repo_dir, "MeaningfulTools/MeaningfulName")
61
+
62
+ if symash_type == "symash1"
63
+
64
+ base_db = File.join(clang_repo_dir, "MeaningfulTools/confuse.db")
65
+ meaning_db = File.join(current_project_dir, "SymashCache/app_confuse.db")
66
+ origin_json_dir = File.join(current_project_dir, "SymashCache/Original")
67
+ output_dir = File.join(current_project_dir, "SymashCache")
68
+ confuse_type= @confuse_type
69
+
70
+ if File.exist?(File.join(output_dir, "Replaced.json"))
71
+ FileUtils.rm_rf(File.join(output_dir, "Replaced.json"))
72
+ end
73
+
74
+ puts "Tool: #{meaning_tool}"
75
+ puts "Base DB: #{base_db}"
76
+ puts "DB: #{meaning_db}"
77
+ puts "Origin Dir: #{origin_json_dir}"
78
+ puts "Output Dir: #{output_dir}"
79
+ puts "Project Dir: #{current_project_dir}"
80
+ puts "Confuse Type: #{confuse_type}"
81
+
82
+ if File.exist?(origin_json_dir)
83
+ command = meaning_tool + " -r -p 100 -i 100 -b " + @bundle_id + " -d " + origin_json_dir + " -o " + base_db + " -m " + meaning_db + " -t " + output_dir + " -f " + current_project_dir + " -z " + confuse_type
84
+ puts "Command: #{command}"
85
+ system command
86
+ end
87
+
88
+ text = File.read(File.join(current_project_dir, "Symash.json"))
89
+ new_contents = text.gsub(/\"IMPORT\".*/, "\"IMPORT\":true,")
90
+ File.open(File.join(current_project_dir, "Symash.json"), "w") {|file| file.puts new_contents }
91
+
92
+ text = File.read(File.join(current_project_dir, "Symash.json"))
93
+ new_contents = text.gsub(/\"STRICT\".*/, "\"STRICT\":true,")
94
+ File.open(File.join(current_project_dir, "Symash.json"), "w") {|file| file.puts new_contents }
95
+ else
96
+
97
+
98
+ puts "Tool: #{meaning_tool}"
99
+
100
+ puts "+++++++"
101
+ puts "+++++++"
102
+ puts "+++++++"
103
+ service_path = File.join(confuse_tool_path, "/Applications/SymashX.app/Contents/MacOS/symashctl")
104
+ command1 = "cd #{current_project_dir} && " + service_path + " stop"
105
+ puts "Command: #{command1}"
106
+ system command1
107
+ puts "+++++++"
108
+ puts "+++++++"
109
+ puts "+++++++"
110
+
111
+ if File.exist?(File.join(current_project_dir, "SymashData/export-sympkg.plist"))
112
+ command = meaning_tool + " -q -f " + current_project_dir
113
+ puts "Command: #{command}"
114
+ system command
115
+ end
116
+
117
+ command2 = "cd #{current_project_dir} && " + service_path + " start -backend"
118
+ puts "Command: #{command2}"
119
+ system command2
120
+ puts "Done !"
121
+
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,111 @@
1
+ require 'highline/import'
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+
6
+
7
+ module Pindo
8
+ class Command
9
+ class Dev < Command
10
+ class Confuseproj < Dev
11
+
12
+ require 'pindo/deploy/confuseproj'
13
+
14
+ include Command::DeployOptions
15
+
16
+ include CommonConfuseProj
17
+
18
+ self.summary = '设置混淆编译第一步'
19
+
20
+ self.description = <<-DESC
21
+ 设置混淆编译第一步. 用法:\n
22
+ pindo dev confuseproj --type=class_method_variable_protocol_property_category
23
+
24
+ for example: --type=class_method
25
+
26
+ class: confuse class
27
+ method: confuse method
28
+
29
+ ...
30
+ DESC
31
+
32
+ self.arguments = [
33
+
34
+ ]
35
+
36
+ def self.options
37
+ [
38
+ ].concat(super)
39
+ end
40
+
41
+ def initialize(argv)
42
+ super
43
+ end
44
+
45
+ def validate!
46
+ super
47
+ end
48
+
49
+ def run
50
+
51
+ current_dir = Dir.pwd
52
+ current_project_dir = current_dir
53
+ puts "+++++ #{current_project_dir}"
54
+
55
+ app_config_dir = clong_buildconfig_repo(repo_name: @deploy_repo_name)
56
+ clang_repo_dir = clone_devclang_repo
57
+ # if !File.exist?(clang_repo_dir)
58
+ puts "#{clang_repo_dir}"
59
+ puts "There is no clang tool !!! dev confuseproj"
60
+ # return
61
+ # end
62
+
63
+ symash_type = confuse_version_type(path:app_config_dir, default_type:"symash2")
64
+ if @newconfuse_flag
65
+ symash_type = "symash2"
66
+ end
67
+ confuse_tool_path = File.join(clang_repo_dir, symash_type)
68
+ puts "Confuse Tool Path: #{confuse_tool_path}"
69
+
70
+ puts "Clang Path: #{confuse_tool_path}"
71
+ install_symash(clang_path:confuse_tool_path)
72
+
73
+ current_project_fullname = ""
74
+ Dir.foreach(current_dir) do |file|
75
+ if file =~ /(.*).xcodeproj/
76
+ current_project_fullname = file
77
+ break;
78
+ end
79
+ end
80
+
81
+ old_proj_name = File.basename(current_project_fullname, ".xcodeproj")
82
+
83
+ config_confuse_project(clang_path:confuse_tool_path, project_name:old_proj_name, project_path:current_project_dir, default_type:symash_type)
84
+ config_symash(clang_path:confuse_tool_path, project_path:current_project_dir, confuse_type:@confuse_type, default_type:symash_type)
85
+
86
+ force_config = nil
87
+ force_config = {}
88
+ # force_config['BACKEND_SYMASH_DISABLE_SPL'] = true
89
+ force_config['BACKEND_SYMASH_DISABLE_BCF_PROB'] = 50
90
+
91
+ update_symash_config(app_config_dir:app_config_dir, project_path:current_project_dir, confuse_type:@confuse_type, force_config: force_config)
92
+
93
+ if symash_type == "symash2"
94
+ Dir.chdir(current_project_dir)
95
+ puts "+++++ #{current_project_dir}"
96
+ service_path = File.join(confuse_tool_path, "/Applications/SymashX.app/Contents/MacOS/symashctl")
97
+ command1 = "cd #{current_project_dir} && " + service_path + " stop"
98
+ command2 = "cd #{current_project_dir} && " + service_path + " start -export"
99
+ puts "Command: #{command1}"
100
+ system command1
101
+ puts "Command: #{command2}"
102
+ system command2
103
+ Dir.chdir(current_project_dir)
104
+ puts "Done !"
105
+ end
106
+
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end