pindo 4.6.9 → 4.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/aeshelper.rb +48 -2
  3. data/lib/pindo/base/funlog.rb +89 -0
  4. data/lib/pindo/base/githelper.rb +30 -12
  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/pgyerclient.rb +78 -14
  12. data/lib/pindo/command/appstore/iap.rb +43 -0
  13. data/lib/pindo/command/appstore/itcapp.rb +41 -0
  14. data/lib/pindo/command/appstore/metadata.rb +43 -0
  15. data/lib/pindo/command/appstore/screenshots.rb +43 -0
  16. data/lib/pindo/command/appstore/upload.rb +40 -0
  17. data/lib/pindo/command/appstore.rb +17 -0
  18. data/lib/pindo/command/deploy/build.rb +109 -0
  19. data/lib/pindo/{deploy → command/deploy}/bundleid.rb +1 -1
  20. data/lib/pindo/command/deploy/cert.rb +179 -0
  21. data/lib/pindo/command/deploy/configproj.rb +105 -0
  22. data/lib/pindo/{deploy → command/deploy}/getitcinfo.rb +1 -1
  23. data/lib/pindo/{deploy → command/deploy}/iap.rb +30 -9
  24. data/lib/pindo/{deploy → command/deploy}/itcapp.rb +0 -1
  25. data/lib/pindo/{deploy → command/deploy}/itcinfo.rb +2 -3
  26. data/lib/pindo/{deploy → command/deploy}/pem.rb +3 -2
  27. data/lib/pindo/{deploy → command/deploy}/resign.rb +14 -63
  28. data/lib/pindo/command/deploy.rb +44 -0
  29. data/lib/pindo/{dev → command/dev}/autobuild.rb +17 -80
  30. data/lib/pindo/{dev → command/dev}/autoresign.rb +17 -64
  31. data/lib/pindo/{dev → command/dev}/createbuild.rb +0 -2
  32. data/lib/pindo/{dev → command/dev}/debug.rb +6 -2
  33. data/lib/pindo/command/dev/pgyercert.rb +75 -0
  34. data/lib/pindo/command/dev.rb +25 -0
  35. data/lib/pindo/command/env.rb +17 -0
  36. data/lib/pindo/{ipa → command/ipa}/autoresign.rb +18 -70
  37. data/lib/pindo/{ipa → command/ipa}/import.rb +47 -102
  38. data/lib/pindo/{ipa → command/ipa}/output.rb +38 -135
  39. data/lib/pindo/command/ipa.rb +16 -0
  40. data/lib/pindo/{lib → command/lib}/update.rb +19 -10
  41. data/lib/pindo/command/lib.rb +16 -0
  42. data/lib/pindo/{pgyer → command/pgyer}/apptest.rb +7 -29
  43. data/lib/pindo/{pgyer → command/pgyer}/comment.rb +7 -30
  44. data/lib/pindo/{pgyer → command/pgyer}/download.rb +35 -30
  45. data/lib/pindo/{pgyer → command/pgyer}/login.rb +3 -4
  46. data/lib/pindo/command/pgyer/resign.rb +111 -0
  47. data/lib/pindo/command/pgyer/upload.rb +123 -0
  48. data/lib/pindo/command/pgyer.rb +18 -0
  49. data/lib/pindo/{repo.rb → command/repo.rb} +4 -4
  50. data/lib/pindo/{utils → command/utils}/applovin.rb +43 -33
  51. data/lib/pindo/{utils → command/utils}/boss.rb +3 -3
  52. data/lib/pindo/command/utils/icon.rb +81 -0
  53. data/lib/pindo/{utils → command/utils}/renewproj.rb +1 -0
  54. data/lib/pindo/command/utils.rb +26 -0
  55. data/lib/pindo/command.rb +23 -26
  56. data/lib/pindo/module/build/swarkhelper.rb +95 -0
  57. data/lib/pindo/module/cert/certhelper.rb +176 -0
  58. data/lib/pindo/module/cert/keychainhelper.rb +138 -0
  59. data/lib/pindo/module/{pemcreate.rb → cert/pemhelper.rb} +3 -1
  60. data/lib/pindo/module/cert/provisioninghelper.rb +137 -0
  61. data/lib/pindo/module/cert/xcodecerthelper.rb +301 -0
  62. data/lib/pindo/module/{pgyerhelper.rb → pgyer/pgyerhelper.rb} +246 -35
  63. data/lib/pindo/module/xcode/xcodeappconfig.rb +188 -0
  64. data/lib/pindo/module/xcode/xcodebuildconfig.rb +12 -0
  65. data/lib/pindo/module/xcode/xcodebuildhelper.rb +312 -0
  66. data/lib/pindo/module/xcode/xcoderesconstant.rb +248 -0
  67. data/lib/pindo/module/xcode/xcodereshandler.rb +198 -0
  68. data/lib/pindo/module/xcode/xcodereshelper.rb +120 -0
  69. data/lib/pindo/options/appconfigoptions.rb +1 -0
  70. data/lib/pindo/options/deployoptions.rb +38 -41
  71. data/lib/pindo/version.rb +1 -1
  72. metadata +109 -97
  73. data/lib/pindo/deploy/Fastfile +0 -233
  74. data/lib/pindo/deploy/build.rb +0 -167
  75. data/lib/pindo/deploy/cert.rb +0 -508
  76. data/lib/pindo/deploy/configproj.rb +0 -89
  77. data/lib/pindo/deploy.rb +0 -44
  78. data/lib/pindo/dev.rb +0 -23
  79. data/lib/pindo/env/flutter.rb +0 -59
  80. data/lib/pindo/env/flutter.sh +0 -116
  81. data/lib/pindo/env.rb +0 -17
  82. data/lib/pindo/ipa.rb +0 -22
  83. data/lib/pindo/lib.rb +0 -18
  84. data/lib/pindo/module/buildconfighelper.rb +0 -13
  85. data/lib/pindo/module/buildhelper.rb +0 -76
  86. data/lib/pindo/module/config_project.sh +0 -143
  87. data/lib/pindo/module/configprojhelper.rb +0 -631
  88. data/lib/pindo/module/icon_contents.json +0 -116
  89. data/lib/pindo/module/imessage_icon.json +0 -91
  90. data/lib/pindo/module/imgset_contents.json +0 -21
  91. data/lib/pindo/module/launchimg_contents.json +0 -21
  92. data/lib/pindo/module/xcodebuildpre.rb +0 -258
  93. data/lib/pindo/pgyer/upload.rb +0 -234
  94. data/lib/pindo/pgyer.rb +0 -17
  95. data/lib/pindo/utils/icon.rb +0 -91
  96. data/lib/pindo/utils/icon.sh +0 -133
  97. data/lib/pindo/utils/podindex.rb +0 -56
  98. data/lib/pindo/utils/podindex.sh +0 -30
  99. data/lib/pindo/utils.rb +0 -29
  100. /data/lib/pindo/{deploy → command/deploy}/check.rb +0 -0
  101. /data/lib/pindo/{deploy → command/deploy}/confusecode.rb +0 -0
  102. /data/lib/pindo/{deploy → command/deploy}/confuseproj.rb +0 -0
  103. /data/lib/pindo/{deploy → command/deploy}/fabric.rb +0 -0
  104. /data/lib/pindo/{deploy → command/deploy}/initconfig.rb +0 -0
  105. /data/lib/pindo/{deploy → command/deploy}/pullconfig.rb +0 -0
  106. /data/lib/pindo/{deploy → command/deploy}/pushconfig.rb +0 -0
  107. /data/lib/pindo/{deploy → command/deploy}/quswark.rb +0 -0
  108. /data/lib/pindo/{deploy → command/deploy}/quswauth.rb +0 -0
  109. /data/lib/pindo/{deploy → command/deploy}/reportbug.rb +0 -0
  110. /data/lib/pindo/{deploy → command/deploy}/tag.rb +0 -0
  111. /data/lib/pindo/{deploy → command/deploy}/updateconfig.rb +0 -0
  112. /data/lib/pindo/{deploy → command/deploy}/uploadipa.rb +0 -0
  113. /data/lib/pindo/{dev → command/dev}/confusecode.rb +0 -0
  114. /data/lib/pindo/{dev → command/dev}/confuseproj.rb +0 -0
  115. /data/lib/pindo/{dev → command/dev}/pub.rb +0 -0
  116. /data/lib/pindo/{dev → command/dev}/renewcert.rb +0 -0
  117. /data/lib/pindo/{env → command/env}/dreamstudio.rb +0 -0
  118. /data/lib/pindo/{env → command/env}/quarkenv.rb +0 -0
  119. /data/lib/pindo/{env → command/env}/swarkenv.rb +0 -0
  120. /data/lib/pindo/{env → command/env}/workhard.rb +0 -0
  121. /data/lib/pindo/{lib → command/lib}/forcepush.rb +0 -0
  122. /data/lib/pindo/{lib → command/lib}/lint.rb +0 -0
  123. /data/lib/pindo/{lib → command/lib}/push.rb +0 -0
  124. /data/lib/pindo/{repo → command/repo}/clone.rb +0 -0
  125. /data/lib/pindo/{repo → command/repo}/create.rb +0 -0
  126. /data/lib/pindo/{repo → command/repo}/login.rb +0 -0
  127. /data/lib/pindo/{repo → command/repo}/search.rb +0 -0
  128. /data/lib/pindo/{setup.rb → command/setup.rb} +0 -0
  129. /data/lib/pindo/{upgrade.rb → command/upgrade.rb} +0 -0
  130. /data/lib/pindo/{utils → command/utils}/clearcert.rb +0 -0
  131. /data/lib/pindo/{utils → command/utils}/device.rb +0 -0
  132. /data/lib/pindo/{utils → command/utils}/tgate.rb +0 -0
  133. /data/lib/pindo/{utils → command/utils}/xcassets.rb +0 -0
  134. /data/lib/pindo/{utils → command/utils}/xcassets.sh +0 -0
  135. /data/lib/pindo/module/{appstore_in_app_purchase.rb → appstore/appstore_in_app_purchase.rb} +0 -0
  136. /data/lib/pindo/module/{appstore_metadata_connect_api_helper.rb → appstore/appstore_metadata_connect_api_helper.rb} +0 -0
  137. /data/lib/pindo/module/{appstore_metadata_fastlane_helper.rb → appstore/appstore_metadata_fastlane_helper.rb} +0 -0
  138. /data/lib/pindo/module/{iap_tier.json → appstore/iap_tier.json} +0 -0
  139. /data/lib/pindo/module/{commonconfuseproj.rb → build/commonconfuseproj.rb} +0 -0
  140. /data/lib/pindo/module/{xcodehelper.rb → xcode/xcodehelper.rb} +0 -0
