pindo 4.6.9 → 4.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/aeshelper.rb +75 -0
  3. data/lib/pindo/base/funlog.rb +89 -0
  4. data/lib/pindo/base/githelper.rb +35 -18
  5. data/lib/pindo/base/plaininformative.rb +3 -0
  6. data/lib/pindo/base/standarderror.rb +1 -0
  7. data/lib/pindo/base/xcodeconst.rb +251 -0
  8. data/lib/pindo/client/applovinclient.rb +6 -3
  9. data/lib/pindo/client/aws3sclient.rb +33 -46
  10. data/lib/pindo/client/bossclient.rb +1 -1
  11. data/lib/pindo/client/bossconfigclient.rb +3 -3
  12. data/lib/pindo/client/pgyerclient.rb +159 -100
  13. data/lib/pindo/command/appstore/iap.rb +43 -0
  14. data/lib/pindo/command/appstore/itcapp.rb +41 -0
  15. data/lib/pindo/command/appstore/metadata.rb +43 -0
  16. data/lib/pindo/command/appstore/screenshots.rb +43 -0
  17. data/lib/pindo/command/appstore/upload.rb +40 -0
  18. data/lib/pindo/command/appstore.rb +17 -0
  19. data/lib/pindo/command/deploy/build.rb +109 -0
  20. data/lib/pindo/{deploy → command/deploy}/bundleid.rb +1 -1
  21. data/lib/pindo/command/deploy/cert.rb +183 -0
  22. data/lib/pindo/command/deploy/configproj.rb +105 -0
  23. data/lib/pindo/{deploy → command/deploy}/getitcinfo.rb +1 -1
  24. data/lib/pindo/{deploy → command/deploy}/iap.rb +30 -9
  25. data/lib/pindo/{deploy → command/deploy}/itcapp.rb +0 -1
  26. data/lib/pindo/{deploy → command/deploy}/itcinfo.rb +2 -3
  27. data/lib/pindo/{deploy → command/deploy}/pem.rb +3 -2
  28. data/lib/pindo/{deploy → command/deploy}/resign.rb +14 -63
  29. data/lib/pindo/command/deploy.rb +44 -0
  30. data/lib/pindo/{dev → command/dev}/autobuild.rb +28 -76
  31. data/lib/pindo/{dev → command/dev}/autoresign.rb +21 -64
  32. data/lib/pindo/command/dev/build.rb +94 -0
  33. data/lib/pindo/{dev → command/dev}/createbuild.rb +0 -2
  34. data/lib/pindo/{dev → command/dev}/debug.rb +6 -2
  35. data/lib/pindo/command/dev/pgyercert.rb +75 -0
  36. data/lib/pindo/command/dev.rb +26 -0
  37. data/lib/pindo/command/env.rb +17 -0
  38. data/lib/pindo/{ipa → command/ipa}/autoresign.rb +22 -70
  39. data/lib/pindo/{ipa → command/ipa}/import.rb +48 -103
  40. data/lib/pindo/{ipa → command/ipa}/output.rb +43 -135
  41. data/lib/pindo/command/ipa.rb +16 -0
  42. data/lib/pindo/{lib → command/lib}/update.rb +23 -14
  43. data/lib/pindo/command/lib.rb +16 -0
  44. data/lib/pindo/{pgyer → command/pgyer}/apptest.rb +7 -29
  45. data/lib/pindo/{pgyer → command/pgyer}/comment.rb +7 -30
  46. data/lib/pindo/{pgyer → command/pgyer}/download.rb +35 -30
  47. data/lib/pindo/{pgyer → command/pgyer}/login.rb +3 -4
  48. data/lib/pindo/command/pgyer/resign.rb +111 -0
  49. data/lib/pindo/command/pgyer/upload.rb +123 -0
  50. data/lib/pindo/command/pgyer.rb +18 -0
  51. data/lib/pindo/{repo.rb → command/repo.rb} +4 -4
  52. data/lib/pindo/{utils → command/utils}/applovin.rb +43 -33
  53. data/lib/pindo/{utils → command/utils}/boss.rb +3 -3
  54. data/lib/pindo/command/utils/icon.rb +81 -0
  55. data/lib/pindo/{utils → command/utils}/renewproj.rb +1 -0
  56. data/lib/pindo/command/utils.rb +26 -0
  57. data/lib/pindo/command.rb +23 -26
  58. data/lib/pindo/config/pindoconfig.rb +27 -0
  59. data/lib/pindo/module/appselect.rb +9 -8
  60. data/lib/pindo/module/build/swarkhelper.rb +95 -0
  61. data/lib/pindo/module/cert/certhelper.rb +187 -0
  62. data/lib/pindo/module/cert/keychainhelper.rb +150 -0
  63. data/lib/pindo/module/{pemcreate.rb → cert/pemhelper.rb} +3 -1
  64. data/lib/pindo/module/cert/provisioninghelper.rb +137 -0
  65. data/lib/pindo/module/cert/xcodecerthelper.rb +326 -0
  66. data/lib/pindo/module/{pgyerhelper.rb → pgyer/pgyerhelper.rb} +246 -36
  67. data/lib/pindo/module/xcode/xcodeappconfig.rb +188 -0
  68. data/lib/pindo/module/xcode/xcodebuildconfig.rb +12 -0
  69. data/lib/pindo/module/xcode/xcodebuildhelper.rb +312 -0
  70. data/lib/pindo/module/xcode/xcoderesconstant.rb +248 -0
  71. data/lib/pindo/module/xcode/xcodereshandler.rb +198 -0
  72. data/lib/pindo/module/xcode/xcodereshelper.rb +119 -0
  73. data/lib/pindo/options/appconfigoptions.rb +1 -0
  74. data/lib/pindo/options/deployoptions.rb +38 -42
  75. data/lib/pindo/version.rb +1 -1
  76. metadata +110 -97
  77. data/lib/pindo/deploy/Fastfile +0 -233
  78. data/lib/pindo/deploy/build.rb +0 -167
  79. data/lib/pindo/deploy/cert.rb +0 -508
  80. data/lib/pindo/deploy/configproj.rb +0 -89
  81. data/lib/pindo/deploy.rb +0 -44
  82. data/lib/pindo/dev.rb +0 -23
  83. data/lib/pindo/env/flutter.rb +0 -59
  84. data/lib/pindo/env/flutter.sh +0 -116
  85. data/lib/pindo/env.rb +0 -17
  86. data/lib/pindo/ipa.rb +0 -22
  87. data/lib/pindo/lib.rb +0 -18
  88. data/lib/pindo/module/buildconfighelper.rb +0 -13
  89. data/lib/pindo/module/buildhelper.rb +0 -76
  90. data/lib/pindo/module/config_project.sh +0 -143
  91. data/lib/pindo/module/configprojhelper.rb +0 -631
  92. data/lib/pindo/module/icon_contents.json +0 -116
  93. data/lib/pindo/module/imessage_icon.json +0 -91
  94. data/lib/pindo/module/imgset_contents.json +0 -21
  95. data/lib/pindo/module/launchimg_contents.json +0 -21
  96. data/lib/pindo/module/xcodebuildpre.rb +0 -258
  97. data/lib/pindo/pgyer/upload.rb +0 -234
  98. data/lib/pindo/pgyer.rb +0 -17
  99. data/lib/pindo/utils/icon.rb +0 -91
  100. data/lib/pindo/utils/icon.sh +0 -133
  101. data/lib/pindo/utils/podindex.rb +0 -56
  102. data/lib/pindo/utils/podindex.sh +0 -30
  103. data/lib/pindo/utils.rb +0 -29
  104. /data/lib/pindo/{deploy → command/deploy}/check.rb +0 -0
  105. /data/lib/pindo/{deploy → command/deploy}/confusecode.rb +0 -0
  106. /data/lib/pindo/{deploy → command/deploy}/confuseproj.rb +0 -0
  107. /data/lib/pindo/{deploy → command/deploy}/fabric.rb +0 -0
  108. /data/lib/pindo/{deploy → command/deploy}/initconfig.rb +0 -0
  109. /data/lib/pindo/{deploy → command/deploy}/pullconfig.rb +0 -0
  110. /data/lib/pindo/{deploy → command/deploy}/pushconfig.rb +0 -0
  111. /data/lib/pindo/{deploy → command/deploy}/quswark.rb +0 -0
  112. /data/lib/pindo/{deploy → command/deploy}/quswauth.rb +0 -0
  113. /data/lib/pindo/{deploy → command/deploy}/reportbug.rb +0 -0
  114. /data/lib/pindo/{deploy → command/deploy}/tag.rb +0 -0
  115. /data/lib/pindo/{deploy → command/deploy}/updateconfig.rb +0 -0
  116. /data/lib/pindo/{deploy → command/deploy}/uploadipa.rb +0 -0
  117. /data/lib/pindo/{dev → command/dev}/confusecode.rb +0 -0
  118. /data/lib/pindo/{dev → command/dev}/confuseproj.rb +0 -0
  119. /data/lib/pindo/{dev → command/dev}/pub.rb +0 -0
  120. /data/lib/pindo/{dev → command/dev}/renewcert.rb +0 -0
  121. /data/lib/pindo/{env → command/env}/dreamstudio.rb +0 -0
  122. /data/lib/pindo/{env → command/env}/quarkenv.rb +0 -0
  123. /data/lib/pindo/{env → command/env}/swarkenv.rb +0 -0
  124. /data/lib/pindo/{env → command/env}/workhard.rb +0 -0
  125. /data/lib/pindo/{lib → command/lib}/forcepush.rb +0 -0
  126. /data/lib/pindo/{lib → command/lib}/lint.rb +0 -0
  127. /data/lib/pindo/{lib → command/lib}/push.rb +0 -0
  128. /data/lib/pindo/{repo → command/repo}/clone.rb +0 -0
  129. /data/lib/pindo/{repo → command/repo}/create.rb +0 -0
  130. /data/lib/pindo/{repo → command/repo}/login.rb +0 -0
  131. /data/lib/pindo/{repo → command/repo}/search.rb +0 -0
  132. /data/lib/pindo/{setup.rb → command/setup.rb} +0 -0
  133. /data/lib/pindo/{upgrade.rb → command/upgrade.rb} +0 -0
  134. /data/lib/pindo/{utils → command/utils}/clearcert.rb +0 -0
  135. /data/lib/pindo/{utils → command/utils}/device.rb +0 -0
  136. /data/lib/pindo/{utils → command/utils}/tgate.rb +0 -0
  137. /data/lib/pindo/{utils → command/utils}/xcassets.rb +0 -0
  138. /data/lib/pindo/{utils → command/utils}/xcassets.sh +0 -0
  139. /data/lib/pindo/module/{appstore_in_app_purchase.rb → appstore/appstore_in_app_purchase.rb} +0 -0
  140. /data/lib/pindo/module/{appstore_metadata_connect_api_helper.rb → appstore/appstore_metadata_connect_api_helper.rb} +0 -0
  141. /data/lib/pindo/module/{appstore_metadata_fastlane_helper.rb → appstore/appstore_metadata_fastlane_helper.rb} +0 -0
  142. /data/lib/pindo/module/{iap_tier.json → appstore/iap_tier.json} +0 -0
  143. /data/lib/pindo/module/{commonconfuseproj.rb → build/commonconfuseproj.rb} +0 -0
  144. /data/lib/pindo/module/{xcodehelper.rb → xcode/xcodehelper.rb} +0 -0
