fastlane 2.69.0.beta.20171212010004 → 2.69.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/deliver/lib/assets/DeliverfileDefault.swift +13 -0
  3. data/deliver/lib/deliver/commands_generator.rb +2 -1
  4. data/deliver/lib/deliver/options.rb +8 -3
  5. data/deliver/lib/deliver/setup.rb +19 -3
  6. data/fastlane/lib/assets/AppfileTemplate.swift +8 -0
  7. data/fastlane/lib/assets/DefaultFastfileTemplate.swift +72 -0
  8. data/fastlane/lib/fastlane.rb +6 -0
  9. data/fastlane/lib/fastlane/.DS_Store +0 -0
  10. data/fastlane/lib/fastlane/action.rb +13 -0
  11. data/fastlane/lib/fastlane/actions/adb.rb +4 -0
  12. data/fastlane/lib/fastlane/actions/appium.rb +2 -0
  13. data/fastlane/lib/fastlane/actions/bundle_install.rb +2 -0
  14. data/fastlane/lib/fastlane/actions/carthage.rb +12 -24
  15. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +5 -0
  16. data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -1
  17. data/fastlane/lib/fastlane/actions/commit_github_file.rb +4 -0
  18. data/fastlane/lib/fastlane/actions/environment_variable.rb +73 -0
  19. data/fastlane/lib/fastlane/actions/get_version_number.rb +4 -4
  20. data/fastlane/lib/fastlane/actions/increment_build_number.rb +4 -0
  21. data/fastlane/lib/fastlane/actions/increment_version_number.rb +4 -0
  22. data/fastlane/lib/fastlane/actions/is_ci.rb +4 -0
  23. data/fastlane/lib/fastlane/actions/last_git_commit.rb +4 -0
  24. data/fastlane/lib/fastlane/actions/last_git_tag.rb +4 -0
  25. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +4 -0
  26. data/fastlane/lib/fastlane/actions/modify_services.rb +1 -0
  27. data/fastlane/lib/fastlane/actions/number_of_commits.rb +4 -0
  28. data/fastlane/lib/fastlane/actions/podio_item.rb +1 -0
  29. data/fastlane/lib/fastlane/actions/prompt.rb +4 -0
  30. data/fastlane/lib/fastlane/actions/read_podspec.rb +4 -0
  31. data/fastlane/lib/fastlane/actions/register_device.rb +4 -0
  32. data/fastlane/lib/fastlane/actions/register_devices.rb +1 -0
  33. data/fastlane/lib/fastlane/actions/rocket.rb +4 -0
  34. data/fastlane/lib/fastlane/actions/set_github_release.rb +4 -0
  35. data/fastlane/lib/fastlane/actions/sh.rb +5 -0
  36. data/fastlane/lib/fastlane/actions/slather.rb +14 -0
  37. data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +1 -0
  38. data/fastlane/lib/fastlane/actions/xcode_install.rb +4 -0
  39. data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +4 -0
  40. data/fastlane/lib/fastlane/actions/zip.rb +4 -0
  41. data/fastlane/lib/fastlane/boolean.rb +5 -0
  42. data/fastlane/lib/fastlane/command_line_handler.rb +6 -1
  43. data/fastlane/lib/fastlane/commands_generator.rb +40 -1
  44. data/fastlane/lib/fastlane/fast_file.rb +5 -1
  45. data/fastlane/lib/fastlane/lane_list.rb +67 -4
  46. data/fastlane/lib/fastlane/lane_manager.rb +3 -69
  47. data/fastlane/lib/fastlane/lane_manager_base.rb +124 -0
  48. data/fastlane/lib/fastlane/runner.rb +2 -2
  49. data/fastlane/lib/fastlane/server/command.rb +70 -0
  50. data/fastlane/lib/fastlane/server/command_executor.rb +9 -0
  51. data/fastlane/lib/fastlane/server/socket_server.rb +212 -0
  52. data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +100 -0
  53. data/fastlane/lib/fastlane/setup/setup.rb +7 -2
  54. data/fastlane/lib/fastlane/setup/setup_ios.rb +72 -15
  55. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +265 -0
  56. data/fastlane/lib/fastlane/swift_fastlane_function.rb +342 -0
  57. data/fastlane/lib/fastlane/swift_lane_manager.rb +246 -0
  58. data/fastlane/lib/fastlane/tools.rb +13 -0
  59. data/fastlane/lib/fastlane/version.rb +1 -1
  60. data/fastlane_core/lib/fastlane_core.rb +3 -0
  61. data/fastlane_core/lib/fastlane_core/analytics/action_launch_context.rb +6 -3
  62. data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +7 -0
  63. data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +13 -0
  64. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +33 -2
  65. data/fastlane_core/lib/fastlane_core/fastlane_folder.rb +32 -0
  66. data/gym/lib/assets/GymfileTemplate.swift +13 -0
  67. data/gym/lib/gym/commands_generator.rb +14 -2
  68. data/gym/lib/gym/generators/build_command_generator.rb +2 -2
  69. data/gym/lib/gym/options.rb +11 -0
  70. data/match/lib/assets/MatchfileTemplate.swift +9 -0
  71. data/match/lib/match/commands_generator.rb +9 -3
  72. data/match/lib/match/options.rb +1 -0
  73. data/match/lib/match/setup.rb +6 -2
  74. data/precheck/lib/.DS_Store +0 -0
  75. data/precheck/lib/assets/PrecheckfileTemplate +1 -1
  76. data/precheck/lib/assets/PrecheckfileTemplate.swift +19 -0
  77. data/precheck/lib/precheck/commands_generator.rb +13 -2
  78. data/scan/lib/assets/ScanfileTemplate.swift +13 -0
  79. data/scan/lib/scan/commands_generator.rb +14 -2
  80. data/scan/lib/scan/options.rb +6 -0
  81. data/screengrab/lib/assets/ScreengrabfileTemplate.swift +15 -0
  82. data/screengrab/lib/screengrab/commands_generator.rb +2 -1
  83. data/screengrab/lib/screengrab/setup.rb +9 -3
  84. data/snapshot/lib/assets/SnapfileTemplate.swift +41 -0
  85. data/snapshot/lib/snapshot/commands_generator.rb +2 -1
  86. data/snapshot/lib/snapshot/setup.rb +9 -3
  87. data/spaceship/lib/spaceship/client.rb +4 -1
  88. metadata +38 -16
@@ -17,4 +17,17 @@ module Fastlane
17
17
  :gym,
18
18
  :precheck
19
19
  ]
20
+
21
+ # a list of all the config files we currently expect
22
+ TOOL_CONFIG_FILES = [
23
+ "Appfile",
24
+ "Deliverfile",
25
+ "Fastfile",
26
+ "Gymfile",
27
+ "Matchfile",
28
+ "Precheckfile",
29
+ "Scanfile",
30
+ "Screengrabfile",
31
+ "Snapshotfile"
32
+ ]
20
33
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.69.0.beta.20171212010004'.freeze
2
+ VERSION = '2.69.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
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -1,5 +1,6 @@
1
1
  require 'json'
2
2
  require 'fastlane/version'
3
+ require 'fastlane/boolean'
3
4
 
4
5
  require 'fastlane_core/globals'
5
6
  # Ruby monkey-patches - should be before almost all else
@@ -53,6 +54,8 @@ require 'commander'
53
54
  # after commander import
54
55
  require 'fastlane_core/ui/fastlane_runner' # monkey patch
55
56
 
57
+ Boolean = Fastlane::Boolean
58
+
56
59
  module FastlaneCore
57
60
  ROOT = Pathname.new(File.expand_path('../..', __FILE__))
58
61
 
@@ -7,19 +7,22 @@ module FastlaneCore
7
7
  attr_accessor :action_name
8
8
  attr_accessor :p_hash
9
9
  attr_accessor :platform
10
+ attr_accessor :configuration_language # example: ruby fastfile, swift fastfile
10
11
 
11
- def initialize(action_name: nil, p_hash: UNKNOWN_P_HASH, platform: nil)
12
+ def initialize(action_name: nil, p_hash: UNKNOWN_P_HASH, platform: nil, configuration_language: nil)
12
13
  @action_name = action_name
13
14
  @p_hash = p_hash
14
15
  @platform = platform
16
+ @configuration_language = configuration_language
15
17
  end
16
18
 
