pindo 4.8.7 → 4.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,241 @@
1
+
2
+
3
+ require 'highline/import'
4
+ require 'fileutils'
5
+ require 'json'
6
+ require 'faraday'
7
+ require 'xcodeproj'
8
+
9
+ module Pindo
10
+ class Command
11
+ class Ios < Command
12
+ class Applovin < Ios
13
+
14
+ self.summary = '接入applovin max广告平台时更新Xcode中info.plist'
15
+
16
+ self.description = <<-DESC
17
+ 接入applovin max广告平台时更新Xcode中info.plist。
18
+
19
+ 支持功能:
20
+
21
+ * 自动获取applovin广告平台的SKAdNetwork IDs
22
+
23
+ * 更新Xcode工程中的info.plist文件
24
+
25
+ * 支持保存SKAdNetwork IDs到本地配置
26
+
27
+ 使用示例:
28
+
29
+ $ pindo ios applovin # 更新当前目录下工程的info.plist
30
+
31
+ $ pindo ios applovin --appstore # 使用AppStore模式更新
32
+
33
+ $ pindo ios applovin --install # 运行applovin安装脚本
34
+
35
+ $ pindo ios applovin --upload # 保存SKAdNetwork IDs到本地
36
+ DESC
37
+
38
+ self.arguments = [
39
+ ]
40
+
41
+ def self.options
42
+ [
43
+ ['--appstore', 'AppStore模式,一般不使用'],
44
+ ['--install', '运行applovin安装脚本'],
45
+ ['--upload', '保存SKAdNetwork IDs到本地配置'],
46
+ ].concat(super)
47
+ end
48
+
49
+ def initialize(argv)
50
+
51
+ @args_appstore_flag = argv.flag?('appstore', false)
52
+ @args_install_flag = argv.flag?('install', false)
53
+ @args_upload_flag = argv.flag?('upload', false)
54
+
55
+ super(argv)
56
+ @additional_args = argv.remainder!
57
+ end
58
+
59
+ def validate!
60
+ super
61
+ end
62
+
63
+ def run
64
+
65
+ skadnetwork_id_array = []
66
+
67
+ Funlog.instance.fancyinfo_start("正在请求applovin数据...")
68
+
69
+ applovin_res_json = req_applovin_json
70
+ # puts JSON.pretty_generate(applovin_res_json)
71
+
72
+ if !applovin_res_json.nil? && !applovin_res_json["skadnetwork_ids"].nil?
73
+ applovin_res_json["skadnetwork_ids"].each do |network_id|
74
+ skadnetwork_id_array << network_id["skadnetwork_id"]
75
+ end
76
+ end
77
+
78
+ applovin_media_res_json = req_applovin_mediia_json
79
+ # puts JSON.pretty_generate(applovin_media_res_json)
80
+ if !applovin_media_res_json.nil? && !applovin_media_res_json["mediationSKAdnetworkIdsSpecs"].nil?
81
+ applovin_media_res_json["mediationSKAdnetworkIdsSpecs"].each do |media_item|
82
+ skadnetwork_id_array = skadnetwork_id_array + media_item["skAdnetworkIds"]
83
+ end
84
+ end
85
+
86
+ skadnetwork_id_array = skadnetwork_id_array.uniq || []
87
+
88
+ Funlog.instance.fancyinfo_success("请求applovin数据,获取到#{skadnetwork_id_array.size}条数据...")
89
+
90
+ if !skadnetwork_id_array.nil? && skadnetwork_id_array.size > 50
91
+ # puts "From Applovin SKAdNetworkItems Size: #{skadnetwork_id_array.size}"
92
+ if @args_upload_flag
93
+ applovin_config_file = File.join(pindo_single_config.pindo_common_configdir,"applovin_client_config.json")
94
+ origin_json = {}
95
+ if File.exist?(applovin_config_file)
96
+ origin_json = JSON.parse(File.read(applovin_config_file))
97
+ end
98
+ origin_json["SKAdNetworkItems"] = skadnetwork_id_array
99
+ File.write(applovin_config_file, JSON.pretty_generate(origin_json))
100
+ git_addpush_repo(path:pindo_single_config.pindo_common_configdir, message:"Applovin SKAdNetworkItems", commit_file_params:["applovin_client_config.json"])
101
+ end
102
+ else
103
+ Funlog.instance.fancyinfo_start("网络拉取applovin数据太少,从缓存中获取数据...")
104
+ config_file = File.join(File::expand_path(Pindoconfig.instance.pindo_common_configdir), "applovin_client_config.json")
105
+ config_json = JSON.parse(File.read(config_file))
106
+ skadnetwork_id_array = skadnetwork_id_array + config_json["SKAdNetworkItems"]
107
+ # puts "From Config SKAdNetworkItems Size: #{skadnetwork_id_array.size}"
108
+ Funlog.instance.fancyinfo_success("网络拉取applovin数据太少,从缓存中获取到#{skadnetwork_id_array.size}条数据...")
109
+ end
110
+
111
+
112
+ Funlog.instance.fancyinfo_start("正在写入Xcode中...")
113
+
114
+ skadnetwork_id_array = skadnetwork_id_array.uniq || []
115
+
116
+ project_root_dir = Dir.pwd
117
+ xcodeproj_file_name = Dir.glob(File.join(project_root_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
118
+
119
+ plist_file_name = File.join(project_root_dir, "AppEntry/Info.plist")
120
+ if !xcodeproj_file_name.nil?
121
+ proj_name = File.basename(xcodeproj_file_name, ".xcodeproj")
122
+ plist_file_name = get_applovin_infoplist(project_dir:project_root_dir, proj_name:proj_name)
123
+ end
124
+
125
+
126
+ info_plist_dict = {}
127
+ if File.exist?(plist_file_name)
128
+ info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
129
+ end
130
+
131
+
132
+ info_plist_dict["NSAdvertisingAttributionReportEndpoint"] = info_plist_dict["NSAdvertisingAttributionReportEndpoint"] || "https://postbacks-app.com"
133
+
134
+ if !info_plist_dict.has_key?("NSAppTransportSecurity")
135
+ info_plist_dict["NSAppTransportSecurity"] = {}
136
+ info_plist_dict["NSAppTransportSecurity"]["NSAllowsArbitraryLoads"] = true
137
+ end
138
+
139
+
140
+ if !skadnetwork_id_array.nil? && skadnetwork_id_array.size > 0
141
+ info_plist_dict["SKAdNetworkItems"] = []
142
+ skadnetwork_id_array.each do |network_id|
143
+ item = {}
144
+ item["SKAdNetworkIdentifier"] = network_id
145
+ info_plist_dict["SKAdNetworkItems"] << item
146
+ end
147
+ end
148
+
149
+ Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
150
+
151
+ Funlog.instance.fancyinfo_success("Xcode中applovin数据修改完成!")
152
+
153
+ if @args_install_flag && !xcodeproj_file_name.nil? && File.exist?(xcodeproj_file_name)
154
+
155
+ pindo_common_dir = pindo_single_config.pindo_common_configdir
156
+
157
+ app_lovin_script = File.join(pindo_common_dir, "AppLovinQualityServiceSetup-ios-dev.rb")
158
+ if @args_appstore_flag
159
+ app_lovin_script = File.join(pindo_common_dir, "AppLovinQualityServiceSetup-ios.rb")
160
+ end
161
+
162
+ project_script_file = File.join(project_root_dir, "AppLovinQualityServiceSetup-ios.rb")
163
+ FileUtils.cp_r(app_lovin_script, project_script_file)
164
+ command = "ruby " + project_script_file
165
+ # puts command
166
+ system command
167
+ end
168
+
169
+
170
+ end
171
+
172
+
173
+ def get_applovin_infoplist(project_dir:nil, proj_name:nil)
174
+
175
+ info_plist_path = File.join(project_dir, "AppEntry/Info.plist")
176
+ proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
177
+ if File.exist?(proj_fullname)
178
+ project_obj = Xcodeproj::Project.open(proj_fullname)
179
+ project_obj.targets.each do |target|
180
+
181
+ if target.product_type.to_s.eql?("com.apple.product-type.application") then
182
+ temp_info = target.build_configurations.first.build_settings['INFOPLIST_FILE']
183
+ info_plist_path = File.join(project_dir, temp_info)
184
+ end
185
+ end
186
+ end
187
+
188
+ return info_plist_path
189
+ end
190
+
191
+
192
+ def req_applovin_json
193
+
194
+ begin
195
+ # https://dash.applovin.com/docs/v1/skadnetwork_ids.json
196
+ applovin_url = "https://dash.applovin.com/docs/v1/skadnetwork_ids.json"
197
+ con = Faraday.new
198
+ res = con.get do |req|
199
+ req.url applovin_url
200
+ req.headers['Content-Type'] = 'application/json'
201
+ end
202
+
203
+ applovin_res_json = JSON.parse(res.body)
204
+
205
+ return applovin_res_json
206
+ rescue Exception => e
207
+ return nil
208
+ end
209
+
210
+
211
+
212
+ end
213
+
214
+ def req_applovin_mediia_json
215
+
216
+
217
+ begin
218
+ applovin_url = "https://dash.applovin.com/docs/v1/mediation_sk_adnetwork_ids"
219
+ con = Faraday.new
220
+ res = con.get do |req|
221
+ req.url applovin_url
222
+ req.headers['Content-Type'] = 'application/json'
223
+ end
224
+
225
+ applovin_res_json = JSON.parse(res.body)
226
+ return applovin_res_json
227
+ rescue Exception => e
228
+ return nil
229
+ end
230
+ end
231
+
232
+ end
233
+ end
234
+ end
235
+ end
236
+
237
+
238
+
239
+
240
+
241
+
@@ -0,0 +1,164 @@
1
+ require 'highline/import'
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+ require 'pindo/base/executable'
6
+
7
+ module Pindo
8
+ class Command
9
+ class Ios < Command
10
+ class Autoresign < Ios
11
+
12
+ include Appselect
13
+ self.summary = 'IPA包重签名工具'
14
+
15
+ self.description = <<-DESC
16
+ 使用最新的证书重签名IPA包。
17
+
18
+ 支持功能:
19
+
20
+ * 使用开发或发布证书重签名
21
+
22
+ * 支持指定IPA路径
23
+
24
+ * 支持上传到测试平台
25
+
26
+ * 支持发送测试通知
27
+
28
+ 使用示例:
29
+
30
+ $ pindo ios autoresign # 使用开发证书重签名当前目录下的IPA
31
+
32
+ $ pindo ios autoresign /path/to/demo.ipa # 重签名指定IPA文件
33
+
34
+ $ pindo ios autoresign --adhoc # 使用adhoc证书重签名
35
+
36
+ $ pindo ios autoresign --deploy # 使用发布bundle id
37
+
38
+ $ pindo ios autoresign --upload # 重签名并上传
39
+
40
+ $ pindo ios autoresign --send # 重签名上传并发送通知
41
+ DESC
42
+
43
+ self.arguments = [
44
+ CLAide::Argument.new('path/to/demo.ipa', true),
45
+ ]
46
+
47
+ def self.options
48
+ [
49
+ ['--ipa', '指定要重签名的IPA文件路径'],
50
+ ['--adhoc', '使用adhoc证书重签名(默认使用开发证书)'],
51
+ ['--deploy', '使用发布证书和bundle id重签名(默认使用开发证书)'],
52
+ ['--proj', '指定上传到测试平台的项目名称'],
53
+ ['--upload', '上传重签名后的IPA到测试平台'],
54
+ ['--send', '上传成功后发送测试通知'],
55
+ ].concat(super)
56
+ end
57
+
58
+
59
+ def initialize(argv)
60
+
61
+ @args_ipa_file = argv.shift_argument
62
+ @args_set_ipa_name = argv.option('ipa')
63
+ @args_adhoc_flag = argv.flag?('adhoc', false)
64
+ @args_deploy_flag = argv.flag?('deploy', false)
65
+
66
+ @args_upload_flag = argv.flag?('upload', false)
67
+ @args_send_flag = argv.flag?('send', false)
68
+ @args_proj_name = argv.option('proj')
69
+
70
+ if @args_send_flag
71
+ @args_upload_flag = true
72
+ end
73
+
74
+ super
75
+ @additional_args = argv.remainder!
76
+ end
77
+
78
+
79
+ def run
80
+
81
+ ipa_file_name = @args_ipa_file
82
+ if !@args_set_ipa_name.nil?
83
+ ipa_file_name = @args_set_ipa_name
84
+ end
85
+
86
+ if !ipa_file_name.nil? && File.exist?(ipa_file_name)
87
+ else
88
+ current_dir = Dir.pwd
89
+ # File.basename(f).include?("_resigned") ? Time.local(0, 0, 0) : File.mtime(f)
90
+ ipa_file_name = Dir.glob(File.join(current_dir, "/*.ipa")).max_by {|f| File.basename(f).include?("_resigned") ? Time.local(0, 1, 1) : File.mtime(f)}
91
+ end
92
+
93
+ if !ipa_file_name.nil? && File.exist?(ipa_file_name)
94
+ puts
95
+ puts "正在重签名的ipa: #{ipa_file_name}"
96
+ puts "时间: #{File.mtime(ipa_file_name)}"
97
+ puts
98
+ else
99
+ return
100
+ end
101
+
102
+
103
+ mainapp_bundleid = nil
104
+
105
+ if @args_deploy_flag
106
+ mainapp_bundleid = get_selected_deploy_bundleid()
107
+ else
108
+ mainapp_bundleid = get_selected_dev_bundleid()
109
+ end
110
+ puts "mainapp_bundleid: #{mainapp_bundleid}"
111
+
112
+ args_temp = []
113
+ args_temp << mainapp_bundleid
114
+
115
+ Pindo::Command::Deploy::Pullconfig::run(args_temp)
116
+
117
+ app_info_obj = nil
118
+ if @args_upload_flag
119
+ proj_name = @args_proj_name
120
+ app_info_obj = PgyerHelper.share_instace.prepare_upload(working_directory:Dir.pwd, proj_name:proj_name)
121
+ end
122
+
123
+ args_temp = []
124
+ if @args_adhoc_flag
125
+ args_temp << "--adhoc"
126
+ else
127
+ args_temp << "--dev"
128
+ end
129
+
130
+ if !ipa_file_name.nil?
131
+
132
+ args_temp << "--ipa=#{ipa_file_name}"
133
+ Pindo::Command::Deploy::Resign::run(args_temp)
134
+
135
+
136
+ ipa_file_name = File::expand_path(ipa_file_name)
137
+ ipa_base_name = File.basename(ipa_file_name, ".ipa")
138
+ ipa_dir = File.dirname(ipa_file_name)
139
+ ipa_file_upload = File.join(ipa_dir, ipa_base_name + "_resigned.ipa")
140
+
141
+ if !ipa_file_upload.nil? && !app_info_obj.nil?
142
+ result_data = PgyerHelper.share_instace.start_upload(app_info_obj:app_info_obj, ipa_file_upload:ipa_file_upload, description:nil)
143
+ if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
144
+ msg_data = PgyerHelper.share_instace.make_msg_data(app_info_obj:app_info_obj, app_version_info_obj:result_data["data"])
145
+ PgyerHelper.share_instace.print_app_version_info(msg_data:msg_data)
146
+ if @args_send_flag
147
+ PgyerHelper.share_instace.send_apptest_wechat_msg(msg_data:msg_data)
148
+ end
149
+ end
150
+ end
151
+
152
+ end
153
+
154
+
155
+
156
+ #
157
+ end
158
+
159
+
160
+ end
161
+ end
162
+ end
163
+ end
164
+
@@ -0,0 +1,115 @@
1
+ require 'highline/import'
2
+ require 'fileutils'
3
+ require 'json'
4
+ require 'xcodeproj'
5
+ require 'gym'
6
+
7
+ module Pindo
8
+ class Command
9
+ class Ios < Command
10
+ class Build < Ios
11
+
12
+ # 命令的简要说明 - 编译iOS工程并可选择上传到测试平台
13
+ self.summary = '编译iOS工程,并支持上传ipa'
14
+
15
+ # 命令的详细说明,包含用法示例
16
+ self.description = <<-DESC
17
+ 编译iOS工程并生成ipa文件。
18
+
19
+ 支持功能:
20
+
21
+ * 编译工程
22
+
23
+ * 生成IPA文件
24
+
25
+ * 支持上传分发
26
+
27
+ 使用示例:
28
+
29
+ $ pindo ios build # 仅编译
30
+
31
+ $ pindo ios build --upload # 编译并上传
32
+
33
+ $ pindo ios build --send # 编译并发送通知
34
+
35
+ $ pindo ios build --proj=myapp # 指定项目名称
36
+ DESC
37
+
38
+ self.arguments = [
39
+
40
+ ]
41
+
42
+ def self.options
43
+ [
44
+ ['--proj', '指定上传到测试平台的项目名称'],
45
+ ['--upload', '上传编译后的ipa到测试平台'],
46
+ ['--send', '上传成功后发送测试通知'],
47
+ ].concat(super)
48
+ end
49
+
50
+ def initialize(argv)
51
+
52
+ @args_upload_flag = argv.flag?('upload', false)
53
+ @args_send_flag = argv.flag?('send', false)
54
+ @args_proj_name = argv.option('proj')
55
+
56
+ if @args_send_flag
57
+ @args_upload_flag = true
58
+ end
59
+
60
+
61
+ super
62
+ @additional_args = argv.remainder!
63
+ end
64
+
65
+ def run
66
+
67
+
68
+ app_info_obj = nil
69
+ if @args_upload_flag
70
+ proj_name = @args_proj_name
71
+ app_info_obj = PgyerHelper.share_instace.prepare_upload(working_directory:Dir.pwd, proj_name:proj_name)
72
+ end
73
+
74
+
75
+ args_temp = []
76
+ Pindo::Command::Deploy::Build::run(args_temp)
77
+
78
+
79
+ pindo_new_project_dir = Dir.pwd
80
+ build_path = File.join(pindo_new_project_dir, "build", "*.{ipa,app,apk}")
81
+ ipa_file_upload = Dir.glob(build_path).max_by {|f| File.mtime(f)}
82
+
83
+ if !ipa_file_upload.nil? && !app_info_obj.nil?
84
+
85
+ description = nil
86
+ if File.exist?(File.join(pindo_new_project_dir, ".release_info"))
87
+ description = File.read(File.join(pindo_new_project_dir, ".release_info"))
88
+ else
89
+ if File.exist?(File.join(pindo_new_project_dir, ".git"))
90
+ description = git!(%W(-C #{pindo_new_project_dir} show -s --format=%h::%s)).strip
91
+ unless !description.nil? && description.length > 10
92
+ description = nil
93
+ end
94
+ end
95
+ end
96
+
97
+ result_data = PgyerHelper.share_instace.start_upload(app_info_obj:app_info_obj, ipa_file_upload:ipa_file_upload, description:description)
98
+ if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
99
+ msg_data = PgyerHelper.share_instace.make_msg_data(app_info_obj:app_info_obj, app_version_info_obj:result_data["data"])
100
+
101
+ PgyerHelper.share_instace.print_app_version_info(msg_data:msg_data)
102
+ if @args_send_flag
103
+ PgyerHelper.share_instace.send_apptest_wechat_msg(msg_data:msg_data)
104
+ end
105
+ end
106
+ end
107
+
108
+
109
+ end
110
+
111
+
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,164 @@
1
+ require 'fileutils'
2
+
3
+ module Pindo
4
+ class Command
5
+ class Ios < Command
6
+ class Cert < Ios
7
+
8
+ include Appselect
9
+
10
+ include XcodeCertHelper
11
+ self.summary = '更新iOS证书并使用新证书设置Xcode工程'
12
+ self.description = <<-DESC
13
+ 更新iOS证书并使用新证书设置Xcode工程。
14
+
15
+ 支持功能:
16
+
17
+ * 更新iOS证书
18
+
19
+ * 设置Xcode工程证书
20
+
21
+ * 支持开发和发布证书
22
+
23
+ 使用示例:
24
+
25
+ $ pindo ios cert # 更新开发证书
26
+
27
+ $ pindo ios cert --deploy # 更新发布bundle id
28
+
29
+ $ pindo ios cert --adhoc # 更新adhoc证书
30
+
31
+ $ pindo ios cert --macos # 更新macos平台证书
32
+
33
+ DESC
34
+
35
+ self.arguments = [
36
+
37
+ ]
38
+
39
+ # 命令选项
40
+ def self.options
41
+ [
42
+ ['--deploy', '默认使用开发环境的bundle id,使用此选项切换为发布环境的bundle id'],
43
+ ['--adhoc', '默认使用开发证书,使用此选项切换为adhoc证书'],
44
+ ['--macos', '指定为macOS平台的证书'],
45
+ ['--upload', '生成用于上传到蒲公英平台的证书'],
46
+ ].concat(super)
47
+ end
48
+
49
+ def initialize(argv)
50
+ @args_adhoc_flag = argv.flag?('adhoc', false)
51
+ @args_deploy_flag = argv.flag?('deploy', false)
52
+ @args_macos_flag = argv.flag?('macos', false)
53
+ @upload_flag = argv.flag?('upload', false)
54
+ super
55
+ end
56
+
57
+
58
+ def run
59
+
60
+ mainapp_bundleid= nil
61
+ if @args_deploy_flag
62
+ mainapp_bundleid = get_selected_deploy_bundleid()
63
+ else
64
+ mainapp_bundleid = get_selected_dev_bundleid()
65
+ end
66
+
67
+ args_temp = []
68
+ args_temp << mainapp_bundleid
69
+ Pindo::Command::Deploy::Pullconfig::run(args_temp)
70
+
71
+
72
+ project_dir = Dir.pwd
73
+ Dir.chdir(project_dir)
74
+ config_json_file = File.join(project_dir,"config.json")
75
+ Cert::modify_cert_with_project(project_dir:project_dir, config_file:config_json_file)
76
+
77
+ args_temp = []
78
+ if @args_adhoc_flag
79
+ args_temp << "--adhoc"
80
+ else
81
+ args_temp << "--dev"
82
+ end
83
+
84
+
85
+
86
+ project_fullname = Dir.glob(File.join(project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
87
+ if !project_fullname.nil?
88
+ project_obj = Xcodeproj::Project.open(project_fullname)
89
+ project_build_platform = project_obj.root_object.build_configuration_list.get_setting("SDKROOT")["Release"]
90
+ if !project_build_platform.nil? && project_build_platform.eql?("macosx")
91
+ @args_macos_flag = true
92
+ end
93
+ end
94
+
95
+ if @args_macos_flag
96
+ args_temp << "--macos"
97
+ end
98
+
99
+ if @upload_flag
100
+ args_temp << "--upload"
101
+ end
102
+
103
+ Pindo::Command::Deploy::Cert::run(args_temp)
104
+
105
+ end
106
+
107
+ def self.modify_cert_with_project(project_dir:nil, config_file:nil)
108
+
109
+ project_fullname = Dir.glob(File.join(project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
110
+ if !project_fullname.nil?
111
+
112
+ entitlements_plist_path = nil
113
+ project_obj = Xcodeproj::Project.open(project_fullname)
114
+ project_obj.targets.each do |target|
115
+ if target.product_type.to_s.eql?("com.apple.product-type.application") then
116
+ temp_entitlements_file = target.build_configurations.first.build_settings['CODE_SIGN_ENTITLEMENTS']
117
+ if !temp_entitlements_file.nil? && !temp_entitlements_file.empty?
118
+ entitlements_plist_path = File.join(project_dir, temp_entitlements_file)
119
+ end
120
+ end
121
+ end
122
+
123
+ # puts entitlements_plist_path
124
+ if !entitlements_plist_path.nil? && File.exist?(entitlements_plist_path)
125
+ config_json = nil
126
+ if File.exist?(config_file)
127
+ config_json = JSON.parse(File.read(config_file))
128
+ end
129
+
130
+ entitlements_plist_dict = Xcodeproj::Plist.read_from_path(entitlements_plist_path)
131
+
132
+ if entitlements_plist_dict["com.apple.developer.icloud-container-identifiers"].nil?
133
+ if !config_json.nil? && !config_json["app_info"]['app_icloud_id'].nil?
134
+ config_json["app_info"].delete('app_icloud_id')
135
+ end
136
+ end
137
+
138
+ if entitlements_plist_dict["com.apple.security.application-groups"].nil?
139
+ if !config_json.nil? && !config_json["app_info"]['app_group_id'].nil?
140
+ config_json["app_info"].delete('app_group_id')
141
+ end
142
+ end
143
+
144
+ # puts JSON.pretty_generate(config_json)
145
+ if !config_json.nil?
146
+ File.open(config_file, "w") do |f|
147
+ f.write(JSON.pretty_generate(config_json))
148
+ end
149
+
150
+ end
151
+
152
+ end
153
+
154
+ end
155
+
156
+
157
+ end
158
+
159
+
160
+ end
161
+ end
162
+ end
163
+ end
164
+