forked from liaoque/ipasign
-
Notifications
You must be signed in to change notification settings - Fork 0
/
addUUid.rb
152 lines (116 loc) · 4.72 KB
/
addUUid.rb
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
require "spaceship"
require 'openssl'
require "mysql2"
require 'pathname'
require Pathname.new(File.dirname(__FILE__)).realpath.to_s + '/globalConfig'
require Pathname.new(File.dirname(__FILE__)).realpath.to_s + '/userLogin'
require Pathname.new(File.dirname(__FILE__)).realpath.to_s + '/mysqlInstance'
#参考 https://github.com/fastlane/fastlane/blob/master/spaceship/docs/DeveloperPortal.md
apuid = ARGV[0].to_s;
username = ARGV[1].to_s;
password = ARGV[2].to_s;
uuid = ARGV[3].to_s;
_bundleId = ARGV[4].to_s ;
# 保证 bundleId 全局 唯一
bundleId = _bundleId + apuid;
mobileprovision = '/sign.' + _bundleId + '.mobileprovision'
def ad_hocCreate(bundleId, certificateId, username)
cert = Spaceship::Portal.certificate.production.find(certificateId)
if !cert
raise "证书#{certificateId} 不存在"
end
#创建 ad_hoc
Spaceship::Portal.provisioning_profile.ad_hoc.create!(bundle_id: bundleId, certificate: cert, name: username)
sleep 1
end
begin
# 绝对路径
ulogin = UserLogin.new(username, password, 1)
ulogin.login()
#添加 bundleId
app = Spaceship::Portal.app.find(bundleId)
if !app
app = Spaceship::Portal.app.create!(bundle_id: bundleId, name: bundleId)
end
# 获取所有证书
certificates = Spaceship::Portal.certificate.all
if certificates.empty?
raise "证书为空"
end
# 连接mysql
client = MysqlInstance.instance.getClient();
#如果uuid不存在则添加uuid
if !Spaceship::Portal.device.find_by_udid(uuid)
Spaceship::Portal.device.create!(name:uuid, udid: uuid)
#更新设备数量
deviceLength = Spaceship::Portal.device.all.length
client.query("update apple_developer set uuid_num = '#{deviceLength}' where apuid = '#{apuid}'")
end
#通过数据库 查询 证书id
results = client.query("SELECT certificate_id FROM apple_developer_cer where apuid = '#{apuid}' and status = 1 limit 1")
if !results.any?
raise "证书 不存在, 请先上传或者创建证书"
end
certificateObj = results.first
certificateId = certificateObj['certificate_id']
Spaceship.provisioning_profile.ad_hoc.all.each do |p|
#遍历查找对应 bundleId 和 certificateId 的 profile
p.certificates.each do |cs|
if cs.id == certificateId && p.app.bundle_id == bundleId
$ad_hocProfile = p
break
end
end
end
if !defined? $ad_hocProfile
#ad_hoc 不存在
ad_hocCreate(bundleId, certificateId, bundleId + '.' + certificateId)
sleep 1
$ad_hocProfile = Spaceship.provisioning_profile.ad_hoc.all.first
end
if !defined? $ad_hocProfile
raise "ad_hoc profile 生成失败"
end
#设备号
devices = Spaceship.device.all
# 根据cert 证书创建
#更新 ad_hoc
$ad_hocProfile.devices = devices
#$ad_hocProfile.update_service(Spaceship::Portal.app_service.push_notification.on)
$ad_hocProfile.update!
# 重新从线上获取数据
Spaceship.provisioning_profile.ad_hoc.all.each do |p|
if p.name == $ad_hocProfile.name
# 根据cert 证书创建
# profile 写到对应的文件夹,以便更新
c_time = Time.now.strftime("%Y-%m-%d %H:%M:%S")
mobileprovision = '/applesign/' + username + '/' + certificateId + mobileprovision
keyPath = GlobalConfig::ROOT_KEY + '/applesign/' + username + '/' + certificateId
system "mkdir -p #{keyPath}"
system "chmod 777 #{keyPath}"
File.write(GlobalConfig::ROOT_KEY + mobileprovision, p.download)
# 保存uuid
uUser = client.query("SELECT id FROM apple_developer_uuid WHERE uuid= '#{uuid}'")
if uUser.any?
client.query("update apple_developer_uuid set apuid = '#{apuid}', status = 1 where uuid = '#{uuid}' ")
else
client.query("insert into apple_developer_uuid (apuid,uuid,c_time)values('#{apuid}', '#{uuid}', '#{c_time}')")
end
# 保存mobileprovision
# uUser = client.query("SELECT id FROM apple_developer_mobileprovision WHERE build_id= '#{_bundleId}' and certificate_id = '#{certificateId}'")
mobileProvisionObj = client.query("SELECT id FROM apple_developer_mobileprovision WHERE build_id= '#{_bundleId}' and certificate_id = '#{certificateId}'")
if mobileProvisionObj.any?
client.query("update apple_developer_mobileprovision set mobileprovision = '#{mobileprovision}' where certificate_id = '#{certificateId}' and build_id= '#{_bundleId}'")
else
client.query("insert into apple_developer_mobileprovision (apuid, certificate_id, build_id, mobileprovision, c_time)values('#{apuid}', '#{certificateId}', '#{_bundleId}', '#{mobileprovision}', '#{c_time}')")
end
end
end
rescue Exception => e
puts "Trace message: #{e}"
else
puts "Success message: uuid添加成功"
ensure
# 断开与服务器的连接
# MysqlInstance.instance.close()
end