17
- def self.context_for_action_name(action_name, args: nil)
19
+ def self.context_for_action_name(action_name, configuration_language: "ruby", args: nil)
18
20
  app_id_guesser = FastlaneCore::AppIdentifierGuesser.new(args: args)
19
21
  return self.new(
20
22
  action_name: action_name,
21
23
  p_hash: app_id_guesser.p_hash,
22
- platform: app_id_guesser.platform
24
+ platform: app_id_guesser.platform,
25
+ configuration_language: configuration_language
23
26
  )
24
27
  end
25
28
 
@@ -54,6 +54,13 @@ module FastlaneCore
54
54
  }
55
55
  )
56
56
 
57
+ @events << builder.launched_event(
58
+ primary_target_hash: {
59
+ name: 'configuration_language',
60
+ detail: launch_context.configuration_language
61
+ }
62
+ )
63
+
57
64
  @events << builder.launched_event(
58
65
  primary_target_hash: {
59
66
  name: 'install_method',
@@ -21,6 +21,19 @@ module FastlaneCore
21
21
 
22
22
  type = option.data_type
23
23
 
24
+ # We added type: Hash to code generation, but Ruby's OptionParser doesn't like that
25
+ # so we need to switch that to something that is supported, luckily, we have an `is_string`
26
+ # property and if that is false, we'll default to nil
27
+ if type == Hash
28
+ type = option.is_string ? String : nil
29
+ end
30
+
31
+ # Boolean is a fastlane thing, it's either TrueClass, or FalseClass, but we won't know
32
+ # that until runtime, so nil is the best we get
33
+ if type == Boolean
34
+ type = nil
35
+ end
36
+
24
37
  # This is an important bit of trickery to solve the boolean option situation.
25
38
  #
26
39
  # Typically, boolean command line flags do not accept trailing values. If the flag
@@ -67,6 +67,7 @@ module FastlaneCore
67
67
  verify_block: nil,
68
68
  is_string: true,
69
69
  type: nil,
70
+ skip_type_validation: false,
70
71
  optional: nil,
71
72
  conflicting_options: nil,
72
73
  conflict_block: nil,
@@ -118,20 +119,45 @@ module FastlaneCore
118
119
  @sensitive = sensitive
119
120
  @allow_shell_conversion = (type == :shell_string)
120
121
  @display_in_shell = display_in_shell
122
+ @skip_type_validation = skip_type_validation # sometimes we allow multiple types which causes type validation failures, e.g.: export_options in gym
121
123
  end
122
124
 
123
125
  def verify!(value)
124
126
  valid?(value)
125
127
  end
126
128
 
129
+ def ensure_generic_type_passes_validation(value)
130
+ if @skip_type_validation
131
+ return
132
+ end
133
+
134
+ if data_type != :string_callback && data_type && !value.kind_of?(data_type)
135
+ UI.user_error!("'#{self.key}' value must be a #{data_type}! Found #{value.class} instead.")
136
+ end
137
+ end
138
+
139
+ def ensure_boolean_type_passes_validation(value)
140
+ if @skip_type_validation
141
+ return
142
+ end
143
+
144
+ # We need to explicity test against Fastlane::Boolean, TrueClass/FalseClass
145
+ if value.class != FalseClass && value.class != TrueClass
146
+ UI.user_error!("'#{self.key}' value must be either `true` or `false`! Found #{value.class} instead.")
147
+ end
148
+ end
149
+
127
150
  # Make sure, the value is valid (based on the verify block)
128
151
  # Raises an exception if the value is invalid
129
152
  def valid?(value)
130
153
  # we also allow nil values, which do not have to be verified.
131
154
  if value
132
155
  # Verify that value is the type that we're expecting, if we are expecting a type
133
- if data_type && !value.kind_of?(data_type)
134
- UI.user_error!("'#{self.key}' value must be a #{data_type}! Found #{value.class} instead.")
156
+
157
+ if data_type == Boolean
158
+ ensure_boolean_type_passes_validation(value)
159
+ else
160
+ ensure_generic_type_passes_validation(value)
135
161
  end
136
162
 
137
163
  if @verify_block
@@ -189,6 +215,11 @@ module FastlaneCore
189
215
  data_type == String
190
216
  end
191
217
 
218
+ # it's preferred to use self.string? In most cases, except in commander_generator.rb, cause... reasons
219
+ def is_string
220
+ return @is_string
221
+ end
222
+
192
223
  def to_s
193
224
  [@key, @description].join(": ")
194
225
  end
@@ -6,15 +6,47 @@ module FastlaneCore
6
6
  def self.path
7
7
  value ||= "./#{FOLDER_NAME}/" if File.directory?("./#{FOLDER_NAME}/")
8
8
  value ||= "./.#{FOLDER_NAME}/" if File.directory?("./.#{FOLDER_NAME}/") # hidden folder
9
+ value ||= "./" if File.basename(Dir.getwd) == FOLDER_NAME && File.exist?('Fastfile.swift') # inside the folder
10
+ value ||= "./" if File.basename(Dir.getwd) == ".#{FOLDER_NAME}" && File.exist?('Fastfile.swift') # inside the folder and hidden
9
11
  value ||= "./" if File.basename(Dir.getwd) == FOLDER_NAME && File.exist?('Fastfile') # inside the folder
10
12
  value ||= "./" if File.basename(Dir.getwd) == ".#{FOLDER_NAME}" && File.exist?('Fastfile') # inside the folder and hidden
11
13
  return value
12
14
  end
13
15
 
16
+ # path to the Swift runner executable if it has been built
17
+ def self.swift_runner_path
18
+ return File.join(self.path, 'FastlaneRunner')
19
+ end
20
+
21
+ def self.swift?
22
+ return self.fastfile_path.downcase.end_with?(".swift")
23
+ end
24
+
25
+ def self.swift_folder_path
26
+ return File.join(self.path, 'swift')
27
+ end
28
+
29
+ def self.swift_runner_project_path
30
+ return File.join(self.swift_folder_path, 'FastlaneSwiftRunner', 'FastlaneSwiftRunner.xcodeproj')
31
+ end
32
+
33
+ def self.swift_runner_built?
34
+ swift_runner_path = self.swift_runner_path
35
+ if swift_runner_path.nil?
36
+ return false
37
+ end
38
+
39
+ return File.exist?(swift_runner_path)
40
+ end
41
+
14
42
  # Path to the Fastfile inside the fastlane folder. This is nil when none is available
15
43
  def self.fastfile_path
16
44
  return nil if self.path.nil?
17
45
 
46
+ # Check for Swift first, because Swift is #1
47
+ path = File.join(self.path, 'Fastfile.swift')
48
+ return path if File.exist?(path)
49
+
18
50
  path = File.join(self.path, 'Fastfile')
19
51
  return path if File.exist?(path)
20
52
  return nil
@@ -0,0 +1,13 @@
1
+ // For more information about this configuration visit
2
+ // https://docs.fastlane.tools/actions/gym/#gymfile
3
+
4
+ // In general, you can use the options available
5
+ // fastlane gym --help
6
+
7
+ // Remove the // in front of the line to enable the option
8
+
9
+ class Gymfile: GymfileProtocol {
10
+ //var sdk: String { return "iphoneos9.0" }
11
+ //var scheme: String { return "Example" }
12
+ var outputDirectory: String { return "./" }
13
+ }
@@ -45,11 +45,23 @@ module Gym
45
45
  command :init do |c|
46
46
  c.syntax = "fastlane gym init"
47
47
  c.description = "Creates a new Gymfile for you"
48
- c.action do |_args, options|
48
+ c.action do |args, options|
49
49
  containing = FastlaneCore::Helper.fastlane_enabled_folder_path
50
50
  path = File.join(containing, Gym.gymfile_name)
51
51
  UI.user_error! "Gymfile already exists" if File.exist?(path)
52
- template = File.read("#{Gym::ROOT}/lib/assets/GymfileTemplate")
52
+
53
+ is_swift_fastfile = args.include?("swift")
54
+ if is_swift_fastfile
55
+ path = File.join(containing, Gym.gymfile_name + ".swift")
56
+ UI.user_error! "Gymfile.swift already exists" if File.exist?(path)
57
+ end
58
+
59
+ if is_swift_fastfile
60
+ template = File.read("#{Gym::ROOT}/lib/assets/GymfileTemplate.swift")
61
+ else
62
+ template = File.read("#{Gym::ROOT}/lib/assets/GymfileTemplate")
63
+ end
64
+
53
65
  File.write(path, template)
54
66
  UI.success "Successfully created '#{path}'. Open the file using a code editor."
55
67
  end
@@ -37,7 +37,7 @@ module Gym
37
37
  options << "-toolchain '#{config[:toolchain]}'" if config[:toolchain]
38
38
  options << "-destination '#{config[:destination]}'" if config[:destination]
39
39
  options << "-xcconfig '#{config[:xcconfig]}'" if config[:xcconfig]
40
- options << "-archivePath #{archive_path.shellescape}"
40
+ options << "-archivePath #{archive_path.shellescape}" unless config[:skip_archive]
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]
@@ -51,7 +51,7 @@ module Gym
51
51
 
52
52
  actions = []
53
53
  actions << :clean if config[:clean]
54
- actions << :archive
54
+ actions << :archive unless config[:skip_archive]
55
55
 
56
56
  actions
57
57
  end
@@ -92,12 +92,14 @@ module Gym
92
92
  env_name: "GYM_INCLUDE_SYMBOLS",
93
93
  description: "Should the ipa file include symbols?",
94
94
  is_string: false,
95
+ type: Boolean,
95
96
  optional: true),