@@ -1,631 +0,0 @@
1
-
2
- require 'fileutils'
3
-
4
- module Pindo
5
-
6
- module Configprojhelper
7
-
8
-
9
-
10
- def pull_podfile_lock(project_dir:nil, app_config_dir:nil)
11
-
12
-
13
- begin
14
- puts
15
- puts "获取最新的Podfile.lock..."
16
- puts
17
- src_pod_file = File.join(app_config_dir, "Podfile.lock")
18
- build_verify_file = File.join(app_config_dir, "build_verify.json")
19
- build_verify_json = nil
20
- begin
21
- build_verify_json = JSON.parse(File.read(build_verify_file))
22
- rescue => error
23
- end
24
- build_verify_json = build_verify_json || {}
25
- build_verify_json["release_code_commit"] = git_latest_commit_id(local_repo_dir:project_dir)
26
- build_verify_json["release_config_commit"] = git_latest_commit_id(local_repo_dir:app_config_dir)
27
- bytes = File.binread(src_pod_file)
28
- checksum = Digest::MD5.hexdigest(bytes)
29
- build_verify_json["release_podfile_checksum"] = checksum
30
- build_verify_json["release_time"] = Time.now.strftime('%y/%m/%d %H:%M:%S')
31
-
32
- File.open(build_verify_file, "w") do |file|
33
- file.write(JSON.pretty_generate(build_verify_json))
34
- file.close
35
- end
36
-
37
- git_addpush_repo(path:app_config_dir, message:"back release info", commit_file_params:["build_verify.json"])
38
-
39
- if File.exist?(src_pod_file)
40
- FileUtils.cp_r(src_pod_file, File.join(project_dir, "Podfile.lock"))
41
- end
42
- puts
43
- puts "获取Podfile.lock完成!!!"
44
- puts
45
-
46
- rescue => error
47
- puts error
48
- raise Informative, "获取Podfile.lock 文件失败!!!"
49
- end
50
-
51
-
52
- end
53
-
54
- def backup_podfile_lock(project_dir:nil, app_config_dir:nil, appversion:nil)
55
-
56
- begin
57
- # if File.exist?(File.join(project_dir, "Podfile.lock"))
58
- puts
59
- puts "保存最新的Podfile.lock..."
60
- puts
61
-
62
- proj_pod_file = File.join(project_dir, "Podfile.lock")
63
- FileUtils.cp_r(proj_pod_file, File.join(app_config_dir, "Podfile.lock"))
64
- git_addpush_repo(path:app_config_dir, message:"#{appversion} backup podfile.lock", commit_file_params:["Podfile.lock"])
65
-
66
- puts
67
- puts "保存Podfile.lock完成!!!"
68
- puts
69
-
70
- bytes = File.binread(proj_pod_file)
71
- checksum = Digest::MD5.hexdigest(bytes)
72
- build_verify_file = File.join(app_config_dir, "build_verify.json")
73
- build_verify_json = nil
74
- begin
75
- build_verify_json = JSON.parse(File.read(build_verify_file))
76
- rescue => error
77
- end
78
- build_verify_json = build_verify_json || {}
79
- build_verify_json["output_code_commit"] = git_latest_commit_id(local_repo_dir:project_dir)
80
- build_verify_json["output_config_commit"] = git_latest_commit_id(local_repo_dir:app_config_dir)
81
- build_verify_json["output_podfile_checksum"] = checksum
82
- build_verify_json["output_time"] = Time.now.strftime('%y/%m/%d %H:%M:%S')
83
-
84
- File.open(build_verify_file, "w") do |file|
85
- file.write(JSON.pretty_generate(build_verify_json))
86
- file.close
87
- end
88
- git_addpush_repo(path:app_config_dir, message:"backup #{appversion} output info", commit_file_params:["build_verify.json"])
89
-
90
- # end
91
- rescue => error
92
- raise Informative, "保存Podfile.lock 文件失败!!!"
93
- end
94
-
95
- end
96
-
97
- def modify_google_plist(project_dir:nil, app_config_dir:nil)
98
-
99
- if !File.exist?(File.join(project_dir, "AppEntry/GoogleService-Info.plist"))
100
- puts app_config_dir
101
- puts "Xcode Missing GoogleService-Info.plist in #{project_dir}!!! Project neead add firebase !!!"
102
- else
103
-
104
- if !File.exist?(File.join(app_config_dir, "GoogleService-Info.plist")) && File.exist?(File.join(project_dir, "AppEntry/GoogleService-Info.plist"))
105
- puts app_config_dir
106
- raise Informative, "Missing GoogleService-Info.plist in #{app_config_dir}!!! You need creat GoogleService-Info.plist !!!"
107
- end
108
-
109
- if File.exist?(File.join(app_config_dir, "GoogleService-Info.plist"))
110
- FileUtils.cp_r(File.join(app_config_dir, "GoogleService-Info.plist"), File.join(project_dir, "AppEntry/GoogleService-Info.plist"))
111
- end
112
-
113
- end
114
- end
115
-
116
- def modify_appprefix_plist(project_dir:nil, appprefix_file:nil, config_json:nil)
117
-
118
- config_json['app_setting'].each do |key, value|
119
- puts value
120
- if !value.nil? && value.to_s.include?("__________config")
121
- raise Informative, "config.json 配置文件key : #{key} 包含初始值未修改, 配置正确的值或者删除!!!"
122
- end
123
- end
124
-
125
- bFind = false
126
-
127
- Find.find(File.join(project_dir, "PResources")) do |path|
128
-
129
- if path.to_s.end_with?(appprefix_file) then
130
- puts ""
131
- puts "Modify App Config:"
132
- puts ""
133
- bFind = true
134
- if appprefix_file.include?(".plist") then
135
- info_plist_dict = Xcodeproj::Plist.read_from_path(path)
136
- if config_json['app_setting']
137
-
138
- config_json['app_setting'].each { |key,value| puts "#{key} = #{value}"}
139
-
140
- new_info_plist_dict = {}
141
-
142
- info_plist_dict.each do |key, value|
143
- if config_json['app_setting'][key] != "" && config_json['app_setting'][key]
144
- new_info_plist_dict[key] = config_json['app_setting'][key]
145
- else
146
- new_info_plist_dict[key] = value
147
- end
148
- end
149
-
150
- end
151
- Xcodeproj::Plist.write_to_path(new_info_plist_dict, path)
152
- else
153
-
154
- appprefix_file_json=JSON.parse(File.read(path))
155
-
156
- if config_json['app_setting']
157
- new_appprefix_file_json = {}
158
-
159
- config_json['app_setting'].each { |key,value| puts "#{key} = #{value}"}
160
-
161
- appprefix_file_json.each do |key, value|
162
- if config_json['app_setting'][key] != "" && config_json['app_setting'][key]
163
- new_appprefix_file_json[key] = config_json['app_setting'][key]
164
- else
165
- new_appprefix_file_json[key] = value
166
- end
167
- end
168
-
169
- File.open(path, "w") do |f|
170
- f.write(JSON.pretty_generate(new_appprefix_file_json))
171
- end
172
- end
173
- end
174
- end
175
- end
176
-
177
- if !bFind
178
- raise Informative, "工程本地配置未修改,PResources/目录下没有找到对应的配置文件 #{appprefix_file} !!!!"
179
- end
180
- end
181
-
182
- def modify_infoplist_version(plist_file_name:nil, config_json:nil, target_name:nil)
183
-
184
- if File.exist?(plist_file_name)
185
- info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
186
- info_plist_dict["CFBundleIdentifier"] = "$(PRODUCT_BUNDLE_IDENTIFIER)"
187
-
188
- exe_binary_name = config_json['app_info']["app_display_name"]
189
- exe_binary_name = exe_binary_name.gsub(/ /, '');
190
- exe_binary_name = exe_binary_name.gsub(/\'/, '');
191
-
192
- info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["app_display_name"]
193
- if !info_plist_dict["CFBundleName"].nil?
194
- info_plist_dict["CFBundleName"] = exe_binary_name
195
- end
196
-
197
- if config_json['app_info']["imessage_display_name"] && target_name && target_name.end_with?("iMessage")
198
- info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["imessage_display_name"]
199
- end
200
- if config_json['app_info']["extension_display_name"] && target_name && target_name.end_with?("Extension")
201
- info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["extension_display_name"]
202
- end
203
-
204
-
205
- if config_json['app_info']["extensionad_display_name"] && target_name && target_name.end_with?("ExtensionAd")
206
- info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["extensionad_display_name"]
207
- end
208
-
209
- if config_json['app_info']["extensionporn_display_name"] && target_name && target_name.end_with?("ExtensionPorn")
210
- info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["extensionporn_display_name"]
211
- end
212
-
213
- if config_json['app_info']["keyboard_display_name"] && target_name && target_name.end_with?("Keyboard")
214
- info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["keyboard_display_name"]
215
- end
216
-
217
-
218
- if config_json['app_info']["siri_display_name"] && target_name && target_name.end_with?("Keyboard")
219
- info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["siri_display_name"]
220
- end
221
-
222
- if config_json['app_info']["siriui_display_name"] && target_name && target_name.end_with?("iMessage")
223
- info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["siriui_display_name"]
224
- end
225
-
226
-
227
-
228
- unless config_json['app_info']["app_version"]
229
- raise Informative, "config.json Missing app_info app_version !!!"
230
- end
231
-
232
- info_plist_dict["CFBundleShortVersionString"] = config_json['app_info']["app_version"]
233
-
234
- unless config_json['app_info']["app_build_version"]
235
- raise Informative, "config.json Missing app_info app_build_version !!!"
236
- end
237
- info_plist_dict["CFBundleVersion"] = config_json['app_info']["app_build_version"]
238
- Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
239
- end
240
- end
241
-
242
-
243
- def modify_maintarget_info_plist(plist_file_name:nil, config_json:nil, target_name:nil)
244
- if File.exist?(plist_file_name)
245
- info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
246
-
247
- info_plist_dict.delete("AccountKitClientToken")
248
-
249
- if info_plist_dict["Fabric"]
250
- info_plist_dict.delete('Fabric')
251
- end
252
-
253
-
254
- if !config_json['app_info']['admob_app_id'].nil? && config_json['app_info']['admob_app_id'].include?("__________config")
255
- raise Informative, "config.json 配置文件key :admob_app_id 包含初始值未修改, 配置正确的值或者删除!!!"
256
- end
257
-
258
- if !info_plist_dict["GADApplicationIdentifier"].nil? && config_json['app_info']['admob_app_id'].nil?
259
- raise Informative, "工程Info.plist中有 Admob 配置,config.json缺少 Admob 配置参数!!!"
260
- end
261
-
262
- if !config_json['app_info']['admob_app_id'].nil?
263
- info_plist_dict["GADApplicationIdentifier"] = config_json['app_info']['admob_app_id']
264
- end
265
-
266
-
267
-
268
-
269
- if !config_json['app_info']['applovin_app_id'].nil? && config_json['app_info']['applovin_app_id'].include?("__________config")
270
- raise Informative, "config.json 配置文件key :applovin_app_id 包含初始值未修改, 配置正确的值或者删除!!!"
271
- end
272
-
273
- if !info_plist_dict["AppLovinSdkKey"].nil? && config_json['app_info']['applovin_app_id'].nil?
274
- raise Informative, "工程Info.plist中有 AppLovin 配置,config.json缺少 AppLovin 配置参数!!!"
275
- end
276
-
277
- if !info_plist_dict["AppLovinSdkKey"].nil? && !config_json['app_info']['applovin_app_id'].nil?
278
- info_plist_dict["AppLovinSdkKey"] = config_json['app_info']['applovin_app_id']
279
- else
280
- info_plist_dict.delete('AppLovinSdkKey')
281
- end
282
-
283
- # if config_json['app_setting'] && config_json['app_setting']['applovin_app_id']
284
- # info_plist_dict["AppLovinSdkKey"] = config_json['app_setting']['applovin_app_id']
285
- # elsif config_json['app_setting'] && config_json['app_setting']['kGUKeyApplovinAppId']
286
- # info_plist_dict["AppLovinSdkKey"] = config_json['app_setting']['kGUKeyApplovinAppId']
287
- # else
288
- # info_plist_dict.delete('AppLovinSdkKey')
289
- # end
290
-
291
-
292
-
293
-
294
-
295
- info_plist_dict["CFBundleURLTypes"] = []
296
- item0 = {}
297
- item0["CFBundleTypeRole"] = "Editor"
298
- item0["CFBundleURLName"] = "$(PRODUCT_BUNDLE_IDENTIFIER)"
299
- item0["CFBundleURLSchemes"] = []
300
- item0["CFBundleURLSchemes"] << "$(PRODUCT_BUNDLE_IDENTIFIER)"
301
- info_plist_dict["CFBundleURLTypes"] << item0
302
-
303
- if config_json['app_info'] && config_json['app_info']['facebook_app_id']
304
- info_plist_dict["FacebookAppID"] = config_json['app_info']['facebook_app_id']
305
- if config_json['app_info']['facebook_client_token'].nil?
306
- raise Informative, "config.json FB Token 是空的"
307
- end
308
- info_plist_dict["FacebookClientToken"] = config_json['app_info']['facebook_client_token']
309
- info_plist_dict["FacebookDisplayName"] = config_json['app_info']['app_display_name']
310
- item1 = {}
311
- item1["CFBundleTypeRole"] = "Editor"
312
- item1["CFBundleURLSchemes"] = []
313
- item1["CFBundleURLSchemes"] << "fb" + config_json['app_info']['facebook_app_id']
314
- info_plist_dict["CFBundleURLTypes"] << item1
315
- else
316
- info_plist_dict.delete('FacebookAppID')
317
- info_plist_dict.delete('FacebookClientToken')
318
- info_plist_dict.delete('FacebookDisplayName')
319
- end
320
-
321
- Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
322
- end
323
-
324
- end
325
-
326
- def modify_info_plist(project_dir:nil, proj_name:nil, config_json:nil)
327
-
328
- ## Main Info.plist
329
- proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
330
- project_obj = Xcodeproj::Project.open(proj_fullname)
331
-
332
- info_plist_path = File.join(project_dir, "AppEntry", "Info.plist")
333
- project_obj.targets.each do |target|
334
-
335
- temp_info = target.build_configurations.first.build_settings['INFOPLIST_FILE']
336
- info_plist_path = File.join(project_dir, temp_info)
337
-
338
- if target.product_type.to_s.eql?("com.apple.product-type.application") && !File.exist?(info_plist_path)
339
- raise Informative, "Missing Target #{target.name.to_s} Info.plist !!! Modify Info.plist Error !!!"
340
- end
341
-
342
- if target.product_type.to_s.eql?("com.apple.product-type.application") then
343
- modify_maintarget_info_plist(plist_file_name:info_plist_path, config_json:config_json, target_name:proj_name)
344
- end
345
-
346
- modify_infoplist_version(plist_file_name:info_plist_path, config_json:config_json, target_name:target.name.to_s)
347
- end
348
-
349
- end
350
-
351
-
352
- def remove_test_pod_modue(project_dir:nil)
353
-
354
- pod_file = File.join(project_dir, "Podfile")
355
-
356
- command = 'sed -i "" "/.*' + "FancySettingsPlugin" +'.*/d" ' + pod_file
357
- system command
358
-
359
- command = 'sed -i "" "/.*' + "TYSettingsPlugin" +'.*/d" ' + pod_file
360
- system command
361
-
362
- command = 'sed -i "" "/.*' + "CSSettingsPlugin" +'.*/d" ' + pod_file
363
- system command
364
-
365
- command = 'sed -i "" "/.*' + "FunnySettingsPlugin" +'.*/d" ' + pod_file
366
- system command
367
- end
368
-
369
- def add_pod_modue(project_dir:nil, pod_name:nil, pod_version:nil)
370
-
371
- puts "Modify App Podfile: "
372
- # if File.exist?(File.join(project_dir, "Podfile.lock"))
373
- # FileUtils.rm_rf(File.join(project_dir, "Podfile.lock"))
374
- # end
375
-
376
- pod_file = File.join(project_dir, "Podfile")
377
-
378
- command = 'sed -i "" "/.*' + "AppSource" +'.*/d" ' + pod_file
379
- system command
380
-
381
- command = 'sed -i "" "/.*' + "QuarkData" +'.*/d" ' + pod_file
382
- system command
383
-
384
- command = 'sed -i "" "/.*' + "VMData" +'.*/d" ' + pod_file
385
- system command
386
-
387
- command = 'sed -i "" "/.*' + pod_name +'.*/d" ' + pod_file
388
- system command
389
-
390
- if File.exist?(File.join(project_dir, "Podfile"))
391
- puts " #{pod_name} #{pod_version}"
392
- text = File.read(File.join(project_dir, "Podfile"))
393
-
394
- if pod_version.nil? || pod_version == "" || pod_version.empty?
395
-
396
- if text.include?("FirebaseAnalytics")
397
- new_contents = text.gsub!(/\'FirebaseAnalytics\'.*$/, "\'FirebaseAnalytics\'\r\n pod \'#{pod_name}\' ")
398
- elsif text.include?("UMCommon")
399
- new_contents = text.gsub!(/\'UMCommon\'.*$/, "\'UMCommon\'\r\n pod \'#{pod_name}\' ")
400
- end
401
- else
402
- if text.include?("FirebaseAnalytics")
403
- new_contents = text.gsub!(/\'FirebaseAnalytics\'.*$/, "\'FirebaseAnalytics\'\r\n pod \'#{pod_name}\', \'#{pod_version}\' ")
404
- elsif text.include?("UMCommon")
405
- new_contents = text.gsub!(/\'UMCommon\'.*$/, "\'UMCommon\'\r\n pod \'#{pod_name}\', \'#{pod_version}\' ")
406
- end
407
- end
408
- File.open(File.join(project_dir, "Podfile"), "w") {|file| file.puts new_contents }
409
- end
410
- end
411
-
412
- def copy_img_res(src_dir:nil, src_img_name:nil, dst_dir:nil, dst_img_name:nil, ignore_error:false)
413
- dst_full_file = File.join(dst_dir, dst_img_name)
414
- if File.exist?(dst_full_file)
415
- FileUtils.rm_rf(dst_full_file)
416
- end
417
- puts src_img_name
418
- if File.exist?(File.join(src_dir, src_img_name))
419
- FileUtils.cp_r(File.join(src_dir, src_img_name), dst_full_file)
420
- if !File.exist?(dst_full_file)
421
- puts File.join(src_dir, src_img_name)
422
- raise Informative, "Missing file #{dst_full_file}"
423
- end
424
- end
425
- end
426
-
427
- def modify_launch_image_res(project_dir:nil, app_config_dir:nil, proj_name:nil, config_json:nil)
428
-
429
- img_src_dir = File.join(app_config_dir, 'launch')
430
- launch_json_dir = File.join(project_dir, "AppEntry/Assets.xcassets/LaunchImage.imageset")
431
- launch_json_file = File.join(project_dir, "AppEntry/Assets.xcassets/LaunchImage.imageset/Contents.json")
432
- if File.exist?(launch_json_file)
433
- default_json_file = File.join(File.expand_path('./', __dir__), 'imgset_contents.json')
434
- launch_json = JSON.parse(File.read(default_json_file))
435
- File.open(launch_json_file, "w") do |f|
436
- f.write(JSON.pretty_generate(launch_json))
437
- end
438
- if File.exist?(File.join(launch_json_dir, "w768_h1024@1x.png"))
439
- FileUtils.rm_rf(File.join(launch_json_dir, "w768_h1024@1x.png"))
440
- end
441
- copy_img_res(src_dir:img_src_dir, src_img_name:"w768_h1024@2x.png", dst_dir:launch_json_dir, dst_img_name:"w768_h1024@2x.png")
442
- end
443
-
444
- launch_json_dir = File.join(project_dir, "AppEntry/Assets.xcassets/LaunchImage.launchimage")
445
- launch_json_file = File.join(project_dir, "AppEntry/Assets.xcassets/LaunchImage.launchimage/Contents.json")
446
- if File.exist?(launch_json_file)
447
- default_json_file = File.join(File.expand_path('./', __dir__), 'launchimg_contents.json')
448
- launch_json = JSON.parse(File.read(default_json_file))
449
- File.open(launch_json_file, "w") do |f|
450
- f.write(JSON.pretty_generate(launch_json))
451
- end
452
- if File.exist?(File.join(launch_json_dir, "w768_h1024@1x.png"))
453
- FileUtils.rm_rf(File.join(launch_json_dir, "w768_h1024@1x.png"))
454
- end
455
- copy_img_res(src_dir:img_src_dir, src_img_name:"w768_h1024@2x.png", dst_dir:launch_json_dir, dst_img_name:"w768_h1024@2x.png")
456
- end
457
- end
458
-
459
-
460
- def modify_icon_res(project_dir:nil, app_config_dir:nil, proj_name:nil, config_json:nil)
461
-
462
- shellFile = File.join(File.expand_path('./', __dir__), 'config_project.sh')
463
- iconShellFile = File.join(File.expand_path('../utils', __dir__), 'icon.sh')
464
- icon_src_file = File.join(app_config_dir, 'fastlane/icon.png')
465
- imessage_icon_src_file = File.join(app_config_dir, 'fastlane/icon1024_768.png')
466
- icon_dest_dir = File.join(app_config_dir, 'icon_' +Time.now.strftime('%y%m%d_%H%M%S'))
467
-
468
- if !File.exist?(icon_dest_dir)
469
- FileUtils.mkdir(icon_dest_dir)
470
- end
471
-
472
- if File.exist?(imessage_icon_src_file)
473
- command = 'bash ' + iconShellFile + " -i #{icon_src_file}" + " -a #{imessage_icon_src_file}" + " -o #{icon_dest_dir}" + " > /dev/null 2>&1"
474
- else
475
- command = 'bash ' + iconShellFile + " -i #{icon_src_file}" + " -o #{icon_dest_dir}" + " > /dev/null 2>&1"
476
- end
477
- system command
478
-
479
-
480
- icon_proj_dir = File.join(project_dir, "AppEntry/Assets.xcassets/AppIcon.appiconset")
481
- icon_proj_file = File.join(project_dir, "AppEntry/Assets.xcassets/AppIcon.appiconset/Contents.json")
482
- default_json_file = File.join(File.expand_path('./', __dir__), 'icon_contents.json')
483
- launch_json = JSON.parse(File.read(default_json_file))
484
- File.open(icon_proj_file, "w") do |f|
485
- f.write(JSON.pretty_generate(launch_json))
486
- end
487
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon20@1x.png", dst_dir:icon_proj_dir, dst_img_name:"icon20@1x.png")
488
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon20@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon20@2x.png")
489
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon20@3x.png", dst_dir:icon_proj_dir, dst_img_name:"icon20@3x.png")
490
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon29@1x.png", dst_dir:icon_proj_dir, dst_img_name:"icon29@1x.png")
491
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon29@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon29@2x.png")
492
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon29@3x.png", dst_dir:icon_proj_dir, dst_img_name:"icon29@3x.png")
493
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon40@1x.png", dst_dir:icon_proj_dir, dst_img_name:"icon40@1x.png")
494
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon40@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon40@2x.png")
495
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon40@3x.png", dst_dir:icon_proj_dir, dst_img_name:"icon40@3x.png")
496
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon60@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon60@2x.png")
497
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon60@3x.png", dst_dir:icon_proj_dir, dst_img_name:"icon60@3x.png")
498
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon76@1x.png", dst_dir:icon_proj_dir, dst_img_name:"icon76@1x.png")
499
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon76@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon76@2x.png")
500
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon83_5@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon83_5@2x.png")
501
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon1024@1x.png", dst_dir:icon_proj_dir, dst_img_name:"icon1024@1x.png")
502
-
503
- extension_icon_src_dir = File.join(project_dir, proj_name + "Extension/Assets.xcassets/AppIcon.appiconset")
504
-
505
- puts " +++ extension_icon_src_dir ++++ extension_icon_src_dir "
506
- puts extension_icon_src_dir
507
-
508
- if File.exist?(extension_icon_src_dir)
509
- puts extension_icon_src_dir
510
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon20@1x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon20@1x.png")
511
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon20@2x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon20@2x.png")
512
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon20@3x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon20@3x.png")
513
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon29@1x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon29@1x.png")
514
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon29@2x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon29@2x.png")
515
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon29@3x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon29@3x.png")
516
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon40@1x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon40@1x.png")
517
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon40@2x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon40@2x.png")
518
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon40@3x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon40@3x.png")
519
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon60@2x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon60@2x.png")
520
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon60@3x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon60@3x.png")
521
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon76@1x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon76@1x.png")
522
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon76@2x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon76@2x.png")
523
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon83_5@2x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon83_5@2x.png")
524
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon1024@1x.png", dst_dir:extension_icon_src_dir, dst_img_name:"icon1024@1x.png")
525
- end
526
-
527
- if File.exist?(imessage_icon_src_file)
528
- imessage_icon_dest_dir = File.join(icon_dest_dir,"imessage")
529
- icon_proj_dir = File.join(project_dir, proj_name + "iMessage/Assets.xcassets/iMessage App Icon.stickersiconset")
530
- icon_proj_file = File.join(project_dir, proj_name + "iMessage/Assets.xcassets/iMessage App Icon.stickersiconset/Contents.json")
531
- default_json_file = File.join(File.expand_path('./', __dir__), 'imessage_icon.json')
532
- launch_json = JSON.parse(File.read(default_json_file))
533
- File.open(icon_proj_file, "w") do |f|
534
- f.write(JSON.pretty_generate(launch_json))
535
- end
536
-
537
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon27_20@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon27_20@2x.png")
538
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon27_20@3x.png", dst_dir:icon_proj_dir, dst_img_name:"icon27_20@3x.png")
539
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon29@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon29@2x.png")
540
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon29@3x.png", dst_dir:icon_proj_dir, dst_img_name:"icon29@3x.png")
541
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon32_24@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon32_24@2x.png")
542
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon32_24@3x.png", dst_dir:icon_proj_dir, dst_img_name:"icon32_24@3x.png")
543
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon60_45@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon60_45@2x.png")
544
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon60_45@3x.png", dst_dir:icon_proj_dir, dst_img_name:"icon60_45@3x.png")
545
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon67_50@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon67_50@2x.png")
546
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon74_55@2x.png", dst_dir:icon_proj_dir, dst_img_name:"icon74_55@2x.png")
547
- copy_img_res(src_dir:imessage_icon_dest_dir, src_img_name:"icon1024_768@1x.png", dst_dir:icon_proj_dir, dst_img_name:"icon1024_768@1x.png")
548
- copy_img_res(src_dir:icon_dest_dir, src_img_name:"icon1024@1x.png", dst_dir:icon_proj_dir, dst_img_name:"icon1024@1x.png")
549
- end
550
-
551
- if File.exist?(icon_dest_dir)
552
- FileUtils.rm_rf(icon_dest_dir)
553
- end
554
- end
555
-
556
- def modify_project_config(project_dir:nil, proj_name:nil, config_json:nil)
557
-
558
- proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
559
- project_obj = Xcodeproj::Project.open(proj_fullname)
560
-
561
- ios_deployment_targe = "14.0"
562
- if config_json && config_json['project_info'] && config_json['project_info']['ios_deployment_targe']
563
- ios_deployment_targe = config_json['project_info']['ios_deployment_targe']
564
- end
565
-
566
- project_obj.targets.each do |target|
567
-
568
- exe_binary_name = config_json['app_info']['app_display_name']
569
- exe_binary_name = exe_binary_name.gsub(/ /, '');
570
- exe_binary_name = exe_binary_name.gsub(/\'/, '');
571
-
572
- target.build_configurations.each do |config|
573
- config.build_settings['CURRENT_PROJECT_VERSION'] = config_json['app_info']['app_build_version']
574
- config.build_settings['MARKETING_VERSION'] = config_json['app_info']['app_version']
575
- config.build_settings['INFOPLIST_KEY_CFBundleDisplayName'] = config_json['app_info']['app_display_name']
576
- end
577
-
578
- if target.name.to_s.end_with?("Content") then
579
- target.build_configurations.each do |config|
580
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "Content"
581
- end
582
- elsif target.name.to_s.end_with?("Service") then
583
- target.build_configurations.each do |config|
584
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "Service"
585
- end
586
- elsif target.name.to_s.end_with?("Keyboard") then
587
- target.build_configurations.each do |config|
588
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "Keyboard"
589
- end
590
- elsif target.name.to_s.end_with?("iMessage") then
591
- target.build_configurations.each do |config|
592
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "iMessage"
593
- end
594
- elsif target.name.to_s.end_with?("Siri") then
595
- target.build_configurations.each do |config|
596
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "Siri"
597
- end
598
- elsif target.name.to_s.end_with?("SiriUI") then
599
- target.build_configurations.each do |config|
600
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "SiriUI"
601
- end
602
- elsif target.name.to_s.end_with?("Widget") then
603
- target.build_configurations.each do |config|
604
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "Widget"
605
- end
606
- elsif target.name.to_s.end_with?("Extension") then
607
- target.build_configurations.each do |config|
608
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "Extension"
609
- end
610
- elsif target.name.to_s.end_with?("ExtensionAd") then
611
- target.build_configurations.each do |config|
612
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "ExtensionAd"
613
- end
614
- elsif target.name.to_s.end_with?("ExtensionPorn") then
615
- target.build_configurations.each do |config|
616
- config.build_settings['PRODUCT_NAME'] = exe_binary_name + "ExtensionPorn"
617
- end
618
- else
619
- target.build_configurations.each do |config|
620
- config.build_settings['PRODUCT_NAME'] = exe_binary_name
621
- config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = ios_deployment_targe
622
- end
623
- end
624
- end
625
- project_obj.save
626
-
627
- end
628
-
629
- end
630
-
631
- end