fastlane 2.13.0 → 2.14.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/credentials_manager/lib/credentials_manager.rb +1 -1
  3. data/fastlane/lib/fastlane/actions/ipa.rb +2 -1
  4. data/fastlane/lib/fastlane/actions/mailgun.rb +15 -2
  5. data/fastlane/lib/fastlane/actions/scan.rb +14 -0
  6. data/fastlane/lib/fastlane/documentation/docs_generator.rb +24 -1
  7. data/fastlane/lib/fastlane/environment_printer.rb +2 -1
  8. data/fastlane/lib/fastlane/fast_file.rb +4 -4
  9. data/fastlane/lib/fastlane/version.rb +1 -1
  10. data/fastlane_core/lib/fastlane_core.rb +1 -1
  11. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +44 -2
  12. data/fastlane_core/lib/fastlane_core/device_manager.rb +15 -0
  13. data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
  14. data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +4 -4
  15. data/frameit/lib/frameit/config_parser.rb +8 -13
  16. data/frameit/lib/frameit/editor.rb +3 -2
  17. data/gym/lib/gym/options.rb +4 -2
  18. data/match/README.md +2 -2
  19. data/match/lib/match.rb +5 -19
  20. data/match/lib/match/generator.rb +8 -1
  21. data/match/lib/match/git_helper.rb +3 -1
  22. data/match/lib/match/nuke.rb +18 -14
  23. data/match/lib/match/options.rb +13 -2
  24. data/match/lib/match/runner.rb +20 -8
  25. data/match/lib/match/table_printer.rb +5 -4
  26. data/match/lib/match/utils.rb +12 -8
  27. data/scan/lib/scan/options.rb +24 -1
  28. data/scan/lib/scan/runner.rb +12 -11
  29. data/scan/lib/scan/test_command_generator.rb +10 -2
  30. data/sigh/lib/sigh/download_all.rb +1 -1
  31. data/sigh/lib/sigh/runner.rb +2 -2
  32. data/snapshot/lib/snapshot/options.rb +2 -1
  33. data/snapshot/lib/snapshot/runner.rb +12 -12
  34. data/spaceship/lib/spaceship.rb +1 -0
  35. data/spaceship/lib/spaceship/base.rb +27 -4
  36. data/spaceship/lib/spaceship/client.rb +3 -2
  37. data/spaceship/lib/spaceship/du/du_client.rb +26 -16
  38. data/spaceship/lib/spaceship/portal/app.rb +1 -1
  39. data/spaceship/lib/spaceship/portal/person.rb +53 -0
  40. data/spaceship/lib/spaceship/portal/persons.rb +49 -0
  41. data/spaceship/lib/spaceship/portal/portal.rb +2 -0
  42. data/spaceship/lib/spaceship/portal/portal_client.rb +69 -10
  43. data/spaceship/lib/spaceship/portal/provisioning_profile.rb +29 -1
  44. data/spaceship/lib/spaceship/tunes/application.rb +11 -1
  45. data/spaceship/lib/spaceship/tunes/iap.rb +113 -0
  46. data/spaceship/lib/spaceship/tunes/iap_detail.rb +185 -0
  47. data/spaceship/lib/spaceship/tunes/iap_families.rb +62 -0
  48. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +59 -0
  49. data/spaceship/lib/spaceship/tunes/iap_family_list.rb +33 -0
  50. data/spaceship/lib/spaceship/tunes/iap_list.rb +72 -0
  51. data/spaceship/lib/spaceship/tunes/iap_status.rb +48 -0
  52. data/spaceship/lib/spaceship/tunes/iap_type.rb +45 -0
  53. data/spaceship/lib/spaceship/tunes/tunes.rb +1 -0
  54. data/spaceship/lib/spaceship/tunes/tunes_client.rb +163 -1
  55. metadata +21 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 564e6544aeab7f92fc130134ce78fee3a037cb16
4
- data.tar.gz: 68f2180b569422134323d02514a6c1c6b08d73e4
3
+ metadata.gz: 070a2e3ea852f83722a3a732f385c6d998b4a91f
4
+ data.tar.gz: 6b4a9022927123cece1c49d6a1b691c61ed37f3a
5
5
  SHA512:
