spaceship 0.17.0 → 0.18.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10196335fa16147c3c68c05ce2a1dedd5abb4855
4
- data.tar.gz: 29d7946d869af47eb0742691a9a6525862736728
3
+ metadata.gz: 297086c54409e9b9aab8d1b628196287a9342c21
4
+ data.tar.gz: a565663758dcadccea84ee2c510a35e689ec37d5
5
5
  SHA512:
6
- metadata.gz: 0583ef2ef07a5d4a0aa6428350e7d4f4478f8b49e723cc9a7063edbf9c58ceac60b4ecf4272988db2b7840444a93510d6df3fbfb47df0588aad33c6eb315c4bb
7
- data.tar.gz: f5a1b4f14bcd488cfe7ef18db714f40a1f23cfda3e09aa7110ec3bcd09fedb26d105f9733048a7abe39a04e46841eb4c409e95a0c027313882e4f2209ddea6b0
6
+ metadata.gz: c4380c49ef46b249e250249d7009d795c83e1258950e133a5f73d4427730ab8831b655029142c3506d3322a3b98fe1cec9a6e0ed89b37b6789736b1cdbbb4c52
7
+ data.tar.gz: f47667cc9250d8b826373d655ad9808645ebc5bea7fd668c1323c2722b4b39f99f0f793011e98a57d9136399294f3ba2a409a9eeef3124fee8ae9eb98d82bbe2
@@ -6,6 +6,8 @@ require 'spaceship/ui'
6
6
  require 'spaceship/helper/plist_middleware'
7
7
  require 'spaceship/helper/net_http_generic_request'
8
8
 
9
+ Faraday::Utils.default_params_encoder = Faraday::FlatParamsEncoder
10
+
9
11
  if ENV["DEBUG"]
10
12
  require 'openssl'
11
13
  # this has to be on top of this file, since the value can't be changed later
@@ -256,10 +258,10 @@ module Spaceship
256
258
  end
257
259
 
258
260
  def parse_response(response, expected_key = nil)
259
- if expected_key
260
- content = response.body[expected_key]
261
- else
262
- content = response.body
261
+ if response.body
262
+ # If we have an `expected_key`, select that from response.body Hash
263
+ # Else, don't.
264
+ content = expected_key ? response.body[expected_key] : response.body
263
265
  end
264
266
 
265
267
  if content.nil?
@@ -74,9 +74,10 @@ module Spaceship
74
74
  self.new(attrs)
75
75
  end
76
76
 
77
+ # @param mac [Bool] Fetches Mac apps if true
77
78
  # @return (Array) Returns all apps available for this account
78
- def all
79
- client.apps.map { |app| self.factory(app) }
79
+ def all(mac: false)
80
+ client.apps(mac: mac).map { |app| self.factory(app) }
80
81
  end
81
82
 
82
83
  # Creates a new App ID on the Apple Dev Portal
@@ -84,22 +85,24 @@ module Spaceship
84
85
  # if bundle_id ends with '*' then it is a wildcard id otherwise, it is an explicit id
85
86
  # @param bundle_id [String] the bundle id (app_identifier) of the app associated with this provisioning profile
86
87
  # @param name [String] the name of the App
88
+ # @param mac [Bool] is this a Mac app?
87
89
  # @return (App) The app you just created
88
- def create!(bundle_id: nil, name: nil)
90
+ def create!(bundle_id: nil, name: nil, mac: false)
89
91
  if bundle_id.end_with?('*')
90
92
  type = :wildcard
91
93
  else
92
94
  type = :explicit
93
95
  end
94
96
 
95
- new_app = client.create_app!(type, name, bundle_id)
97
+ new_app = client.create_app!(type, name, bundle_id, mac: mac)
96
98
  self.new(new_app)
97
99
  end
98
100
 
99
101
  # Find a specific App ID based on the bundle_id
102
+ # @param mac [Bool] Searches Mac apps if true
100
103
  # @return (App) The app you're looking for. This is nil if the app can't be found.
101
- def find(bundle_id)
102
- all.find do |app|
104
+ def find(bundle_id, mac: false)
105
+ all(mac: mac).find do |app|
103
106
  app.bundle_id == bundle_id
104
107
  end
105
108
  end
@@ -109,7 +112,7 @@ module Spaceship
109
112
  # or there are active profiles
