pindo 4.9.1 → 4.9.3
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.
- checksums.yaml +4 -4
- data/lib/pindo/base/githelper.rb +6 -6
- data/lib/pindo/command/dev/autobuild.rb +14 -0
- data/lib/pindo/command/dev/build.rb +12 -0
- data/lib/pindo/command/dev/tag.rb +1 -1
- data/lib/pindo/command/ios/autobuild.rb +210 -0
- data/lib/pindo/command/ios/build.rb +14 -0
- data/lib/pindo/command/ios/debug.rb +133 -164
- data/lib/pindo/command/ios.rb +2 -2
- data/lib/pindo/command/unity/ipa.rb +34 -68
- data/lib/pindo/command.rb +0 -1
- data/lib/pindo/module/build/buildhelper.rb +48 -4
- data/lib/pindo/module/build/unityhelper.rb +33 -106
- data/lib/pindo/version.rb +1 -1
- metadata +3 -4
- data/lib/pindo/command/ios/cert.rb +0 -164
- data/lib/pindo/command/upgrade.rb +0 -56
data/lib/pindo/command/ios.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
|
-
require 'pindo/command/ios/cert'
|
3
|
-
require 'pindo/command/ios/build'
|
4
2
|
require 'pindo/command/ios/debug'
|
3
|
+
require 'pindo/command/ios/build'
|
4
|
+
require 'pindo/command/ios/autobuild'
|
5
5
|
require 'pindo/command/ios/adhoc'
|
6
6
|
require 'pindo/command/ios/autoresign'
|
7
7
|
require 'pindo/command/ios/applovin'
|
@@ -4,6 +4,7 @@ require 'find'
|
|
4
4
|
require 'fileutils'
|
5
5
|
require 'pindo/base/executable'
|
6
6
|
require 'pindo/module/build/unityhelper'
|
7
|
+
require 'pindo/module/build/buildhelper'
|
7
8
|
|
8
9
|
module Pindo
|
9
10
|
class Command
|
@@ -11,7 +12,8 @@ module Pindo
|
|
11
12
|
class Ipa < Unity
|
12
13
|
|
13
14
|
include Appselect
|
14
|
-
|
15
|
+
|
16
|
+
include Pindo::Githelper
|
15
17
|
# Unity IPA包编译和上传命令
|
16
18
|
self.summary = '编译Unity工程生成iOS IPA并支持上传到测试平台'
|
17
19
|
|
@@ -71,61 +73,34 @@ module Pindo
|
|
71
73
|
|
72
74
|
super
|
73
75
|
end
|
74
|
-
|
75
|
-
def export_ios_project(project_path, pindo_ios_project_dir, additional_args)
|
76
|
-
|
77
|
-
# 获取 UnityHelper 实例
|
78
|
-
unity_helper = Pindo::Client::UnityHelper.share_instance
|
79
|
-
# 获取 Unity 版本
|
80
|
-
unity_version = unity_helper.find_unity_path
|
81
|
-
puts "Unity 版本: #{unity_version}"
|
82
|
-
|
83
|
-
begin
|
84
|
-
|
85
|
-
# 执行Unity命令
|
86
|
-
result = unity_helper.execute_unity_command(
|
87
|
-
project_path,
|
88
|
-
'GoodUnityBuild.BuildManager.BatchBuild',
|
89
|
-
additional_args
|
90
|
-
)
|
91
|
-
|
92
|
-
if result[:success]
|
93
|
-
puts "Unity iOS library build completed successfully"
|
94
|
-
puts "Unity version: #{result[:unity_version]}"
|
95
|
-
puts "Output: #{pindo_ios_project_dir}"
|
96
|
-
puts result[:stdout]
|
97
|
-
return true
|
98
|
-
else
|
99
|
-
puts "Unity iOS library build failed"
|
100
|
-
puts "Unity version: #{result[:unity_version]}"
|
101
|
-
puts "Error:"
|
102
|
-
puts result[:stderr]
|
103
|
-
raise "Build failed with status: #{result[:exit_status]}"
|
104
|
-
end
|
105
|
-
|
106
|
-
rescue => e
|
107
|
-
puts "Error during Unity build: #{e.message}"
|
108
|
-
puts e.backtrace
|
109
|
-
return false
|
110
|
-
end
|
111
|
-
end
|
112
76
|
|
113
77
|
|
114
78
|
def run
|
79
|
+
|
115
80
|
pindo_unity_project_dir = Dir.pwd
|
116
|
-
|
81
|
+
|
117
82
|
# 检查是否是Unity工程
|
118
83
|
unity_helper = Pindo::Client::UnityHelper.share_instance
|
119
|
-
|
120
|
-
if @force_select_unity
|
121
|
-
puts "强制选择Unity版本"
|
122
|
-
unity_helper.find_unity_path(change_unity_version:true)
|
123
|
-
end
|
124
|
-
|
125
84
|
unless unity_helper.unity_project?(pindo_unity_project_dir)
|
126
85
|
raise Informative, "当前目录不是Unity工程,请在Unity工程根目录下执行此命令"
|
127
86
|
end
|
128
|
-
|
87
|
+
|
88
|
+
if @args_upload_flag
|
89
|
+
build_helper = Pindo::BuildHelper.share_instance
|
90
|
+
is_need_add_tag,tag_action_parms = build_helper.check_is_need_add_tag?(pindo_unity_project_dir)
|
91
|
+
if is_need_add_tag
|
92
|
+
Pindo::Command::Dev::Tag::run(tag_action_parms)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
project_unity_version = unity_helper.get_unity_version(pindo_unity_project_dir)
|
97
|
+
project_unity_major_version = project_unity_version.split('.')[0..1].join('.')
|
98
|
+
puts
|
99
|
+
puts "工程的Unity版本: #{project_unity_version}"
|
100
|
+
unity_exe_path = unity_helper.find_unity_path(unity_major_version:project_unity_major_version, force_change_version: @force_select_unity)
|
101
|
+
puts "选择的Unity路径: #{unity_exe_path}"
|
102
|
+
puts
|
103
|
+
|
129
104
|
app_info_obj = nil
|
130
105
|
if @args_upload_flag
|
131
106
|
proj_name = @args_proj_name
|
@@ -140,21 +115,19 @@ module Pindo
|
|
140
115
|
mainapp_bundleid = get_selected_dev_bundleid()
|
141
116
|
end
|
142
117
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
}
|
149
|
-
if @args_base_flag
|
150
|
-
pindo_ios_project_dir = File.join(pindo_unity_project_dir, "Platform/BaseiOS")
|
151
|
-
additional_args = {
|
152
|
-
'platform' => 'iOS',
|
153
|
-
'buildtype' => 'library'
|
154
|
-
}
|
118
|
+
isLibrary = @args_base_flag
|
119
|
+
|
120
|
+
ios_export_lib_dir = File.join(pindo_unity_project_dir, "GoodPlatform/BaseiOS")
|
121
|
+
if File.directory?(ios_export_lib_dir)
|
122
|
+
isLibrary = true
|
155
123
|
end
|
156
124
|
|
157
|
-
|
125
|
+
pindo_ios_project_dir = File.join(pindo_unity_project_dir, "GoodPlatform/iOS")
|
126
|
+
if isLibrary
|
127
|
+
pindo_ios_project_dir = ios_export_lib_dir
|
128
|
+
end
|
129
|
+
unity_helper.build_project(unity_exe_full_path:unity_exe_path, project_path:pindo_unity_project_dir, platform:'iOS', isLibrary:isLibrary)
|
130
|
+
|
158
131
|
|
159
132
|
args_temp = []
|
160
133
|
args_temp << "--bundleid=#{mainapp_bundleid}"
|
@@ -168,16 +141,9 @@ module Pindo
|
|
168
141
|
end
|
169
142
|
|
170
143
|
Dir.chdir(pindo_ios_project_dir)
|
171
|
-
if @args_base_flag
|
172
|
-
`chmod 777 #{pindo_ios_project_dir}`
|
173
|
-
else
|
174
|
-
`chmod 777 #{pindo_ios_project_dir}/Unity`
|
175
|
-
end
|
176
144
|
|
145
|
+
Pindo::Command::Ios::Autobuild::run(args_temp)
|
177
146
|
|
178
|
-
Pindo::Command::Ios::Debug::run(args_temp)
|
179
|
-
|
180
|
-
|
181
147
|
|
182
148
|
end
|
183
149
|
|
data/lib/pindo/command.rb
CHANGED
@@ -3,10 +3,10 @@ require 'fileutils'
|
|
3
3
|
require 'xcodeproj' # 用于iOS项目检查
|
4
4
|
|
5
5
|
module Pindo
|
6
|
-
|
7
|
-
module Build
|
6
|
+
|
8
7
|
class BuildHelper
|
9
8
|
include Singleton
|
9
|
+
include Pindo::Githelper
|
10
10
|
|
11
11
|
class << self
|
12
12
|
def share_instance
|
@@ -14,6 +14,51 @@ module Pindo
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def check_is_need_add_tag?(project_path)
|
18
|
+
tag_action_parms = nil
|
19
|
+
is_need_add_tag = false
|
20
|
+
|
21
|
+
if is_git_directory?(local_repo_dir: project_path)
|
22
|
+
current_git_root_path = git_root_directory(local_repo_dir: project_path)
|
23
|
+
latest_tag = get_latest_version_tag(project_dir: current_git_root_path)
|
24
|
+
|
25
|
+
unless is_tag_at_head?(git_root_dir: current_git_root_path, tag_name: latest_tag)
|
26
|
+
cli = HighLine.new
|
27
|
+
menu_options = {
|
28
|
+
"新增版本号,打新Tag" => -> {
|
29
|
+
tag_action_parms = []
|
30
|
+
:new_tag
|
31
|
+
},
|
32
|
+
"将上次的Tag删除重新打Tag" => -> {
|
33
|
+
tag_action_parms = []
|
34
|
+
tag_action_parms << "--retag"
|
35
|
+
:recreate_tag
|
36
|
+
},
|
37
|
+
"不需要Tag继续编译且上传,手动修改上传备注" => -> {
|
38
|
+
puts ""
|
39
|
+
:continue_without_tag
|
40
|
+
},
|
41
|
+
"终止退出编译" => -> {
|
42
|
+
raise Informative, "终止退出编译!"
|
43
|
+
:exit
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
result = cli.choose do |menu|
|
48
|
+
menu.header = "当前代码并没有打Tag,上传的Changelog需要Tag"
|
49
|
+
menu.prompt = "请选中打Tag的方式, 请输入选项(1/2/3...):"
|
50
|
+
menu_options.each do |option, action|
|
51
|
+
menu.choice(option) { action.call }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
is_need_add_tag = !tag_action_parms.nil?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
return [is_need_add_tag, tag_action_parms]
|
60
|
+
end
|
61
|
+
|
17
62
|
def unity_project?(project_path)
|
18
63
|
# 检查Unity工程的关键文件和目录
|
19
64
|
project_settings_path = File.join(project_path, "ProjectSettings")
|
@@ -138,6 +183,5 @@ module Pindo
|
|
138
183
|
end
|
139
184
|
end
|
140
185
|
end
|
141
|
-
|
142
|
-
end
|
186
|
+
|
143
187
|
end
|
@@ -25,7 +25,8 @@ module Pindo
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def find_unity_path(
|
28
|
+
def find_unity_path(unity_major_version:nil, force_change_version:false)
|
29
|
+
|
29
30
|
paths = case RUBY_PLATFORM
|
30
31
|
when /darwin/
|
31
32
|
UNITY_MAC_PATHS
|
@@ -42,101 +43,44 @@ module Pindo
|
|
42
43
|
Dir.glob(path).each do |expanded_path|
|
43
44
|
version = extract_version_from_path(expanded_path)
|
44
45
|
if version
|
46
|
+
major_version = version.split('.')[0..1].join('.')
|
45
47
|
unity_versions << {
|
46
48
|
path: expanded_path,
|
47
|
-
version: version
|
49
|
+
version: version,
|
50
|
+
major_version: major_version
|
48
51
|
}
|
49
52
|
end
|
50
53
|
end
|
51
54
|
elsif File.exist?(path)
|
52
55
|
version = extract_version_from_path(path)
|
56
|
+
major_version = version.split('.')[0..1].join('.')
|
53
57
|
if version
|
54
58
|
unity_versions << {
|
55
59
|
path: path,
|
56
|
-
version: version
|
60
|
+
version: version,
|
61
|
+
major_version: major_version
|
57
62
|
}
|
58
63
|
end
|
59
64
|
end
|
60
65
|
end
|
61
|
-
|
66
|
+
|
62
67
|
if unity_versions.empty?
|
63
68
|
raise Informative, "未找到任何Unity版本"
|
64
69
|
end
|
65
|
-
|
66
|
-
if unity_versions.length == 1
|
67
|
-
selected_unity = unity_versions.first
|
68
|
-
return selected_unity[:path]
|
69
|
-
end
|
70
|
-
|
71
|
-
# 获取所有可用的主版本号
|
72
|
-
major_versions = unity_versions.map { |v|
|
73
|
-
v[:version].split('.')[0..1].join('.')
|
74
|
-
}.uniq.sort_by { |v| Gem::Version.new(v) }
|
75
|
-
|
76
|
-
if change_unity_version
|
77
|
-
# 让用户选择主版本号
|
78
|
-
puts "\n可用的Unity主版本:"
|
79
|
-
major_versions.each_with_index do |v, i|
|
80
|
-
puts "#{i + 1}. #{v}"
|
81
|
-
end
|
82
|
-
|
83
|
-
print "\n请选择Unity主版本 (1-#{major_versions.length}): "
|
84
|
-
choice = gets.chomp.to_i
|
85
|
-
|
86
|
-
if choice < 1 || choice > major_versions.length
|
87
|
-
raise Informative, "无效的选择"
|
88
|
-
end
|
89
|
-
|
90
|
-
selected_major_version = major_versions[choice - 1]
|
91
|
-
|
92
|
-
# 保存选择的主版本号
|
93
|
-
config = Pindo::Config::PindoUserLocalConfig.instance
|
94
|
-
config.unity_version = selected_major_version
|
95
|
-
config.save
|
96
|
-
|
97
|
-
# 在选定主版本下选择最新的版本
|
98
|
-
matching_versions = unity_versions.select { |v| v[:version].start_with?(selected_major_version) }
|
99
|
-
selected_unity = matching_versions.sort_by { |v| Gem::Version.new(v[:version]) }.last
|
100
|
-
|
101
|
-
return selected_unity[:path]
|
102
|
-
end
|
103
70
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
return selected_unity[:path]
|
71
|
+
unity_versions.sort_by! { |v| v[:major_version] }
|
72
|
+
select_unity_versions = unity_versions.select! { |v| v[:major_version] == unity_major_version } if unity_major_version
|
73
|
+
if select_unity_versions.empty?
|
74
|
+
if force_change_version
|
75
|
+
return unity_versions.last[:path]
|
76
|
+
else
|
77
|
+
raise Informative, "未找到匹配的Unity版本"
|
78
|
+
return nil
|
113
79
|
end
|
80
|
+
else
|
81
|
+
return select_unity_versions.first[:path]
|
114
82
|
end
|
115
|
-
|
116
|
-
# 如果没有保存的版本或找不到匹配版本,让用户选择
|
117
|
-
puts "\n可用的Unity主版本:"
|
118
|
-
major_versions.each_with_index do |v, i|
|
119
|
-
puts "#{i + 1}. #{v}"
|
120
|
-
end
|
121
|
-
|
122
|
-
print "\n请选择Unity主版本 (1-#{major_versions.length}): "
|
123
|
-
choice = gets.chomp.to_i
|
124
|
-
|
125
|
-
if choice < 1 || choice > major_versions.length
|
126
|
-
raise Informative, "无效的选择"
|
127
|
-
end
|
128
|
-
|
129
|
-
selected_major_version = major_versions[choice - 1]
|
130
|
-
|
131
|
-
# 保存选择的主版本号
|
132
|
-
config.unity_version = selected_major_version
|
133
|
-
config.save
|
134
|
-
|
135
|
-
# 在选定主版本下选择最新的版本
|
136
|
-
matching_versions = unity_versions.select { |v| v[:version].start_with?(selected_major_version) }
|
137
|
-
selected_unity = matching_versions.sort_by { |v| Gem::Version.new(v[:version]) }.last
|
138
|
-
|
139
|
-
selected_unity[:path]
|
83
|
+
|
140
84
|
end
|
141
85
|
|
142
86
|
private
|
@@ -153,17 +97,19 @@ module Pindo
|
|
153
97
|
|
154
98
|
public
|
155
99
|
|
156
|
-
def execute_unity_command(
|
157
|
-
|
100
|
+
def execute_unity_command(unity_exe_full_path, project_path, additional_args = {})
|
101
|
+
if unity_exe_full_path.nil?
|
102
|
+
raise Informative, "Unity path not found!"
|
103
|
+
end
|
158
104
|
|
159
105
|
cmd_args = [
|
160
|
-
|
106
|
+
unity_exe_full_path,
|
161
107
|
"-batchmode",
|
162
108
|
"-quit",
|
163
109
|
"-projectPath",
|
164
110
|
project_path.to_s,
|
165
111
|
"-executeMethod",
|
166
|
-
|
112
|
+
"GoodUnityBuild.BuildManager.BatchBuild"
|
167
113
|
]
|
168
114
|
|
169
115
|
# Add any additional arguments
|
@@ -179,17 +125,17 @@ module Pindo
|
|
179
125
|
success: status.success?,
|
180
126
|
stdout: stdout,
|
181
127
|
stderr: stderr,
|
182
|
-
exit_status: status.exitstatus
|
183
|
-
unity_version: extract_version_from_path(unity_path)
|
128
|
+
exit_status: status.exitstatus
|
184
129
|
}
|
185
130
|
end
|
186
131
|
|
187
|
-
|
188
|
-
|
189
|
-
additional_args[:buildTarget] = platform if platform
|
190
|
-
additional_args[:outputPath] = output_path if output_path
|
132
|
+
|
133
|
+
def build_project(unity_exe_full_path:nil, project_path:nil, platform: nil, isLibrary: false)
|
191
134
|
|
192
|
-
|
135
|
+
additional_args = {}
|
136
|
+
additional_args[:platform] = platform if platform
|
137
|
+
additional_args[:buildtype] = 'library' if isLibrary
|
138
|
+
result = execute_unity_command(unity_exe_full_path, project_path, additional_args)
|
193
139
|
|
194
140
|
if result[:success]
|
195
141
|
puts "Unity build completed successfully"
|
@@ -205,14 +151,6 @@ module Pindo
|
|
205
151
|
result
|
206
152
|
end
|
207
153
|
|
208
|
-
def get_project_settings(project_path)
|
209
|
-
settings_path = File.join(project_path, "ProjectSettings", "ProjectSettings.asset")
|
210
|
-
if File.exist?(settings_path)
|
211
|
-
File.read(settings_path)
|
212
|
-
else
|
213
|
-
raise "Project settings file not found at #{settings_path}"
|
214
|
-
end
|
215
|
-
end
|
216
154
|
|
217
155
|
def get_unity_version(project_path)
|
218
156
|
version_path = File.join(project_path, "ProjectSettings", "ProjectVersion.txt")
|
@@ -232,17 +170,6 @@ module Pindo
|
|
232
170
|
end
|
233
171
|
end
|
234
172
|
|
235
|
-
def verify_unity_version(project_path)
|
236
|
-
project_version = get_unity_version(project_path)
|
237
|
-
unity_path = find_unity_path
|
238
|
-
editor_version = extract_version_from_path(unity_path)
|
239
|
-
|
240
|
-
if project_version != editor_version
|
241
|
-
raise "Project Unity version (#{project_version}) does not match Editor version (#{editor_version})"
|
242
|
-
end
|
243
|
-
|
244
|
-
true
|
245
|
-
end
|
246
173
|
|
247
174
|
def unity_project?(project_path)
|
248
175
|
# 检查关键Unity工程文件和目录是否存在
|
data/lib/pindo/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pindo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.9.
|
4
|
+
version: 4.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- wade
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-02-
|
10
|
+
date: 2025-02-22 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: claide
|
@@ -298,9 +298,9 @@ files:
|
|
298
298
|
- lib/pindo/command/ios.rb
|
299
299
|
- lib/pindo/command/ios/adhoc.rb
|
300
300
|
- lib/pindo/command/ios/applovin.rb
|
301
|
+
- lib/pindo/command/ios/autobuild.rb
|
301
302
|
- lib/pindo/command/ios/autoresign.rb
|
302
303
|
- lib/pindo/command/ios/build.rb
|
303
|
-
- lib/pindo/command/ios/cert.rb
|
304
304
|
- lib/pindo/command/ios/debug.rb
|
305
305
|
- lib/pindo/command/ipa.rb
|
306
306
|
- lib/pindo/command/ipa/autoresign.rb
|
@@ -327,7 +327,6 @@ files:
|
|
327
327
|
- lib/pindo/command/unity.rb
|
328
328
|
- lib/pindo/command/unity/apk.rb
|
329
329
|
- lib/pindo/command/unity/ipa.rb
|
330
|
-
- lib/pindo/command/upgrade.rb
|
331
330
|
- lib/pindo/command/utils.rb
|
332
331
|
- lib/pindo/command/utils/boss.rb
|
333
332
|
- lib/pindo/command/utils/clearcert.rb
|
@@ -1,164 +0,0 @@
|
|
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
|
-
|