6
- metadata.gz: 1c65b9bc5a1494d9d9a06fff5dc282293a62082826010a73f6b4edc9a7043fc3d1603591cf265744bdaa86936207561adbf3abfc23ccb98106688d710b9be790
7
- data.tar.gz: 36d5d7e41b5575e3ad1c18875f571322d4fef79172ca881042cc7f516d231b7e35ae158ee1ef06deeaa7538da242c3d60efb8a1d321215b0897a222fc75a271c
6
+ metadata.gz: adf527daf42b09341b84cba7ccd8029de0ffe3303946cce19c89ed6822400dc94223d527fcadad63a75a892351c145d73c1191683f1b12b9ce282841edc8c0a9
7
+ data.tar.gz: 268b99f8538e136d11764042be7d43ecda6f2caffee580413cc25e813ab0ef4fc3abed4f00bc61abb54605a17e6b1b1da77d033e4d1e9ef18215f217e21e97e1
@@ -4,7 +4,7 @@ require 'credentials_manager/cli'
4
4
  require 'credentials_manager/appfile_config'
5
5
 
6
6
  # Third Party code
7
- require 'colored'
7
+ require 'colored2'
8
8
  require 'security'
9
9
  require 'highline/import' # to hide the entered password
10
10
 
@@ -187,7 +187,8 @@ module Fastlane
187
187
  FastlaneCore::ConfigItem.new(key: :xcargs,
188
188
  env_name: "IPA_XCARGS",
189
189
  description: "Pass additional arguments to xcodebuild when building the app. Be sure to quote multiple args",
190
- optional: true)
190
+ optional: true,
191
+ type: :shell_string)
191
192
  ]
192
193
  end
193
194
 
@@ -86,7 +86,12 @@ module Fastlane
86
86
  env_name: "MAILGUN_REPLY_TO",
87
87
  description: "Mail Reply to",
88
88
  optional: true,
89
- is_string: true)
89
+ is_string: true),
90
+ FastlaneCore::ConfigItem.new(key: :attachment,
91
+ env_name: "MAILGUN_ATTACHMENT",
92
+ description: "Mail Attachment filenames, either an array or just one string",
93
+ optional: true,
94
+ is_string: false)
90
95
 
91
96
  ]
92
97
  end
@@ -114,6 +119,13 @@ module Fastlane
114
119
  unless options[:reply_to].nil?
115
120
  params.store(:"h:Reply-To", options[:reply_to])
116
121
  end
122
+
123
+ unless options[:attachment].nil?
124
+ attachment_filenames = [*options[:attachment]]
125
+ attachments = attachment_filenames.map { |filename| File.new(filename, 'rb') }
126
+ params.store(:attachment, attachments)
127
+ end
128
+
117
129
  RestClient.post "https://api:#{options[:apikey]}@api.mailgun.net/v3/#{sandbox_domain}/messages", params
118
130
  mail_template(options)
119
131
  end
@@ -158,7 +170,8 @@ module Fastlane
158
170
  message: "Mail Body",
159
171
  app_link: "http://www.myapplink.com",
160
172
  ci_build_link: "http://www.mycibuildlink.com",
161
- template_path: "HTML_TEMPLATE_PATH"
173
+ template_path: "HTML_TEMPLATE_PATH",
174
+ attachment: "dirname/filename.ext"
162
175
  )'
163
176
  ]
164
177
  end
@@ -77,6 +77,20 @@ module Fastlane
77
77
  workspace: "App.xcworkspace",
78
78
  scheme: "MyTests",
79
79
  clean: false
80
+ )',
81
+ '#Build For Testing
82
+ scan(
83
+ derived_data_path: "my_folder",
84
+ build_for_testing: true
85
+ )',
86
+ '# run tests using derived data from prev. build
87
+ scan(
88
+ derived_data_path: "my_folder",
89
+ test_without_building: true
90
+ )',
91
+ '# or run it from an existing xctestrun package
92
+ scan(
93
+ xctestrun: "/path/to/mytests.xctestrun"
80
94
  )'
81
95
  ]
82
96
  end
@@ -7,9 +7,32 @@ module Fastlane
7
7
  output << "================"
8
8
 
9
9
  output << "# Installation"
10
+ output << ""
11
+ output << "Make sure you have the latest version of the Xcode command line tools installed:"
12
+ output << ""
10
13
  output << "```"
11
- output << "sudo gem install fastlane"
14
+ output << "xcode-select --install"
12
15
  output << "```"
