fastlane 2.68.0.beta.20171129010003 → 2.68.0.beta.20171130010004
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fastlane/lib/assets/ActionDetails.md.erb +2 -2
- data/fastlane/lib/fastlane/actions/appstore.rb +3 -32
- data/fastlane/lib/fastlane/actions/build_android_app.rb +14 -0
- data/fastlane/lib/fastlane/actions/build_app.rb +14 -0
- data/fastlane/lib/fastlane/actions/build_ios_app.rb +143 -0
- data/fastlane/lib/fastlane/actions/capture_android_screenshots.rb +57 -0
- data/fastlane/lib/fastlane/actions/capture_ios_screenshots.rb +55 -0
- data/fastlane/lib/fastlane/actions/capture_screenshots.rb +14 -0
- data/fastlane/lib/fastlane/actions/cert.rb +6 -60
- data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +53 -0
- data/fastlane/lib/fastlane/actions/create_app_online.rb +76 -0
- data/fastlane/lib/fastlane/actions/deliver.rb +6 -56
- data/fastlane/lib/fastlane/actions/docs/frameit.md +2 -1
- data/fastlane/lib/fastlane/actions/frame_screenshots.rb +62 -0
- data/fastlane/lib/fastlane/actions/frameit.rb +6 -53
- data/fastlane/lib/fastlane/actions/get_certificates.rb +69 -0
- data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +88 -0
- data/fastlane/lib/fastlane/actions/get_push_certificate.rb +82 -0
- data/fastlane/lib/fastlane/actions/gym.rb +6 -133
- data/fastlane/lib/fastlane/actions/match.rb +3 -87
- data/fastlane/lib/fastlane/actions/pem.rb +6 -73
- data/fastlane/lib/fastlane/actions/pilot.rb +3 -55
- data/fastlane/lib/fastlane/actions/precheck.rb +6 -44
- data/fastlane/lib/fastlane/actions/produce.rb +6 -66
- data/fastlane/lib/fastlane/actions/run_tests.rb +105 -0
- data/fastlane/lib/fastlane/actions/scan.rb +6 -96
- data/fastlane/lib/fastlane/actions/screengrab.rb +6 -48
- data/fastlane/lib/fastlane/actions/sigh.rb +6 -79
- data/fastlane/lib/fastlane/actions/snapshot.rb +6 -46
- data/fastlane/lib/fastlane/actions/supply.rb +3 -56
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +99 -0
- data/fastlane/lib/fastlane/actions/testflight.rb +3 -32
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +67 -0
- data/fastlane/lib/fastlane/actions/upload_to_play_store.rb +68 -0
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +67 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/spaceship/lib/spaceship/client.rb +1 -1
- metadata +19 -2
@@ -1,53 +1,13 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def self.run(params)
|
9
|
-
return nil unless Helper.mac?
|
10
|
-
require 'snapshot'
|
11
|
-
|
12
|
-
Snapshot.config = params
|
13
|
-
Snapshot::DependencyChecker.check_simulators
|
14
|
-
Snapshot::Runner.new.work
|
15
|
-
|
16
|
-
Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] = File.expand_path(params[:output_directory]) # absolute URL
|
17
|
-
|
18
|
-
true
|
19
|
-
end
|
3
|
+
require 'fastlane/actions/capture_ios_screenshots'
|
4
|
+
class SnapshotAction < CaptureIosScreenshotsAction
|
5
|
+
#####################################################
|
6
|
+
# @!group Documentation
|
7
|
+
#####################################################
|
20
8
|
|
21
9
|
def self.description
|
22
|
-
"
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.available_options
|
26
|
-
return [] unless Helper.mac?
|
27
|
-
require 'snapshot'
|
28
|
-
Snapshot::Options.available_options
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.author
|
32
|
-
"KrauseFx"
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.is_supported?(platform)
|
36
|
-
[:ios, :mac].include? platform
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.example_code
|
40
|
-
[
|
41
|
-
'snapshot',
|
42
|
-
'snapshot(
|
43
|
-
skip_open_summary: true,
|
44
|
-
clean: true
|
45
|
-
)'
|
46
|
-
]
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.category
|
50
|
-
:screenshots
|
10
|
+
"Alias for the `capture_ios_screenshots` action"
|
51
11
|
end
|
52
12
|
end
|
53
13
|
end
|
@@ -1,66 +1,13 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
require 'supply'
|
6
|
-
require 'supply/options'
|
7
|
-
|
8
|
-
# If no APK params were provided, try to fill in the values from lane context, preferring
|
9
|
-
# the multiple APKs over the single APK if set.
|
10
|
-
if params[:apk_paths].nil? && params[:apk].nil?
|
11
|
-
all_apk_paths = Actions.lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] || []
|
12
|
-
if all_apk_paths.size > 1
|
13
|
-
params[:apk_paths] = all_apk_paths
|
14
|
-
else
|
15
|
-
params[:apk] = Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
Supply.config = params # we already have the finished config
|
20
|
-
|
21
|
-
Supply::Uploader.new.perform_upload
|
22
|
-
end
|
23
|
-
|
3
|
+
require 'fastlane/actions/upload_to_play_store'
|
4
|
+
class SupplyAction < UploadToPlayStoreAction
|
24
5
|
#####################################################
|
25
6
|
# @!group Documentation
|
26
7
|
#####################################################
|
27
8
|
|
28
9
|
def self.description
|
29
|
-
"
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.details
|
33
|
-
"More information: https://github.com/fastlane/fastlane/tree/master/supply"
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.available_options
|
37
|
-
require 'supply'
|
38
|
-
require 'supply/options'
|
39
|
-
Supply::Options.available_options
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.output
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.return_value
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.authors
|
49
|
-
["KrauseFx"]
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.is_supported?(platform)
|
53
|
-
platform == :android
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.example_code
|
57
|
-
[
|
58
|
-
'supply'
|
59
|
-
]
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.category
|
63
|
-
:production
|
10
|
+
"Alias for the `upload_to_play_store` action"
|
64
11
|
end
|
65
12
|
end
|
66
13
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
MATCH_PROVISIONING_PROFILE_MAPPING = :MATCH_PROVISIONING_PROFILE_MAPPING
|
5
|
+
end
|
6
|
+
|
7
|
+
class SyncCodeSigningAction < Action
|
8
|
+
def self.run(params)
|
9
|
+
require 'match'
|
10
|
+
|
11
|
+
params.load_configuration_file("Matchfile")
|
12
|
+
Match::Runner.new.run(params)
|
13
|
+
|
14
|
+
define_profile_type(params)
|
15
|
+
define_provisioning_profile_mapping(params)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.define_profile_type(params)
|
19
|
+
profile_type = "app-store"
|
20
|
+
profile_type = "ad-hoc" if params[:type] == 'adhoc'
|
21
|
+
profile_type = "development" if params[:type] == 'development'
|
22
|
+
profile_type = "enterprise" if params[:type] == 'enterprise'
|
23
|
+
|
24
|
+
UI.message("Setting Provisioning Profile type to '#{profile_type}'")
|
25
|
+
|
26
|
+
Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE] = profile_type
|
27
|
+
end
|
28
|
+
|
29
|
+
# Maps the bundle identifier to the appropriate provisioning profile
|
30
|
+
# This is used in the _gym_ action as part of the export options
|
31
|
+
# e.g.
|
32
|
+
#
|
33
|
+
# export_options: {
|
34
|
+
# provisioningProfiles: { "me.themoji.app.beta": "match AppStore me.themoji.app.beta" }
|
35
|
+
# }
|
36
|
+
#
|
37
|
+
def self.define_provisioning_profile_mapping(params)
|
38
|
+
mapping = Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING] || {}
|
39
|
+
|
40
|
+
# Array (...) to make sure it's an Array, Ruby is magic, try this
|
41
|
+
# Array(1) # => [1]
|
42
|
+
# Array([1, 2]) # => [1, 2]
|
43
|
+
Array(params[:app_identifier]).each do |app_identifier|
|
44
|
+
env_variable_name = Match::Utils.environment_variable_name_profile_name(app_identifier: app_identifier,
|
45
|
+
type: Match.profile_type_sym(params[:type]),
|
46
|
+
platform: params[:platform])
|
47
|
+
mapping[app_identifier] = ENV[env_variable_name]
|
48
|
+
end
|
49
|
+
|
50
|
+
Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING] = mapping
|
51
|
+
end
|
52
|
+
|
53
|
+
#####################################################
|
54
|
+
# @!group Documentation
|
55
|
+
#####################################################
|
56
|
+
|
57
|
+
def self.description
|
58
|
+
"Easily sync your certificates and profiles across your team (via `match`)"
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.details
|
62
|
+
"More details https://github.com/fastlane/fastlane/tree/master/match"
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.available_options
|
66
|
+
require 'match'
|
67
|
+
Match::Options.available_options
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.output
|
71
|
+
[]
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.return_value
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.authors
|
78
|
+
["KrauseFx"]
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.is_supported?(platform)
|
82
|
+
platform == :ios
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.example_code
|
86
|
+
[
|
87
|
+
'sync_code_signing(type: "appstore", app_identifier: "tools.fastlane.app")',
|
88
|
+
'sync_code_signing(type: "development", readonly: true)',
|
89
|
+
'sync_code_signing(app_identifier: ["tools.fastlane.app", "tools.fastlane.sleepy"])',
|
90
|
+
'match(...) # alias for "sync_code_signing"'
|
91
|
+
]
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.category
|
95
|
+
:code_signing
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -1,42 +1,13 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
Actions::PilotAction.run(params)
|
6
|
-
end
|
7
|
-
|
3
|
+
require 'fastlane/actions/upload_to_testflight'
|
4
|
+
class TestflightAction < UploadToTestflightAction
|
8
5
|
#####################################################
|
9
6
|
# @!group Documentation
|
10
7
|
#####################################################
|
11
8
|
|
12
9
|
def self.description
|
13
|
-
"Alias for the
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.available_options
|
17
|
-
require "pilot"
|
18
|
-
require "pilot/options"
|
19
|
-
FastlaneCore::CommanderGenerator.new.generate(Pilot::Options.available_options)
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.output
|
23
|
-
[]
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.author
|
27
|
-
'KrauseFx'
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.example_code
|
31
|
-
Actions::PilotAction.example_code
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.category
|
35
|
-
Actions::PilotAction.category
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.is_supported?(platform)
|
39
|
-
Actions::PilotAction.is_supported?(platform)
|
10
|
+
"Alias for the `upload_to_testflight` action"
|
40
11
|
end
|
41
12
|
end
|
42
13
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
end
|
5
|
+
|
6
|
+
class UploadToAppStoreAction < Action
|
7
|
+
def self.run(config)
|
8
|
+
require 'deliver'
|
9
|
+
|
10
|
+
begin
|
11
|
+
config.load_configuration_file("Deliverfile")
|
12
|
+
config[:screenshots_path] = Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] if Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]
|
13
|
+
config[:ipa] = Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] if Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
|
14
|
+
|
15
|
+
return config if Helper.test?
|
16
|
+
Deliver::Runner.new(config).run
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.description
|
21
|
+
"Upload metadata and binary to iTunes Connect (via `deliver`)"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.details
|
25
|
+
[
|
26
|
+
"Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the",
|
27
|
+
"latest ipa and screenshots with no other configuration",
|
28
|
+
"",
|
29
|
+
"If you don't want a PDF report for App Store builds, use the `:force` option.",
|
30
|
+
"This is useful when running _fastlane_ on your Continuous Integration server:",
|
31
|
+
"`_upload_to_app_store_(force: true)`",
|
32
|
+
"If your account is on multiple teams and you need to tell the `iTMSTransporter`",
|
33
|
+
"which 'provider' to use, you can set the `itc_provider` option to pass this info."
|
34
|
+
].join("\n")
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.available_options
|
38
|
+
require "deliver"
|
39
|
+
require "deliver/options"
|
40
|
+
FastlaneCore::CommanderGenerator.new.generate(Deliver::Options.available_options)
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.author
|
44
|
+
"KrauseFx"
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.is_supported?(platform)
|
48
|
+
[:ios, :mac].include?(platform)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.example_code
|
52
|
+
[
|
53
|
+
'upload_to_app_store(
|
54
|
+
force: true, # Set to true to skip PDF verification
|
55
|
+
itc_provider: "abcde12345" # pass a specific value to the iTMSTransporter -itc_provider option
|
56
|
+
)',
|
57
|
+
'deliver(...) # alias for "upload_to_app_store"',
|
58
|
+
'appstore(...) # alias for "upload_to_app_store"'
|
59
|
+
]
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.category
|
63
|
+
:production
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class UploadToPlayStoreAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
require 'supply'
|
6
|
+
require 'supply/options'
|
7
|
+
|
8
|
+
# If no APK params were provided, try to fill in the values from lane context, preferring
|
9
|
+
# the multiple APKs over the single APK if set.
|
10
|
+
if params[:apk_paths].nil? && params[:apk].nil?
|
11
|
+
all_apk_paths = Actions.lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] || []
|
12
|
+
if all_apk_paths.size > 1
|
13
|
+
params[:apk_paths] = all_apk_paths
|
14
|
+
else
|
15
|
+
params[:apk] = Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Supply.config = params # we already have the finished config
|
20
|
+
|
21
|
+
Supply::Uploader.new.perform_upload
|
22
|
+
end
|
23
|
+
|
24
|
+
#####################################################
|
25
|
+
# @!group Documentation
|
26
|
+
#####################################################
|
27
|
+
|
28
|
+
def self.description
|
29
|
+
"Upload metadata, screenshots and binaries to Google Play (via `supply`)"
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.details
|
33
|
+
"More information: https://github.com/fastlane/fastlane/tree/master/supply"
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.available_options
|
37
|
+
require 'supply'
|
38
|
+
require 'supply/options'
|
39
|
+
Supply::Options.available_options
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.output
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.return_value
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.authors
|
49
|
+
["KrauseFx"]
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.is_supported?(platform)
|
53
|
+
platform == :android
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.example_code
|
57
|
+
[
|
58
|
+
'upload_to_play_store',
|
59
|
+
'supply # alias for "upload_to_play_store"'
|
60
|
+
]
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.category
|
64
|
+
:production
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class UploadToTestflightAction < Action
|
4
|
+
def self.run(values)
|
5
|
+
require 'pilot'
|
6
|
+
require 'pilot/options'
|
7
|
+
|
8
|
+
changelog = Actions.lane_context[SharedValues::FL_CHANGELOG]
|
9
|
+
values[:changelog] ||= changelog if changelog
|
10
|
+
|
11
|
+
values[:ipa] ||= Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
|
12
|
+
values[:ipa] = File.expand_path(values[:ipa]) if values[:ipa]
|
13
|
+
|
14
|
+
return values if Helper.test?
|
15
|
+
|
16
|
+
Pilot::BuildManager.new.upload(values) # we already have the finished config
|
17
|
+
end
|
18
|
+
|
19
|
+
#####################################################
|
20
|
+
# @!group Documentation
|
21
|
+
#####################################################
|
22
|
+
|
23
|
+
def self.description
|
24
|
+
"Upload a new binary to iTunes Connect for TestFlight beta testing (via `pilot`)"
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.details
|
28
|
+
[
|
29
|
+
"More details can be found on https://github.com/fastlane/fastlane/tree/master/pilot",
|
30
|
+
"This integration will only do the TestFlight upload"
|
31
|
+
].join("\n")
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.available_options
|
35
|
+
require "pilot"
|
36
|
+
require "pilot/options"
|
37
|
+
FastlaneCore::CommanderGenerator.new.generate(Pilot::Options.available_options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.example_code
|
41
|
+
[
|
42
|
+
'upload_to_testfight',
|
43
|
+
'testflight # alias for "upload_to_testfight"',
|
44
|
+
'pilot # alias for "upload_to_testfight"',
|
45
|
+
'upload_to_testfight(skip_submission: true) # to only upload the build',
|
46
|
+
'upload_to_testfight(
|
47
|
+
username: "felix@krausefx.com",
|
48
|
+
app_identifier: "com.krausefx.app",
|
49
|
+
itc_provider: "abcde12345" # pass a specific value to the iTMSTransporter -itc_provider option
|
50
|
+
)'
|
51
|
+
]
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.category
|
55
|
+
:beta
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.authors
|
59
|
+
["KrauseFx"]
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.is_supported?(platform)
|
63
|
+
[:ios].include?(platform)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|