fastlane 2.55.0.beta.20170830010003 → 2.55.0.beta.20170831010002

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: 7418a46d43fe7728100cd8867127a0d3d73cc3c1
4
- data.tar.gz: 6a5643f759caed01beb40bdf75ef35790f3fd036
3
+ metadata.gz: fbd1f07885621ab5d9da93acfaf2b7026ea1c39a
4
+ data.tar.gz: 5d954d4b3ff216291b0aa56bdfcb7c8c6248351a
5
5
  SHA512:
6
- metadata.gz: 407db1e222089d41b5a745c323166552efed6880ce1651443ca94a1845aaf0d6e2951cad7304997bf15c04a07ad280ec0b5c8142b384f046f2945cd9101b24cc
7
- data.tar.gz: 1bf125c2c2337c149938cacff05c723d2e2e86a646c0e8ce614bb05ce8120e8c20c757dbcee20f38c59c495d588c624e22655e7d7710d53ea8a17eb89eccb143
6
+ metadata.gz: ce9a253250d1f57940480cd5c8f6cb8f481ef4bf6d090b32f87913ef88cb1466e608ad57e155444bd59c8bd1b777a39639f63896856cb3594a10db5394c4d834
7
+ data.tar.gz: 93cc5eaa182601e867dd9c5ece6d044d84b79af321d317acdc711ba4257e56a131bf42a2bcd1d365edd1f90262b5ab4befeeb3ceecb98566f672b1c2bbfe795d
@@ -30,7 +30,7 @@ module Fastlane
30
30
  if testflight_version
31
31
  version_number = testflight_version
32
32
  else
33
- version_number = UI.input("You have to specify a new version number")
33
+ version_number = UI.input("You have to specify a new version number, as there are multiple to choose from")
34
34
  end
35
35
 
36
36
  end
@@ -46,19 +46,22 @@ module Fastlane
46
46
  end
47
47
  else
48
48
  ########## running on V2 ##########
49
+ # Escape channel's name to guarantee it is a valid URL resource.
50
+ # First of all we verify that the value is not already escaped,
51
+ # escaping an escaped value will produce a wrong channel name.
52
+ escaped_channel = URI.unescape(channel) == channel ? URI.escape(channel) : channel
49
53
  if user?(channel)
50
54
  params = { 'message' => message, 'message_format' => message_format }
51
55
  json_headers = { 'Content-Type' => 'application/json',
52
56
  'Accept' => 'application/json', 'Authorization' => "Bearer #{api_token}" }
53
57
 
54
- escaped_channel = URI.unescape(channel) == channel ? URI.escape(channel) : channel
55
58
  uri = URI.parse("https://#{api_host}/v2/user/#{escaped_channel}/message")
56
59
  http = Net::HTTP.new(uri.host, uri.port)
57
60
  http.use_ssl = true
58
61
 
59
62
  response = http.post(uri.path, params.to_json, json_headers)
60
63
  else
