fastlane 2.32.0.beta.20170518010031 → 2.32.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 +4 -4
- data/fastlane/lib/fastlane/runner.rb +3 -3
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core.rb +1 -0
- data/fastlane_core/lib/fastlane_core/project.rb +2 -2
- data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_exception.rb +0 -5
- data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_not_counted_error.rb +17 -0
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +1 -3
- data/spaceship/lib/spaceship/tunes/iap.rb +1 -0
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +48 -4
- data/spaceship/lib/spaceship/tunes/iap_subscription_pricing_tier.rb +76 -0
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +20 -5
- metadata +18 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b4d571b0849ea335ab1184f3436547b7386cbd58
|
|
4
|
+
data.tar.gz: f75a49396c4482f4b4b99c82716252f1f3d6630d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aef8f31380fc8ad25c5df0f3200d703b31e004bf0f0d4b8c54aad4501c7df6f25e4b208d6c273e2e53d150d64f1aa934efc84324b1eef66106b7289b3b306890
|
|
7
|
+
data.tar.gz: 11f6357a4d06b3e37dee4aad05f8e74b36f3476af7a8944cf2c335ce6284309a14dbd6d82f3775c92008736c84845668a8a594dd4a46a1b68478dd7c1849640c
|
|
@@ -252,9 +252,9 @@ module Fastlane
|
|
|
252
252
|
class_ref.run(arguments)
|
|
253
253
|
end
|
|
254
254
|
end
|
|
255
|
-
rescue
|
|
256
|
-
|
|
257
|
-
|
|
255
|
+
rescue Interrupt => e
|
|
256
|
+
raise e # reraise the interruption to avoid logging this as a crash
|
|
257
|
+
rescue FastlaneCore::Interface::FastlaneCommonException => e # these are exceptions that we dont count as crashes
|
|
258
258
|
raise e
|
|
259
259
|
rescue FastlaneCore::Interface::FastlaneError => e # user_error!
|
|
260
260
|
FastlaneCore::CrashReporter.report_crash(exception: e, action: method_sym)
|
|
@@ -38,6 +38,7 @@ require 'fastlane_core/ui/errors/fastlane_exception'
|
|
|
38
38
|
require 'fastlane_core/ui/errors/fastlane_error'
|
|
39
39
|
require 'fastlane_core/ui/errors/fastlane_crash'
|
|
40
40
|
require 'fastlane_core/ui/errors/fastlane_shell_error'
|
|
41
|
+
require 'fastlane_core/ui/errors/fastlane_not_counted_error'
|
|
41
42
|
|
|
42
43
|
# Third Party code
|
|
43
44
|
require 'colored'
|
|
@@ -314,9 +314,9 @@ module FastlaneCore
|
|
|
314
314
|
UI.error("Could not read build settings. Make sure that the scheme \"#{options[:scheme]}\" is configured for running by going to Product → Scheme → Edit Scheme…, selecting the \"Build\" section, checking the \"Run\" checkbox and closing the scheme window.")
|
|
315
315
|
end
|
|
316
316
|
rescue Timeout::Error
|
|
317
|
-
|
|
317
|
+
raise FastlaneCore::Interface::FastlaneDependencyCausedException.new, "xcodebuild -showBuildSettings timed-out after #{timeout} seconds and #{retries} retries." \
|
|
318
318
|
" You can override the timeout value with the environment variable FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT," \
|
|
319
|
-
" and the number of retries with the environment variable FASTLANE_XCODEBUILD_SETTINGS_RETRIES "
|
|
319
|
+
" and the number of retries with the environment variable FASTLANE_XCODEBUILD_SETTINGS_RETRIES ".red
|
|
320
320
|
end
|
|
321
321
|
end
|
|
322
322
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module FastlaneCore
|
|
2
|
+
class Interface
|
|
3
|
+
# Super class for exception types that we do not want to record
|
|
4
|
+
# explictly as crashes or user errors
|
|
5
|
+
class FastlaneCommonException < FastlaneException; end
|
|
6
|
+
|
|
7
|
+
# Raised when there is a build failure in xcodebuild
|
|
8
|
+
class FastlaneBuildFailure < FastlaneCommonException; end
|
|
9
|
+
|
|
10
|
+
# Raised when a test fails when being run by tools such as scan or snapshot
|
|
11
|
+
class FastlaneTestFailure < FastlaneCommonException; end
|
|
12
|
+
|
|
13
|
+
# Raise this type of exception when a failure caused by a third party
|
|
14
|
+
# dependency (i.e. xcodebuild, gradle, slather) happens.
|
|
15
|
+
class FastlaneDependencyCausedException < FastlaneCommonException; end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -64,9 +64,7 @@ module Commander
|
|
|
64
64
|
FastlaneCore::CrashReporter.report_crash(exception: e, action: @program[:name])
|
|
65
65
|
abort e.to_s
|
|
66
66
|
end
|
|
67
|
-
rescue
|
|
68
|
-
FastlaneCore::Interface::FastlaneBuildFailure, # build_failure!
|
|
69
|
-
FastlaneCore::Interface::FastlaneTestFailure => e # test_failure!
|
|
67
|
+
rescue FastlaneCore::Interface::FastlaneCommonException => e # these are exceptions that we dont count as crashes
|
|
70
68
|
display_user_error!(e, e.to_s)
|
|
71
69
|
rescue FastlaneCore::Interface::FastlaneError => e # user_error!
|
|
72
70
|
collector.did_raise_error(@program[:name])
|
|
@@ -118,9 +118,8 @@ module Spaceship
|
|
|
118
118
|
# }
|
|
119
119
|
# ]
|
|
120
120
|
def pricing_intervals
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
parsed_intervals << {
|
|
121
|
+
@pricing_intervals ||= raw_data["pricingIntervals"].map do |interval|
|
|
122
|
+
{
|
|
124
123
|
tier: interval["value"]["tierStem"].to_i,
|
|
125
124
|
begin_date: interval["value"]["priceTierEffectiveDate"],
|
|
126
125
|
end_date: interval["value"]["priceTierEndDate"],
|
|
@@ -128,7 +127,6 @@ module Spaceship
|
|
|
128
127
|
country: interval["value"]["country"]
|
|
129
128
|
}
|
|
130
129
|
end
|
|
131
|
-
return parsed_intervals
|
|
132
130
|
end
|
|
133
131
|
|
|
134
132
|
# @return (String) Human Readable type of the purchase
|
|
@@ -217,6 +215,52 @@ module Spaceship
|
|
|
217
215
|
def delete!
|
|
218
216
|
client.delete_iap!(app_id: application.apple_id, purchase_id: self.purchase_id)
|
|
219
217
|
end
|
|
218
|
+
|
|
219
|
+
# Retrieves the actual prices for an iap.
|
|
220
|
+
#
|
|
221
|
+
# @return ([]) An empty array
|
|
222
|
+
# if the iap is not yet cleared for sale
|
|
223
|
+
# @return ([Spaceship::Tunes::PricingInfo]) An array of pricing infos from the same pricing tier
|
|
224
|
+
# if the iap uses world wide pricing
|
|
225
|
+
# @return ([Spaceship::Tunes::IAPSubscriptionPricingInfo]) An array of pricing infos from multple subscription pricing tiers
|
|
226
|
+
# if the iap uses territorial pricing
|
|
227
|
+
def pricing_info
|
|
228
|
+
return [] unless cleared_for_sale
|
|
229
|
+
return world_wide_pricing_info if world_wide_pricing?
|
|
230
|
+
territorial_pricing_info
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
private
|
|
234
|
+
|
|
235
|
+
# Checks wheather an iap uses world wide or territorial pricing.
|
|
236
|
+
#
|
|
237
|
+
# @return (true, false)
|
|
238
|
+
def world_wide_pricing?
|
|
239
|
+
pricing_intervals.fetch(0, {})[:country] == "WW"
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# Maps a single pricing interval to pricing infos.
|
|
243
|
+
#
|
|
244
|
+
# @return ([Spaceship::Tunes::PricingInfo]) An array of pricing infos from the same tier
|
|
245
|
+
def world_wide_pricing_info
|
|
246
|
+
client
|
|
247
|
+
.pricing_tiers
|
|
248
|
+
.find { |p| p.tier_stem == pricing_intervals.first[:tier].to_s }
|
|
249
|
+
.pricing_info
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# Maps pricing intervals to their respective subscription pricing infos.
|
|
253
|
+
#
|
|
254
|
+
# @return ([Spaceship::Tunes::IAPSubscriptionPricingInfo]) An array of subscription pricing infos
|
|
255
|
+
def territorial_pricing_info
|
|
256
|
+
pricing_matrix = client.subscription_pricing_tiers(application.apple_id)
|
|
257
|
+
pricing_intervals.map do |interval|
|
|
258
|
+
pricing_matrix
|
|
259
|
+
.find { |p| p.tier_stem == interval[:tier].to_s }
|
|
260
|
+
.pricing_info
|
|
261
|
+
.find { |i| i.country_code == interval[:country] }
|
|
262
|
+
end
|
|
263
|
+
end
|
|
220
264
|
end
|
|
221
265
|
end
|
|
222
266
|
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module Spaceship
|
|
2
|
+
module Tunes
|
|
3
|
+
class IAPSubscriptionPricingTier < TunesBase
|
|
4
|
+
# @return (String) Number of the subscription price tier (e.g. "1" for Tier 1 )
|
|
5
|
+
attr_accessor :tier_stem
|
|
6
|
+
|
|
7
|
+
# @return (String) Name of the tier (e.g. "ITC.addons.pricing.tier.1" for Tier 1)
|
|
8
|
+
attr_accessor :tier_name
|
|
9
|
+
|
|
10
|
+
# @return ([Spaceship::Tunes::IAPSubscriptionPricingInfo]) A list of all prices for the respective countries
|
|
11
|
+
attr_accessor :pricing_info
|
|
12
|
+
|
|
13
|
+
attr_mapping(
|
|
14
|
+
"tierStem" => :tier_stem,
|
|
15
|
+
"tierName" => :tier_name
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
# Create a new object based on a hash.
|
|
20
|
+
# This is used to create a new object based on the server response.
|
|
21
|
+
def factory(attrs)
|
|
22
|
+
obj = self.new(attrs)
|
|
23
|
+
obj.unfold_pricing_info(attrs["pricingInfo"])
|
|
24
|
+
|
|
25
|
+
return obj
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def unfold_pricing_info(attrs)
|
|
30
|
+
unfolded_pricing_info = attrs.map { |info| IAPSubscriptionPricingInfo.new(info) }
|
|
31
|
+
instance_variable_set(:@pricing_info, unfolded_pricing_info)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class IAPSubscriptionPricingInfo < TunesBase
|
|
36
|
+
# @return (String) country code, e.g. "US"
|
|
37
|
+
attr_accessor :country_code
|
|
38
|
+
|
|
39
|
+
# @return (String) currency symbol, e.g. "$"
|
|
40
|
+
attr_accessor :currency_symbol
|
|
41
|
+
|
|
42
|
+
# @return (String) currency code, e.g. "USD"
|
|
43
|
+
attr_accessor :currency_code
|
|
44
|
+
|
|
45
|
+
# @return (Number) net proceedings for the developer in the first year
|
|
46
|
+
attr_accessor :wholesale_price
|
|
47
|
+
|
|
48
|
+
# @return (Number) net proceedings for the developer after the first year
|
|
49
|
+
attr_accessor :wholesale_price2
|
|
50
|
+
|
|
51
|
+
# @return (Number) customer price
|
|
52
|
+
attr_accessor :retail_price
|
|
53
|
+
|
|
54
|
+
# @return (String) formatted customer price, e.g. "$0.00"
|
|
55
|
+
attr_accessor :f_retail_price
|
|
56
|
+
|
|
57
|
+
# @return (String) formatted net proceedings in the first year, e.g. "$0.00"
|
|
58
|
+
attr_accessor :f_wholesale_price
|
|
59
|
+
|
|
60
|
+
# @return (String) formatted net proceedings after the first year, e.g. "$0.00"
|
|
61
|
+
attr_accessor :f_wholesale_price2
|
|
62
|
+
|
|
63
|
+
attr_mapping(
|
|
64
|
+
"countryCode" => :country_code,
|
|
65
|
+
"currencySymbol" => :currency_symbol,
|
|
66
|
+
"currencyCode" => :currency_code,
|
|
67
|
+
"wholesalePrice" => :wholesale_price,
|
|
68
|
+
"wholesalePrice2" => :wholesale_price2,
|
|
69
|
+
"retailPrice" => :retail_price,
|
|
70
|
+
"fRetailPrice" => :f_retail_price,
|
|
71
|
+
"fWholesalePrice" => :f_wholesale_price,
|
|
72
|
+
"fWholesalePrice2" => :f_wholesale_price2
|
|
73
|
+
)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -514,9 +514,11 @@ module Spaceship
|
|
|
514
514
|
# }, {
|
|
515
515
|
# ...
|
|
516
516
|
def pricing_tiers
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
517
|
+
@pricing_tiers ||= begin
|
|
518
|
+
r = request(:get, 'ra/apps/pricing/matrix')
|
|
519
|
+
data = parse_response(r, 'data')['pricingTiers']
|
|
520
|
+
data.map { |tier| Spaceship::Tunes::PricingTier.factory(tier) }
|
|
521
|
+
end
|
|
520
522
|
end
|
|
521
523
|
|
|
522
524
|
#####################################################
|
|
@@ -1011,18 +1013,31 @@ module Spaceship
|
|
|
1011
1013
|
handle_itc_response(r)
|
|
1012
1014
|
end
|
|
1013
1015
|
|
|
1014
|
-
#
|
|
1016
|
+
# Loads the full In-App-Purchases
|
|
1015
1017
|
def load_iap(app_id: nil, purchase_id: nil)
|
|
1016
1018
|
r = request(:get, "ra/apps/#{app_id}/iaps/#{purchase_id}")
|
|
1017
1019
|
parse_response(r, 'data')
|
|
1018
1020
|
end
|
|
1019
1021
|
|
|
1020
|
-
#
|
|
1022
|
+
# Loads the full In-App-Purchases-Family
|
|
1021
1023
|
def load_iap_family(app_id: nil, family_id: nil)
|
|
1022
1024
|
r = request(:get, "ra/apps/#{app_id}/iaps/family/#{family_id}")
|
|
1023
1025
|
parse_response(r, 'data')
|
|
1024
1026
|
end
|
|
1025
1027
|
|
|
1028
|
+
# Loads the full In-App-Purchases-Pricing-Matrix
|
|
1029
|
+
# note: the matrix is the same for any app_id
|
|
1030
|
+
#
|
|
1031
|
+
# @param app_id (String) The Apple ID of any app
|
|
1032
|
+
# @return ([Spaceship::Tunes::IAPSubscriptionPricingTier]) An array of pricing tiers
|
|
1033
|
+
def subscription_pricing_tiers(app_id)
|
|
1034
|
+
@subscription_pricing_tiers ||= begin
|
|
1035
|
+
r = request(:get, "ra/apps/#{app_id}/iaps/pricing/matrix/recurring")
|
|
1036
|
+
data = parse_response(r, "data")["pricingTiers"]
|
|
1037
|
+
data.map { |tier| Spaceship::Tunes::IAPSubscriptionPricingTier.factory(tier) }
|
|
1038
|
+
end
|
|
1039
|
+
end
|
|
1040
|
+
|
|
1026
1041
|
# updates an In-App-Purchases-Family
|
|
1027
1042
|
def update_iap_family!(app_id: nil, family_id: nil, data: nil)
|
|
1028
1043
|
with_tunes_retry do
|
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.32.0
|
|
4
|
+
version: 2.32.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Felix Krause
|
|
@@ -1111,6 +1111,7 @@ files:
|
|
|
1111
1111
|
- fastlane_core/lib/fastlane_core/ui/errors/fastlane_crash.rb
|
|
1112
1112
|
- fastlane_core/lib/fastlane_core/ui/errors/fastlane_error.rb
|
|
1113
1113
|
- fastlane_core/lib/fastlane_core/ui/errors/fastlane_exception.rb
|
|
1114
|
+
- fastlane_core/lib/fastlane_core/ui/errors/fastlane_not_counted_error.rb
|
|
1114
1115
|
- fastlane_core/lib/fastlane_core/ui/errors/fastlane_shell_error.rb
|
|
1115
1116
|
- fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb
|
|
1116
1117
|
- fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb
|
|
@@ -1330,6 +1331,7 @@ files:
|
|
|
1330
1331
|
- spaceship/lib/spaceship/tunes/iap_family_list.rb
|
|
1331
1332
|
- spaceship/lib/spaceship/tunes/iap_list.rb
|
|
1332
1333
|
- spaceship/lib/spaceship/tunes/iap_status.rb
|
|
1334
|
+
- spaceship/lib/spaceship/tunes/iap_subscription_pricing_tier.rb
|
|
1333
1335
|
- spaceship/lib/spaceship/tunes/iap_type.rb
|
|
1334
1336
|
- spaceship/lib/spaceship/tunes/language_converter.rb
|
|
1335
1337
|
- spaceship/lib/spaceship/tunes/language_item.rb
|
|
@@ -1365,23 +1367,23 @@ metadata:
|
|
|
1365
1367
|
post_install_message:
|
|
1366
1368
|
rdoc_options: []
|
|
1367
1369
|
require_paths:
|
|
1370
|
+
- cert/lib
|
|
1371
|
+
- credentials_manager/lib
|
|
1368
1372
|
- deliver/lib
|
|
1369
|
-
-
|
|
1370
|
-
-
|
|
1373
|
+
- fastlane/lib
|
|
1374
|
+
- fastlane_core/lib
|
|
1371
1375
|
- frameit/lib
|
|
1372
|
-
-
|
|
1376
|
+
- gym/lib
|
|
1373
1377
|
- match/lib
|
|
1378
|
+
- pem/lib
|
|
1379
|
+
- pilot/lib
|
|
1374
1380
|
- produce/lib
|
|
1375
|
-
-
|
|
1376
|
-
-
|
|
1381
|
+
- scan/lib
|
|
1382
|
+
- screengrab/lib
|
|
1377
1383
|
- sigh/lib
|
|
1384
|
+
- snapshot/lib
|
|
1385
|
+
- spaceship/lib
|
|
1378
1386
|
- supply/lib
|
|
1379
|
-
- pilot/lib
|
|
1380
|
-
- credentials_manager/lib
|
|
1381
|
-
- pem/lib
|
|
1382
|
-
- cert/lib
|
|
1383
|
-
- gym/lib
|
|
1384
|
-
- fastlane_core/lib
|
|
1385
1387
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
1386
1388
|
requirements:
|
|
1387
1389
|
- - ">="
|
|
@@ -1389,14 +1391,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
1389
1391
|
version: 2.0.0
|
|
1390
1392
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1391
1393
|
requirements:
|
|
1392
|
-
- - "
|
|
1394
|
+
- - ">="
|
|
1393
1395
|
- !ruby/object:Gem::Version
|
|
1394
|
-
version:
|
|
1396
|
+
version: '0'
|
|
1395
1397
|
requirements: []
|
|
1396
1398
|
rubyforge_project:
|
|
1397
|
-
rubygems_version: 2.
|
|
1399
|
+
rubygems_version: 2.5.2
|
|
1398
1400
|
signing_key:
|
|
1399
1401
|
specification_version: 4
|
|
1400
1402
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|
|
1401
1403
|
Android apps
|
|
1402
1404
|
test_files: []
|
|
1405
|
+
has_rdoc:
|