16
+ output << ""
17
+ output << "## Choose your installation method:"
18
+ output << ""
19
+ output << "<table width=\"100%\" >"
20
+ output << "<tr>"
21
+ output << "<th width=\"33%\"><a href=\"http://brew.sh\">Homebrew</a></td>"
22
+ output << "<th width=\"33%\">Installer Script</td>"
23
+ output << "<th width=\"33%\">Rubygems</td>"
24
+ output << "</tr>"
25
+ output << "<tr>"
26
+ output << "<td width=\"33%\" align=\"center\">macOS</td>"
27
+ output << "<td width=\"33%\" align=\"center\">macOS</td>"
28
+ output << "<td width=\"33%\" align=\"center\">macOS or Linux with Ruby 2.0.0 or above</td>"
29
+ output << "</tr>"
30
+ output << "<tr>"
31
+ output << "<td width=\"33%\"><code>brew cask install fastlane</code></td>"
32
+ output << "<td width=\"33%\"><a href=\"https://download.fastlane.tools/fastlane.zip\">Download the zip file</a>. Then double click on the <code>install</code> script (or run it in a terminal window).</td>"
33
+ output << "<td width=\"33%\"><code>sudo gem install fastlane -NV</code></td>"
34
+ output << "</tr>"
35
+ output << "</table>"
13
36
 
14
37
  output << "# Available Actions"
15
38
 
@@ -217,7 +217,8 @@ module Fastlane
217
217
  "Host" => "#{product} #{version} (#{build})",
218
218
  "Ruby Lib Dir" => anonymized_path(RbConfig::CONFIG['libdir']),
219
219
  "OpenSSL Version" => OpenSSL::OPENSSL_VERSION,
220
- "Is contained" => Helper.contained_fastlane?.to_s
220
+ "Is contained" => Helper.contained_fastlane?.to_s,
221
+ "Is homebrew" => Helper.homebrew?.to_s
221
222
  }
222
223
 
223
224
  if Helper.mac?
@@ -206,12 +206,12 @@ module Fastlane
206
206
 
207
207
  UI.user_error!("Could not find Fastfile at path '#{path}'") unless File.exist?(path)
208
208
 
209
- collector.did_launch_action(:import)
210
- parse(File.read(path), path)
211
-
212
- # Check if we can also import local actions which are in the same directory as the Fastfile
209
+ # First check if there are local actions to import in the same directory as the Fastfile
213
210
  actions_path = File.join(File.expand_path("..", path), 'actions')
214
211
  Fastlane::Actions.load_external_actions(actions_path) if File.directory?(actions_path)
212
+
213
+ collector.did_launch_action(:import)
214
+ parse(File.read(path), path)
215
215
  end
216
216
 
217
217
  # @param url [String] The git URL to clone the repository from
@@ -1,4 +1,4 @@
1
1
  module Fastlane
2
- VERSION = '2.13.0'.freeze
2
+ VERSION = '2.14.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  end
@@ -31,7 +31,7 @@ require 'fastlane_core/keychain_importer'
31
31
  require 'fastlane_core/swag'
32
32
 
33
33
  # Third Party code
34
- require 'colored'
34
+ require 'colored2'
35
35
  require 'commander'
36
36
 
37
37
  # after commander import
@@ -1,6 +1,43 @@
1
1
  module FastlaneCore
2
2
  class ConfigItem