61
- uri = URI.parse("https://#{api_host}/v2/room/#{channel}/notification")
64
+ uri = URI.parse("https://#{api_host}/v2/room/#{escaped_channel}/notification")
62
65
  response = Net::HTTP.post_form(uri, { 'from' => from,
63
66
  'auth_token' => api_token,
64
67
  'color' => color,
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.55.0.beta.20170830010003'.freeze
2
+ VERSION = '2.55.0.beta.20170831010002'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  end
@@ -56,6 +56,17 @@ module Gym
56
56
  print_full_log_path
57
57
  print_environment_information
58
58
  print_build_error_instructions
59
+
60
+ # This error is rather common and should be below the other (a little noisy) output
61
+ case output
62
+ when /Code signing is required for product/
63
+ print "Seems like Xcode is not happy with the code signing setup"
64
+ print "Please make sure to check out the raw `xcodebuild` output"
65
+ UI.important(Gym::BuildCommandGenerator.xcodebuild_log_path)
66
+ print "The very bottom of the file will tell you the raw Xcode error message"
67
+ print "indicating on why the code signing step failed"
68
+ end
69
+
59
70
  UI.build_failure!("Error building the application - see the log above", error_info: output)
60
71
  end
61
72
 
@@ -55,7 +55,8 @@ module Match
55
55
  cert_id: certificate_id,
56
56
  provisioning_name: profile_name,
57
57
  ignore_profiles_with_different_name: true,
58
- team_id: params[:team_id]
58
+ team_id: params[:team_id],
59
+ template_name: params[:template_name]
59
60
  }
60
61
 
61
62
  values[:platform] = params[:platform]
@@ -143,7 +143,12 @@ module Match
143
143
  value = value.to_s
144
144
  pt = %w(tvos ios)
145
145
  UI.user_error!("Unsupported platform, must be: #{pt}") unless pt.include?(value)
146
- end)
146
+ end),
147
+ FastlaneCore::ConfigItem.new(key: :template_name,
148
+ env_name: "MATCH_PROVISIONING_PROFILE_TEMPLATE_NAME",
149
+ description: "The name of provisioning profile template. If the developer account has provisioning profile templates, template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile",
150
+ optional: true,
151
+ default_value: nil)
147
152
  ]
148
153
  end
149
154
  end
@@ -24,7 +24,7 @@ module Pilot
24
24
 
25
25
  testers.each do |tester|
26
26
  group_names = tester.groups_list(';') || ""
27
- install_version = tester.full_version || ""
27
+ install_version = tester.latest_build || ""
28
28
  pretty_date = tester.pretty_install_date || ""
29
29
 
30
30
  csv << [tester.first_name, tester.last_name, tester.email, group_names, tester.devices.count, install_version, pretty_date]
@@ -204,7 +204,7 @@ module Pilot
204
204
  tester.email,
205
205
  tester.groups_list,
206
206
  tester.devices.count,
207
- tester.full_version,
207
+ tester.latest_build,
208
208
  tester.pretty_install_date
209
209
  ]
210
210
  end
@@ -249,7 +249,7 @@ module Pilot
249
249
  end
250
250
 
251
251
  if tester.latest_install_date
252
- rows << ["Latest Version", tester.full_version]
252
+ rows << ["Latest Version", tester.latest_build]
253
253
  rows << ["Latest Install Date", tester.pretty_install_date]
254
254
  end
255
255
 
@@ -7,13 +7,6 @@ module Spaceship
7
7
  # monkey patched
8
8
  # move this to spaceship
9
9
  class Tester < TunesBase
10
- def full_version
11
- return nil unless latest_install_date
12
- latest_installed_version = latest_installed_version_number
13
- latest_installed_short_version = latest_installed_build_number
14
- "#{latest_installed_version} (#{latest_installed_short_version})"
15
- end
16
-
17
10
  def pretty_install_date
18
11
  return nil unless latest_install_date
19
12
  Time.at((latest_install_date / 1000)).strftime("%m/%d/%y %H:%M")
@@ -121,7 +121,12 @@ module Sigh
121
121
  value = value.to_s
122
122
  pt = %w(macos tvos ios)
123
123
  UI.user_error!("Unsupported platform, must be: #{pt}") unless pt.include?(value)
124
- end)
124
+ end),
125
+ FastlaneCore::ConfigItem.new(key: :template_name,
126
+ env_name: "SIGH_PROVISIONING_PROFILE_TEMPLATE_NAME",
127
+ description: "The name of provisioning profile template. If the developer account has provisioning profile templates, template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile",
128
+ optional: true,
129
+ default_value: nil)
125
130
  ]
126
131
  end
127
132
  end
@@ -137,7 +137,8 @@ module Sigh
137
137
  bundle_id: bundle_id,
138
138
  certificate: cert,
139
139
  mac: Sigh.config[:platform].to_s == 'macos',
140
- sub_platform: Sigh.config[:platform].to_s == 'tvos' ? 'tvOS' : nil)
140
+ sub_platform: Sigh.config[:platform].to_s == 'tvos' ? 'tvOS' : nil,
141
+ template_name: Sigh.config[:template_name])
141
142
  profile
