-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathadd_devices.rb
More file actions
161 lines (134 loc) · 5.68 KB
/
add_devices.rb
File metadata and controls
161 lines (134 loc) · 5.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
module DeployGate
module Commands
module AddDevices
class << self
# @param [Array] args
# @param [Commander::Command::Options] options
def run(args, options)
work_dir = args.empty? ? Dir.pwd : args.first
ios_only_command unless DeployGate::Project.ios?(work_dir)
# Change the current working directory for fastlane else.
root_path = DeployGate::Xcode::Ios.project_root_path(work_dir)
Dir.chdir(root_path)
session = DeployGate::Session.new
unless session.login?
Login.start_login()
session = DeployGate::Session.new()
end
owner = options.user || session.name
udid = options.udid
device_name = options.device_name
distribution_key = options.distribution_key
server = options.server
analyze = DeployGate::Xcode::Analyze.new(
build_configuration: options.configuration,
xcodeproj_path: options.xcodeproj,
workspace_path: options.workspace
)
bundle_id = analyze.bundle_identifier
export_team_id = analyze.export_team_id
member_center = DeployGate::Xcode::MemberCenter.new(export_team_id)
if server
run_server(session, owner, bundle_id, distribution_key, member_center, args, options)
else
device_register(session, owner, udid, device_name, bundle_id, member_center, args, options)
end
end
def run_server(session, owner, bundle_id, distribution_key, member_center, args, options)
DeployGate::AddDevicesServer.new().start(session.token, owner, bundle_id, distribution_key, member_center, args, options)
end
def device_register(session, owner, udid, device_name, bundle_id, member_center, args, options)
if udid.nil? && device_name.nil?
devices = fetch_devices(session.token, owner, bundle_id, member_center)
select_devices = select_devices(devices)
not_device if select_devices.empty?
register!(select_devices)
else
register_udid = udid || HighLine.ask(I18n.t('commands.add_devices.input_udid'))
register_device_name = device_name || HighLine.ask(I18n.t('commands.add_devices.input_device_name'))
device = DeployGate::Xcode::MemberCenters::Device.new(register_udid, '', register_device_name, member_center)
puts device.to_s
if HighLine.agree(I18n.t('commands.add_devices.device_register_confirm')) {|q| q.default = "y"}
register!([device])
else
not_device
end
end
build!(bundle_id, member_center, args, options)
end
def register!(devices)
devices.each do |device|
device.register!
success_registered_device(device)
end
end
def build!(bundle_id, member_center, args, options)
app = DeployGate::Xcode::MemberCenters::App.new(bundle_id, member_center)
app.create! unless app.created?
DeployGate::Xcode::MemberCenters::ProvisioningProfile.new(bundle_id, member_center).create!
team = member_center.team
DeployGate::Xcode::Export.clean_provisioning_profiles(bundle_id, team)
DeployGate::Commands::Deploy::Build.run(args, options)
end
def fetch_devices(token, owner, bundle_id, member_center)
res = DeployGate::API::V1::Users::App.not_provisioned_udids(token, owner, bundle_id)
if res[:error]
case res[:message]
when 'unknown app'
not_application(owner, bundle_id)
when 'unknown user'
unknown_user
else
raise res[:message]
end
end
results = res[:results]
devices = results.map{|r| DeployGate::Xcode::MemberCenters::Device.new(r[:udid], r[:user_name], r[:device_name], member_center)}
devices
end
# @param [Array]
# @return [Array]
def select_devices(devices)
return [] if devices.empty?
select = []
cli = HighLine.new
devices.each do |device|
puts ''
puts I18n.t('commands.add_devices.select_devices.device_info', device: device.to_s)
select.push(device) if cli.agree(I18n.t('commands.add_devices.select_devices.agree')) {|q| q.default = "y"}
end
select
end
# @param [Device] device
# @return [void]
def success_registered_device(device)
puts HighLine.color(I18n.t('commands.add_devices.success_registered_device', device: device.to_s), HighLine::GREEN)
end
# @return [void]
def not_device
puts HighLine.color(I18n.t('commands.add_devices.not_device'), HighLine::YELLOW)
exit
end
# @return [void]
def ios_only_command
puts HighLine.color(I18n.t('commands.add_devices.ios_only_command'), HighLine::YELLOW)
exit
end
# @param [String] owner
# @param [String] bundle_id
# @return [void]
def not_application(owner, bundle_id)
puts ''
puts I18n.t('commands.add_devices.unknown_application.data', owner: owner, bundle_id: bundle_id)
puts HighLine.color(I18n.t('commands.add_devices.unknown_application.message'), HighLine::YELLOW)
exit
end
def unknown_user
puts ''
puts HighLine.color(I18n.t('commands.add_devices.unknown_user'), HighLine::RED)
exit
end
end
end
end
end