3
- attr_accessor :key, :env_name, :description, :short_option, :default_value, :verify_block, :optional, :conflicting_options, :conflict_block, :deprecated, :sensitive
3
+ # [Symbol] the key which is used as command paramters or key in the fastlane tools
4
+ attr_accessor :key
5
+
6
+ # [String] the name of the environment variable, which is only used if no other values were found
7
+ attr_accessor :env_name
8
+
9
+ # [String] A description shown to the user
10
+ attr_accessor :description
11
+
12
+ # [String] A string of length 1 which is used for the command parameters (e.g. -f)
13
+ attr_accessor :short_option
14
+
15
+ # the value which is used if there was no given values and no environment values
16
+ attr_accessor :default_value
17
+
18
+ # An optional block which is called when a new value is set.
19
+ # Check value is valid. This could be type checks or if a folder/file exists
20
+ # You have to raise a specific exception if something goes wrong. Append .red after the string
21
+ attr_accessor :verify_block
22
+
23
+ # [Boolean] is false by default. If set to true, also string values will not be asked to the user
24
+ attr_accessor :optional
25
+
26
+ # [Array] array of conflicting option keys(@param key). This allows to resolve conflicts intelligently
27
+ attr_accessor :conflicting_options
28
+
29
+ # An optional block which is called when options conflict happens
30
+ attr_accessor :conflict_block
31
+
32
+ # [String] Set if the option is deprecated. A deprecated option should be optional and is made optional if the parameter isn't set, and fails otherwise
33
+ attr_accessor :deprecated
34
+
35
+ # [Boolean] Set if the variable is sensitive, such as a password or API token, to prevent echoing when prompted for the parameter
36
+ attr_accessor :sensitive
37
+
38
+ # [Boolean] Set if the variable is to be converted to a shell-escaped String when provided as a Hash or Array
39
+ # Allows items expected to be strings used in shell arguments to be alternatively provided as a Hash or Array for better readability and auto-escaped for us.
40
+ attr_accessor :allow_shell_conversion
4
41
 
5
42
  # Creates a new option
6
43
  # @param key (Symbol) the key which is used as command paramters or key in the fastlane tools
@@ -12,7 +49,7 @@ module FastlaneCore
12
49
  # Check value is valid. This could be type checks or if a folder/file exists
13
50
  # You have to raise a specific exception if something goes wrong. Append .red after the string
14
51
  # @param is_string *DEPRECATED: Use `type` instead* (Boolean) is that parameter a string? Defaults to true. If it's true, the type string will be verified.
15
- # @param type (Class) the data type of this config item. Takes precedence over `is_string`
52
+ # @param type (Class) the data type of this config item. Takes precedence over `is_string`. Use `:shell_string` to allow types `String`, `Hash` and `Array` that will be converted to shell-escaped strings
16
53
  # @param optional (Boolean) is false by default. If set to true, also string values will not be asked to the user
17
54
  # @param conflicting_options ([]) array of conflicting option keys(@param key). This allows to resolve conflicts intelligently
18
55
  # @param conflict_block an optional block which is called when options conflict happens
@@ -53,11 +90,13 @@ module FastlaneCore
53
90
  @verify_block = verify_block
54
91
  @is_string = is_string
55
92
  @data_type = type
93
+ @data_type = String if type == :shell_string
56
94
  @optional = optional
57
95
  @conflicting_options = conflicting_options
58
96
  @conflict_block = conflict_block
59
97
  @deprecated = deprecated
60
98
  @sensitive = sensitive
99
+ @allow_shell_conversion = (type == :shell_string)
61
100
  end
62
101
 
63
102
  # This will raise an exception if the value is not valid
@@ -99,6 +138,9 @@ module FastlaneCore
99
138
  return value.to_i if value.to_i.to_s == value.to_s
100
139
  elsif data_type == Float
101
140
  return value.to_f if value.to_f.to_s == value.to_s
141
+ elsif data_type == String && allow_shell_conversion
142
+ return value.map(&:to_s).map(&:shellescape).join(' ') if value.kind_of?(Array)
143
+ return value.map { |k, v| "#{k.to_s.shellescape}=#{v.shellescape}" }.join(' ') if value.kind_of?(Hash)
102
144
  else
103
145
  # Special treatment if the user specified true, false or YES, NO
104
146
  # There is no boolean type, so we just do it here
@@ -194,6 +194,21 @@ module FastlaneCore
194
194
  all.each(&:reset)
195
195
  end
196
196
 
197
+ def copy_logarchive(device, dest)
198
+ sim_resource_dir = FastlaneCore::CommandExecutor.execute(command: "xcrun simctl getenv #{device.udid} SIMULATOR_SHARED_RESOURCES_DIRECTORY 2>/dev/null", print_all: false, print_command: true)
199
+ logarchive_src = File.join(sim_resource_dir, "system_logs.logarchive")
200
+
201
+ # if logarchive already exists it fails as the .logarchive is a directory, so delete it. to be sure its gone
202
+ FileUtils.rm_rf(logarchive_src)
203
+ FileUtils.rm_rf(dest)
204
+
205
+ command = "xcrun simctl spawn #{device.udid} log collect 2>/dev/null"
206
+ FastlaneCore::CommandExecutor.execute(command: command, print_all: false, print_command: true)
207
+
208
+ FileUtils.cp_r(logarchive_src, dest)
209
+ UI.success "Copying file '#{logarchive_src}' to '#{dest}'..."
210
+ end
211
+
197
212
  def reset_all_by_version(os_version: nil)
198
213
  return false unless os_version
199
214
  all.select { |device| device.os_version == os_version }.each(&:reset)
@@ -1,5 +1,5 @@
1
1
  require 'logger'
2
- require 'colored'
2
+ require 'colored2'
3
3
 
4
4
  module FastlaneCore
5
5
  module Helper
@@ -1,15 +1,15 @@
1
1
  # This code overwrites the methods from the colored gem
2
- # via https://github.com/defunkt/colored/blob/master/lib/colored.rb
2
+ # via https://github.com/kigster/colored2/blob/aa274018906641ffb07aaa3015081a174d169dfe/lib/colored2.rb
3
3
 
4
- require 'colored'
4
+ require 'colored2'
5
5
 
6
6
  class String
7
- Colored::COLORS.keys.each do |color|
7
+ Colored2::COLORS.keys.each do |color|
8
8
  define_method(color) do
9
9
  self # do nothing with the string, but return it
10
10
  end
11
11
  end
12
- Colored::EXTRAS.keys.each do |extra|
12
+ Colored2::EXTRAS.keys.each do |extra|
13
13
  define_method(extra) do
14
14
  self # do nothing with the string, but return it
15
15
  end
@@ -64,11 +64,10 @@ module Frameit
64
64
  if value.kind_of?(Hash)
65
65
  validate_values(value) # recursive call
66
66
  else
67
- if key == 'font'
67
+ case key
68
+ when 'font'
68
69
  UI.user_error!("Could not find font at path '#{File.expand_path(value)}'") unless File.exist?(value)
69
- end
70
-
71
- if key == 'fonts'
70
+ when 'fonts'
72
71
  UI.user_error!("`fonts` must be an array") unless value.kind_of?(Array)
73
72
 
74
73
  value.each do |current|
@@ -76,20 +75,16 @@ module Frameit
76
75
  UI.user_error!("Could not find font at path '#{File.expand_path(current.fetch('font'))}'") unless File.exist?(current.fetch('font'))
77
76
  UI.user_error!("`supported` must be an array") unless current.fetch('supported', []).kind_of? Array
78
77
  end
79
- end
80
-
81
- if key == 'background'
78
+ when 'background'
82
79
  UI.user_error!("Could not find background image at path '#{File.expand_path(value)}'") unless File.exist? value
83
- end
84
-
85
- if key == 'color'
80
+ when 'color'
86
81
  UI.user_error!("Invalid color '#{value}'. Must be valid Hex #123123") unless value.include?("#")
87
- end
88
-
89
- if key == 'padding'
82
+ when 'padding'
90
83
  unless value.kind_of?(Integer) || value.split('x').length == 2
91
84
  UI.user_error!("padding must be type integer or pair of integers of format 'AxB'")
92
85
  end
86
+ when 'font_scale_factor'
87
+ UI.user_error! "font_scale_factor must be numeric" unless value.kind_of?(Numeric)
93
88
  end
94
89
  end
95
90
  end
@@ -236,12 +236,13 @@ module Frameit
236
236
  end
237
237
 
238
238
  def actual_font_size
239
- [@image.width / 10.0].max.round
239
+ font_scale_factor = fetch_config['font_scale_factor'] || 0.1
240
+ [@image.width * font_scale_factor].max.round
240
241
  end
241
242
 
242
243
  # The space between the keyword and the title
243
244
  def keyword_padding
244
- (actual_font_size / 2.0).round
245
+ (actual_font_size / 3.0).round
245
246
  end
246
247
 
247
248
  # This will build 2 individual images with the title, which will then be added to the real image
@@ -131,7 +131,8 @@ module Gym
131
131
  conflicting_options: [:use_legacy_build_api],
132
132
  conflict_block: proc do |value|
133
133
  UI.user_error!("'#{value.key}' must be false to use 'export_xcargs'")
