fastlane 2.52.0.beta.20170809010003 → 2.52.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: 84dfac521c24a7dc35841c4d194e9a31ae8db07a
4
- data.tar.gz: 1e6dc149c74e78056604e463a8c7868308e2857d
3
+ metadata.gz: c7f3c794df6dc0a5cd82ae0ed33a3cd555c58e02
4
+ data.tar.gz: bfc83e409c4b6daa53a5be411be8b9f645353c49
5
5
  SHA512:
6
- metadata.gz: 235a44f8ba3596df28e20a411e11f700c068d9b2f99cc63b4e75d5a5c096ff4484029198959ecdffcaabd976fc195e16a57178a9648c2857b32217f9915e1130
7
- data.tar.gz: 72e318606acf692f108481298541fb07c0d2a756b307a2994c686cfa3c99ab82f84c7ac86defca2088d5159787bbe5665eef22b6a17a6285c6a1c759ba73e9c8
6
+ metadata.gz: 5aa6e50c5bf45bb129d1e0978d46ffad40feef098efb8d01e1d986b19563ddff192e19544f91948ab83e841719b4323ae3eb97ae3d39fc17165677df27a89e58
7
+ data.tar.gz: 0bd5fe9a8a057d0bf66678614c74066f42a4e355a2c8361dace35878ae7dcac8760c70f810cfac31c21e71ee6680b095405d6cd43dbc304d632c886b8aee606d
Binary file
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.52.0.beta.20170809010003'.freeze
2
+ VERSION = '2.52.0'.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
data/produce/README.md CHANGED
@@ -61,6 +61,8 @@ Get in contact with the developers on Twitter: [@FastlaneTools](https://twitter.
61
61
  - **Modify** Application Services on the Apple Developer Portal
62
62
  - **Create** App Groups on the Apple Developer Portal
63
63
  - **Associate** apps with App Groups on the Apple Developer Portal
64
+ - **Create** Merchant Identifiers on the Apple Developer Portal
65
+ - **Associate** apps with Merchant Identifiers on the Apple Developer Portal
64
66
  - Support for **multiple Apple accounts**, storing your credentials securely in the Keychain
65
67
 
66
68
  ##### [Do you like fastlane? Be the first to know about updates and new fastlane tools](https://tinyletter.com/fastlane-tools)
@@ -78,15 +80,17 @@ Get in contact with the developers on Twitter: [@FastlaneTools](https://twitter.
78
80
  To get a list of all available parameters:
79
81
 
80
82
  fastlane produce --help
81
-
83
+
82
84
  ```
83
85
  Commands: (* default)
84
- associate_group Associate with a group, which is created if needed or simply located otherwise
85
- create * Creates a new app on iTunes Connect and the Apple Developer Portal
86
- disable_services Disable specific Application Services for a specific app on the Apple Developer Portal
87
- enable_services Enable specific Application Services for a specific app on the Apple Developer Portal
88
- group Ensure that a specific App Group exists
89
- help Display global or [command] help documentation
86
+ associate_group Associate with a group, which is created if needed or simply located otherwise
87
+ associate_merchant Associate with a merchant for use with Apple Pay. Apple Pay will be enabled for this app
88
+ create * Creates a new app on iTunes Connect and the Apple Developer Portal
89
+ disable_services Disable specific Application Services for a specific app on the Apple Developer Portal
90
+ enable_services Enable specific Application Services for a specific app on the Apple Developer Portal
91
+ group Ensure that a specific App Group exists
92
+ help Display global or [command] help documentation
93
+ merchant Ensure that a specific Merchant exists
90
94
 
91
95
  Global Options:
92
96
  --verbose
@@ -173,6 +177,37 @@ Get a list of all available options using
173
177
  --vpn-conf Disable VPN Configuration
174
178
  ```
175
179
 
180
+ ## Creating Apple Pay merchants and associating them with an App ID
181
+
182
+ If you want to create a new Apple Pay Merchant Identifier:
183
+
184
+ ```
185
+ fastlane produce merchant -o merchant.com.example.production -r "Example Merchant Production"
186
+ ```
187
+
188
+ Use `--help` for more information about all available parameters
189
+ ```
190
+ fastlane produce merchant --help
191
+ ```
192
+
193
+ If you want to associate an app with a Merchant Identifier:
194
+
195
+ ```
196
+ fastlane produce associate_merchant -a com.krausefx.app merchant.com.example.production
197
+ ```
198
+
199
+ If you want to associate an app with multiple Merchant Identifiers:
200
+
201
+ ```
202
+ fastlane produce associate_merchant -a com.krausefx.app merchant.com.example.production merchant.com.example.sandbox
203
+ ```
204
+
205
+ Use --help for more information about all available parameters
206
+
207
+ ```
208
+ fastlane produce associate_merchant --help
209
+ ```
210
+
176
211
  ## Environment Variables
177
212
 
178
213
  All available values can also be passed using environment variables, run `fastlane produce --help` to get a list of all available parameters.
@@ -135,6 +135,43 @@ module Produce
135
135
  end
136
136
  end
137
137
 
138
+ command :merchant do |c|
139
+ c.syntax = 'fastlane produce merchant'
140
+ c.description = 'Ensure that a specific Merchant exists'
141
+ c.example 'Create merchant', 'fastlane produce merchant -o merchant.com.example.production -r "Example Merchant Production"'
142
+
143
+ c.option '-r', '--merchant_name STRING', String, 'Name for the merchant that is created (PRODUCE_MERCHANT_NAME)'
144
+ c.option '-o', '--merchant_identifier STRING', String, 'Merchant identifier for the merchant (PRODUCE_MERCHANT_IDENTIFIER)'
145
+
146
+ FastlaneCore::CommanderGenerator.new.generate(Produce::Options.available_options, command: c)
147
+
148
+ c.action do |args, options|
149
+ extra_options = [FastlaneCore::ConfigItem.new(key: :merchant_name, optional: true), FastlaneCore::ConfigItem.new(key: :merchant_identifier)]
150
+ all_options = Produce::Options.available_options + extra_options
151
+ allowed_keys = all_options.collect(&:key)
152
+
153
+ Produce.config = FastlaneCore::Configuration.create(all_options, options.__hash__.select { |key, value| allowed_keys.include? key })
154
+
155
+ require 'produce/merchant'
156
+ Produce::Merchant.new.create(options, args)
157
+ end
158
+ end
159
+
160
+ command :associate_merchant do |c|
161
+ c.syntax = 'fastlane produce associate_merchant -a APP_IDENTIFIER MERCHANT_IDENTIFIER1, MERCHANT_IDENTIFIER2, ...'
162
+ c.description = 'Associate with a merchant for use with Apple Pay. Apple Pay will be enabled for this app.'
163
+ c.example 'Associate with merchant', 'fastlane produce associate_merchant -a com.example.app merchant.com.example.production'
164
+
165
+ FastlaneCore::CommanderGenerator.new.generate(Produce::Options.available_options, command: c)
166
+
167
+ c.action do |args, options|
168
+ Produce.config = FastlaneCore::Configuration.create(Produce::Options.available_options, options.__hash__)
169
+
170
+ require 'produce/merchant'
171
+ Produce::Merchant.new.associate(options, args)
172
+ end
173
+ end
174
+
138
175
  default_command :create
139
176
 
140
177
  run!
@@ -0,0 +1,120 @@
1
+ require 'spaceship'
2
+
3
+ module Produce
4
+ class Merchant
5
+ def create(_options, _args)
6
+ login
7
+
8
+ merchant_identifier = detect_merchant_identifier
9
+ merchant = find_merchant(merchant_identifier)
10
+
11
+ if merchant
12
+ UI.success("[DevCenter] Merchant '#{merchant.bundle_id})' already exists, nothing to do on the Dev Center")
13
+ else
14
+ merchant_name = Produce.config[:merchant_name] || merchant_name_from_identifier(merchant_identifier)
15
+ UI.success("Creating new merchant '#{merchant_name}' with identifier '#{merchant_identifier}' on the Apple Dev Center")
16
+ merchant = Spaceship.merchant.create!(bundle_id: merchant_identifier, name: merchant_name, mac: self.class.mac?)
17
+
18
+ if merchant.name != merchant_name
19
+ UI.important("Your merchant name might include non-ASCII characters, which are not supported by the Apple Developer Portal.")
20
+ UI.important("To fix this a unique (internal) name '#{merchant.name}' has been created for you.")
21
+ end
22
+
23
+ UI.message("Created merchant #{merchant.merchant_id}")
24
+ UI.success("Finished creating new merchant '#{merchant_name}' on the Dev Center")
25
+ end
26
+ end
27
+
28
+ def associate(_options, args)
29
+ login
30
+
31
+ app = Spaceship.app.find(app_identifier)
32
+
33
+ if app
34
+ app.update_service(Spaceship.app_service.apple_pay.on)
35
+
36
+ UI.message("Validating merchants before association")
37
+
38
+ # associate requires identifiers to exist. This splits the provided identifiers into existing/non-existing. See: https://ruby-doc.org/core/Enumerable.html#method-i-partition
39
+ valid_identifiers, errored_identifiers = args.partition { |identifier| merchant_exists?(identifier) }
40
+ new_merchants = valid_identifiers.map { |identifier| find_merchant(identifier) }
41
+
42
+ errored_identifiers.each do |merchant_identifier|
43
+ UI.message("[DevCenter] Merchant '#{merchant_identifier}' does not exist, please create it first, skipping for now")
44
+ end
45
+
46
+ UI.message("Finalising association with #{new_merchants.count} #{pluralize('merchant', new_merchants)}")
47
+ app.associate_merchants(new_merchants)
48
+ UI.success("Done!")
49
+ else
50
+ UI.message("[DevCenter] App '#{Produce.config[:app_identifier]}' does not exist, nothing to associate with the merchants")
51
+ end
52
+ end
53
+
54
+ def login
55
+ UI.message("Starting login with user '#{Produce.config[:username]}'")
56
+ Spaceship.login(Produce.config[:username], nil)
57
+ Spaceship.select_team
58
+ UI.message("Successfully logged in")
59
+ end
60
+
61
+ def app_identifier
62
+ Produce.config[:app_identifier]
63
+ end
64
+
65
+ def pluralize(singular, arr)
66
+ return singular if arr.count == 1
67
+
68
+ "#{singular}s"
69
+ end
70
+
71
+ def merchant_exists?(identifier)
72
+ find_merchant(identifier)
73
+ end
74
+
75
+ def detect_merchant_identifier
76
+ self.class.detect_merchant_identifier
77
+ end
78
+
79
+ def self.detect_merchant_identifier(config = Produce.config)
80
+ identifier = config[:merchant_identifier] || input("Merchant identifier (reverse-domain name style string starting with 'merchant'): ", ":merchant_identifier option is required")
81
+ prepare_identifier(identifier)
82
+ end
83
+
84
+ def self.input(message, error_message)
85
+ if UI.interactive?
86
+ UI.input(message)
87
+ else
88
+ UI.user_error!(error_message)
89
+ end
90
+ end
91
+
92
+ def self.prepare_identifier(identifier)
93
+ return identifier if identifier.start_with?("merchant.")
94
+
95
+ "merchant.#{identifier}"
96
+ end
97
+
98
+ def find_merchant(identifier)
99
+ self.class.find_merchant(identifier)
100
+ end
101
+
102
+ def self.find_merchant(identifier, merchant: Spaceship.merchant)
103
+ @cache ||= {}
104
+ @cache[identifier] ||= merchant.find(identifier, mac: mac?)
105
+ end
106
+
107
+ def self.mac?(config = Produce.config)
108
+ config[:platform].to_s == "mac"
109
+ end
110
+
111
+ def merchant_name_from_identifier(identifier)
112
+ self.class.merchant_name_from_identifier(identifier)
113
+ end
114
+
115
+ def self.merchant_name_from_identifier(identifier)
116
+ capitalized_words = identifier.split(".").map(&:capitalize)
117
+ capitalized_words.reverse.join(' ')
118
+ end
119
+ end
120
+ end
@@ -25,6 +25,7 @@ module Spaceship
25
25
  Passbook = Spaceship::Portal::Passbook
26
26
  WebsitePush = Spaceship::Portal::WebsitePush
27
27
  AppService = Spaceship::Portal::AppService
28
+ Merchant = Spaceship::Portal::Merchant
28
29
 
29
30
  # iTunes Connect
30
31
  AppVersion = Spaceship::Tunes::AppVersion
@@ -144,6 +144,13 @@ module Spaceship
144
144
  self.class.factory(app)
145
145
  end
146
146
 
147
+ # Associate specific merchants with this app
148
+ # @return (App) The updated detailed app. This is nil if the app couldn't be found
149
+ def associate_merchants(merchants)
150
+ app = client.associate_merchants_with_app(self, merchants, mac?)
151
+ self.class.factory(app)
152
+ end
153
+
147
154
  # Update a service for the app with given AppService object
148
155
  # @return (App) The updated detailed app. This is nil if the app couldn't be found
149
156
  def update_service(service)
@@ -0,0 +1,84 @@
1
+ module Spaceship
2
+ module Portal
3
+ # Represents a Merchant ID from the Developer Portal
4
+ class Merchant < PortalBase
5
+ # @return (String) The identifier of this merchant, provided by the Dev Portal
6
+ # @example
7
+ # "LM1UX73BAC"
8
+ attr_accessor :merchant_id
9
+
10
+ # @return (String) The name you provided for this merchant
11
+ # @example
12
+ # "Spaceship Production"
13
+ attr_accessor :name
14
+
15
+ # @return (String) the supported platform of this merchant
16
+ # @example
17
+ # "ios"
18
+ attr_accessor :platform
19
+
20
+ # Prefix provided by the Dev Portal
21
+ # @example
22
+ # "5A9972XTK2"
23
+ attr_accessor :prefix
24
+
25
+ # @return (String) The bundle_id (merchant identifier) of merchant id
26
+ # @example
27
+ # "merchant.com.krausefx.app.production"
28
+ attr_accessor :bundle_id
29
+
30
+ # @return (String) Status of the merchant
31
+ # @example
32
+ # "current"
33
+ attr_accessor :status
34
+
35
+ attr_mapping(
36
+ 'omcId' => :merchant_id,
37
+ 'name' => :name,
38
+ 'prefix' => :prefix,
39
+ 'identifier' => :bundle_id,
40
+ 'status' => :status
41
+ )
42
+
43
+ class << self
44
+ # @param mac [Bool] Fetches Mac merchant if true
45
+ # @return (Array) Returns all merchants available for this account
46
+ def all(mac: false)
47
+ client.merchants(mac: mac).map { |merchant| new(merchant) }
48
+ end
49
+
50
+ # Creates a new Merchant on the Apple Dev Portal
51
+ #
52
+ # @param bundle_id [String] the bundle id (merchant_identifier) of the merchant
53
+ # @param name [String] the name of the Merchant
54
+ # @param mac [Bool] is this a Mac Merchant?
55
+ # @return (Merchant) The Merchant you just created
56
+ def create!(bundle_id: nil, name: nil, mac: false)
57
+ new_merchant = client.create_merchant!(name, bundle_id, mac: mac)
58
+ new(new_merchant)
59
+ end
60
+
61
+ # Find a specific Merchant ID based on the bundle_id
62
+ # @param mac [Bool] Searches Mac merchants if true
63
+ # @return (Merchant) The Merchant you're looking for. This is nil if the merchant can't be found.
64
+ def find(bundle_id, mac: false)
65
+ all(mac: mac).find do |merchant|
66
+ merchant.bundle_id == bundle_id
67
+ end
68
+ end
69
+ end
70
+
71
+ # Delete this Merchant
72
+ # @return (Merchant) The merchant you just deleted
73
+ def delete!
74
+ client.delete_merchant!(merchant_id, mac: mac?)
75
+ self
76
+ end
77
+
78
+ # @return (Bool) Is this a Mac merchant?
79
+ def mac?
80
+ platform == 'mac'
81
+ end
82
+ end
83
+ end
84
+ end
@@ -10,5 +10,6 @@ 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/merchant'
13
14
  require 'spaceship/portal/passbook'
14
15
  require 'spaceship/portal/invite'
@@ -132,6 +132,18 @@ module Spaceship
132
132
  details_for_app(app)
133
133
  end
134
134
 
135
+ def associate_merchants_with_app(app, merchants, mac)
136
+ ensure_csrf(Spaceship::Merchant)
137
+
138
+ request(:post, "account/#{platform_slug(mac)}/identifiers/assignOMCToAppId.action", {
139
+ teamId: team_id,
140
+ appIdId: app.app_id,
141
+ omcIds: merchants.map(&:merchant_id)
142
+ })
143
+
144
+ details_for_app(app)
145
+ end
146
+
135
147
  def valid_name_for(input)
136
148
  latinized = input.to_slug.transliterate
137
149
  latinized = latinized.gsub(/[^0-9A-Za-z\d\s]/, '') # remove non-valid characters
@@ -273,6 +285,43 @@ module Spaceship
273
285
  parse_response(r)
274
286
  end
275
287
 
288
+ #####################################################
289
+ # @!group Merchant
290
+ #####################################################
291
+
292
+ def merchants(mac: false)
293
+ paging do |page_number|
294
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/listOMCs.action", {
295
+ teamId: team_id,
296
+ pageNumber: page_number,
297
+ pageSize: page_size,
298
+ sort: 'name=asc'
299
+ })
300
+ parse_response(r, 'identifierList')
301
+ end
302
+ end
303
+
304
+ def create_merchant!(name, bundle_id, mac: false)
305
+ ensure_csrf(Spaceship::Merchant)
306
+
307
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/addOMC.action", {
308
+ name: name,
309
+ identifier: bundle_id,
310
+ teamId: team_id
311
+ })
312
+ parse_response(r, 'omcId')
313
+ end
314
+
315
+ def delete_merchant!(merchant_id, mac: false)
316
+ ensure_csrf(Spaceship::Merchant)
317
+
318
+ r = request(:post, "account/#{platform_slug(mac)}/identifiers/deleteOMC.action", {
319
+ teamId: team_id,
320
+ omcId: merchant_id
321
+ })
322
+ parse_response(r)
323
+ end
324
+
276
325
  #####################################################