142
143
  end
143
144
 
@@ -10,6 +10,7 @@ require 'spaceship/portal/portal_client'
10
10
  require 'spaceship/portal/persons'
11
11
  require 'spaceship/portal/person'
12
12
  require 'spaceship/portal/key'
13
+ require 'spaceship/portal/provisioning_profile_template'
13
14
  require 'spaceship/portal/merchant'
14
15
  require 'spaceship/portal/passbook'
15
16
  require 'spaceship/portal/invite'
@@ -588,7 +588,7 @@ module Spaceship
588
588
  parse_response(r, 'provisioningProfile')
589
589
  end
590
590
 
591
- def create_provisioning_profile!(name, distribution_method, app_id, certificate_ids, device_ids, mac: false, sub_platform: nil)
591
+ def create_provisioning_profile!(name, distribution_method, app_id, certificate_ids, device_ids, mac: false, sub_platform: nil, template_name: nil)
592
592
  ensure_csrf(Spaceship::ProvisioningProfile) do
593
593
  fetch_csrf_token_for_provisioning
594
594
  end
@@ -603,6 +603,9 @@ module Spaceship
603
603
  }
604
604
  params[:subPlatform] = sub_platform if sub_platform
605
605
 
606
+ # if `template_name` is nil, Default entitlements will be used
607
+ params[:template] = template_name if template_name
608
+
606
609
  r = request(:post, "account/#{platform_slug(mac)}/profile/createProvisioningProfile.action", params)
607
610
  parse_response(r, 'provisioningProfile')
608
611
  end
@@ -636,7 +639,7 @@ module Spaceship
636
639
  parse_response(r)
637
640
  end
638
641
 
639
- def repair_provisioning_profile!(profile_id, name, distribution_method, app_id, certificate_ids, device_ids, mac: false, sub_platform: nil)
642
+ def repair_provisioning_profile!(profile_id, name, distribution_method, app_id, certificate_ids, device_ids, mac: false, sub_platform: nil, template_name: nil)
640
643
  ensure_csrf(Spaceship::ProvisioningProfile) do
641
644
  fetch_csrf_token_for_provisioning
642
645
  end
@@ -651,6 +654,8 @@ module Spaceship
651
654
  deviceIds: device_ids
652
655
  }
653
656
  params[:subPlatform] = sub_platform if sub_platform
657
+ # if `template_name` is nil, Default entitlements will be used
658
+ params[:template] = template_name if template_name
654
659
 
655
660
  r = request(:post, "account/#{platform_slug(mac)}/profile/regenProvisioningProfile.action", params)
656
661
 
@@ -134,6 +134,29 @@ module Spaceship
134
134
  # more information on this issue https://github.com/fastlane/fastlane/issues/6137
135
135
  attr_accessor :profile_details
136
136
 
137
+ # @return (Bool) Does the profile use a template (has extended entitlements)?
138
+ #
139
+ # @example
140
+ # false
141
+ attr_accessor :is_template_profile
142
+
143
+ # @return (Spaceship::Portal::ProvisioningProfileTemplate)
144
+ # Model representation of the provisioning profile template.
145
+ # This will be always nil if is_template_profile returns false
146
+ #
147
+ # @example Example Value
148
+ # <Spaceship::Portal::ProvisioningProfileTemplate
149
+ # @template_description="Subscription Service iOS (dist)",
150
+ # @entitlements=nil,
151
+ # @purpose_description="Generic Provisioning Profile Template for App: com.apple.smoot.subscriptionservice",
152
+ # @purpose_display_name="Subscription Service iOS (dist)",
153
+ # @purpose_name="Subscription Service iOS (dist)",
154
+ # @version=1>
155
+ #
156
+ # @example Usage
157
+ # profile.template.purpose_display_name
158
+ attr_accessor :template
159
+
137
160
  attr_mapping({
138
161
  'provisioningProfileId' => :id,
139
162
  'UUID' => :uuid,
@@ -146,7 +169,9 @@ module Spaceship
146
169
  'proProPlatform' => :platform,
147
170
  'proProSubPlatform' => :sub_platform,
148
171
  'managingApp' => :managing_app,
149
- 'appId' => :app
172
+ 'appId' => :app,
173
+ 'isTemplateProfile' => :is_template_profile,
174
+ 'template' => :template
150
175
  })