96
97
  FastlaneCore::ConfigItem.new(key: :include_bitcode,
97
98
  short_option: "-z",
98
99
  env_name: "GYM_INCLUDE_BITCODE",
99
100
  description: "Should the ipa file include bitcode?",
100
101
  is_string: false,
102
+ type: Boolean,
101
103
  optional: true),
102
104
  FastlaneCore::ConfigItem.new(key: :export_method,
103
105
  short_option: "-j",
@@ -114,6 +116,8 @@ module Gym
114
116
  description: "Specifies path to export options plist. Use 'xcodebuild -help' to print the full set of available options",
115
117
  is_string: false,
116
118
  optional: true,
119
+ type: Hash,
120
+ skip_type_validation: true,
117
121
  conflict_block: proc do |value|
118
122
  UI.user_error!("'#{value.key}' must be false to use 'export_options'")
119
123
  end),
@@ -129,6 +133,13 @@ module Gym
129
133
  env_name: "GYM_SKIP_BUILD_ARCHIVE",
130
134
  description: "Export ipa from previously built xarchive. Uses archive_path as source",
131
135
  is_string: false,
136
+ type: Boolean,
137
+ optional: true),
138
+ FastlaneCore::ConfigItem.new(key: :skip_archive,
139
+ env_name: "GYM_SKIP_ARCHIVE",
140
+ description: "After building, don't archive, effectively not including -archivePath param",
141
+ is_string: false,
142
+ type: Boolean,
132
143
  optional: true),
