spaceship 0.32.4 → 0.33.0
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/README.md +0 -13
- data/bin/spaceauth +51 -0
- data/lib/spaceship/client.rb +3 -0
- data/lib/spaceship/portal/provisioning_profile.rb +54 -30
- data/lib/spaceship/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6527cb5f13885b7110623e37d316ad0b3e24bac3
|
4
|
+
data.tar.gz: d0f1215849af1de633648dff9051dce6fd0f61c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13b7d83d1a90279d13bd8b3eb5a0e08eee363f04c37cfac8bcfc318e7de17a93d24923dea9ce203020b7d37d70b0cf7a9a3f2d53246b1153c97b01a3a6f2e1b4
|
7
|
+
data.tar.gz: 28e7c27957dce185f925de0575aa60779f1124dc1d0b060bd41ac7fe4716e5fafad4e040a59ff37d3bc18c4873a1c2d997a46bae7efeed36d9b565d34b2af628
|
data/README.md
CHANGED
@@ -185,19 +185,6 @@ I won't go into too much technical details about the various API endpoints, but
|
|
185
185
|
- **Profile Magic**: Create and upload code signing requests, all managed by `spaceship`
|
186
186
|
- **Multiple Spaceship**: You can launch multiple `spaceships` with different Apple accounts to do things like syncing the registered devices.
|
187
187
|
|
188
|
-
# Credits
|
189
|
-
|
190
|
-
The initial release was sponsored by [ZeroPush](https://zeropush.com).
|
191
|
-
|
192
|
-
`spaceship` was developed by
|
193
|
-
- [@KrauseFx](https://twitter.com/KrauseFx).
|
194
|
-
- [@snatchev](https://twitter.com/snatchev/)
|
195
|
-
- [@mathcarignani](https://twitter.com/mathcarignani/)
|
196
|
-
|
197
|
-
[Open full list of contributors](https://github.com/fastlane/spaceship/graphs/contributors).
|
198
|
-
|
199
|
-
##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
|
200
|
-
|
201
188
|
# Code of Conduct
|
202
189
|
Help us keep `fastlane` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/fastlane/blob/master/CODE_OF_CONDUCT.md).
|
203
190
|
|
data/bin/spaceauth
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$LOAD_PATH.push File.expand_path("../../lib", __FILE__)
|
3
|
+
require "colored"
|
4
|
+
|
5
|
+
# First we have to check if the user has `pry` installed
|
6
|
+
# We don't want to add pry as a spaceship dependency, as
|
7
|
+
# it shouldn't really be added to production systems
|
8
|
+
|
9
|
+
require "spaceship"
|
10
|
+
require "credentials_manager"
|
11
|
+
|
12
|
+
username = ARGV[1] if ARGV[0] == '-u'
|
13
|
+
username ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
14
|
+
username ||= ask("Username: ")
|
15
|
+
|
16
|
+
begin
|
17
|
+
puts "Logging into to iTunes Connect (#{username})..."
|
18
|
+
Spaceship::Tunes.login(username)
|
19
|
+
puts "Successfully logged in to iTunes Connect".green
|
20
|
+
puts ""
|
21
|
+
rescue
|
22
|
+
puts "Could not login to iTunes Connect...".red
|
23
|
+
end
|
24
|
+
|
25
|
+
itc_cookie_content = Spaceship::Tunes.client.store_cookie
|
26
|
+
|
27
|
+
# The only value we actually need is the "DES5c148586daa451e55afb017aa62418f91" cookie
|
28
|
+
# We're not sure if the key changes
|
29
|
+
#
|
30
|
+
# Example:
|
31
|
+
# name: DES5c148586daa451e55afb017aa62418f91
|
32
|
+
# value: HSARMTKNSRVTWFlaF/ek8asaa9lymMA0dN8JQ6pY7B3F5kdqTxJvMT19EVEFX8EQudB/uNwBHOHzaa30KYTU/eCP/UF7vGTgxs6PAnlVWKscWssOVHfP2IKWUPaa4Dn+I6ilA7eAFQsiaaVT
|
33
|
+
|
34
|
+
require 'yaml'
|
35
|
+
cookies = YAML.load(itc_cookie_content)
|
36
|
+
|
37
|
+
# We remove all the un-needed cookies
|
38
|
+
cookies.delete_if do |current|
|
39
|
+
['aa', 'X-SESS', 'site', 'acn01', 'myacinfo', 'itctx', 'wosid', 'woinst', 'NSC_17ofu-jud-jud-mc'].include?(current.name)
|
40
|
+
end
|
41
|
+
|
42
|
+
yaml = cookies.to_yaml.gsub("\n", "\\n")
|
43
|
+
|
44
|
+
puts "---"
|
45
|
+
puts ""
|
46
|
+
puts "Pass the following via the FASTLANE_SESSION environment variable:"
|
47
|
+
puts yaml.cyan.underline
|
48
|
+
puts ""
|
49
|
+
puts ""
|
50
|
+
puts "Example:"
|
51
|
+
puts "export FASTLANE_SESSION='#{yaml}'".cyan.underline
|
data/lib/spaceship/client.rb
CHANGED
@@ -331,6 +331,9 @@ module Spaceship
|
|
331
331
|
File.write(itc_service_key_path, @service_key)
|
332
332
|
|
333
333
|
return @service_key
|
334
|
+
rescue => ex
|
335
|
+
puts ex.to_s
|
336
|
+
raise AppleTimeoutError.new, "Could not receive latest API key from iTunes Connect, this might be a server issue."
|
334
337
|
end
|
335
338
|
|
336
339
|
#####################################################
|
@@ -152,22 +152,12 @@ module Spaceship
|
|
152
152
|
# Create a new object based on a hash.
|
153
153
|
# This is used to create a new object based on the server response.
|
154
154
|
def factory(attrs)
|
155
|
-
# Ad Hoc Profiles look exactly like App Store profiles, but usually include devices
|
156
|
-
profile_details = client.provisioning_profile_details(provisioning_profile_id: attrs["provisioningProfileId"])
|
157
|
-
|
158
|
-
# The only difference between App Store and Ad Hoc provisioniong profile is the devices that are attached
|
159
|
-
if attrs['distributionMethod'] == 'store' && (profile_details['devices'] || []).size > 0
|
160
|
-
attrs['distributionMethod'] = 'adhoc'
|
161
|
-
end
|
162
155
|
# available values of `distributionMethod` at this point: ['adhoc', 'store', 'limited']
|
163
|
-
|
164
156
|
klass = case attrs['distributionMethod']
|
165
157
|
when 'limited'
|
166
158
|
Development
|
167
159
|
when 'store'
|
168
160
|
AppStore
|
169
|
-
when 'adhoc'
|
170
|
-
AdHoc
|
171
161
|
when 'inhouse'
|
172
162
|
InHouse
|
173
163
|
else
|
@@ -180,23 +170,6 @@ module Spaceship
|
|
180
170
|
klass.client = @client
|
181
171
|
obj = klass.new(attrs)
|
182
172
|
|
183
|
-
# Set the response of the details request, in case we want to access it later on
|
184
|
-
obj.profile_details = profile_details
|
185
|
-
|
186
|
-
# Since 15th September 2016 certificates and devices are hidden behind another request
|
187
|
-
# see https://github.com/fastlane/fastlane/issues/6137 for more information
|
188
|
-
# That's why we set it here
|
189
|
-
|
190
|
-
# Parse all the devices from the details request
|
191
|
-
obj.devices = (profile_details["devices"] || []).collect do |device|
|
192
|
-
Device.set_client(client).factory(device)
|
193
|
-
end
|
194
|
-
|
195
|
-
# Parse all the certificates from the details request
|
196
|
-
obj.certificates = (profile_details["certificates"] || []).collect do |cert|
|
197
|
-
Certificate.set_client(client).factory(cert)
|
198
|
-
end
|
199
|
-
|
200
173
|
return obj
|
201
174
|
end
|
202
175
|
|
@@ -279,9 +252,20 @@ module Spaceship
|
|
279
252
|
|
280
253
|
return profiles if self == ProvisioningProfile
|
281
254
|
|
255
|
+
# To distinguish between AppStore and AdHoc profiles, we need to send
|
256
|
+
# a details request (see `fetch_details`). This is an expensive operation
|
257
|
+
# which we can't do for every single provisioning profile
|
258
|
+
# Instead we'll treat App Store profiles the same way as Ad Hoc profiles
|
259
|
+
# Spaceship::ProvisioningProfile::AdHoc.all will return the same array as
|
260
|
+
# Spaceship::ProvisioningProfile::AppStore.all, containing only AppStore
|
261
|
+
# profiles. To determine if it's an Ad Hoc profile, you can use the
|
262
|
+
# is_adhoc? method on the profile.
|
263
|
+
klass = self
|
264
|
+
klass = AppStore if self == AdHoc
|
265
|
+
|
282
266
|
# only return the profiles that match the class
|
283
|
-
profiles.select do |profile|
|
284
|
-
profile.class ==
|
267
|
+
return profiles.select do |profile|
|
268
|
+
profile.class == klass
|
285
269
|
end
|
286
270
|
end
|
287
271
|
|
@@ -354,6 +338,9 @@ module Spaceship
|
|
354
338
|
# @return (ProvisioningProfile) A new provisioning profile, as
|
355
339
|
# the repair method will generate a profile with a new ID
|
356
340
|
def update!
|
341
|
+
# sigh handles more specific filtering and validation steps that make this logic OK
|
342
|
+
#
|
343
|
+
# This is the minimum protection needed for people using spaceship directly
|
357
344
|
unless certificate_valid?
|
358
345
|
if mac?
|
359
346
|
if self.kind_of? Development
|
@@ -405,8 +392,9 @@ module Spaceship
|
|
405
392
|
end
|
406
393
|
|
407
394
|
# @return (Bool) Is the current provisioning profile valid?
|
395
|
+
# To also verify the certificate call certificate_valid?
|
408
396
|
def valid?
|
409
|
-
return
|
397
|
+
return status == 'Active'
|
410
398
|
end
|
411
399
|
|
412
400
|
# @return (Bool) Is this profile managed by Xcode?
|
@@ -418,6 +406,42 @@ module Spaceship
|
|
418
406
|
def mac?
|
419
407
|
platform == 'mac'
|
420
408
|
end
|
409
|
+
|
410
|
+
def devices
|
411
|
+
fetch_details
|
412
|
+
|
413
|
+
@devices = (self.profile_details["devices"] || []).collect do |device|
|
414
|
+
Device.set_client(client).factory(device)
|
415
|
+
end if (@devices || []).empty?
|
416
|
+
|
417
|
+
@devices
|
418
|
+
end
|
419
|
+
|
420
|
+
def certificates
|
421
|
+
fetch_details
|
422
|
+
|
423
|
+
@certificates = (profile_details["certificates"] || []).collect do |cert|
|
424
|
+
Certificate.set_client(client).factory(cert)
|
425
|
+
end if (@certificates || []).empty?
|
426
|
+
|
427
|
+
return @certificates
|
428
|
+
end
|
429
|
+
|
430
|
+
# @return (Bool) Is this current provisioning profile adhoc?
|
431
|
+
# AppStore and AdHoc profiles are the same except that AdHoc has devices
|
432
|
+
def is_adhoc?
|
433
|
+
return false unless self.kind_of?(AppStore) || self.kind_of?(AdHoc)
|
434
|
+
|
435
|
+
return devices.count > 0
|
436
|
+
end
|
437
|
+
|
438
|
+
private
|
439
|
+
|
440
|
+
def fetch_details
|
441
|
+
# Since 15th September 2016 certificates and devices are hidden behind another request
|
442
|
+
# see https://github.com/fastlane/fastlane/issues/6137 for more information
|
443
|
+
self.profile_details ||= client.provisioning_profile_details(provisioning_profile_id: self.id)
|
444
|
+
end
|
421
445
|
end
|
422
446
|
end
|
423
447
|
end
|
data/lib/spaceship/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spaceship
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.33.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-09-
|
12
|
+
date: 2016-09-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: credentials_manager
|
@@ -310,12 +310,14 @@ email:
|
|
310
310
|
- spaceship@krausefx.com
|
311
311
|
- stefan@natchev.com
|
312
312
|
executables:
|
313
|
+
- spaceauth
|
313
314
|
- spaceship
|
314
315
|
extensions: []
|
315
316
|
extra_rdoc_files: []
|
316
317
|
files:
|
317
318
|
- LICENSE
|
318
319
|
- README.md
|
320
|
+
- bin/spaceauth
|
319
321
|
- bin/spaceship
|
320
322
|
- lib/assets/languageMapping.json
|
321
323
|
- lib/assets/languageMappingReadable.json
|