151
176
 
152
177
  class << self
@@ -182,6 +207,18 @@ module Spaceship
182
207
  attrs['dateExpire'] = (Time.parse(attrs['dateExpire']) rescue attrs['dateExpire'])
183
208
  # rubocop:enable Style/RescueModifier
184
209
 
210
+ # When a profile is created with a template name, the response
211
+ # (provisioning profiles info) already contains the data about
212
+ # template, which is used to instantiate the
213
+ # ProvisioningProfileTemplate model.
214
+ # Doing so saves an API call needed to fetch profile details.
215
+ #
216
+ # Verify if `attrs` contains the info needed to instantiate a template.
217
+ # If not, the template will be lazily loaded.
218
+ if attrs['profile'] && attrs['profile']['description']
219
+ attrs['template'] = ProvisioningProfileTemplate.factory(attrs['template'])
220
+ end
221
+
185
222
  klass.client = @client
186
223
  obj = klass.new(attrs)
187
224
 
@@ -209,8 +246,11 @@ module Spaceship
209
246
  # and Development profiles and add none for AppStore and Enterprise Profiles
210
247
  # @param mac (Bool) (optional): Pass true if you're making a Mac provisioning profile
211
248
  # @param sub_platform (String) Used to create tvOS profiles at the moment. Value should equal 'tvOS' or nil.
249
+ # @param template_name (String) (optional): The name of the provisioning profile template.
250
+ # The value can be found by inspecting the Entitlements drop-down when creating/editing a
251
+ # provisioning profile in Developer Portal.
212
252
  # @return (ProvisioningProfile): The profile that was just created
213
- def create!(name: nil, bundle_id: nil, certificate: nil, devices: [], mac: false, sub_platform: nil)
253
+ def create!(name: nil, bundle_id: nil, certificate: nil, devices: [], mac: false, sub_platform: nil, template_name: nil)
214
254
  raise "Missing required parameter 'bundle_id'" if bundle_id.to_s.empty?
215
255
  raise "Missing required parameter 'certificate'. e.g. use `Spaceship::Certificate::Production.all.first`" if certificate.to_s.empty?
216
256
 
@@ -253,7 +293,8 @@ module Spaceship
253
293
  certificate_parameter,
254
294
  devices.map(&:id),
255
295
  mac: mac,
256
- sub_platform: sub_platform)
296
+ sub_platform: sub_platform,
297
+ template_name: template_name)
257
298
  end
258
299
 
259
300
  self.new(profile)
@@ -423,7 +464,8 @@ module Spaceship
423
464
  certificates.map(&:id),
424
465
  devices.map(&:id),
425
466
  mac: mac?,
426
- sub_platform: tvos? ? 'tvOS' : nil
467
+ sub_platform: tvos? ? 'tvOS' : nil,
468
+ template_name: template_name
427
469
  )
428
470
  end
429
471
 
@@ -512,6 +554,22 @@ module Spaceship
512
554
  # see https://github.com/fastlane/fastlane/issues/6137 for more information
513
555
  @profile_details ||= client.provisioning_profile_details(provisioning_profile_id: self.id, mac: mac?)
514
556
  end
557
+
558
+ # Lazily instantiates the provisioning profile template model
559
+ #
560
+ # @return (Bool) The template model if the provisioning profile has a
561
+ # template or nil if provisioning profile doesn't have a template
562
+ def template
563
+ return nil unless is_template_profile
564
+
565
+ @template ||= ProvisioningProfileTemplate.factory(profile_details['template'])
566
+ end
567
+
568
+ # @return (String) The name of the template (as displayed in Dev Portal)
569
+ # or nil if provisioning profile doesn't have a template
570
+ def template_name
571
+ is_template_profile ? template.purpose_display_name : nil
572
+ end
515
573
  end
