spaceship 0.0.6 → 0.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b145c0d864b836e315d2e1a46c19c26592d2c7d
4
- data.tar.gz: e37e5ca3bea8b4ec1051dbf529ac8ae0604d6c52
3
+ metadata.gz: 02178127118d73630e027800cd0c2c759145444c
4
+ data.tar.gz: d74fd79faf660145dceacfe275b59db20f24067d
5
5
  SHA512:
6
- metadata.gz: 37de7537f2dc4640dfae3ac377f75aa7edf5282ce0130c67ce97731c0573eb436b0fb947612b7757df9d158bc70297ea311ce7e08bf5c0f9b8d2ee7d962d3e41
7
- data.tar.gz: 66d166b14627edc4ff2f487afcebf2dca814784d75f3706c6c486d64a18a6c6a9feb93978d9b15d23983a75ad2c7b08d2fd8be5c31631f9c14c548c352a90f97
6
+ metadata.gz: 53c9952a624da716a1777b4ec5cff8d4a80c166bf8f2e710f956a231adfc77b2f254025da34473c3fd48a4ffced5ab821412e20e6417be100c3970b28c51c9e1
7
+ data.tar.gz: 884cc41a088ed45f6e257bd5f9355685cd6c95c1962272d0595ce844047b4dc46e168db0df0b5c05180daf538242ff21e8daeac132155b31d3daf66020c47f94
data/README.md CHANGED
@@ -216,7 +216,7 @@ profile = Spaceship.provisioning_profile.ad_hoc.create!(bundle_id: "com.krausefx
216
216
  File.write("NewProfile.mobileprovision", profile.download)
217
217
  ```
218
218
 
219
- ### Repair a broken provisioning profile
219
+ ### Repair all broken provisioning profiles
220
220
 
221
221
  ```ruby
222
222
  # Select all 'Invalid' or 'Expired' provisioning profiles
@@ -398,7 +398,7 @@ This project is licensed under the terms of the MIT license. See the LICENSE fil
398
398
  # Contributing
399
399
 
400
400
  1. Create an issue to start a discussion about your idea
401
- 2. Fork it (https://github.com/KrauseFx/fastlane/fork)
401
+ 2. Fork it (https://github.com/fastlane/spaceship/fork)
402
402
  3. Create your feature branch (`git checkout -b my-new-feature`)
403
403
  4. Commit your changes (`git commit -am 'Add some feature'`)
404
404
  5. Push to the branch (`git push origin my-new-feature`)
data/lib/spaceship.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'spaceship/version'
2
2
  require 'spaceship/base'
3
3
  require 'spaceship/client'
4
- require 'spaceship/profile_types'
5
4
  require 'spaceship/app'
6
5
  require 'spaceship/certificate'
7
6
  require 'spaceship/device'
@@ -262,9 +262,7 @@ module Spaceship
262
262
 
263
263
  # @return (Bool): Is this certificate a push profile for apps?
264
264
  def is_push?
265
- # does display_type_id match push?
266
- [Client::ProfileTypes::Push.development, Client::ProfileTypes::Push.production].include?(type_display_id)
265
+ self.kind_of?PushCertificate
267
266
  end
268
-
269
267
  end
270
268
  end
@@ -5,13 +5,12 @@ require 'spaceship/ui'
5
5
  require 'spaceship/helper/plist_middleware'
6
6
  require 'spaceship/helper/net_http_generic_request'
7
7
 
8
- if ENV['DEBUG']
9
- require 'pry' # TODO: Remove
8
+ if ENV["DEBUG"]
10
9
  require 'openssl'
10
+ # this has to be on top of this file, since the value can't be changed later
11
11
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
12
12
  end
13
13
 
14
-
15
14
  module Spaceship
16
15
  class Client
17
16
  PROTOCOL_VERSION = "QH65B2"
@@ -23,7 +22,9 @@ module Spaceship
23
22
  # /tmp/spaceship.log by default
24
23
  attr_accessor :logger
25
24
 
25
+ # Invalid user credentials were provided
26
26
  class InvalidUserCredentialsError < StandardError; end
27
+
27
28
  class UnexpectedResponse < StandardError; end
28
29
 
29
30
  # Authenticates with Apple's web services. This method has to be called once
@@ -56,17 +57,30 @@ module Spaceship
56
57
  c.adapter Faraday.default_adapter
57
58
 
58
59
  if ENV['DEBUG']
59
- # for debugging:
60
+ # for debugging only
61
+ # This enables tracking of networking requests using Charles Web Proxy
60
62
  c.response :logger
61
63
  c.proxy "https://127.0.0.1:8888"
62
64
  end
63
65
  end
64
66
  end
65
67
 
68
+ # Fetches the latest API Key from the Apple Dev Portal
66
69
  def api_key
67
- page = @client.get("https://developer.apple.com/devcenter/ios/index.action").body
68
- if page =~ %r{<a href="https://idmsa.apple.com/IDMSWebAuth/login\?.*appIdKey=(\h+)}
69
- return $1
70
+ cache_path = "/tmp/spaceship_api_key.txt"
71
+ cached = File.read(cache_path) rescue nil
72
+ return cached if cached
73
+
74
+ landing_url = "https://developer.apple.com/membercenter/index.action"
75
+ logger.info("GET: " + landing_url)
76
+ headers = @client.get(landing_url).headers
77
+ results = headers['location'].match(/.*appIdKey=(\h+)/)
78
+ if results.length > 1
79
+ api_key = results[1]
80
+ File.write(cache_path, api_key)
81
+ return api_key
82
+ else
83
+ raise "Could not find latest API Key from the Dev Portal"
70
84
  end
71
85
  end
72
86
 
@@ -78,8 +92,11 @@ module Spaceship
78
92
  @logger = Logger.new(STDOUT)
79
93
  else
80
94
  # Log to file by default
81
- @logger = Logger.new("/tmp/spaceship.log")
95
+ path = "/tmp/spaceship.log"
96
+ puts "Logging spaceship web requests to '#{path}'"
97
+ @logger = Logger.new(path)
82
98
  end
99
+
83
100
  @logger.formatter = proc do |severity, datetime, progname, msg|
84
101
  string = "[#{datetime.strftime('%H:%M:%S')}]: #{msg}\n"
85
102
  end
@@ -88,8 +105,11 @@ module Spaceship
88
105
  @logger
89
106
  end
90
107
 
91
- # Automatic paging
108
+ #####################################################
109
+ # @!group Automatic Paging
110
+ #####################################################
92
111
 
112
+ # The page size we want to request, defaults to 500
93
113
  def page_size
94
114
  @page_size ||= 500
95
115
  end
@@ -111,6 +131,10 @@ module Spaceship
111
131
  return results
112
132
  end
113
133
 
134
+ #####################################################
135
+ # @!group Login and Team Selection
136
+ #####################################################
137
+
114
138
  # Authenticates with Apple's web services. This method has to be called once
115
139
  # to generate a valid session. The session will automatically be used from then
116
140
  # on.
@@ -151,15 +175,18 @@ module Spaceship
151
175
  end
152
176
  end
153
177
 
178
+ # @return (Bool) Do we have a valid session?
154
179
  def session?
155
180
  !!@cookie
156
181
  end
157
182
 
183
+ # @return (Array) A list of all available teams
158
184
  def teams
159
185
  r = request(:post, 'account/listTeams.action')
160
186
  parse_response(r, 'teams')
161
187
  end
162
188
 
189
+ # @return (String) The currently selected Team ID
163
190
  def team_id
164
191
  return @current_team_id if @current_team_id
165
192
 
@@ -169,14 +196,21 @@ module Spaceship
169
196
  @current_team_id ||= teams[0]['teamId']
170
197
  end
171
198
 
199
+ # Shows a team selection for the user in the terminal. This should not be
200
+ # called on CI systems
172
201
  def select_team
173
202
  @current_team_id = self.UI.select_team
174
203
  end
175
204
 
176
- def current_team_id=(team_id)
205
+ # Set a new team ID which will be used from now on
206
+ def team_id=(team_id)
177
207
  @current_team_id = team_id
178
208
  end
179
209
 
210
+ #####################################################
211
+ # @!group Apps
212
+ #####################################################
213
+
180
214
  def apps
181
215
  paging do |page_number|
182
216
  r = request(:post, 'account/ios/identifiers/listAppIds.action', {
@@ -227,6 +261,10 @@ module Spaceship
227
261
  parse_response(r)
228
262
  end
229
263
 
264
+ #####################################################
265
+ # @!group Devices
266
+ #####################################################
267
+
230
268
  def devices
231
269
  paging do |page_number|
232
270
  r = request(:post, 'account/ios/device/listDevices.action', {
@@ -252,6 +290,10 @@ module Spaceship
252
290
  parse_response(r, 'device')
253
291
  end
254
292
 
293
+ #####################################################
294
+ # @!group Certificates
295
+ #####################################################
296
+
255
297
  def certificates(types)
256
298
  paging do |page_number|
257
299
  r = request(:post, 'account/ios/certificate/listCertRequests.action', {
@@ -294,6 +336,10 @@ module Spaceship
294
336
  parse_response(r, 'certRequests')
295
337
  end
296
338
 
339
+ #####################################################
340
+ # @!group Provisioning Profiles
341
+ #####################################################
342
+
297
343
  def provisioning_profiles
298
344
  r = request(:post) do |r|
299
345
  r.url "https://developerservices2.apple.com/services/#{PROTOCOL_VERSION}/ios/listProvisioningProfiles.action"
@@ -350,7 +396,7 @@ module Spaceship
350
396
  end
351
397
 
352
398
  private
353
- # Is called from `parse_response` to store
399
+ # Is called from `parse_response` to store the latest csrf_token (if available)
354
400
  def store_csrf_tokens(response)
355
401
  if response and response.headers
356
402
  tokens = response.headers.select { |k, v| %w[csrf csrf_ts].include?(k) }
@@ -359,7 +405,7 @@ module Spaceship
359
405
  end
360
406
  end
361
407
  end
362
- ##
408
+
363
409
  # memoize the last csrf tokens from responses
364
410
  def csrf_tokens
365
411
  @csrf_tokens || {}
@@ -7,6 +7,6 @@ require 'net/http'
7
7
  # This monkey-patch allows us to leave out the content-type if we do not specify one.
8
8
  class Net::HTTPGenericRequest
9
9
  def supply_default_content_type
10
- return if content_type()
10
+ return if content_type
11
11
  end
12
12
  end
@@ -238,9 +238,9 @@ module Spaceship
238
238
  end
239
239
  end
240
240
 
241
- # @return (ProvisioningProfile) Find a provisioning based on the
242
- # bundle_id (app identifier). This will return nil if it can't be
243
- # found.
241
+ # @return (Array) Returns an array of provisioning
242
+ # profiles matching the bundle identifier
243
+ # Returns [] if no profiles were found
244
244
  def find_by_bundle_id(bundle_id)
245
245
  all.find_all do |profile|
246
246
  profile.app.bundle_id == bundle_id
@@ -310,8 +310,10 @@ module Spaceship
310
310
  unless certificate_valid?
311
311
  if self.kind_of?Development
312
312
  self.certificates = [Spaceship::Certificate::Development.all.first]
313
+ elsif self.kind_of?InHouse
314
+ self.certificates = [Spaceship::Certificate::InHouse.all.first]
313
315
  else
314
- self.certificates = [Spaceship::Certificate::Production.all.first]
316
+ self.certificates = [Spaceship::Certificate::Production.all.first]
315
317
  end
316
318
  end
317
319
 
@@ -66,7 +66,7 @@ module Spaceship
66
66
  # Multiple teams, user has to select
67
67
  puts "Multiple teams found, please enter the number of the team you want to use: "
68
68
  teams.each_with_index do |team, i|
69
- puts "#{i + 1}) #{team['teamId']} #{team['name']} (#{team['type']})"
69
+ puts "#{i + 1}) #{team['teamId']} \"#{team['name']}\" (#{team['type']})"
70
70
  end
71
71
 
72
72
  selected = ($stdin.gets || '').strip.to_i - 1
@@ -1,3 +1,3 @@
1
1
  module Spaceship
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
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.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Natchev
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-06-04 00:00:00.000000000 Z
12
+ date: 2015-06-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: credentials_manager
@@ -213,7 +213,6 @@ files:
213
213
  - lib/spaceship/helper/net_http_generic_request.rb
214
214
  - lib/spaceship/helper/plist_middleware.rb
215
215
  - lib/spaceship/launcher.rb
216
- - lib/spaceship/profile_types.rb
217
216
  - lib/spaceship/provisioning_profile.rb
218
217
  - lib/spaceship/ui.rb
219
218
  - lib/spaceship/ui/select_team.rb
@@ -1,39 +0,0 @@
1
- module Spaceship
2
- # This class contains the codes used for the different types of profiles
3
- class Client
4
- class ProfileTypes
5
- class SigningCertificate
6
- def self.development
7
- "5QPB9NHCEI"
8
- end
9
- def self.distribution
10
- "R58UK2EWSO"
11
- end
12
- end
13
-
14
- class Push
15
- def self.development
16
- "BKLRAVXMGM"
17
- end
18
- def self.production
19
- "3BQKVH9I2X"
20
- end
21
- end
22
-
23
- def self.all_profile_types
24
- [
25
- "5QPB9NHCEI", # Development Code Signing Identity
26
- "R58UK2EWSO", # Distribution Code Signing Identity
27
- "9RQEK7MSXA", # iOS Distribution certificate signing request
28
- "LA30L5BJEU", # MDM CSR certificate signing request
29
- "BKLRAVXMGM", # Development Push Certificates
30
- "3BQKVH9I2X", # Production Push Certificates
31
- "Y3B2F3TYSI", # Pass Type ID pass certificate request
32
- "3T2ZP62QW8", # Website Push Id
33
- "E5D663CMZW", # Website Push Id
34
- "4APLUP237T" # Apple Pay
35
- ]
36
- end
37
- end
38
- end
39
- end