277
326
  # @!group App Groups
278
327
  #####################################################
@@ -78,6 +78,11 @@ module Spaceship
78
78
  def provisioning_profile
79
79
  Spaceship::ProvisioningProfile.set_client(@client)
80
80
  end
81
+
82
+ # @return (Class) Access the merchants for the spaceship
83
+ def merchant
84
+ Spaceship::Merchant.set_client(@client)
85
+ end
81
86
  end
82
87
  end
83
88
 
@@ -126,5 +131,9 @@ module Spaceship
126
131
  def client
127
132
  Spaceship::Portal.client
128
133
  end
134
+
135
+ def merchant
136
+ Spaceship::Portal.merchant
137
+ end
129
138
  end
130
139
  end
@@ -24,7 +24,7 @@ module Supply
24
24
  FastlaneCore::ConfigItem.new(key: :rollout,
25
25
  short_option: "-r",
26
26
  description: "The percentage of the user fraction when uploading to the rollout track",
27
- default_value: '0.1',
27
+ optional: true,
28
28
  verify_block: proc do |value|
29
29
  min = 0.0
30
30
  max = 1.0
@@ -43,7 +43,7 @@ module Supply
43
43
  # the actual value passed for the rollout argument does not matter because it will be ignored by the Google Play API
44
44
  # but it has to be between 0.0 and 1.0 to pass the validity check. So we are passing the default value 0.1
45
45
  client.update_track(Supply.config[:track], 0.1, nil)
46
- client.update_track(Supply.config[:track_promote_to], Supply.config[:rollout], version_codes)
46
+ client.update_track(Supply.config[:track_promote_to], Supply.config[:rollout] || 0.1, version_codes)
47
47
  end
48
48
 
49
49
  def upload_changelogs(language)
@@ -157,8 +157,8 @@ module Supply
157
157
  UI.message("Updating track '#{Supply.config[:track]}'...")
158
158
  check_superseded_tracks(apk_version_codes) if Supply.config[:check_superseded_tracks]
159
159
 
160
- if Supply.config[:track].eql? "rollout"
161
- client.update_track(Supply.config[:track], Supply.config[:rollout], apk_version_codes)
160
+ if Supply.config[:track].eql?("rollout")
161
+ client.update_track(Supply.config[:track], Supply.config[:rollout] || 0.1, apk_version_codes)
162
162
  else
163
163
  client.update_track(Supply.config[:track], 1.0, apk_version_codes)
164
164
  end
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.52.0.beta.20170809010003
4
+ version: 2.52.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
@@ -830,6 +830,7 @@ files:
830
830
  - fastlane/lib/assets/s3_plist_template.erb
831
831
  - fastlane/lib/assets/s3_version_template.erb
832
832
  - fastlane/lib/fastlane.rb
833
+ - fastlane/lib/fastlane/.DS_Store
833
834
  - fastlane/lib/fastlane/action.rb
834
835
  - fastlane/lib/fastlane/action_collector.rb
835
836
  - fastlane/lib/fastlane/actions/README.md
@@ -1233,6 +1234,7 @@ files:
1233
1234
  - produce/lib/produce/group.rb
1234
1235
  - produce/lib/produce/itunes_connect.rb
1235
1236
  - produce/lib/produce/manager.rb
1237
+ - produce/lib/produce/merchant.rb
1236
1238
  - produce/lib/produce/options.rb
1237
1239
  - produce/lib/produce/service.rb
1238
1240
  - scan/README.md
@@ -1317,6 +1319,7 @@ files:
1317
1319
  - spaceship/lib/spaceship/portal/device.rb
1318
1320
  - spaceship/lib/spaceship/portal/invite.rb
1319
1321
  - spaceship/lib/spaceship/portal/key.rb
1322
+ - spaceship/lib/spaceship/portal/merchant.rb
1320
1323
  - spaceship/lib/spaceship/portal/passbook.rb
1321
1324
  - spaceship/lib/spaceship/portal/person.rb
1322
1325
  - spaceship/lib/spaceship/portal/persons.rb
@@ -1403,24 +1406,24 @@ metadata:
1403
1406
  post_install_message:
1404
1407
  rdoc_options: []
1405
1408
  require_paths:
1406
- - spaceship/lib
1407
- - scan/lib
1408
- - sigh/lib
1409
- - snapshot/lib
1410
- - screengrab/lib
1411
- - fastlane/lib
1412
1409
  - cert/lib
1413
- - pem/lib
1414
- - gym/lib
1415
- - produce/lib
1410
+ - credentials_manager/lib
1416
1411
  - deliver/lib
1417
- - supply/lib
1418
- - match/lib
1412
+ - fastlane/lib
1413
+ - fastlane_core/lib
1419
1414
  - frameit/lib
1420
- - credentials_manager/lib
1415
+ - gym/lib
1416
+ - match/lib
1417
+ - pem/lib
1421
1418
  - pilot/lib
1422
1419
  - precheck/lib
1423
- - fastlane_core/lib
1420
+ - produce/lib
1421
+ - scan/lib
1422
+ - screengrab/lib
1423
+ - sigh/lib
1424
+ - snapshot/lib
1425
+ - spaceship/lib
1426
+ - supply/lib
1424
1427
  required_ruby_version: !ruby/object:Gem::Requirement
1425
1428
  requirements:
1426
1429
  - - ">="
@@ -1428,14 +1431,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
1428
1431
  version: 2.0.0
1429
1432
  required_rubygems_version: !ruby/object:Gem::Requirement
1430
1433
  requirements:
1431
- - - ">"
1434
+ - - ">="
1432
1435
  - !ruby/object:Gem::Version
1433
- version: 1.3.1
1436
+ version: '0'
1434
1437
  requirements: []
1435
1438
  rubyforge_project:
1436
- rubygems_version: 2.4.5.1
1439
+ rubygems_version: 2.6.8
1437
1440
  signing_key:
1438
1441
  specification_version: 4
1439
1442
  summary: The easiest way to automate beta deployments and releases for your iOS and
1440
1443
  Android apps
1441
1444
  test_files: []
1445
+ has_rdoc: