spaceship 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
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