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
@@ -0,0 +1,312 @@
1
+ require 'fileutils'
2
+ require 'xcodeproj'
3
+ require 'json'
4
+ require 'pindo/module/xcode/xcodebuildconfig'
5
+ require 'pindo/module/cert/xcodecerthelper'
6
+
7
+ module Pindo
8
+
9
+ module XcodeBuildHelper
10
+
11
+ def pull_podfile_lock(project_dir:nil, app_config_dir:nil)
12
+ begin
13
+ src_pod_file = File.join(app_config_dir, "Podfile.lock")
14
+ build_verify_file = File.join(app_config_dir, "build_verify.json")
15
+ build_verify_json = nil
16
+ begin
17
+ build_verify_json = JSON.parse(File.read(build_verify_file))
18
+ rescue => error
19
+ end
20
+ build_verify_json = build_verify_json || {}
21
+ build_verify_json["release_code_commit"] = git_latest_commit_id(local_repo_dir:project_dir)
22
+ build_verify_json["release_config_commit"] = git_latest_commit_id(local_repo_dir:app_config_dir)
23
+ bytes = File.binread(src_pod_file)
24
+ checksum = Digest::MD5.hexdigest(bytes)
25
+ build_verify_json["release_podfile_checksum"] = checksum
26
+ build_verify_json["release_time"] = Time.now.strftime('%y/%m/%d %H:%M:%S')
27
+
28
+ File.open(build_verify_file, "w") do |file|
29
+ file.write(JSON.pretty_generate(build_verify_json))
30
+ file.close
31
+ end
32
+
33
+ git_addpush_repo(path:app_config_dir, message:"back release info", commit_file_params:["build_verify.json"])
34
+
35
+ if File.exist?(src_pod_file)
36
+ FileUtils.cp_r(src_pod_file, File.join(project_dir, "Podfile.lock"))
37
+ end
38
+ rescue => error
39
+ raise Informative, "获取Podfile.lock 文件失败!!!"
40
+ end
41
+ end
42
+
43
+
44
+ def backup_podfile_lock(project_dir:nil, app_config_dir:nil, appversion:nil)
45
+
46
+ begin
47
+ proj_pod_file = File.join(project_dir, "Podfile.lock")
48
+ FileUtils.cp_r(proj_pod_file, File.join(app_config_dir, "Podfile.lock"))
49
+ git_addpush_repo(path:app_config_dir, message:"#{appversion} backup podfile.lock", commit_file_params:["Podfile.lock"])
50
+
51
+ bytes = File.binread(proj_pod_file)
52
+ checksum = Digest::MD5.hexdigest(bytes)
53
+ build_verify_file = File.join(app_config_dir, "build_verify.json")
54
+ build_verify_json = nil
55
+ begin
56
+ build_verify_json = JSON.parse(File.read(build_verify_file))
57
+ rescue => error
58
+ end
59
+ build_verify_json = build_verify_json || {}
60
+ build_verify_json["output_code_commit"] = git_latest_commit_id(local_repo_dir:project_dir)
61
+ build_verify_json["output_config_commit"] = git_latest_commit_id(local_repo_dir:app_config_dir)
62
+ build_verify_json["output_podfile_checksum"] = checksum
63
+ build_verify_json["output_time"] = Time.now.strftime('%y/%m/%d %H:%M:%S')
64
+
65
+ File.open(build_verify_file, "w") do |file|
66
+ file.write(JSON.pretty_generate(build_verify_json))
67
+ file.close
68
+ end
69
+ git_addpush_repo(path:app_config_dir, message:"backup #{appversion} output info", commit_file_params:["build_verify.json"])
70
+
71
+ rescue => error
72
+ raise Informative, "保存Podfile.lock 文件失败!!!"
73
+ end
74
+ end
75
+
76
+ def install_google_plist(project_dir:nil, app_config_dir:nil)
77
+
78
+ project_fullname = Dir.glob(File.join(project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
79
+ project_obj = Xcodeproj::Project.open(project_fullname)
80
+ select_target = project_obj.targets.select { |target| target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) }.first
81
+ file_ref = select_target.resources_build_phase.files_references.select { |file| file.display_name.include?("GoogleService-Info.plist") }.first
82
+
83
+ if !file_ref.nil?
84
+ xcode_googleinfo_path = file_ref.real_path
85
+
86
+ if !File.exist?(File.join(app_config_dir, "GoogleService-Info.plist"))
87
+ raise Informative, "缺少 GoogleService-Info.plist ==> #{app_config_dir}!!!"
88
+ else
89
+ FileUtils.cp(File.join(app_config_dir, "GoogleService-Info.plist"), xcode_googleinfo_path)
90
+ end
91
+
92
+ if !File.exist?(xcode_googleinfo_path)
93
+ raise Informative, "拷贝 GoogleService-Info.plist 失败!!==> #{xcode_googleinfo_path}!!!"
94
+ end
95
+ end
96
+ end
97
+
98
+ def modify_project_config(project_dir:nil, proj_name:nil, config_json:nil)
99
+
100
+ proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
101
+ project_obj = Xcodeproj::Project.open(proj_fullname)
102
+
103
+ ios_deployment_targe = "14.0"
104
+ if config_json && config_json['project_info'] && config_json['project_info']['ios_deployment_targe']
105
+ ios_deployment_targe = config_json['project_info']['ios_deployment_targe']
106
+ end
107
+
108
+ project_obj.targets.each do |target|
109
+
110
+ exe_binary_name = config_json['app_info']['app_display_name']
111
+ exe_binary_name = exe_binary_name.gsub(/ /, '');
112
+ exe_binary_name = exe_binary_name.gsub(/\'/, '');
113
+
114
+ target.build_configurations.each do |config|
115
+ config.build_settings['CURRENT_PROJECT_VERSION'] = config_json['app_info']['app_build_version']
116
+ config.build_settings['MARKETING_VERSION'] = config_json['app_info']['app_version']
117
+ config.build_settings['INFOPLIST_KEY_CFBundleDisplayName'] = config_json['app_info']['app_display_name']
118
+ end
119
+
120
+ target_name_map = get_target_name_map
121
+ if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application])
122
+ target.build_configurations.each do |config|
123
+ config.build_settings['PRODUCT_NAME'] = exe_binary_name
124
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = ios_deployment_targe
125
+ end
126
+ elsif
127
+ target_name_map.each do |k, v|
128
+ if target.name.to_s.end_with?(k)
129
+ target.build_configurations.each do |config|
130
+ config.build_settings['PRODUCT_NAME'] = exe_binary_name + k
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+ project_obj.save
137
+
138
+ end
139
+
140
+ def modify_infoplist_version(plist_file_name:nil, config_json:nil, target_name:nil)
141
+
142
+ if File.exist?(plist_file_name)
143
+ info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
144
+ info_plist_dict["CFBundleIdentifier"] = "$(PRODUCT_BUNDLE_IDENTIFIER)"
145
+
146
+ exe_binary_name = config_json['app_info']["app_display_name"]
147
+ exe_binary_name = exe_binary_name.gsub(/ /, '');
148
+ exe_binary_name = exe_binary_name.gsub(/\'/, '');
149
+
150
+ info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["app_display_name"]
151
+ if !info_plist_dict["CFBundleName"].nil?
152
+ info_plist_dict["CFBundleName"] = exe_binary_name
153
+ end
154
+
155
+ if config_json['app_info']["imessage_display_name"] && target_name && target_name.end_with?("iMessage")
156
+ info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["imessage_display_name"]
157
+ end
158
+ if config_json['app_info']["extension_display_name"] && target_name && target_name.end_with?("Extension")
159
+ info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["extension_display_name"]
160
+ end
161
+
162
+
163
+ if config_json['app_info']["extensionad_display_name"] && target_name && target_name.end_with?("ExtensionAd")
164
+ info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["extensionad_display_name"]
165
+ end
166
+
167
+ if config_json['app_info']["extensionporn_display_name"] && target_name && target_name.end_with?("ExtensionPorn")
168
+ info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["extensionporn_display_name"]
169
+ end
170
+
171
+ if config_json['app_info']["keyboard_display_name"] && target_name && target_name.end_with?("Keyboard")
172
+ info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["keyboard_display_name"]
173
+ end
174
+
175
+
176
+ if config_json['app_info']["siri_display_name"] && target_name && target_name.end_with?("Keyboard")
177
+ info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["siri_display_name"]
178
+ end
179
+
180
+ if config_json['app_info']["siriui_display_name"] && target_name && target_name.end_with?("iMessage")
181
+ info_plist_dict["CFBundleDisplayName"] = config_json['app_info']["siriui_display_name"]
182
+ end
183
+
184
+
185
+
186
+ unless config_json['app_info']["app_version"]
187
+ raise Informative, "config.json Missing app_info app_version !!!"
188
+ end
189
+
190
+ info_plist_dict["CFBundleShortVersionString"] = config_json['app_info']["app_version"]
191
+
192
+ unless config_json['app_info']["app_build_version"]
193
+ raise Informative, "config.json Missing app_info app_build_version !!!"
194
+ end
195
+ info_plist_dict["CFBundleVersion"] = config_json['app_info']["app_build_version"]
196
+ Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
197
+ end
198
+ end
199
+
200
+
201
+ def modify_maintarget_info_plist(plist_file_name:nil, config_json:nil, target_name:nil)
202
+ if File.exist?(plist_file_name)
203
+ info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
204
+
205
+ info_plist_dict.delete("AccountKitClientToken")
206
+
207
+ if info_plist_dict["Fabric"]
208
+ info_plist_dict.delete('Fabric')
209
+ end
210
+
211
+
212
+ if !config_json['app_info']['admob_app_id'].nil? && config_json['app_info']['admob_app_id'].include?("__________config")
213
+ raise Informative, "config.json 配置文件key :admob_app_id 包含初始值未修改, 配置正确的值或者删除!!!"
214
+ end
215
+
216
+ if !info_plist_dict["GADApplicationIdentifier"].nil? && config_json['app_info']['admob_app_id'].nil?
217
+ raise Informative, "工程Info.plist中有 Admob 配置,config.json缺少 Admob 配置参数!!!"
218
+ end
219
+
220
+ if !config_json['app_info']['admob_app_id'].nil?
221
+ info_plist_dict["GADApplicationIdentifier"] = config_json['app_info']['admob_app_id']
222
+ end
223
+
224
+
225
+
226
+
227
+ if !config_json['app_info']['applovin_app_id'].nil? && config_json['app_info']['applovin_app_id'].include?("__________config")
228
+ raise Informative, "config.json 配置文件key :applovin_app_id 包含初始值未修改, 配置正确的值或者删除!!!"
229
+ end
230
+
231
+ if !info_plist_dict["AppLovinSdkKey"].nil? && config_json['app_info']['applovin_app_id'].nil?
232
+ raise Informative, "工程Info.plist中有 AppLovin 配置,config.json缺少 AppLovin 配置参数!!!"
233
+ end
234
+
235
+ if !info_plist_dict["AppLovinSdkKey"].nil? && !config_json['app_info']['applovin_app_id'].nil?
236
+ info_plist_dict["AppLovinSdkKey"] = config_json['app_info']['applovin_app_id']
237
+ else
238
+ info_plist_dict.delete('AppLovinSdkKey')
239
+ end
240
+
241
+ # if config_json['app_setting'] && config_json['app_setting']['applovin_app_id']
242
+ # info_plist_dict["AppLovinSdkKey"] = config_json['app_setting']['applovin_app_id']
243
+ # elsif config_json['app_setting'] && config_json['app_setting']['kGUKeyApplovinAppId']
244
+ # info_plist_dict["AppLovinSdkKey"] = config_json['app_setting']['kGUKeyApplovinAppId']
245
+ # else
246
+ # info_plist_dict.delete('AppLovinSdkKey')
247
+ # end
248
+
249
+
250
+
251
+
252
+
253
+ info_plist_dict["CFBundleURLTypes"] = []
254
+ item0 = {}
255
+ item0["CFBundleTypeRole"] = "Editor"
256
+ item0["CFBundleURLName"] = "$(PRODUCT_BUNDLE_IDENTIFIER)"
257
+ item0["CFBundleURLSchemes"] = []
258
+ item0["CFBundleURLSchemes"] << "$(PRODUCT_BUNDLE_IDENTIFIER)"
259
+ info_plist_dict["CFBundleURLTypes"] << item0
260
+
261
+ if config_json['app_info'] && config_json['app_info']['facebook_app_id']
262
+ info_plist_dict["FacebookAppID"] = config_json['app_info']['facebook_app_id']
263
+ if config_json['app_info']['facebook_client_token'].nil?
264
+ raise Informative, "config.json FB Token 是空的"
265
+ end
266
+ info_plist_dict["FacebookClientToken"] = config_json['app_info']['facebook_client_token']
267
+ info_plist_dict["FacebookDisplayName"] = config_json['app_info']['app_display_name']
268
+ item1 = {}
269
+ item1["CFBundleTypeRole"] = "Editor"
270
+ item1["CFBundleURLSchemes"] = []
271
+ item1["CFBundleURLSchemes"] << "fb" + config_json['app_info']['facebook_app_id']
272
+ info_plist_dict["CFBundleURLTypes"] << item1
273
+ else
274
+ info_plist_dict.delete('FacebookAppID')
275
+ info_plist_dict.delete('FacebookClientToken')
276
+ info_plist_dict.delete('FacebookDisplayName')
277
+ end
278
+
279
+ Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
280
+ end
281
+
282
+ end
283
+
284
+ def modify_info_plist(project_dir:nil, proj_name:nil, config_json:nil)
285
+
286
+ ## Main Info.plist
287
+ proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
288
+ project_obj = Xcodeproj::Project.open(proj_fullname)
289
+
290
+ info_plist_path = File.join(project_dir, "AppEntry", "Info.plist")
291
+ project_obj.targets.each do |target|
292
+
293
+ temp_info = target.build_configurations.first.build_settings['INFOPLIST_FILE']
294
+ info_plist_path = File.join(project_dir, temp_info)
295
+
296
+ if target.product_type.to_s.eql?("com.apple.product-type.application") && !File.exist?(info_plist_path)
297
+ raise Informative, "Missing Target #{target.name.to_s} Info.plist !!! Modify Info.plist Error !!!"
298
+ end
299
+
300
+ if target.product_type.to_s.eql?("com.apple.product-type.application") then
301
+ modify_maintarget_info_plist(plist_file_name:info_plist_path, config_json:config_json, target_name:proj_name)
302
+ end
303
+
304
+ modify_infoplist_version(plist_file_name:info_plist_path, config_json:config_json, target_name:target.name.to_s)
305
+ end
306
+
307
+ end
308
+
309
+
310
+ end
311
+
312
+ end
@@ -0,0 +1,248 @@
1
+
2
+ module Pindo
3
+
4
+ module XcodoeResConst
5
+
6
+ def self.xcode_ios_icon_json
7
+ model_data = {
8
+ "images" => [
9
+ {
10
+ "size" => "20x20",
11
+ "idiom" => "iphone",
12
+ "filename" => "icon20@2x.png",
13
+ "scale" => "2x"
14
+ },
15
+ {
16
+ "size" => "20x20",
17
+ "idiom" => "iphone",
18
+ "filename" => "icon20@3x.png",
19
+ "scale" => "3x"
20
+ },
21
+ {
22
+ "size" => "29x29",
23
+ "idiom" => "iphone",
24
+ "filename" => "icon29@2x.png",
25
+ "scale" => "2x"
26
+ },
27
+ {
28
+ "size" => "29x29",
29
+ "idiom" => "iphone",
30
+ "filename" => "icon29@3x.png",
31
+ "scale" => "3x"
32
+ },
33
+ {
34
+ "size" => "40x40",
35
+ "idiom" => "iphone",
36
+ "filename" => "icon40@2x.png",
37
+ "scale" => "2x"
38
+ },
39
+ {
40
+ "size" => "40x40",
41
+ "idiom" => "iphone",
42
+ "filename" => "icon40@3x.png",
43
+ "scale" => "3x"
44
+ },
45
+ {
46
+ "size" => "60x60",
47
+ "idiom" => "iphone",
48
+ "filename" => "icon60@2x.png",
49
+ "scale" => "2x"
50
+ },
51
+ {
52
+ "size" => "60x60",
53
+ "idiom" => "iphone",
54
+ "filename" => "icon60@3x.png",
55
+ "scale" => "3x"
56
+ },
57
+ {
58
+ "size" => "20x20",
59
+ "idiom" => "ipad",
60
+ "filename" => "icon20@1x.png",
61
+ "scale" => "1x"
62
+ },
63
+ {
64
+ "size" => "20x20",
65
+ "idiom" => "ipad",
66
+ "filename" => "icon20@2x.png",
67
+ "scale" => "2x"
68
+ },
69
+ {
70
+ "size" => "29x29",
71
+ "idiom" => "ipad",
72
+ "filename" => "icon29@1x.png",
73
+ "scale" => "1x"
74
+ },
75
+ {
76
+ "size" => "29x29",
77
+ "idiom" => "ipad",
78
+ "filename" => "icon29@2x.png",
79
+ "scale" => "2x"
80
+ },
81
+ {
82
+ "size" => "40x40",
83
+ "idiom" => "ipad",
84
+ "filename" => "icon40@1x.png",
85
+ "scale" => "1x"
86
+ },
87
+ {
88
+ "size" => "40x40",
89
+ "idiom" => "ipad",
90
+ "filename" => "icon40@2x.png",
91
+ "scale" => "2x"
92
+ },
93
+ {
94
+ "size" => "76x76",
95
+ "idiom" => "ipad",
96
+ "filename" => "icon76@1x.png",
97
+ "scale" => "1x"
98
+ },
99
+ {
100
+ "size" => "76x76",
101
+ "idiom" => "ipad",
102
+ "filename" => "icon76@2x.png",
103
+ "scale" => "2x"
104
+ },
105
+ {
106
+ "size" => "83.5x83.5",
107
+ "idiom" => "ipad",
108
+ "filename" => "icon83_5@2x.png",
109
+ "scale" => "2x"
110
+ },
111
+ {
112
+ "size" => "1024x1024",
113
+ "idiom" => "ios-marketing",
114
+ "filename" => "icon1024@1x.png",
115
+ "scale" => "1x"
116
+ }
117
+ ],
118
+ "info" => {
119
+ "version" => 1,
120
+ "author" => "xcode"
121
+ }
122
+ }
123
+ return model_data
124
+ end
125
+
126
+ def self.xcode_ios_imessage_icon_json
127
+ model_data = {
128
+ "images" => [
129
+ {
130
+ "size" => "29x29",
131
+ "idiom" => "iphone",
132
+ "filename" => "icon29@2x.png",
133
+ "scale" => "2x"
134
+ },
135
+ {
136
+ "size" => "29x29",
137
+ "idiom" => "iphone",
138
+ "filename" => "icon29@3x.png",
139
+ "scale" => "3x"
140
+ },
141
+ {
142
+ "size" => "60x45",
143
+ "idiom" => "iphone",
144
+ "filename" => "icon60_45@2x.png",
145
+ "scale" => "2x"
146
+ },
147
+ {
148
+ "size" => "60x45",
149
+ "idiom" => "iphone",
150
+ "filename" => "icon60_45@3x.png",
151
+ "scale" => "3x"
152
+ },
153
+ {
154
+ "size" => "29x29",
155
+ "idiom" => "ipad",
156
+ "filename" => "icon29@2x.png",
157
+ "scale" => "2x"
158
+ },
159
+ {
160
+ "size" => "67x50",
161
+ "idiom" => "ipad",
162
+ "filename" => "icon67_50@2x.png",
163
+ "scale" => "2x"
164
+ },
165
+ {
166
+ "size" => "74x55",
167
+ "idiom" => "ipad",
168
+ "filename" => "icon74_55@2x.png",
169
+ "scale" => "2x"
170
+ },
171
+ {
172
+ "size" => "1024x1024",
173
+ "idiom" => "ios-marketing",
174
+ "filename" => "icon1024@1x.png",
175
+ "scale" => "1x"
176
+ },
177
+ {
178
+ "size" => "27x20",
179
+ "idiom" => "universal",
180
+ "filename" => "icon27_20@2x.png",
181
+ "scale" => "2x",
182
+ "platform" => "ios"
183
+ },
184
+ {
185
+ "size" => "27x20",
186
+ "idiom" => "universal",
187
+ "filename" => "icon27_20@3x.png",
188
+ "scale" => "3x",
189
+ "platform" => "ios"
190
+ },
191
+ {
192
+ "size" => "32x24",
193
+ "idiom" => "universal",
194
+ "filename" => "icon32_24@2x.png",
195
+ "scale" => "2x",
196
+ "platform" => "ios"
197
+ },
198
+ {
199
+ "size" => "32x24",
200
+ "idiom" => "universal",
201
+ "filename" => "icon32_24@3x.png",
202
+ "scale" => "3x",
203
+ "platform" => "ios"
204
+ },
205
+ {
206
+ "size" => "1024x768",
207
+ "idiom" => "ios-marketing",
208
+ "filename" => "icon1024_768@1x.png",
209
+ "scale" => "1x",
210
+ "platform" => "ios"
211
+ }
212
+ ],
213
+ "info" => {
214
+ "version" => 1,
215
+ "author" => "xcode"
216
+ }
217
+ }
218
+ return model_data
219
+ end
220
+
221
+ def self.xcode_ios_launchimg_json
222
+ model_data = {
223
+ "images" => [
224
+ {
225
+ "idiom" => "universal",
226
+ "scale" => "1x"
227
+ },
228
+ {
229
+ "idiom" => "universal",
230
+ "filename" => "w768_h1024@2x.png",
231
+ "scale" => "2x"
232
+ },
233
+ {
234
+ "idiom" => "universal",
235
+ "scale" => "3x"
236
+ }
237
+ ],
238
+ "info" => {
239
+ "version" => 1,
240
+ "author" => "xcode"
241
+ }
242
+ }
243
+ return model_data
244
+ end
245
+
246
+ end
247
+
248
+ end