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,51 +1,13 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
require 'precheck'
|
9
|
-
Precheck.config = config
|
10
|
-
return Precheck::Runner.new.run
|
11
|
-
end
|
3
|
+
require 'fastlane/actions/check_app_store_metadata'
|
4
|
+
class PrecheckAction < CheckAppStoreMetadataAction
|
5
|
+
#####################################################
|
6
|
+
# @!group Documentation
|
7
|
+
#####################################################
|
12
8
|
|
13
9
|
def self.description
|
14
|
-
"
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.details
|
18
|
-
"More information: https://fastlane.tools/precheck"
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.available_options
|
22
|
-
require 'precheck/options'
|
23
|
-
Precheck::Options.available_options
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.return_value
|
27
|
-
return "true if precheck passes, else, false"
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.authors
|
31
|
-
["taquitos"]
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.is_supported?(platform)
|
35
|
-
platform == :ios
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.example_code
|
39
|
-
[
|
40
|
-
'precheck(
|
41
|
-
negative_apple_sentiment(level: :skip), # Set to skip to not run the `negative_apple_sentiment` rule
|
42
|
-
curse_words(level: :warn) # Set to warn to only warn on curse word check failures
|
43
|
-
)'
|
44
|
-
]
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.category
|
48
|
-
:misc
|
10
|
+
"Alias for the `check_app_store_metadata` action"
|
49
11
|
end
|
50
12
|
end
|
51
13
|
end
|
@@ -1,73 +1,13 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def self.run(params)
|
9
|
-
require 'produce'
|
10
|
-
|
11
|
-
return if Helper.test?
|
12
|
-
|
13
|
-
Produce.config = params # we alread have the finished config
|
14
|
-
|
15
|
-
Dir.chdir(FastlaneCore::FastlaneFolder.path || Dir.pwd) do
|
16
|
-
# This should be executed in the fastlane folder
|
17
|
-
apple_id = Produce::Manager.start_producing.to_s
|
18
|
-
|
19
|
-
Actions.lane_context[SharedValues::PRODUCE_APPLE_ID] = apple_id
|
20
|
-
ENV['PRODUCE_APPLE_ID'] = apple_id
|
21
|
-
end
|
22
|
-
end
|
3
|
+
require 'fastlane/actions/create_app_online'
|
4
|
+
class ProduceAction < CreateAppOnlineAction
|
5
|
+
#####################################################
|
6
|
+
# @!group Documentation
|
7
|
+
#####################################################
|
23
8
|
|
24
9
|
def self.description
|
25
|
-
"
|
26
|
-
end
|
27
|
-
|
28
|
-
def details
|
29
|
-
[
|
30
|
-
'Create new apps on iTunes Connect and Apple Developer Portal. If the app already exists, `produce` will not do anything.',
|
31
|
-
'For more information about produce, visit its GitHub page:',
|
32
|
-
'https://github.com/fastlane/fastlane/tree/master/produce'
|
33
|
-
].join(' ')
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.available_options
|
37
|
-
require 'produce'
|
38
|
-
Produce::Options.available_options
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.output
|
42
|
-
[
|
43
|
-
['PRODUCE_APPLE_ID', 'The Apple ID of the newly created app. You probably need it for `deliver`']
|
44
|
-
]
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.author
|
48
|
-
"KrauseFx"
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.is_supported?(platform)
|
52
|
-
platform == :ios
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.example_code
|
56
|
-
[
|
57
|
-
'produce(
|
58
|
-
username: "felix@krausefx.com",
|
59
|
-
app_identifier: "com.krausefx.app",
|
60
|
-
app_name: "MyApp",
|
61
|
-
language: "English",
|
62
|
-
app_version: "1.0",
|
63
|
-
sku: "123",
|
64
|
-
team_name: "SunApps GmbH" # Only necessary when in multiple teams.
|
65
|
-
)'
|
66
|
-
]
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.category
|
70
|
-
:misc
|
10
|
+
"Alias for the `create_app_online` action"
|
71
11
|
end
|
72
12
|
end
|
73
13
|
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
SCAN_DERIVED_DATA_PATH = :SCAN_DERIVED_DATA_PATH
|
5
|
+
SCAN_GENERATED_PLIST_FILE = :SCAN_GENERATED_PLIST_FILE
|
6
|
+
SCAN_GENERATED_PLIST_FILES = :SCAN_GENERATED_PLIST_FILES
|
7
|
+
end
|
8
|
+
|
9
|
+
class RunTestsAction < Action
|
10
|
+
def self.run(values)
|
11
|
+
require 'scan'
|
12
|
+
plist_files_before = []
|
13
|
+
|
14
|
+
begin
|
15
|
+
destination = values[:destination] # save destination value which can be later overridden
|
16
|
+
Scan.config = values # we set this here to auto-detect missing values, which we need later on
|
17
|
+
unless values[:derived_data_path].to_s.empty?
|
18
|
+
plist_files_before = test_summary_filenames(values[:derived_data_path])
|
19
|
+
end
|
20
|
+
|
21
|
+
values[:destination] = destination # restore destination value
|
22
|
+
Scan::Manager.new.work(values)
|
23
|
+
|
24
|
+
return true
|
25
|
+
rescue => ex
|
26
|
+
if values[:fail_build]
|
27
|
+
raise ex
|
28
|
+
end
|
29
|
+
ensure
|
30
|
+
unless values[:derived_data_path].to_s.empty?
|
31
|
+
Actions.lane_context[SharedValues::SCAN_DERIVED_DATA_PATH] = values[:derived_data_path]
|
32
|
+
plist_files_after = test_summary_filenames(values[:derived_data_path])
|
33
|
+
all_test_summaries = (plist_files_after - plist_files_before)
|
34
|
+
Actions.lane_context[SharedValues::SCAN_GENERATED_PLIST_FILES] = all_test_summaries
|
35
|
+
Actions.lane_context[SharedValues::SCAN_GENERATED_PLIST_FILE] = all_test_summaries.last
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.description
|
41
|
+
"Easily run tests of your iOS app (via `scan`)"
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.details
|
45
|
+
"More information: https://github.com/fastlane/fastlane/tree/master/scan"
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.author
|
49
|
+
"KrauseFx"
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.available_options
|
53
|
+
require 'scan'
|
54
|
+
|
55
|
+
FastlaneCore::CommanderGenerator.new.generate(Scan::Options.available_options) + [
|
56
|
+
FastlaneCore::ConfigItem.new(key: :fail_build,
|
57
|
+
env_name: "SCAN_FAIL_BUILD",
|
58
|
+
description: "Should this step stop the build if the tests fail? Set this to false if you're using trainer",
|
59
|
+
is_string: false,
|
60
|
+
default_value: true)
|
61
|
+
]
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.is_supported?(platform)
|
65
|
+
[:ios, :mac].include? platform
|
66
|
+
end
|
67
|
+
|
68
|
+
private_class_method
|
69
|
+
|
70
|
+
def self.test_summary_filenames(derived_data_path)
|
71
|
+
Dir["#{derived_data_path}/**/Logs/Test/*TestSummaries.plist"]
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.example_code
|
75
|
+
[
|
76
|
+
'run_tests',
|
77
|
+
'scan # alias for "run_tests"',
|
78
|
+
'run_tests(
|
79
|
+
workspace: "App.xcworkspace",
|
80
|
+
scheme: "MyTests",
|
81
|
+
clean: false
|
82
|
+
)',
|
83
|
+
'# Build For Testing
|
84
|
+
run_tests(
|
85
|
+
derived_data_path: "my_folder",
|
86
|
+
build_for_testing: true
|
87
|
+
)',
|
88
|
+
'# run tests using derived data from prev. build
|
89
|
+
run_tests(
|
90
|
+
derived_data_path: "my_folder",
|
91
|
+
test_without_building: true
|
92
|
+
)',
|
93
|
+
'# or run it from an existing xctestrun package
|
94
|
+
run_tests(
|
95
|
+
xctestrun: "/path/to/mytests.xctestrun"
|
96
|
+
)'
|
97
|
+
]
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.category
|
101
|
+
:testing
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -1,103 +1,13 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
class ScanAction < Action
|
10
|
-
def self.run(values)
|
11
|
-
require 'scan'
|
12
|
-
plist_files_before = []
|
13
|
-
|
14
|
-
begin
|
15
|
-
destination = values[:destination] # save destination value which can be later overridden
|
16
|
-
Scan.config = values # we set this here to auto-detect missing values, which we need later on
|
17
|
-
unless values[:derived_data_path].to_s.empty?
|
18
|
-
plist_files_before = test_summary_filenames(values[:derived_data_path])
|
19
|
-
end
|
20
|
-
|
21
|
-
values[:destination] = destination # restore destination value
|
22
|
-
Scan::Manager.new.work(values)
|
23
|
-
|
24
|
-
return true
|
25
|
-
rescue => ex
|
26
|
-
if values[:fail_build]
|
27
|
-
raise ex
|
28
|
-
end
|
29
|
-
ensure
|
30
|
-
unless values[:derived_data_path].to_s.empty?
|
31
|
-
Actions.lane_context[SharedValues::SCAN_DERIVED_DATA_PATH] = values[:derived_data_path]
|
32
|
-
plist_files_after = test_summary_filenames(values[:derived_data_path])
|
33
|
-
all_test_summaries = (plist_files_after - plist_files_before)
|
34
|
-
Actions.lane_context[SharedValues::SCAN_GENERATED_PLIST_FILES] = all_test_summaries
|
35
|
-
Actions.lane_context[SharedValues::SCAN_GENERATED_PLIST_FILE] = all_test_summaries.last
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
3
|
+
require 'fastlane/actions/run_tests'
|
4
|
+
class ScanAction < RunTestsAction
|
5
|
+
#####################################################
|
6
|
+
# @!group Documentation
|
7
|
+
#####################################################
|
39
8
|
|
40
9
|
def self.description
|
41
|
-
"
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.details
|
45
|
-
"More information: https://github.com/fastlane/fastlane/tree/master/scan"
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.author
|
49
|
-
"KrauseFx"
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.available_options
|
53
|
-
require 'scan'
|
54
|
-
|
55
|
-
FastlaneCore::CommanderGenerator.new.generate(Scan::Options.available_options) + [
|
56
|
-
FastlaneCore::ConfigItem.new(key: :fail_build,
|
57
|
-
env_name: "SCAN_FAIL_BUILD",
|
58
|
-
description: "Should this step stop the build if the tests fail? Set this to false if you're using trainer",
|
59
|
-
is_string: false,
|
60
|
-
default_value: true)
|
61
|
-
]
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.is_supported?(platform)
|
65
|
-
[:ios, :mac].include? platform
|
66
|
-
end
|
67
|
-
|
68
|
-
private_class_method
|
69
|
-
|
70
|
-
def self.test_summary_filenames(derived_data_path)
|
71
|
-
Dir["#{derived_data_path}/**/Logs/Test/*TestSummaries.plist"]
|
72
|
-
end
|
73
|
-
|
74
|
-
def self.example_code
|
75
|
-
[
|
76
|
-
'scan',
|
77
|
-
'scan(
|
78
|
-
workspace: "App.xcworkspace",
|
79
|
-
scheme: "MyTests",
|
80
|
-
clean: false
|
81
|
-
)',
|
82
|
-
'# Build For Testing
|
83
|
-
scan(
|
84
|
-
derived_data_path: "my_folder",
|
85
|
-
build_for_testing: true
|
86
|
-
)',
|
87
|
-
'# run tests using derived data from prev. build
|
88
|
-
scan(
|
89
|
-
derived_data_path: "my_folder",
|
90
|
-
test_without_building: true
|
91
|
-
)',
|
92
|
-
'# or run it from an existing xctestrun package
|
93
|
-
scan(
|
94
|
-
xctestrun: "/path/to/mytests.xctestrun"
|
95
|
-
)'
|
96
|
-
]
|
97
|
-
end
|
98
|
-
|
99
|
-
def self.category
|
100
|
-
:testing
|
10
|
+
"Alias for the `run_tests` action"
|
101
11
|
end
|
102
12
|
end
|
103
13
|
end
|
@@ -1,55 +1,13 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def self.run(params)
|
9
|
-
require 'screengrab'
|
10
|
-
|
11
|
-
Screengrab.config = params
|
12
|
-
Screengrab.android_environment = Screengrab::AndroidEnvironment.new(params[:android_home],
|
13
|
-
params[:build_tools_version])
|
14
|
-
Screengrab::DependencyChecker.check(Screengrab.android_environment)
|
15
|
-
Screengrab::Runner.new.run
|
16
|
-
|
17
|
-
Actions.lane_context[SharedValues::SCREENGRAB_OUTPUT_DIRECTORY] = File.expand_path(params[:output_directory])
|
18
|
-
|
19
|
-
true
|
20
|
-
end
|
3
|
+
require 'fastlane/actions/capture_android_screenshots'
|
4
|
+
class ScreengrabAction < CaptureAndroidScreenshotsAction
|
5
|
+
#####################################################
|
6
|
+
# @!group Documentation
|
7
|
+
#####################################################
|
21
8
|
|
22
9
|
def self.description
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.available_options
|
27
|
-
require 'screengrab'
|
28
|
-
Screengrab::Options.available_options
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.author
|
32
|
-
['asfalcone', 'i2amsam', 'mfurtak']
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.is_supported?(platform)
|
36
|
-
platform == :android
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.example_code
|
40
|
-
[
|
41
|
-
'screengrab',
|
42
|
-
'screengrab(
|
43
|
-
locales: ["en-US", "fr-FR", "ja-JP"],
|
44
|
-
clear_previous_screenshots: true,
|
45
|
-
app_apk_path: "build/outputs/apk/example-debug.apk",
|
46
|
-
tests_apk_path: "build/outputs/apk/example-debug-androidTest-unaligned.apk"
|
47
|
-
)'
|
48
|
-
]
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.category
|
52
|
-
:screenshots
|
10
|
+
"Alias for the `capture_android_screenshots` action"
|
53
11
|
end
|
54
12
|
end
|
55
13
|
end
|
@@ -1,86 +1,13 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
SIGH_NAME = :SIGH_NAME
|
9
|
-
SIGH_PROFILE_TYPE = :SIGH_PROFILE_TYPE
|
10
|
-
end
|
11
|
-
|
12
|
-
class SighAction < Action
|
13
|
-
def self.run(values)
|
14
|
-
require 'sigh'
|
15
|
-
require 'credentials_manager/appfile_config'
|
16
|
-
|
17
|
-
Sigh.config = values # we already have the finished config
|
18
|
-
|
19
|
-
path = Sigh::Manager.start
|
20
|
-
|
21
|
-
Actions.lane_context[SharedValues::SIGH_PROFILE_PATH] = path # absolute path
|
22
|
-
Actions.lane_context[SharedValues::SIGH_PROFILE_PATHS] ||= []
|
23
|
-
Actions.lane_context[SharedValues::SIGH_PROFILE_PATHS] << path
|
24
|
-
|
25
|
-
uuid = ENV["SIGH_UUID"] || ENV["SIGH_UDID"] # the UUID of the profile
|
26
|
-
name = ENV["SIGH_NAME"] # the name of the profile
|
27
|
-
Actions.lane_context[SharedValues::SIGH_UUID] = Actions.lane_context[SharedValues::SIGH_UDID] = uuid if uuid
|
28
|
-
Actions.lane_context[SharedValues::SIGH_NAME] = Actions.lane_context[SharedValues::SIGH_NAME] = name if name
|
29
|
-
|
30
|
-
set_profile_type(values, ENV["SIGH_PROFILE_ENTERPRISE"])
|
31
|
-
|
32
|
-
return uuid # returs uuid of profile
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.set_profile_type(values, enterprise)
|
36
|
-
profile_type = "app-store"
|
37
|
-
profile_type = "ad-hoc" if values[:adhoc]
|
38
|
-
profile_type = "development" if values[:development]
|
39
|
-
profile_type = "enterprise" if enterprise
|
40
|
-
|
41
|
-
UI.message("Setting Provisioning Profile type to '#{profile_type}'")
|
42
|
-
|
43
|
-
Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE] = profile_type
|
44
|
-
end
|
3
|
+
require 'fastlane/actions/get_provisioning_profile'
|
4
|
+
class SighAction < GetProvisioningProfileAction
|
5
|
+
#####################################################
|
6
|
+
# @!group Documentation
|
7
|
+
#####################################################
|
45
8
|
|
46
9
|
def self.description
|
47
|
-
"
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.author
|
51
|
-
"KrauseFx"
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.return_value
|
55
|
-
"The UUID of the profile sigh just fetched/generated"
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.details
|
59
|
-
"**Note**: It is recommended to use [match](https://github.com/fastlane/fastlane/tree/master/match) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your provisioning profiles. Use _sigh_ directly only if you want full control over what's going on and know more about codesigning."
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.available_options
|
63
|
-
require 'sigh'
|
64
|
-
Sigh::Options.available_options
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.is_supported?(platform)
|
68
|
-
platform == :ios
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.example_code
|
72
|
-
[
|
73
|
-
'sigh',
|
74
|
-
'sigh(
|
75
|
-
adhoc: true,
|
76
|
-
force: true,
|
77
|
-
filename: "myFile.mobileprovision"
|
78
|
-
)'
|
79
|
-
]
|
80
|
-
end
|
81
|
-
|
82
|
-
def self.category
|
83
|
-
:code_signing
|
10
|
+
"Alias for the `get_provisioning_profile` action"
|
84
11
|
end
|
85
12
|
end
|
86
13
|
end
|