110
113
  # @return (App) The app you just deletd
111
114
  def delete!
112
- client.delete_app!(app_id)
115
+ client.delete_app!(app_id, mac: mac?)
113
116
  self
114
117
  end
115
118
 
@@ -123,6 +126,7 @@ module Spaceship
123
126
  # Associate specific groups with this app
124
127
  # @return (App) The updated detailed app. This is nil if the app couldn't be found
125
128
  def associate_groups(groups)
129
+ raise "`associate_groups` not available for Mac apps" if mac?
126
130
  app = client.associate_groups_with_app(self, groups)
127
131
  self.class.factory(app)
128
132
  end
@@ -130,9 +134,15 @@ module Spaceship
130
134
  # Update a service for the app with given AppService object
131
135
  # @return (App) The updated detailed app. This is nil if the app couldn't be found
132
136
  def update_service(service)
137
+ raise "`update_service` not implemented for Mac apps" if mac?
133
138
  app = client.update_service_for_app(self, service)
134
139
  self.class.factory(app)
135
140
  end
141
+
142
+ # @return (Bool) Is this a Mac app?
143
+ def mac?
144
+ platform == 'mac'
145
+ end
136
146
  end
137
147
  end
138
148
  end
@@ -91,6 +91,21 @@ module Spaceship
91
91
  # An In House code signing certificate used for enterprise distributions
92
92
  class InHouse < Certificate; end
93
93
 
94
+ # A Mac development code signing certificate used for development environment
95
+ class MacDevelopment < Certificate; end
96
+
97
+ # A Mac production code signing certificate for building .app bundles
98
+ class MacAppDistribution < Certificate; end
99
+
100
+ # A Mac production code signing certificate for building .pkg installers
101
+ class MacInstallerDistribution < Certificate; end
102
+
103
+ # A Mac Developer ID signing certificate for building .app bundles
104
+ class DeveloperIDApplication < Certificate; end
105
+
106
+ # A Mac Developer ID signing certificate for building .pkg installers
107
+ class DeveloperIDInstaller < Certificate; end
108
+
94
109
  #####################################################
95
110
  # Certs that are specific for one app
96
111
  #####################################################
@@ -117,7 +132,13 @@ module Spaceship
117
132
  # ApplePay certificate
118
133
  class ApplePay < Certificate; end
119
134
 
120
- CERTIFICATE_TYPE_IDS = {
135
+ # A Mac push notification certificate for development environment
136
+ class MacDevelopmentPush < PushCertificate; end
137
+
138
+ # A Mac push notification certificate for production environment
139
+ class MacProductionPush < PushCertificate; end
140
+
141
+ IOS_CERTIFICATE_TYPE_IDS = {
121
142
  "5QPB9NHCEI" => Development,
122
143
  "R58UK2EWSO" => Production,
123
144
  "9RQEK7MSXA" => InHouse,
@@ -130,6 +151,19 @@ module Spaceship
130
151
  "4APLUP237T" => ApplePay
131
152
  }
132
153
 
154
+ MAC_CERTIFICATE_TYPE_IDS = {
155
+ "749Y1QAGU7" => MacDevelopment,
156
+ "HXZEUKP0FP" => MacAppDistribution,
157
+ "2PQI8IDXNH" => MacInstallerDistribution,
158
+ "OYVN2GW35E" => DeveloperIDInstaller,
159
+ "W0EURJRMC5" => DeveloperIDApplication,
160
+ "CDZ7EMXIZ1" => MacProductionPush,
161
+ "HQ4KP3I34R" => MacDevelopmentPush,
162
+ "DIVN2GW3XT" => DeveloperIDApplication
163
+ }
164
+
165
+ CERTIFICATE_TYPE_IDS = IOS_CERTIFICATE_TYPE_IDS.merge(MAC_CERTIFICATE_TYPE_IDS)
166
+
133
167
  # Class methods
134
168
  class << self
135
169
  # Create a new code signing request that can be used to
@@ -193,24 +227,28 @@ module Spaceship
193
227
  klass.new(attrs)
194
228
  end
195
229
 
230
+ # @param mac [Bool] Fetches Mac certificates if true. (Ignored if callsed from a subclass)
196
231
  # @return (Array) Returns all certificates of this account.
197
232
  # If this is called from a subclass of Certificate, this will
198
233
  # only include certificates matching the current type.
199
- def all
234
+ def all(mac: false)
200
235
  if self == Certificate # are we the base-class?
201
- types = CERTIFICATE_TYPE_IDS.keys
236
+ type_ids = mac ? MAC_CERTIFICATE_TYPE_IDS : IOS_CERTIFICATE_TYPE_IDS
237
+ types = type_ids.keys
202
238
  else
203
239
  types = [CERTIFICATE_TYPE_IDS.key(self)]
240
+ mac = MAC_CERTIFICATE_TYPE_IDS.values.include? self
204
241
  end
205
242
 
206
- client.certificates(types).map do |cert|
243
+ client.certificates(types, mac: mac).map do |cert|
207
244
  factory(cert)
208
245
  end
209
246
  end
210
247
 
248
+ # @param mac [Bool] Searches Mac certificates if true
211
249
  # @return (Certificate) Find a certificate based on the ID of the certificate.
212
- def find(certificate_id)
213
- all.find do |c|
250
+ def find(certificate_id, mac: false)
251
+ all(mac: mac).find do |c|
214
252
  c.id == certificate_id
215
253
  end
216
254
  end
@@ -253,7 +291,7 @@ module Spaceship
253
291
 
254
292
  # @return (String) Download the raw data of the certificate without parsing
255
293
  def download_raw
256
- client.download_certificate(id, type_display_id)
294
+ client.download_certificate(id, type_display_id, mac: mac?)
257
295
  end
258
296
 
259
297
  # @return (OpenSSL::X509::Certificate) Downloads and parses the certificate
@@ -263,7 +301,7 @@ module Spaceship
263
301
 
264
302
  # Revoke the certificate. You shouldn't use this method probably.
265
303
  def revoke!
266
- client.revoke_certificate!(id, type_display_id)
304
+ client.revoke_certificate!(id, type_display_id, mac: mac?)
267
305
  end
268
306
 
269
307
  # @return (Bool): Is this certificate a push profile for apps?
@@ -272,6 +310,11 @@ module Spaceship
272
310
  self.kind_of? PushCertificate
273
311
  end
274
312
  # rubocop:enable Style/PredicateName
313
+
314
+ # @return (Bool) Is this a Mac profile?
315
+ def mac?
316
+ MAC_CERTIFICATE_TYPE_IDS.include? type_display_id
317
+ end
275
318
  end
276
319
  end
277
320
  end
@@ -58,9 +58,10 @@ module Spaceship
58
58
  self.new(attrs)
59
59
  end
60
60
 
61
+ # @param mac [Bool] Fetches Mac devices if true
61
62
  # @return (Array) Returns all devices registered for this account
62
- def all
63
- client.devices.map { |device| self.factory(device) }
63
+ def all(mac: false)
64
+ client.devices(mac: mac).map { |device| self.factory(device) }
64
65
  end
65
66
 
66
67
  # @return (Array) Returns all Apple TVs registered for this account
@@ -88,6 +89,11 @@ module Spaceship
88
89
  client.devices_by_class('ipod').map { |device| self.factory(device) }
89
90
  end
90
91
 
92
+ # @return (Array) Returns all Macs registered for this account
93
+ def all_macs
94
+ all(mac: true)
95
+ end
96
+
91
97
  # @return (Array) Returns all devices that can be used for iOS profiles (all devices except TVs)
92
98
  def all_ios_profile_devices
93
99
  all.select { |device| device.device_type != "tvOS" }
@@ -102,24 +108,27 @@ module Spaceship
102
108
  end
103
109
  end
104
110
 
111
+ # @param mac [Bool] Searches for Macs if true
105
112
  # @return (Device) Find a device based on the ID of the device. *Attention*:
106
113
  # This is *not* the UDID. nil if no device was found.
107
- def find(device_id)
108
- all.find do |device|
114
+ def find(device_id, mac: false)
115
+ all(mac: mac).find do |device|
109
116
  device.id == device_id
110
117
  end
111
118
  end
112
119
 
120
+ # @param mac [Bool] Searches for Macs if true
113
121
  # @return (Device) Find a device based on the UDID of the device. nil if no device was found.
114
- def find_by_udid(device_udid)
115
- all.find do |device|
122
+ def find_by_udid(device_udid, mac: false)
123
+ all(mac: mac).find do |device|
116
124
  device.udid == device_udid
117
125
  end
118
126
  end
119
127
 
128
+ # @param mac [Bool] Searches for Macs if true
120
129
  # @return (Device) Find a device based on its name. nil if no device was found.
121
- def find_by_name(device_name)
122
- all.find do |device|
130
+ def find_by_name(device_name, mac: false)
131
+ all(mac: mac).find do |device|
123
132
  device.name == device_name
124
133
  end
125
134
  end
@@ -127,23 +136,24 @@ module Spaceship
127
136
  # Register a new device to this account
128
137
  # @param name (String) (required): The name of the new device
129
138
  # @param udid (String) (required): The UDID of the new device
139
+ # @param mac (Bool) (optional): Pass Mac if device is a Mac
130
140
  # @example
131
141
  # Spaceship.device.create!(name: "Felix Krause's iPhone 6", udid: "4c24a7ee5caaa4847f49aaab2d87483053f53b65")
132
142
  # @return (Device): The newly created device
133
- def create!(name: nil, udid: nil)
143
+ def create!(name: nil, udid: nil, mac: false)
134
144
  # Check whether the user has passed in a UDID and a name
135
145
  unless udid && name
136
146
  raise "You cannot create a device without a device_id (UDID) and name"
137
147
  end
138
148
 
139
149
  # Find the device by UDID, raise an exception if it already exists
140
- if self.find_by_udid(udid)
150
+ if self.find_by_udid(udid, mac: mac)
141
151
  raise "The device UDID '#{udid}' already exists on this team."
142
152
  end
143
153
 
144
154
  # It is valid to have the same name for multiple devices
145
155
 
146
- device = client.create_device!(name, udid)
156
+ device = client.create_device!(name, udid, mac: mac)
147
157
 
148
158
  # Update self with the new device
149
159
  self.new(device)
@@ -96,13 +96,22 @@ module Spaceship
96
96
  @in_house = (team_information['type'] == 'In-House')
97
97
  end
98
98
 
99
+ def platform_slug(mac)
100
+ if mac
101
+ 'mac'
102
+ else
103
+ 'ios'
104
+ end
105
+ end
106
+ private :platform_slug
107
+
99
108
  #####################################################
100
109
  # @!group Apps
101
110
  #####################################################
102
111
 
103
- def apps
112
+ def apps(mac: false)
104
113
  paging do |page_number|
105
- r = request(:post, 'account/ios/identifiers/listAppIds.action', {
114
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/listAppIds.action", {
106
115
  teamId: team_id,
107
116
  pageNumber: page_number,
108
117
  pageSize: page_size,
@@ -113,7 +122,7 @@ module Spaceship
113
122
  end
114
123
 
115
124
  def details_for_app(app)
116
- r = request(:post, 'account/ios/identifiers/getAppIdDetail.action', {
125
+ r = request(:post, "account/#{platform_slug(app.mac?)}/identifiers/getAppIdDetail.action", {
117
126
  teamId: team_id,
118
127
  appIdId: app.app_id
119
128
  })
@@ -142,7 +151,7 @@ module Spaceship
142
151
  details_for_app(app)
143
152
  end
144
153
 
145
- def create_app!(type, name, bundle_id)
154
+ def create_app!(type, name, bundle_id, mac: false)
146
155
  ident_params = case type.to_sym
147
156
  when :explicit
148
157
  {
@@ -168,12 +177,18 @@ module Spaceship
168
177
 
169
178
  params.merge!(ident_params)
170
179
 
171
- r = request(:post, 'account/ios/identifiers/addAppId.action', params)
180
+ if csrf_tokens.count == 0
181
+ # If we directly create a new app without querying anything before
182
+ # we don't have a valid csrf token, that's why we have to do at least one request
183
+ apps
184
+ end
185
+
186
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/addAppId.action", params)
172
187
  parse_response(r, 'appId')
173
188
  end
174
189
 
175
- def delete_app!(app_id)
176
- r = request(:post, 'account/ios/identifiers/deleteAppId.action', {
190
+ def delete_app!(app_id, mac: false)
191
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/deleteAppId.action", {
177
192
  teamId: team_id,
178
193
  appIdId: app_id
179
194
  })
@@ -217,9 +232,9 @@ module Spaceship
217
232
  # @!group Devices
218
233
  #####################################################
219
234
 
220
- def devices
235
+ def devices(mac: false)
221
236
  paging do |page_number|
222
- r = request(:post, 'account/ios/device/listDevices.action', {
237
+ r = request(:post, "account/#{platform_slug(mac)}/device/listDevices.action", {
223
238
  teamId: team_id,
224
239
  pageNumber: page_number,
225
240
  pageSize: page_size,
@@ -242,9 +257,9 @@ module Spaceship
242
257
  end
243
258
  end
244
259
 
245
- def create_device!(device_name, device_id)
260
+ def create_device!(device_name, device_id, mac: false)
246
261
  req = request(:post) do |r|
247
- r.url "https://developerservices2.apple.com/services/#{PROTOCOL_VERSION}/ios/addDevice.action"
262
+ r.url "https://developerservices2.apple.com/services/#{PROTOCOL_VERSION}/#{platform_slug(mac)}/addDevice.action"
248
263
  r.params = {
249
264
  teamId: team_id,
250
265
  deviceNumber: device_id,
@@ -259,9 +274,9 @@ module Spaceship
259
274
  # @!group Certificates
260
275
  #####################################################
261
276
 
262
- def certificates(types)
277
+ def certificates(types, mac: false)
263
278
  paging do |page_number|
264
- r = request(:post, 'account/ios/certificate/listCertRequests.action', {
279
+ r = request(:post, "account/#{platform_slug(mac)}/certificate/listCertRequests.action", {
265
280
  teamId: team_id,
266
281
  types: types.join(','),
267
282
  pageNumber: page_number,
@@ -288,10 +303,10 @@ module Spaceship
288
303
  parse_response(r, 'certRequest')
289
304
  end
290
305
 
291
- def download_certificate(certificate_id, type)
306
+ def download_certificate(certificate_id, type, mac: false)
292
307
  { type: type, certificate_id: certificate_id }.each { |k, v| raise "#{k} must not be nil" if v.nil? }
293
308
 
294
- r = request(:post, 'https://developer.apple.com/account/ios/certificate/certificateContentDownload.action', {
309
+ r = request(:post, "https://developer.apple.com/account/#{platform_slug(mac)}/certificate/certificateContentDownload.action", {
295
310
  teamId: team_id,
296
311
  displayId: certificate_id,
297
312
  type: type
@@ -304,8 +319,8 @@ module Spaceship
304
319
  end
305
320
  end
306
321
 
307
- def revoke_certificate!(certificate_id, type)
308
- r = request(:post, 'account/ios/certificate/revokeCertificate.action', {
322
+ def revoke_certificate!(certificate_id, type, mac: false)
323
+ r = request(:post, "account/#{platform_slug(mac)}/certificate/revokeCertificate.action", {
309
324
  teamId: team_id,
310
325
  certificateId: certificate_id,
311
326
  type: type
@@ -317,9 +332,9 @@ module Spaceship
317
332
  # @!group Provisioning Profiles
318
333
  #####################################################
319
334
 
320
- def provisioning_profiles
335
+ def provisioning_profiles(mac: false)
321
336
  req = request(:post) do |r|
322
- r.url "https://developerservices2.apple.com/services/#{PROTOCOL_VERSION}/ios/listProvisioningProfiles.action"
337
+ r.url "https://developerservices2.apple.com/services/#{PROTOCOL_VERSION}/#{platform_slug(mac)}/listProvisioningProfiles.action"
323
338
  r.params = {
324
339
  teamId: team_id,
325
340
  includeInactiveProfiles: true,
@@ -330,8 +345,14 @@ module Spaceship
330
345
  parse_response(req, 'provisioningProfiles')
331
346
  end
332
347
 
333
- def create_provisioning_profile!(name, distribution_method, app_id, certificate_ids, device_ids)
334
- r = request(:post, 'account/ios/profile/createProvisioningProfile.action', {
348
+ def create_provisioning_profile!(name, distribution_method, app_id, certificate_ids, device_ids, mac: false)
349
+ if csrf_tokens.count == 0
350
+ # If we directly create a new profile without querying anything before
351
+ # we don't have a valid csrf token, that's why we have to do at least one request
352
+ provisioning_profiles
353
+ end
354
+
355
+ r = request(:post, "account/#{platform_slug(mac)}/profile/createProvisioningProfile.action", {
335
356
  teamId: team_id,
336
357
  provisioningProfileName: name,
337
358
  appIdId: app_id,
@@ -342,8 +363,8 @@ module Spaceship
342
363
  parse_response(r, 'provisioningProfile')
343
364
  end
344
365
 
345
- def download_provisioning_profile(profile_id)
346
- r = request(:get, 'https://developer.apple.com/account/ios/profile/profileContentDownload.action', {
366
+ def download_provisioning_profile(profile_id, mac: false)
367
+ r = request(:get, "https://developer.apple.com/account/#{platform_slug(mac)}/profile/profileContentDownload.action", {
347
368
  teamId: team_id,
348
369
  displayId: profile_id
349
370
  })
@@ -355,16 +376,16 @@ module Spaceship
355
376
  end
356
377
  end
357
378
 
358
- def delete_provisioning_profile!(profile_id)
359
- r = request(:post, 'account/ios/profile/deleteProvisioningProfile.action', {
379
+ def delete_provisioning_profile!(profile_id, mac: false)
380
+ r = request(:post, "account/#{platform_slug(mac)}/profile/deleteProvisioningProfile.action", {
360
381
  teamId: team_id,
361
382
  provisioningProfileId: profile_id
362
383
  })
363
384
  parse_response(r)
364
385
  end
365
386
 
366
- def repair_provisioning_profile!(profile_id, name, distribution_method, app_id, certificate_ids, device_ids)
367
- r = request(:post, 'account/ios/profile/regenProvisioningProfile.action', {
387
+ def repair_provisioning_profile!(profile_id, name, distribution_method, app_id, certificate_ids, device_ids, mac: false)
388
+ r = request(:post, "account/#{platform_slug(mac)}/profile/regenProvisioningProfile.action", {
368
389
  teamId: team_id,
369
390
  provisioningProfileId: profile_id,
370
391
  provisioningProfileName: name,
@@ -192,12 +192,13 @@ module Spaceship
192
192
  # @param devices (Array) (optional): An array of Device objects that should be used in this profile.
193
193
  # It is recommend to not pass devices as spaceship will automatically add all devices for AdHoc
194
194
  # and Development profiles and add none for AppStore and Enterprise Profiles
195
+ # @param mac (Bool) (optional): Pass true if you're making a Mac provisioning profile
195
196
  # @return (ProvisioningProfile): The profile that was just created
196
- def create!(name: nil, bundle_id: nil, certificate: nil, devices: [])
197
+ def create!(name: nil, bundle_id: nil, certificate: nil, devices: [], mac: false)
197
198
  raise "Missing required parameter 'bundle_id'" if bundle_id.to_s.empty?
198
199
  raise "Missing required parameter 'certificate'. e.g. use `Spaceship::Certificate::Production.all.first`" if certificate.to_s.empty?
199
200
 
200
- app = Spaceship::App.find(bundle_id)
201
+ app = Spaceship::App.find(bundle_id, mac: mac)
201
202
  raise "Could not find app with bundle id '#{bundle_id}'" unless app
202
203
 
203
204
  # Fill in sensible default values
@@ -214,7 +215,11 @@ module Spaceship
214
215
  if devices.nil? or devices.count == 0
215
216
  if self == Development or self == AdHoc
216
217
  # For Development and AdHoc we usually want all compatible devices by default
217
- devices = Spaceship::Device.all_for_profile_type(self.type)
218
+ if mac
219
+ devices = Spaceship::Device.all_macs
220
+ else
221
+ devices = Spaceship::Device.all_for_profile_type(self.type)
222
+ end
218
223
  end
219
224
  end
220
225
 
@@ -223,7 +228,8 @@ module Spaceship
223
228
  self.type,
224
229
  app.app_id,
225
230
  certificate_parameter,
226
- devices.map(&:id))
231
+ devices.map(&:id),
232
+ mac: mac)
227
233
  end
228
234
 
229
235
  self.new(profile)
@@ -232,8 +238,8 @@ module Spaceship
232
238
  # @return (Array) Returns all profiles registered for this account
233
239
  # If you're calling this from a subclass (like AdHoc), this will
234
240
  # only return the profiles that are of this type
235
- def all
236
- profiles = client.provisioning_profiles.map do |profile|
241
+ def all(mac: false)
242
+ profiles = client.provisioning_profiles(mac: mac).map do |profile|
237
243
  self.factory(profile)
238
244
  end
239
245
 
@@ -252,8 +258,8 @@ module Spaceship
252
258
  # profiles matching the bundle identifier
253
259
  # Returns [] if no profiles were found
254
260
  # This may also contain invalid or expired profiles
255
- def find_by_bundle_id(bundle_id)
256
- all.find_all do |profile|
261
+ def find_by_bundle_id(bundle_id, mac: false)
262
+ all(mac: mac).find_all do |profile|
257
263
  profile.app.bundle_id == bundle_id
258
264
  end
259
265
  end
@@ -295,12 +301,12 @@ module Spaceship
295
301
  # @example
296
302
  # File.write("path.mobileprovision", profile.download)
297
303
  def download
298
- client.download_provisioning_profile(self.id)
304
+ client.download_provisioning_profile(self.id, mac: mac?)
299
305
  end
300
306
 
301
307
  # Delete the provisioning profile
302
308
  def delete!
303
- client.delete_provisioning_profile!(self.id)
309
+ client.delete_provisioning_profile!(self.id, mac: mac?)
304
310
  end
305
311
 
306
312
  # Repair an existing provisioning profile
@@ -318,12 +324,20 @@ module Spaceship
318
324
  # the repair method will generate a profile with a new ID
319
325
  def update!
320
326
  unless certificate_valid?
321
- if self.kind_of? Development
322
- self.certificates = [Spaceship::Certificate::Development.all.first]
323
- elsif self.kind_of? InHouse
324
- self.certificates = [Spaceship::Certificate::InHouse.all.first]
327
+ if mac?
328
+ if self.kind_of? Development
329
+ self.certificates = [Spaceship::Certificate::MacDevelopment.all.first]
330
+ else
331
+ self.certificates = [Spaceship::Certificate::MacAppDistribution.all.first]
332
+ end
325
333
  else
326
- self.certificates = [Spaceship::Certificate::Production.all.first]
334
+ if self.kind_of? Development
335
+ self.certificates = [Spaceship::Certificate::Development.all.first]
336
+ elsif self.kind_of? InHouse
337
+ self.certificates = [Spaceship::Certificate::InHouse.all.first]
338
+ else
339
+ self.certificates = [Spaceship::Certificate::Production.all.first]
340
+ end
327
341
  end
328
342
  end
329
343
 
@@ -334,12 +348,13 @@ module Spaceship
334
348
  distribution_method,
335
349
  app.app_id,
336
350
  certificates.map(&:id),
337
- devices.map(&:id)
351
+ devices.map(&:id),
352
+ mac: mac?
338
353
  )
339
354
  end
340
355
 
341
356
  # We need to fetch the provisioning profile again, as the ID changes
342
- profile = Spaceship::ProvisioningProfile.all.find do |p|
357
+ profile = Spaceship::ProvisioningProfile.all(mac: mac?).find do |p|
343
358
  p.name == self.name # we can use the name as it's valid
344
359
  end
345
360
 
@@ -351,7 +366,7 @@ module Spaceship
351
366
  def certificate_valid?
352
367
  return false if (certificates || []).count == 0
353
368
  certificates.each do |c|
354
- if Spaceship::Certificate.all.collect(&:id).include?(c.id)
369
+ if Spaceship::Certificate.all(mac: mac?).collect(&:id).include?(c.id)
355
370
  return true
356
371
  end
357
372
  end
@@ -367,6 +382,11 @@ module Spaceship
367
382
  def managed_by_xcode?
368
383
  managing_app == 'Xcode'
369
384
  end
385
+
386
+ # @return (Bool) Is this a Mac provisioning profile?
387
+ def mac?
388
+ platform == 'mac'
389
+ end
370
390
  end
371
391
  end
372
392
  end
@@ -1,3 +1,3 @@
1
1
  module Spaceship
2
- VERSION = "0.17.0"
2
+ VERSION = "0.18.0"
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.17.0
4
+ version: 0.18.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: 2015-12-11 00:00:00.000000000 Z
12
+ date: 2015-12-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: credentials_manager