@@ -0,0 +1,326 @@
1
+
2
+ require 'fileutils'
3
+
4
+ module Pindo
5
+
6
+ module XcodeCertHelper
7
+
8
+ def get_target_name_map
9
+ return {
10
+ "MainTarget" => "bundle_id",
11
+ "Content" => "bundle_id_pushcontent",
12
+ "Service" => "bundle_id_pushservice",
13
+ "Keyboard" => "bundle_id_keyboard",
14
+ "iMessage" => "bundle_id_imessage",
15
+ "Siri" => "bundle_id_siri",
16
+ "SiriUI" => "bundle_id_siriui",
17
+ "Widget" => "bundle_id_widget",
18
+ "Extension" => "bundle_id_extension",
19
+ "ExtensionAd" => "bundle_id_extensionad",
20
+ "ExtensionPorn" => "bundle_id_extensionporn",
21
+ "WatchApp" => "bundle_id_watchapp",
22
+ "WatchAppComplication" => "bundle_id_watchapp_extension"
23
+ }
24
+ end
25
+
26
+ def create_provisioning_info_array(build_type:nil)
27
+
28
+ provisioning_info_array = []
29
+
30
+ bundle_id_map = get_bundle_id_map
31
+
32
+ bundle_id_map.each do |type, bundle_id_temp|
33
+ provisioning_info = {}
34
+ provisioning_info['type'] = type
35
+ provisioning_info['bundle_id'] = bundle_id_temp
36
+ name_temp = Match::Utils.environment_variable_name_profile_name(app_identifier: bundle_id_temp, type: build_type)
37
+ provisioning_info['profile_name'] = ENV[name_temp]
38
+ path_temp = Match::Utils.environment_variable_name_profile_path(app_identifier:bundle_id_temp,type: build_type)
39
+ provisioning_info['profile_path'] = ENV[path_temp]
40
+ signing_identity_key=Match::Utils.environment_variable_name_certificate_name(app_identifier: bundle_id_temp,type: build_type)
41
+ provisioning_info["signing_identity"] = ENV[signing_identity_key]
42
+ team_id_key = Match::Utils.environment_variable_name_team_id(app_identifier: bundle_id_temp,type:build_type)
43
+ provisioning_info["team_id"] = ENV[team_id_key]
44
+ provisioning_info_array << provisioning_info
45
+ end
46
+
47
+
48
+ return provisioning_info_array
49
+ end
50
+
51
+ def config_project_cert(new_proj_name:nil, new_project_dir:nil, cert_type:nil, team_id_vaule:nil, provisioning_info_array:nil)
52
+
53
+
54
+ new_proj_fullname = File.join(new_project_dir, new_proj_name) + ".xcodeproj"
55
+ new_project_obj = Xcodeproj::Project.open(new_proj_fullname)
56
+
57
+ new_project_obj.root_object.build_configuration_list.set_setting('CODE_SIGN_IDENTITY[sdk=iphoneos*]', "Apple Distribution")
58
+ new_project_obj.root_object.build_configuration_list.set_setting('CODE_SIGN_IDENTITY*', "Apple Distribution")
59
+
60
+ if cert_type == "development"
61
+ new_project_obj.root_object.build_configuration_list.set_setting('CODE_SIGN_IDENTITY[sdk=iphoneos*]', "Apple Development")
62
+ new_project_obj.root_object.build_configuration_list.set_setting('CODE_SIGN_IDENTITY*', "Apple Development")
63
+ end
64
+
65
+ new_project_obj.root_object.attributes['TargetAttributes'] = new_project_obj.root_object.attributes['TargetAttributes'] || {}
66
+ target_atts_obj = new_project_obj.root_object.attributes['TargetAttributes']
67
+
68
+ target_map = get_target_name_map
69
+
70
+ new_project_obj.targets.each do |target|
71
+
72
+ if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:framework]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:dynamic_library]) ||
73
+ target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:static_library]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:bundle])
74
+ next
75
+ end
76
+ provisioning_info = nil
77
+
78
+ if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application])
79
+ bundle_id_map_key = target_map["MainTarget"]
80
+ provisioning_info = provisioning_info_array.select { |s| s["type"].to_s.eql?(bundle_id_map_key.to_s) }.first
81
+ else
82
+
83
+ target_map.each do |k, v|
84
+ if target.name.to_s.end_with?(k)
85
+ bundle_id_map_key = v.to_s
86
+ provisioning_info = provisioning_info_array.select { |s| s["type"].to_s.eql?(bundle_id_map_key.to_s) }.first
87
+ end
88
+ end
89
+ end
90
+
91
+ # puts "=====1 target name: #{target.name.to_s} bundle_id_map_key: #{bundle_id_map_key} provisioning_info: #{provisioning_info}"
92
+
93
+ if !provisioning_info.nil?
94
+ target.build_configurations.each do |config|
95
+ target_atts_obj[target.uuid] = target_atts_obj[target.uuid] || {}
96
+ target_atts_obj[target.uuid]['DevelopmentTeam'] = team_id_vaule
97
+ target_atts_obj[target.uuid]['ProvisioningStyle'] = "Manual"
98
+ config.build_settings['DEVELOPMENT_TEAM'] = team_id_vaule
99
+ config.build_settings['DEVELOPMENT_TEAM[sdk=iphoneos*]'] = team_id_vaule
100
+ config.build_settings['CODE_SIGN_STYLE'] = "Manual"
101
+
102
+ config.build_settings['CODE_SIGN_IDENTITY'] = "Apple Distribution"
103
+ config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = "Apple Distribution"
104
+
105
+ if cert_type == "development"
106
+ config.build_settings['CODE_SIGN_IDENTITY'] = "Apple Development"
107
+ config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = "Apple Development"
108
+ end
109
+
110
+ if !provisioning_info.nil?
111
+ config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = provisioning_info["bundle_id"]
112
+ config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = provisioning_info['profile_name']
113
+ config.build_settings['PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]'] = provisioning_info['profile_name']
114
+
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+ end
121
+ new_project_obj.save
122
+
123
+ end
124
+
125
+ def config_infoplist_cert(new_proj_name:nil, new_project_dir:nil, icloud_id:nil, group_id:nil, provisioning_info_array:nil)
126
+
127
+ new_proj_fullname = File.join(new_project_dir, new_proj_name) + ".xcodeproj"
128
+ project_obj = Xcodeproj::Project.open(new_proj_fullname)
129
+ entitlements_plist_path = File.join(new_project_dir, new_proj_name + ".entitlements")
130
+
131
+ project_obj.targets.each do |target|
132
+
133
+ if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:framework]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:dynamic_library]) ||
134
+ target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:static_library]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:bundle])
135
+ next
136
+ end
137
+
138
+ temp_entitlements_file = target.build_configurations.first.build_settings['CODE_SIGN_ENTITLEMENTS']
139
+ if !temp_entitlements_file.nil? && !temp_entitlements_file.empty?
140
+ entitlements_plist_path = File.join(new_project_dir, temp_entitlements_file)
141
+
142
+ if !File.exist?(entitlements_plist_path)
143
+ raise Informative, "Target: #{target.name.to_s} 找不到文件 #{entitlements_plist_path}"
144
+ end
145
+
146
+ if !group_id.nil?
147
+ modify_entitlements_plist(entitlements_plist_path:entitlements_plist_path, group_id:group_id)
148
+ end
149
+
150
+ if target.product_type.to_s.eql?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) then
151
+ add_swark_entitlement(entitlements_plist_path:entitlements_plist_path, bundle_id_dict:provisioning_info_array)
152
+ if !icloud_id.nil?
153
+ modify_entitlements_plist(entitlements_plist_path:entitlements_plist_path, icloud_id:icloud_id)
154
+ end
155
+ end
156
+
157
+ end
158
+
159
+ temp_info = target.build_configurations.first.build_settings['INFOPLIST_FILE']
160
+ if !temp_info.nil? && !temp_info.empty?
161
+ info_plist_path = File.join(new_project_dir, temp_info)
162
+ if !File.exist?(info_plist_path)
163
+ raise Informative, "Missing Target #{target.name.to_s} Info.plist!!! #{info_plist_path} Modify Info.plist Error !!!"
164
+ end
165
+
166
+ if target.product_type.to_s.eql?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) then
167
+ if !icloud_id.nil?
168
+ modify_info_plist_icloud(plist_file_name:info_plist_path, icloud_id:icloud_id)
169
+ else
170
+ modify_info_plist_icloud(plist_file_name:info_plist_path, icloud_id:nil)
171
+ end
172
+ end
173
+
174
+ end
175
+
176
+ end
177
+
178
+ end
179
+
180
+ def modify_entitlements_plist(entitlements_plist_path:nil, group_id:nil, icloud_id:nil)
181
+ if File.exist?(entitlements_plist_path)
182
+
183
+ entitlements_plist_dict = Xcodeproj::Plist.read_from_path(entitlements_plist_path)
184
+
185
+ if !group_id.nil? && !entitlements_plist_dict['com.apple.security.application-groups'].nil?
186
+ entitlements_plist_dict['com.apple.security.application-groups'] = [group_id]
187
+ end
188
+
189
+ if !icloud_id.nil?
190
+ entitlements_plist_dict['com.apple.developer.icloud-container-identifiers'] = [icloud_id]
191
+ entitlements_plist_dict['com.apple.developer.ubiquity-container-identifiers'] = [icloud_id]
192
+ end
193
+
194
+ Xcodeproj::Plist.write_to_path(entitlements_plist_dict, entitlements_plist_path)
195
+ end
196
+ end
197
+
198
+
199
+ def modify_info_plist_icloud(plist_file_name:nil, icloud_id:nil)
200
+ if ! File.exist? (plist_file_name)
201
+ raise Informative, "修改Info.list 路径错误!!! #{plist_file_name}"
202
+ end
203
+ if File.exist?(plist_file_name)
204
+ info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
205
+
206
+ if !icloud_id.nil?
207
+
208
+ temp_value = {}
209
+ if !info_plist_dict['NSUbiquitousContainers'].nil? && info_plist_dict['NSUbiquitousContainers'].is_a?(Hash)
210
+ info_plist_dict['NSUbiquitousContainers'].each do |key, value|
211
+ if key.include?("iCloud.")
212
+ temp_value = value
213
+ break;
214
+ end
215
+ end
216
+ end
217
+ info_plist_dict['NSUbiquitousContainers'] = {}
218
+ info_plist_dict['NSUbiquitousContainers'][icloud_id] = temp_value || {}
219
+ else
220
+ info_plist_dict['NSUbiquitousContainers'] = nil
221
+ end
222
+
223
+ Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
224
+
225
+ end
226
+ end
227
+
228
+ def create_upload_cert_info(apple_id:nil, cert_type:nil, provisioning_info_array:nil)
229
+
230
+ cert_dir = File.join(Dir.pwd, "cert")
231
+ cert_json_file = File.join(cert_dir, "certs.json")
232
+
233
+ if !File.exist?(cert_dir)
234
+ FileUtils.mkdir_p(cert_dir)
235
+ end
236
+
237
+ cert_json = []
238
+ begin
239
+ cert_json = JSON.parse(File.read(cert_json_file)) if File.exist?(cert_json_file)
240
+ cert_json = cert_json || []
241
+ rescue StandardError => e
242
+ cert_json = []
243
+ end
244
+
245
+ bundle_id = provisioning_info_array.select { |s| s["type"].to_s.eql?("bundle_id") }.first["bundle_id"]
246
+ team_id_vaule = provisioning_info_array.first["team_id"]
247
+ bundle_id_signing_identity = provisioning_info_array.first["signing_identity"]
248
+
249
+ account_cert_set = {}
250
+ select_result= cert_json.select { |x| x["account_name"].eql?(apple_id) }.first
251
+ if select_result.nil?
252
+
253
+ account_cert_set = {}
254
+ else
255
+
256
+ account_cert_set = select_result
257
+ cert_json.delete_if { |x| x["account_name"].eql?(apple_id) }
258
+ end
259
+
260
+ account_cert_set["account_name"] = apple_id
261
+ account_cert_set["team_id"] = team_id_vaule
262
+ account_cert_set["certs"] = account_cert_set["certs"] || []
263
+
264
+ cert_item = {}
265
+ cert_item_result = account_cert_set["certs"].select { |x| x["cert_id"].eql?(bundle_id_signing_identity)}.first
266
+ if cert_item_result.nil?
267
+ cert_item = {}
268
+ else
269
+ cert_item = cert_item_result
270
+ account_cert_set["certs"].delete_if { |x| x["cert_id"].eql?(bundle_id_signing_identity)}
271
+ end
272
+
273
+ cert_item["cert_id"] = cert_item["cert_id"] || bundle_id_signing_identity
274
+ cert_item["password"] = "goodcert1"
275
+ cert_item["cert_file"] = "#{cert_type}.p12".downcase
276
+ cert_item["cert_type"] = cert_type.downcase
277
+ cert_item["cert_provisioning_group"] = cert_item["cert_provisioning_group"] || []
278
+
279
+
280
+
281
+ cert_provisioning_group_item = {}
282
+ provisioning_group_id = [cert_type, "group", bundle_id].join("_")
283
+
284
+ provisioning_group_result = cert_item["cert_provisioning_group"].select { |x| x["provisioning_group_id"].eql?(provisioning_group_id)}.first
285
+ if provisioning_group_result.nil?
286
+ cert_provisioning_group_item = {}
287
+ else
288
+ cert_provisioning_group_item = provisioning_group_result
289
+ cert_item["cert_provisioning_group"].delete_if { |x| x["provisioning_group_id"].eql?(provisioning_group_id)}
290
+ end
291
+
292
+
293
+
294
+ cert_provisioning_group_item["provisioning_group_id"] = provisioning_group_id
295
+ cert_provisioning_group_item["provisioning_main_bundle_id"] = bundle_id
296
+ cert_provisioning_group_item["provisioning_items"] = []
297
+
298
+ group_id = [cert_type, "group", bundle_id].join("_")
299
+ provisioning_info_array.each do |provisioning_info|
300
+ bundle_id_temp = provisioning_info['bundle_id']
301
+ provisioning_id = [cert_type, bundle_id_temp].join("_")
302
+
303
+ cert_provisioning_group_item["provisioning_items"] << {
304
+ "bundle_id" => bundle_id_temp,
305
+ "provisioning_id" => provisioning_id,
306
+ "group_id" => group_id,
307
+ "provisioning_file" => provisioning_id + ".mobileprovision"
308
+ }
309
+ real_path = provisioning_info["profile_path"]
310
+ FileUtils.cp_r(real_path, File.join(cert_dir, provisioning_id + ".mobileprovision"))
311
+
312
+ end
313
+
314
+ cert_item["cert_provisioning_group"] << cert_provisioning_group_item
315
+ account_cert_set["certs"] << cert_item
316
+ cert_json << account_cert_set
317
+ File.open(cert_json_file, "w") do |f|
318
+ f.write(JSON.pretty_generate(cert_json.compact))
319
+ end
320
+
321
+ return account_cert_set
322
+ end
323
+
324
+
325
+ end
326
+ end