133
144
  # Very optional
134
145
  FastlaneCore::ConfigItem.new(key: :build_path,
@@ -0,0 +1,9 @@
1
+ class Matchfile: MatchfileProtocol {
2
+ var gitUrl: String { return "[[GIT_URL]]" }
3
+ var type: String { return "development" } // The default type, can be: appstore, adhoc, enterprise or development
4
+ // var appIdentifier: [String] { return ["tools.fastlane.app", "tools.fastlane.app2"] }
5
+ // cat username:String { return "user@fastlane.tools" } // Your Apple Developer Portal username
6
+ }
7
+
8
+ // For all available options run `fastlane match --help`
9
+ // Remove the // in the beginning of the line to enable the other options
@@ -62,14 +62,20 @@ module Match
62
62
  c.description = 'Create the Matchfile for you'
63
63
  c.action do |args, options|
64
64
  containing = FastlaneCore::Helper.fastlane_enabled_folder_path
65
- path = File.join(containing, "Matchfile")
65
+ is_swift_fastfile = args.include?("swift")
66
+
67
+ if is_swift_fastfile
68
+ path = File.join(containing, "Matchfile.swift")
69
+ else
70
+ path = File.join(containing, "Matchfile")
71
+ end
66
72
 
67
73
  if File.exist?(path)
68
- FastlaneCore::UI.user_error!("You already got a Matchfile in this directory")
74
+ FastlaneCore::UI.user_error!("You already have a Matchfile in this directory (#{path})")
69
75
  return 0
70
76
  end
71
77
 
72
- Match::Setup.new.run(path)
78
+ Match::Setup.new.run(path, is_swift_fastfile: is_swift_fastfile)
73
79
  end
74
80
  end
75
81
 
@@ -33,6 +33,7 @@ module Match
33
33
  env_name: "MATCH_APP_IDENTIFIER",
34
34
  description: "The bundle identifier(s) of your app (comma-separated)",
35
35
  is_string: false,
36
+ type: Array,
36
37
  default_value: CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)),
