pindo 4.6.9

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.
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