134
- end),
134
+ end,
135
+ type: :shell_string),
135
136
  FastlaneCore::ConfigItem.new(key: :skip_build_archive,
136
137
  env_name: "GYM_SKIP_BUILD_ARCHIVE",
137
138
  description: "Export ipa from previously build xarchive. Uses archive_path as source",
@@ -196,7 +197,8 @@ module Gym
196
197
  short_option: "-x",
197
198
  env_name: "GYM_XCARGS",
198
199
  description: "Pass additional arguments to xcodebuild for the build phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS=\"-ObjC -lstdc++\"",
199
- optional: true),
200
+ optional: true,
201
+ type: :shell_string),
200
202
  FastlaneCore::ConfigItem.new(key: :xcconfig,
201
203
  short_option: "-y",
202
204
  env_name: "GYM_XCCONFIG",
@@ -377,13 +377,13 @@ In general those profiles are harmless as they can only be used to install a sig
377
377
 
378
378
  Attackers could use an In-House profile to distribute signed application to a potentially unlimited number of devices. All this would run under your company name and it could eventually lead to Apple revoking your In-House account. However it is very easy to revoke a certificate to remotely break the app on all devices.
379
379
 
380
- Because of the potentially dangerous nature of In-House profiles we decided to not allow the use of `match` with enterprise accounts.
380
+ Because of the potentially dangerous nature of In-House profiles please use _match_ with enterprise profiles with caution, ensure your git repository is private and use a secure password.
381
381
 
382
382
  ##### To sum up
383
383
 
384
384
  - You have full control over the access list of your Git repo, no third party service involved
385
385
  - Even if your certificates are leaked, they can't be used to cause any harm without your iTunes Connect login credentials
386
- - `match` does not currently support In-House Enterprise profiles as they are harder to control
386
+ - Use In-House enterprise profile with _match_ with caution
387
387
  - If you use GitHub or Bitbucket we encourage enabling 2 factor authentication for all accounts that have access to the certificates repo
388
388
  - The complete source code of `match` is fully open source on [GitHub](https://github.com/fastlane/fastlane/tree/master/match)
389
389
 
@@ -21,31 +21,17 @@ module Match
21
21
  DESCRIPTION = "Easily sync your certificates and profiles across your team using git"
22
22
 
23
23
  def self.environments
24
- envs = %w(appstore adhoc development)
25
- envs << "enterprise" if self.enterprise?
26
- return envs
27
- end
28
-
29
- # @return [Boolean] returns true if the unsupported enterprise mode should be enabled
30
- def self.enterprise?
31
- return FastlaneCore::Env.truthy?("MATCH_FORCE_ENTERPRISE")
32
- end
33
-
34
- # @return [Boolean] returns true if match should interpret the given [certificate|profile] type as an enterprise one
35
- def self.type_is_enterprise?(type)
36
- Match.enterprise? && type != "development"
24
+ return %w(appstore adhoc development enterprise)
37
25
  end
38
26
 
39
27
  def self.profile_type_sym(type)
40
- return :enterprise if self.type_is_enterprise? type
41
- return :adhoc if type == "adhoc"
42
- return :appstore if type == "appstore"
43
- return :development
28
+ return type.to_sym
44
29
  end
45
30
 
46
31
  def self.cert_type_sym(type)
47
- return :enterprise if self.type_is_enterprise? type
32
+ return :enterprise if type == "enterprise"
48
33
  return :development if type == "development"
49
- return :distribution
34
+ return :distribution if type == "adhoc" || type == "appstore"
35
+ raise "Unknown cert type: '#{type}'"
50
36
  end
51
37
  end
@@ -39,7 +39,13 @@ module Match
39
39
 
40
40
  prov_type = Match.profile_type_sym(params[:type])
41
41
 
42
- profile_name = ["match", profile_type_name(prov_type), app_identifier].join(" ")
42
+ names = ["match", profile_type_name(prov_type), app_identifier]
43
+
44
+ if params[:platform].to_s != :ios.to_s # For ios we do not include the platform for backwards compatibility
45
+ names << params[:platform]
46
+ end
47
+
48
+ profile_name = names.join(" ")
43
49
 
44
50
  values = {
45
51
  app_identifier: app_identifier,
@@ -52,6 +58,7 @@ module Match
52
58
  team_id: params[:team_id]
53
59
  }
54
60
 
61
+ values[:platform] = params[:platform]
55
62
  values[:adhoc] = true if prov_type == :adhoc
56
63
  values[:development] = true if prov_type == :development
57
64