pindo 4.6.9 → 4.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pindo/base/aeshelper.rb +75 -0
- data/lib/pindo/base/funlog.rb +89 -0
- data/lib/pindo/base/githelper.rb +35 -18
- data/lib/pindo/base/plaininformative.rb +3 -0
- data/lib/pindo/base/standarderror.rb +1 -0
- data/lib/pindo/base/xcodeconst.rb +251 -0
- data/lib/pindo/client/applovinclient.rb +6 -3
- data/lib/pindo/client/aws3sclient.rb +33 -46
- data/lib/pindo/client/bossclient.rb +1 -1
- data/lib/pindo/client/bossconfigclient.rb +3 -3
- data/lib/pindo/client/pgyerclient.rb +159 -100
- data/lib/pindo/command/appstore/iap.rb +43 -0
- data/lib/pindo/command/appstore/itcapp.rb +41 -0
- data/lib/pindo/command/appstore/metadata.rb +43 -0
- data/lib/pindo/command/appstore/screenshots.rb +43 -0
- data/lib/pindo/command/appstore/upload.rb +40 -0
- data/lib/pindo/command/appstore.rb +17 -0
- data/lib/pindo/command/deploy/build.rb +109 -0
- data/lib/pindo/{deploy → command/deploy}/bundleid.rb +1 -1
- data/lib/pindo/command/deploy/cert.rb +183 -0
- data/lib/pindo/command/deploy/configproj.rb +105 -0
- data/lib/pindo/{deploy → command/deploy}/getitcinfo.rb +1 -1
- data/lib/pindo/{deploy → command/deploy}/iap.rb +30 -9
- data/lib/pindo/{deploy → command/deploy}/itcapp.rb +0 -1
- data/lib/pindo/{deploy → command/deploy}/itcinfo.rb +2 -3
- data/lib/pindo/{deploy → command/deploy}/pem.rb +3 -2
- data/lib/pindo/{deploy → command/deploy}/resign.rb +14 -63
- data/lib/pindo/command/deploy.rb +44 -0
- data/lib/pindo/{dev → command/dev}/autobuild.rb +28 -76
- data/lib/pindo/{dev → command/dev}/autoresign.rb +21 -64
- data/lib/pindo/command/dev/build.rb +94 -0
- data/lib/pindo/{dev → command/dev}/createbuild.rb +0 -2
- data/lib/pindo/{dev → command/dev}/debug.rb +6 -2
- data/lib/pindo/command/dev/pgyercert.rb +75 -0
- data/lib/pindo/command/dev.rb +26 -0
- data/lib/pindo/command/env.rb +17 -0
- data/lib/pindo/{ipa → command/ipa}/autoresign.rb +22 -70
- data/lib/pindo/{ipa → command/ipa}/import.rb +48 -103
- data/lib/pindo/{ipa → command/ipa}/output.rb +43 -135
- data/lib/pindo/command/ipa.rb +16 -0
- data/lib/pindo/{lib → command/lib}/update.rb +23 -14
- data/lib/pindo/command/lib.rb +16 -0
- data/lib/pindo/{pgyer → command/pgyer}/apptest.rb +7 -29
- data/lib/pindo/{pgyer → command/pgyer}/comment.rb +7 -30
- data/lib/pindo/{pgyer → command/pgyer}/download.rb +35 -30
- data/lib/pindo/{pgyer → command/pgyer}/login.rb +3 -4
- data/lib/pindo/command/pgyer/resign.rb +111 -0
- data/lib/pindo/command/pgyer/upload.rb +123 -0
- data/lib/pindo/command/pgyer.rb +18 -0
- data/lib/pindo/{repo.rb → command/repo.rb} +4 -4
- data/lib/pindo/{utils → command/utils}/applovin.rb +43 -33
- data/lib/pindo/{utils → command/utils}/boss.rb +3 -3
- data/lib/pindo/command/utils/icon.rb +81 -0
- data/lib/pindo/{utils → command/utils}/renewproj.rb +1 -0
- data/lib/pindo/command/utils.rb +26 -0
- data/lib/pindo/command.rb +23 -26
- data/lib/pindo/config/pindoconfig.rb +27 -0
- data/lib/pindo/module/appselect.rb +9 -8
- data/lib/pindo/module/build/swarkhelper.rb +95 -0
- data/lib/pindo/module/cert/certhelper.rb +187 -0
- data/lib/pindo/module/cert/keychainhelper.rb +150 -0
- data/lib/pindo/module/{pemcreate.rb → cert/pemhelper.rb} +3 -1
- data/lib/pindo/module/cert/provisioninghelper.rb +137 -0
- data/lib/pindo/module/cert/xcodecerthelper.rb +326 -0
- data/lib/pindo/module/{pgyerhelper.rb → pgyer/pgyerhelper.rb} +246 -36
- data/lib/pindo/module/xcode/xcodeappconfig.rb +188 -0
- data/lib/pindo/module/xcode/xcodebuildconfig.rb +12 -0
- data/lib/pindo/module/xcode/xcodebuildhelper.rb +312 -0
- data/lib/pindo/module/xcode/xcoderesconstant.rb +248 -0
- data/lib/pindo/module/xcode/xcodereshandler.rb +198 -0
- data/lib/pindo/module/xcode/xcodereshelper.rb +119 -0
- data/lib/pindo/options/appconfigoptions.rb +1 -0
- data/lib/pindo/options/deployoptions.rb +38 -42
- data/lib/pindo/version.rb +1 -1
- metadata +110 -97
- data/lib/pindo/deploy/Fastfile +0 -233
- data/lib/pindo/deploy/build.rb +0 -167
- data/lib/pindo/deploy/cert.rb +0 -508
- data/lib/pindo/deploy/configproj.rb +0 -89
- data/lib/pindo/deploy.rb +0 -44
- data/lib/pindo/dev.rb +0 -23
- data/lib/pindo/env/flutter.rb +0 -59
- data/lib/pindo/env/flutter.sh +0 -116
- data/lib/pindo/env.rb +0 -17
- data/lib/pindo/ipa.rb +0 -22
- data/lib/pindo/lib.rb +0 -18
- data/lib/pindo/module/buildconfighelper.rb +0 -13
- data/lib/pindo/module/buildhelper.rb +0 -76
- data/lib/pindo/module/config_project.sh +0 -143
- data/lib/pindo/module/configprojhelper.rb +0 -631
- data/lib/pindo/module/icon_contents.json +0 -116
- data/lib/pindo/module/imessage_icon.json +0 -91
- data/lib/pindo/module/imgset_contents.json +0 -21
- data/lib/pindo/module/launchimg_contents.json +0 -21
- data/lib/pindo/module/xcodebuildpre.rb +0 -258
- data/lib/pindo/pgyer/upload.rb +0 -234
- data/lib/pindo/pgyer.rb +0 -17
- data/lib/pindo/utils/icon.rb +0 -91
- data/lib/pindo/utils/icon.sh +0 -133
- data/lib/pindo/utils/podindex.rb +0 -56
- data/lib/pindo/utils/podindex.sh +0 -30
- data/lib/pindo/utils.rb +0 -29
- /data/lib/pindo/{deploy → command/deploy}/check.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/confusecode.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/confuseproj.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/fabric.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/initconfig.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/pullconfig.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/pushconfig.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/quswark.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/quswauth.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/reportbug.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/tag.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/updateconfig.rb +0 -0
- /data/lib/pindo/{deploy → command/deploy}/uploadipa.rb +0 -0
- /data/lib/pindo/{dev → command/dev}/confusecode.rb +0 -0
- /data/lib/pindo/{dev → command/dev}/confuseproj.rb +0 -0
- /data/lib/pindo/{dev → command/dev}/pub.rb +0 -0
- /data/lib/pindo/{dev → command/dev}/renewcert.rb +0 -0
- /data/lib/pindo/{env → command/env}/dreamstudio.rb +0 -0
- /data/lib/pindo/{env → command/env}/quarkenv.rb +0 -0
- /data/lib/pindo/{env → command/env}/swarkenv.rb +0 -0
- /data/lib/pindo/{env → command/env}/workhard.rb +0 -0
- /data/lib/pindo/{lib → command/lib}/forcepush.rb +0 -0
- /data/lib/pindo/{lib → command/lib}/lint.rb +0 -0
- /data/lib/pindo/{lib → command/lib}/push.rb +0 -0
- /data/lib/pindo/{repo → command/repo}/clone.rb +0 -0
- /data/lib/pindo/{repo → command/repo}/create.rb +0 -0
- /data/lib/pindo/{repo → command/repo}/login.rb +0 -0
- /data/lib/pindo/{repo → command/repo}/search.rb +0 -0
- /data/lib/pindo/{setup.rb → command/setup.rb} +0 -0
- /data/lib/pindo/{upgrade.rb → command/upgrade.rb} +0 -0
- /data/lib/pindo/{utils → command/utils}/clearcert.rb +0 -0
- /data/lib/pindo/{utils → command/utils}/device.rb +0 -0
- /data/lib/pindo/{utils → command/utils}/tgate.rb +0 -0
- /data/lib/pindo/{utils → command/utils}/xcassets.rb +0 -0
- /data/lib/pindo/{utils → command/utils}/xcassets.sh +0 -0
- /data/lib/pindo/module/{appstore_in_app_purchase.rb → appstore/appstore_in_app_purchase.rb} +0 -0
- /data/lib/pindo/module/{appstore_metadata_connect_api_helper.rb → appstore/appstore_metadata_connect_api_helper.rb} +0 -0
- /data/lib/pindo/module/{appstore_metadata_fastlane_helper.rb → appstore/appstore_metadata_fastlane_helper.rb} +0 -0
- /data/lib/pindo/module/{iap_tier.json → appstore/iap_tier.json} +0 -0
- /data/lib/pindo/module/{commonconfuseproj.rb → build/commonconfuseproj.rb} +0 -0
- /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
|