fastlane 2.28.9 → 2.29.0.beta.20170421010107
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/deliver/lib/assets/summary.html.erb +0 -3
- data/deliver/lib/deliver/options.rb +2 -2
- data/deliver/lib/deliver/upload_metadata.rb +1 -2
- data/fastlane/README.md +2 -6
- data/fastlane/lib/fastlane/actions/artifactory.rb +1 -17
- data/fastlane/lib/fastlane/actions/crashlytics.rb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +1 -1
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +3 -17
- data/fastlane/lib/fastlane/actions/hockey.rb +1 -1
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +3 -3
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +10 -16
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +21 -39
- data/fastlane_core/lib/fastlane_core/helper.rb +5 -7
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +1 -4
- data/fastlane_core/lib/fastlane_core/print_table.rb +9 -4
- data/fastlane_core/lib/fastlane_core/project.rb +4 -16
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +7 -11
- data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +2 -2
- data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +0 -2
- data/fastlane_core/lib/fastlane_core/ui/ui.rb +2 -0
- data/gym/lib/gym/generators/build_command_generator.rb +0 -2
- data/gym/lib/gym/options.rb +0 -10
- data/gym/lib/gym/runner.rb +0 -2
- data/gym/lib/gym/xcode.rb +3 -1
- data/pilot/lib/pilot/build_manager.rb +17 -44
- data/pilot/lib/pilot/commands_generator.rb +1 -2
- data/pilot/lib/pilot/options.rb +2 -3
- data/pilot/lib/pilot/tester_manager.rb +44 -58
- data/snapshot/lib/assets/SnapshotHelper.swift +1 -1
- data/spaceship/lib/spaceship/spaceauth_runner.rb +1 -1
- data/spaceship/lib/spaceship/test_flight.rb +0 -2
- data/spaceship/lib/spaceship/test_flight/base.rb +0 -12
- data/spaceship/lib/spaceship/test_flight/build.rb +8 -22
- data/spaceship/lib/spaceship/test_flight/client.rb +40 -121
- data/spaceship/lib/spaceship/test_flight/group.rb +7 -49
- data/spaceship/lib/spaceship/test_flight/test_info.rb +0 -4
- data/spaceship/lib/spaceship/tunes/app_ratings.rb +2 -74
- data/spaceship/lib/spaceship/tunes/app_status.rb +2 -4
- data/spaceship/lib/spaceship/tunes/application.rb +1 -1
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +11 -48
- data/spaceship/lib/spaceship/tunes/iap_family_details.rb +5 -24
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +3 -14
- data/supply/lib/supply/setup.rb +2 -2
- metadata +16 -33
- data/spaceship/lib/spaceship/test_flight/app_test_info.rb +0 -27
- data/spaceship/lib/spaceship/test_flight/tester.rb +0 -34
@@ -103,22 +103,18 @@ module Commander
|
|
103
103
|
FastlaneCore::UI.important("pilot crashed")
|
104
104
|
FastlaneCore::UI.important("-------------")
|
105
105
|
FastlaneCore::UI.error("Unfortunately the TestFlight update from 11th April 2017 changed")
|
106
|
-
FastlaneCore::UI.error("the way Testers, Groups
|
107
|
-
FastlaneCore::UI.error("We
|
108
|
-
FastlaneCore::UI.error("
|
109
|
-
FastlaneCore::UI.error("
|
106
|
+
FastlaneCore::UI.error("the way Testers, Groups and Builds are managed on iTunes connect.")
|
107
|
+
FastlaneCore::UI.error("We're busy working on migrating _pilot_ to work with the new system")
|
108
|
+
FastlaneCore::UI.error("however it requires lots of changes and refactors from our side")
|
109
|
+
FastlaneCore::UI.error("to ensure that everything keeps working for you as it did before")
|
110
110
|
FastlaneCore::UI.error("")
|
111
|
-
FastlaneCore::UI.error("Please
|
112
|
-
FastlaneCore::UI.error("if you believe this failure is the result of a bug in _pilot_ and we")
|
113
|
-
FastlaneCore::UI.error("will be happy to look into this further.")
|
114
|
-
FastlaneCore::UI.error("")
|
115
|
-
FastlaneCore::UI.error("Please stay tuned for more updates from _fastlane_ as we fix more issues!")
|
111
|
+
FastlaneCore::UI.error("Please follow the WIP pull request on GitHub to stay up to date: https://github.com/fastlane/fastlane/pull/8871")
|
116
112
|
FastlaneCore::UI.error("")
|
113
|
+
FastlaneCore::UI.error("Original error message: #{e}")
|
117
114
|
if FastlaneCore::Globals.verbose?
|
118
115
|
raise e # on verbose mode, we want to show the original stack trace
|
119
116
|
else
|
120
|
-
FastlaneCore::UI.
|
121
|
-
FastlaneCore::UI.user_error!(e.message)
|
117
|
+
FastlaneCore::UI.user_error!("pilot doesn't work with the latest TestFlight yet, we're busy working on upgrading it!")
|
122
118
|
end
|
123
119
|
end
|
124
120
|
|
@@ -45,8 +45,8 @@ module Fastlane
|
|
45
45
|
status = (resolved ? issue.state.green : issue.state.red)
|
46
46
|
|
47
47
|
puts "➡️ #{issue.title.yellow}"
|
48
|
-
puts "
|
49
|
-
puts "
|
48
|
+
puts " #{issue.html_url} [#{status}] #{issue.comments} 💬"
|
49
|
+
puts " #{Time.parse(issue.updated_at).to_pretty}"
|
50
50
|
puts ""
|
51
51
|
end
|
52
52
|
|
@@ -41,7 +41,6 @@ module Gym
|
|
41
41
|
options << "-derivedDataPath '#{config[:derived_data_path]}'" if config[:derived_data_path]
|
42
42
|
options << "-resultBundlePath '#{result_bundle_path}'" if config[:result_bundle]
|
43
43
|
options << config[:xcargs] if config[:xcargs]
|
44
|
-
options << "OTHER_SWIFT_FLAGS=\"\$(inherited) -Xfrontend -debug-time-function-bodies\"" if config[:analyze_build_time]
|
45
44
|
|
46
45
|
options
|
47
46
|
end
|
@@ -65,7 +64,6 @@ module Gym
|
|
65
64
|
def pipe
|
66
65
|
pipe = []
|
67
66
|
pipe << "| tee #{xcodebuild_log_path.shellescape}"
|
68
|
-
pipe << "| grep .[0-9]ms | grep -v ^0.[0-9]ms | sort -nr > culprits.txt" if Gym.config[:analyze_build_time]
|
69
67
|
unless Gym.config[:disable_xcpretty]
|
70
68
|
formatter = Gym.config[:xcpretty_formatter]
|
71
69
|
pipe << "| xcpretty"
|
data/gym/lib/gym/options.rb
CHANGED
@@ -100,11 +100,6 @@ module Gym
|
|
100
100
|
env_name: "GYM_CODE_SIGNING_IDENTITY",
|
101
101
|
description: "The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH'",
|
102
102
|
optional: true),
|
103
|
-
FastlaneCore::ConfigItem.new(key: :skip_package_ipa,
|
104
|
-
env_name: "GYM_SKIP_PACKAGE_IPA",
|
105
|
-
description: "Should we skip packaging the ipa?",
|
106
|
-
is_string: false,
|
107
|
-
default_value: false),
|
108
103
|
FastlaneCore::ConfigItem.new(key: :include_symbols,
|
109
104
|
short_option: "-m",
|
110
105
|
env_name: "GYM_INCLUDE_SYMBOLS",
|
@@ -277,11 +272,6 @@ module Gym
|
|
277
272
|
verify_block: proc do |value|
|
278
273
|
UI.user_error!("Report output location not found at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
279
274
|
end),
|
280
|
-
FastlaneCore::ConfigItem.new(key: :analyze_build_time,
|
281
|
-
env_name: "GYM_ANALYZE_BUILD_TIME",
|
282
|
-
description: "Analyze the project build time and store the output in culprits.txt file",
|
283
|
-
optional: true,
|
284
|
-
is_string: false),
|
285
275
|
FastlaneCore::ConfigItem.new(key: :xcpretty_utf,
|
286
276
|
env_name: "XCPRETTY_UTF",
|
287
277
|
description: "Have xcpretty use unicode encoding when reporting builds",
|
data/gym/lib/gym/runner.rb
CHANGED
@@ -16,8 +16,6 @@ module Gym
|
|
16
16
|
|
17
17
|
if Gym.project.ios? || Gym.project.tvos?
|
18
18
|
fix_generic_archive # See https://github.com/fastlane/fastlane/pull/4325
|
19
|
-
return BuildCommandGenerator.archive_path if Gym.config[:skip_package_ipa]
|
20
|
-
|
21
19
|
package_app
|
22
20
|
fix_package
|
23
21
|
compress_and_move_dsym
|
data/gym/lib/gym/xcode.rb
CHANGED
@@ -18,7 +18,9 @@ module Gym
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def legacy_api_deprecated?
|
21
|
-
|
21
|
+
UI.user_error!("Unable to locate Xcode. Please make sure to have Xcode installed on your machine") if xcode_version.nil?
|
22
|
+
v = xcode_version
|
23
|
+
Gem::Version.new(v) >= Gem::Version.new('8.3.0')
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
@@ -37,38 +37,19 @@ module Pilot
|
|
37
37
|
UI.message("If you want to skip waiting for the processing to be finished, use the `skip_waiting_for_build_processing` option")
|
38
38
|
latest_build = FastlaneCore::BuildWatcher.wait_for_build_processing_to_be_complete(app_id: app.apple_id, platform: platform)
|
39
39
|
|
40
|
-
distribute(options,
|
40
|
+
distribute(options, latest_build)
|
41
41
|
end
|
42
42
|
|
43
|
-
def distribute(options, build
|
43
|
+
def distribute(options, build)
|
44
44
|
start(options)
|
45
45
|
if config[:apple_id].to_s.length == 0 and config[:app_identifier].to_s.length == 0
|
46
46
|
config[:app_identifier] = UI.input("App Identifier: ")
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
if should_update_app_test_information?(options)
|
55
|
-
app_test_info = Spaceship::TestFlight::AppTestInfo.find(app_id: build.app_id)
|
56
|
-
app_test_info.test_info.feedback_email = options[:beta_app_feedback_email] if options[:beta_app_feedback_email]
|
57
|
-
app_test_info.test_info.description = options[:beta_app_description] if options[:beta_app_description]
|
58
|
-
begin
|
59
|
-
app_test_info.save_for_app!(app_id: build.app_id)
|
60
|
-
UI.success "Successfully set the beta_app_feedback_email and/or beta_app_description"
|
61
|
-
rescue => ex
|
62
|
-
UI.user_error!("Could not set beta_app_feedback_email and/or beta_app_description: #{ex}")
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
if should_update_build_information?(options)
|
67
|
-
begin
|
68
|
-
build.update_build_information!(whats_new: options[:changelog])
|
69
|
-
UI.success "Successfully set the changelog for build"
|
70
|
-
rescue => ex
|
71
|
-
UI.user_error!("Could not set changelog: #{ex}")
|
49
|
+
unless config[:update_build_info_on_upload]
|
50
|
+
if should_update_build_information(options)
|
51
|
+
build.update_build_information!(whats_new: options[:changelog], description: options[:beta_app_description], feedback_email: options[:beta_app_feedback_email])
|
52
|
+
UI.success "Successfully set the changelog and/or description for build"
|
72
53
|
end
|
73
54
|
end
|
74
55
|
|
@@ -120,12 +101,8 @@ module Pilot
|
|
120
101
|
return row
|
121
102
|
end
|
122
103
|
|
123
|
-
def should_update_build_information
|
124
|
-
options[:changelog].to_s.length > 0
|
125
|
-
end
|
126
|
-
|
127
|
-
def should_update_app_test_information?(options)
|
128
|
-
options[:beta_app_description].to_s.length > 0 || options[:beta_app_feedback_email].to_s.length > 0
|
104
|
+
def should_update_build_information(options)
|
105
|
+
options[:changelog].to_s.length > 0 or options[:beta_app_description].to_s.length > 0 or options[:beta_app_feedback_email].to_s.length > 0
|
129
106
|
end
|
130
107
|
|
131
108
|
def distribute_build(uploaded_build, options)
|
@@ -133,10 +110,10 @@ module Pilot
|
|
133
110
|
|
134
111
|
# This is where we could add a check to see if encryption is required and has been updated
|
135
112
|
uploaded_build.export_compliance.encryption_updated = false
|
113
|
+
uploaded_build.beta_review_info.demo_account_required = false
|
114
|
+
uploaded_build.submit_for_testflight_review!
|
136
115
|
|
137
116
|
if options[:distribute_external]
|
138
|
-
uploaded_build.beta_review_info.demo_account_required = false
|
139
|
-
uploaded_build.submit_for_testflight_review!
|
140
117
|
external_group = Spaceship::TestFlight::Group.default_external_group(app_id: uploaded_build.app_id)
|
141
118
|
uploaded_build.add_group!(external_group) unless external_group.nil?
|
142
119
|
|
@@ -144,18 +121,14 @@ module Pilot
|
|
144
121
|
UI.user_error!("You must specify at least one group using the `:groups` option to distribute externally")
|
145
122
|
end
|
146
123
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
groups.
|
152
|
-
uploaded_build.add_group!(group)
|
153
|
-
end
|
124
|
+
end
|
125
|
+
|
126
|
+
if options[:groups]
|
127
|
+
groups = Group.filter_groups(app_id: uploaded_build.app_id) do |group|
|
128
|
+
options[:groups].include?(group.name)
|
154
129
|
end
|
155
|
-
|
156
|
-
|
157
|
-
if uploaded_build.export_compliance_missing?
|
158
|
-
uploaded_build.save!
|
130
|
+
groups.each do |group|
|
131
|
+
uploaded_build.add_group!(group)
|
159
132
|
end
|
160
133
|
end
|
161
134
|
|
@@ -29,8 +29,7 @@ module Pilot
|
|
29
29
|
begin
|
30
30
|
mgr.public_send(action, config)
|
31
31
|
rescue => ex
|
32
|
-
|
33
|
-
message = (args.count > 1) ? "[#{address}]: #{ex}" : ex
|
32
|
+
message = "[#{address}]: #{ex}"
|
34
33
|
failures << message
|
35
34
|
UI.error(message)
|
36
35
|
end
|
data/pilot/lib/pilot/options.rb
CHANGED
@@ -32,7 +32,7 @@ module Pilot
|
|
32
32
|
optional: true,
|
33
33
|
env_name: "PILOT_IPA",
|
34
34
|
description: "Path to the ipa file to upload",
|
35
|
-
default_value: Dir["*.ipa"].
|
35
|
+
default_value: Dir["*.ipa"].first,
|
36
36
|
verify_block: proc do |value|
|
37
37
|
UI.user_error!("Could not find ipa file at path '#{value}'") unless File.exist? value
|
38
38
|
UI.user_error!("'#{value}' doesn't seem to be an ipa file") unless value.end_with? ".ipa"
|
@@ -65,10 +65,9 @@ module Pilot
|
|
65
65
|
is_string: false,
|
66
66
|
default_value: false),
|
67
67
|
FastlaneCore::ConfigItem.new(key: :update_build_info_on_upload,
|
68
|
-
deprecated: true,
|
69
68
|
short_option: "-x",
|
70
69
|
env_name: "PILOT_UPDATE_BUILD_INFO_ON_UPLOAD",
|
71
|
-
description: "Update build info immediately after validation. This
|
70
|
+
description: "Update build info immediately after validation. This will set the changelog even if PILOT_SKIP_SUBMISSION is set, but will have no effect if PILOT_SKIP_WAITING_FOR_BUILD_PROCESSING is set",
|
72
71
|
is_string: false,
|
73
72
|
default_value: false),
|
74
73
|
FastlaneCore::ConfigItem.new(key: :apple_id,
|
@@ -7,21 +7,38 @@ module Pilot
|
|
7
7
|
def add_tester(options)
|
8
8
|
start(options)
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
if config[:groups]
|
11
|
+
UI.important("Currently pilot doesn't support groups yet, we're working on restoring that functionality")
|
12
|
+
config[:groups] = nil
|
13
|
+
end
|
14
14
|
|
15
15
|
begin
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
tester = Spaceship::Tunes::Tester::Internal.find(config[:email])
|
17
|
+
tester ||= Spaceship::Tunes::Tester::External.find(config[:email])
|
18
|
+
|
19
|
+
if tester
|
20
|
+
UI.success("Existing tester #{tester.email}")
|
19
21
|
else
|
20
|
-
|
21
|
-
|
22
|
+
tester = Spaceship::Tunes::Tester::External.create!(email: config[:email],
|
23
|
+
first_name: config[:first_name],
|
24
|
+
last_name: config[:last_name])
|
25
|
+
UI.success("Successfully invited tester: #{tester.email}")
|
26
|
+
end
|
27
|
+
|
28
|
+
app_filter = (config[:apple_id] || config[:app_identifier])
|
29
|
+
if app_filter
|
30
|
+
begin
|
31
|
+
app = Spaceship::Application.find(app_filter)
|
32
|
+
UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
|
33
|
+
app.default_external_group.add_tester!(tester)
|
34
|
+
UI.success("Successfully added tester to app #{app_filter}")
|
35
|
+
rescue => ex
|
36
|
+
UI.error("Could not add #{tester.email} to app: #{ex}")
|
37
|
+
raise ex
|
38
|
+
end
|
22
39
|
end
|
23
40
|
rescue => ex
|
24
|
-
UI.error("Could not
|
41
|
+
UI.error("Could not create tester #{config[:email]}")
|
25
42
|
raise ex
|
26
43
|
end
|
27
44
|
end
|
@@ -43,29 +60,25 @@ module Pilot
|
|
43
60
|
|
44
61
|
tester = Spaceship::Tunes::Tester::External.find(config[:email])
|
45
62
|
tester ||= Spaceship::Tunes::Tester::Internal.find(config[:email])
|
46
|
-
UI.user_error!("Tester not found: #{config[:email]}") if tester.nil?
|
47
|
-
|
48
|
-
app = find_app(app_filter: config[:apple_id] || config[:app_identifier])
|
49
|
-
unless app
|
50
|
-
tester.delete!
|
51
|
-
UI.success("Successfully removed tester #{tester.email}")
|
52
|
-
end
|
53
63
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
64
|
+
if tester
|
65
|
+
app_filter = (config[:apple_id] || config[:app_identifier])
|
66
|
+
if app_filter
|
67
|
+
begin
|
68
|
+
app = Spaceship::Application.find(app_filter)
|
69
|
+
UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
|
70
|
+
app.default_external_group.remove_tester!(tester)
|
71
|
+
UI.success("Successfully removed tester #{tester.email} from app #{app_filter}")
|
72
|
+
rescue => ex
|
73
|
+
UI.error("Could not remove #{tester.email} from app: #{ex}")
|
74
|
+
raise ex
|
75
|
+
end
|
61
76
|
else
|
62
|
-
|
63
|
-
|
64
|
-
UI.success("Successfully removed tester #{tester.email} from app #{app.name} in group(s) #{group_names}")
|
77
|
+
tester.delete!
|
78
|
+
UI.success("Successfully removed tester #{tester.email}")
|
65
79
|
end
|
66
|
-
|
67
|
-
UI.error("
|
68
|
-
raise ex
|
80
|
+
else
|
81
|
+
UI.error("Tester not found: #{config[:email]}")
|
69
82
|
end
|
70
83
|
end
|
71
84
|
|
@@ -80,34 +93,7 @@ module Pilot
|
|
80
93
|
end
|
81
94
|
end
|
82
95
|
|
83
|
-
private
|
84
|
-
|
85
|
-
def find_app(app_filter: nil)
|
86
|
-
if app_filter
|
87
|
-
app = Spaceship::Application.find(app_filter)
|
88
|
-
UI.user_error!("Could not find an app by #{app_filter}") unless app
|
89
|
-
return app
|
90
|
-
end
|
91
|
-
nil
|
92
|
-
end
|
93
|
-
|
94
|
-
def find_or_create_tester(email: nil, first_name: nil, last_name: nil)
|
95
|
-
tester = Spaceship::Tunes::Tester::Internal.find(config[:email])
|
96
|
-
tester ||= Spaceship::Tunes::Tester::External.find(config[:email])
|
97
|
-
|
98
|
-
if tester
|
99
|
-
UI.success("Existing tester #{tester.email}")
|
100
|
-
else
|
101
|
-
tester = Spaceship::Tunes::Tester::External.create!(email: config[:email],
|
102
|
-
first_name: config[:first_name],
|
103
|
-
last_name: config[:last_name])
|
104
|
-
UI.success("Successfully added tester: #{tester.email} to your account")
|
105
|
-
end
|
106
|
-
return tester
|
107
|
-
rescue => ex
|
108
|
-
UI.error("Could not create tester #{config[:email]}")
|
109
|
-
raise ex
|
110
|
-
end
|
96
|
+
# private
|
111
97
|
|
112
98
|
def list_testers_by_app(app_filter)
|
113
99
|
app = Spaceship::Application.find(app_filter)
|
@@ -145,7 +145,7 @@ open class Snapshot: NSObject {
|
|
145
145
|
print("Can't prepare environment. Simulator home location is inaccessible. Does \(simulatorHostHome) exist?")
|
146
146
|
return nil
|
147
147
|
}
|
148
|
-
homeDir =
|
148
|
+
homeDir = homeDirUrl
|
149
149
|
#endif
|
150
150
|
return homeDir.appendingPathComponent("Library/Caches/tools.fastlane")
|
151
151
|
}
|
@@ -22,7 +22,7 @@ module Spaceship
|
|
22
22
|
puts "This could be an issue with iTunes Connect,".yellow
|
23
23
|
puts "Please try unsetting the FASTLANE_SESSION environment variable".yellow
|
24
24
|
puts "and re-run `fastlane spaceauth`".yellow
|
25
|
-
|
25
|
+
UI.crash!("Problem connecting to iTunes Connect")
|
26
26
|
end
|
27
27
|
|
28
28
|
itc_cookie_content = Spaceship::Tunes.client.store_cookie
|
@@ -1,11 +1,9 @@
|
|
1
1
|
|
2
2
|
require 'spaceship/test_flight/client'
|
3
3
|
require 'spaceship/test_flight/base'
|
4
|
-
require 'spaceship/test_flight/app_test_info'
|
5
4
|
require 'spaceship/test_flight/build'
|
6
5
|
require 'spaceship/test_flight/build_trains'
|
7
6
|
require 'spaceship/test_flight/beta_review_info'
|
8
7
|
require 'spaceship/test_flight/export_compliance'
|
9
8
|
require 'spaceship/test_flight/test_info'
|
10
9
|
require 'spaceship/test_flight/group'
|
11
|
-
require 'spaceship/test_flight/tester'
|
@@ -4,18 +4,6 @@ module Spaceship::TestFlight
|
|
4
4
|
@client ||= Client.client_with_authorization_from(Spaceship::Tunes.client)
|
5
5
|
end
|
6
6
|
|
7
|
-
##
|
8
|
-
# Have subclasses inherit the client from their superclass
|
9
|
-
#
|
10
|
-
# Essentially, we are making a class-inheritable-accessor as described here:
|
11
|
-
# https://apidock.com/rails/v4.2.7/Class/class_attribute
|
12
|
-
def self.inherited(subclass)
|
13
|
-
this_class = self
|
14
|
-
subclass.define_singleton_method(:client) do
|
15
|
-
this_class.client
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
7
|
def to_json
|
20
8
|
raw_data.to_json
|
21
9
|
end
|
@@ -67,17 +67,16 @@ module Spaceship::TestFlight
|
|
67
67
|
BUILD_STATES = {
|
68
68
|
processing: 'testflight.build.state.processing',
|
69
69
|
active: 'testflight.build.state.testing.active',
|
70
|
-
|
71
|
-
ready_to_test: 'testflight.build.state.testing.ready',
|
70
|
+
ready: 'testflight.build.state.submit.ready',
|
72
71
|
export_compliance_missing: 'testflight.build.state.export.compliance.missing'
|
73
72
|
}
|
74
73
|
|
75
|
-
# Find a Build by `build_id`.
|
74
|
+
# Find a Build by `build_id`. Returns `nil` if can't find it.
|
76
75
|
#
|
77
76
|
# @return (Spaceship::TestFlight::Build)
|
78
77
|
def self.find(app_id: nil, build_id: nil)
|
79
78
|
attrs = client.get_build(app_id: app_id, build_id: build_id)
|
80
|
-
self.new(attrs)
|
79
|
+
self.new(attrs) if attrs
|
81
80
|
end
|
82
81
|
|
83
82
|
def self.all(app_id: nil, platform: nil)
|
@@ -105,17 +104,13 @@ module Spaceship::TestFlight
|
|
105
104
|
#
|
106
105
|
# Note: this will overwrite any non-saved changes to the object
|
107
106
|
#
|
108
|
-
# @return (
|
107
|
+
# @return (Spaceceship::Base::DataHash) the raw_data of the build.
|
109
108
|
def reload
|
110
109
|
self.raw_data = self.class.find(app_id: app_id, build_id: id).raw_data
|
111
110
|
end
|
112
111
|
|
113
112
|
def ready_to_submit?
|
114
|
-
external_state == BUILD_STATES[:
|
115
|
-
end
|
116
|
-
|
117
|
-
def ready_to_test?
|
118
|
-
external_state == BUILD_STATES[:ready_to_test]
|
113
|
+
external_state == BUILD_STATES[:ready]
|
119
114
|
end
|
120
115
|
|
121
116
|
def active?
|
@@ -126,14 +121,6 @@ module Spaceship::TestFlight
|
|
126
121
|
external_state == BUILD_STATES[:processing]
|
127
122
|
end
|
128
123
|
|
129
|
-
def export_compliance_missing?
|
130
|
-
external_state == BUILD_STATES[:export_compliance_missing]
|
131
|
-
end
|
132
|
-
|
133
|
-
def processed?
|
134
|
-
active? || ready_to_submit? || export_compliance_missing?
|
135
|
-
end
|
136
|
-
|
137
124
|
# Getting builds from BuildTrains only gets a partial Build object
|
138
125
|
# We are then requesting the full build from iTC when we need to access
|
139
126
|
# any of the variables below, because they are not inlcuded in the partial Build objects
|
@@ -168,14 +155,13 @@ module Spaceship::TestFlight
|
|
168
155
|
end
|
169
156
|
|
170
157
|
def update_build_information!(description: nil, feedback_email: nil, whats_new: nil)
|
171
|
-
test_info.description = description
|
172
|
-
test_info.feedback_email = feedback_email
|
173
|
-
test_info.whats_new = whats_new
|
158
|
+
test_info.description = description
|
159
|
+
test_info.feedback_email = feedback_email
|
160
|
+
test_info.whats_new = whats_new
|
174
161
|
save!
|
175
162
|
end
|
176
163
|
|
177
164
|
def submit_for_testflight_review!
|
178
|
-
return if ready_to_test?
|
179
165
|
client.post_for_testflight_review(app_id: app_id, build_id: id, build: self)
|
180
166
|
end
|
181
167
|
|