516
574
  end
517
575
  end
@@ -0,0 +1,50 @@
1
+ module Spaceship
2
+ module Portal
3
+ class ProvisioningProfileTemplate < PortalBase
4
+ ##
5
+ # Data model representing a provisioning profile template
6
+
7
+ # @return (String) Template's description
8
+ # @example
9
+ # "Subscription Service iOS (dist)"
10
+ attr_accessor :template_description
11
+
12
+ # @return (String) Template's purpose description
13
+ # @example
14
+ # "Generic Provisioning Profile Template for App: com.apple.smoot.subscriptionservice"
15
+ attr_accessor :purpose_description
16
+
17
+ # @return (String) Template's purpose name displayed in Dev Portal
18
+ # @example
19
+ # "Subscription Service iOS (dist)"
20
+ attr_accessor :purpose_display_name
21
+
22
+ # @return (String) Template's purpose name
23
+ # @example
24
+ # "Subscription Service iOS (dist)"
25
+ attr_accessor :purpose_name
26
+
27
+ # @return (String) Template version
28
+ # @example
29
+ # "1"
30
+ attr_accessor :version
31
+
32
+ # @return (Array) A list of extended entitlement IDs defined by the template
33
+ # This is almost always nil :shrug_emoticon:
34
+ # @example
35
+ # nil
36
+ # @example
37
+ # ["com.apple.smoot.subscriptionservice"]
38
+ attr_accessor :entitlements
39
+
40
+ attr_mapping({
41
+ 'description' => :template_description,
42
+ 'purposeDescription' => :purpose_description,
43
+ 'purposeDisplayName' => :purpose_display_name,
44
+ 'purposeName' => :purpose_name,
45
+ 'version' => :version,
46
+ 'entitlements' => :entitlements
47
+ })
48
+ end
49
+ end
50
+ end
@@ -55,6 +55,9 @@ module Spaceship
55
55
  # @return [Integer] The version number of the last installed build
56
56
  attr_accessor :latest_installed_version_number
57
57
 
58
+ # @return [String] The full version of the last installed build
59
+ attr_accessor :latest_build
60
+
58
61
  attr_mapping(
59
62
  'testerId' => :tester_id,
60
63
  'emailAddress.value' => :email,
@@ -63,9 +66,10 @@ module Spaceship
63
66
  'groups' => :groups,
64
67
  'devices' => :devices,
65
68
  'latestInstalledAppAdamId' => :latest_install_app_id,
66
- 'latestInstalledDate' => :latest_install_date,
67
- 'latestInstalledVersion' => :latest_installed_version_number,
68
- 'latestInstalledShortVersion' => :latest_installed_build_number
69
+ 'latestInstallByPlatform.ios.installDate' => :latest_install_date,
70
+ 'latestInstallByPlatform.ios.shortVersion' => :latest_installed_version_number,
71
+ 'latestInstallByPlatform.ios.version' => :latest_installed_build_number,
72
+ 'latestBuild' => :latest_build
69
73
  )
70
74
 
71
75
  class << self
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.55.0.beta.20170830010003
4
+ version: 2.55.0.beta.20170831010002
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2017-08-30 00:00:00.000000000 Z
18
+ date: 2017-08-31 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: slack-notifier
@@ -1350,6 +1350,7 @@ files:
1350
1350
  - spaceship/lib/spaceship/portal/portal_base.rb
1351
1351
  - spaceship/lib/spaceship/portal/portal_client.rb
1352
1352
  - spaceship/lib/spaceship/portal/provisioning_profile.rb
1353
+ - spaceship/lib/spaceship/portal/provisioning_profile_template.rb
1353
1354
  - spaceship/lib/spaceship/portal/spaceship.rb
1354
1355
  - spaceship/lib/spaceship/portal/ui/select_team.rb
1355
1356
  - spaceship/lib/spaceship/portal/website_push.rb