37
38
  FastlaneCore::ConfigItem.new(key: :username,
38
39
  short_option: "-u",
@@ -1,7 +1,11 @@
1
1
  module Match
2
2
  class Setup
3
- def run(path)
4
- template = File.read("#{Match::ROOT}/lib/assets/MatchfileTemplate")
3
+ def run(path, is_swift_fastfile: false)
4
+ if is_swift_fastfile
5
+ template = File.read("#{Match::ROOT}/lib/assets/MatchfileTemplate.swift")
6
+ else
7
+ template = File.read("#{Match::ROOT}/lib/assets/MatchfileTemplate")
8
+ end
5
9
 
6
10
  UI.important "Please create a new, private git repository"
7
11
  UI.important "to store the certificates and profiles there"
Binary file
@@ -13,7 +13,7 @@
13
13
  # :warn
14
14
  # when triggered, this rule will warn you of a potential problem
15
15
 
16
- # :fail
16
+ # :error
17
17
  # when triggered, this rule will cause an error to be displayed and it will prevent any further fastlane commands from running after precheck finishes
18
18
 
19
19
  # Examples:
@@ -0,0 +1,19 @@
1
+ // For more information about this configuration visit
2
+ // https://docs.fastlane.tools/actions/precheck/#precheckfile
3
+
4
+ // In general, you can use the options available
5
+ // fastlane precheck --help
6
+
7
+ class Precheckfile: PrecheckfileProtocol {
8
+ //var defaultRuleLevel: String { return "error" }
9
+ }
10
+
11
+ // You have three possible values for defaultRuleLevel
12
+ // "skip"
13
+ // indicates that your metadata will not be checked by this rule
14
+
15
+ // "warn"
16
+ // when triggered, this rule will warn you of a potential problem
17
+
18
+ // "error"
19
+ // when triggered, this rule will cause an error to be displayed and it will prevent any further fastlane commands from running after precheck finishes
@@ -38,11 +38,22 @@ module Precheck
38
38
  command :init do |c|
39
39
  c.syntax = "fastlane precheck init"
40
40
  c.description = "Creates a new Precheckfile for you"
41
- c.action do |_args, options|
41
+ c.action do |args, options|
42
42
  containing = FastlaneCore::Helper.fastlane_enabled_folder_path
43
43
  path = File.join(containing, Precheck.precheckfile_name)
44
44
  UI.user_error! "Precheckfile already exists" if File.exist?(path)
45
- template = File.read("#{Precheck::ROOT}/lib/assets/PrecheckfileTemplate")
45
+
46
+ is_swift_fastfile = args.include?("swift")
47
+ if is_swift_fastfile
48
+ path = File.join(containing, Precheck.precheckfile_name + ".swift")
49
+ UI.user_error! "Precheckfile.swift already exists" if File.exist?(path)
50
+ end
51
+
52
+ if is_swift_fastfile
53
+ template = File.read("#{Precheck::ROOT}/lib/assets/PrecheckfileTemplate.swift")
54
+ else
55
+ template = File.read("#{Precheck::ROOT}/lib/assets/PrecheckfileTemplate")
56
+ end
46
57
  File.write(path, template)
47
58
  UI.success "Successfully created '#{path}'. Open the file using a code editor."
48
59
  end
@@ -0,0 +1,13 @@
1
+ // For more information about this configuration visit
2
+ // https://docs.fastlane.tools/actions/scan/#scanfile
3
+
4
+ // In general, you can use the options available
5
+ // fastlane scan --help
6
+
7
+ // Remove the // in front of the line to enable the option
8
+
9
+ class Scanfile: ScanfileProtocol {
10
+ //var scheme: String? { return "Example" }
11
+ //var openReport: Bool { return true }
12
+ //var clean: Bool { return true }
13
+ }