fastlane 2.24.0.beta.20170327010009 → 2.24.0.beta.20170328010037

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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/deliver/lib/deliver/commands_generator.rb +2 -2
  3. data/fastlane/lib/assets/completions/completion.fish +37 -0
  4. data/fastlane/lib/fastlane/actions/commit_version_bump.rb +2 -2
  5. data/fastlane/lib/fastlane/actions/copy_artifacts.rb +2 -2
  6. data/fastlane/lib/fastlane/actions/deploygate.rb +0 -1
  7. data/fastlane/lib/fastlane/actions/oclint.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/snapshot.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -0
  10. data/fastlane/lib/fastlane/auto_complete.rb +30 -12
  11. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +28 -0
  12. data/fastlane/lib/fastlane/version.rb +1 -1
  13. data/gym/lib/gym/error_handler.rb +1 -0
  14. data/gym/lib/gym/generators/package_command_generator.rb +1 -0
  15. data/gym/lib/gym/generators/package_command_generator_legacy.rb +1 -0
  16. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +1 -0
  17. data/gym/lib/gym/xcodebuild_fixes/swift_fix.rb +1 -0
  18. data/scan/lib/scan/options.rb +1 -1
  19. data/screengrab/lib/screengrab/commands_generator.rb +1 -1
  20. data/snapshot/lib/assets/SnapshotHelper.swift +34 -10
  21. data/snapshot/lib/assets/SnapshotHelper2-3.swift +26 -6
  22. data/snapshot/lib/snapshot/collector.rb +22 -7
  23. data/snapshot/lib/snapshot/commands_generator.rb +1 -1
  24. data/snapshot/lib/snapshot/detect_values.rb +3 -1
  25. data/snapshot/lib/snapshot/options.rb +3 -2
  26. data/snapshot/lib/snapshot/runner.rb +17 -15
  27. data/snapshot/lib/snapshot/test_command_generator.rb +3 -0
  28. data/spaceship/lib/spaceship/portal/device.rb +1 -1
  29. metadata +18 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 37f46ef2f2795ec8f60b5d5c083b9e7a1849c276
4
- data.tar.gz: 5e521f6dded89c68d989fa6766bfad6b9bf7c21c
3
+ metadata.gz: a9bb503038512e9a8134c5fe54de9f0b4abc0eac
4
+ data.tar.gz: f6034d834040f4d68b72d2e3510fff7dd05d469a
5
5
  SHA512:
6
- metadata.gz: 7a50f66716866c505335da412201734085f13ac0ab14de5115aab09802d0d19d3e512f76eeae5f7faf35367bdc6b1f24b021122314de7416f388ec639592545a
7
- data.tar.gz: 1aaa1c3d11b0c22e65cd6bd078db460c9690fa5db84c92a002bad92f0cfdbde907fbd5dd780f458c46b51e2ff941423e0229aad54f5d9f713e58fc7c3239eadd
6
+ metadata.gz: 2c226305eb6c1f588ea2228541b99ec3546700f3a1504ef0ce60383214de82e8e7047a8d2b37b9ec572f3c8d7cc030c0022ba51f0570376e5bc25d74734d5bb6
7
+ data.tar.gz: 224ad84f19cd8c53c0d8c8952fc78bdec2037493b86aa1bdd696550bb46be112445614ad469e52576224a6435cbd17bced32c5f69644419caf4e84ab9565f60c
@@ -124,7 +124,7 @@ module Deliver
124
124
  options = FastlaneCore::Configuration.create(deliverfile_options(skip_verification: true), options.__hash__)
125
125
  options.load_configuration_file("Deliverfile")
126
126
  Deliver::Runner.new(options, skip_version: true) # to login...
127
- containing = FastlaneCore::Helper.fastlane_enabled? ? './fastlane' : '.'
127
+ containing = FastlaneCore::Helper.fastlane_enabled? ? FastlaneCore::FastlaneFolder.path : '.'
128
128
  path = options[:screenshots_path] || File.join(containing, 'screenshots')
129
129
  Deliver::DownloadScreenshots.run(options, path)
130
130
  end
@@ -140,7 +140,7 @@ module Deliver
140
140
  options = FastlaneCore::Configuration.create(deliverfile_options(skip_verification: true), options.__hash__)
141
141
  options.load_configuration_file("Deliverfile")
142
142
  Deliver::Runner.new(options) # to login...
143
- containing = FastlaneCore::Helper.fastlane_enabled? ? './fastlane' : '.'
143
+ containing = FastlaneCore::Helper.fastlane_enabled? ? FastlaneCore::FastlaneFolder.path : '.'
144
144
  path = options[:metadata_path] || File.join(containing, 'metadata')
145
145
  res = ENV["DELIVER_FORCE_OVERWRITE"]
146
146
  res ||= UI.confirm("Do you want to overwrite existing metadata on path '#{File.expand_path(path)}'?")
@@ -0,0 +1,37 @@
1
+ # This function was taken from https://github.com/Carthage/Carthage/blob/master/Source/Scripts/carthage-fish-completion
2
+ function __fish_fastlane_needs_subcommand
3
+ set cmd (commandline -opc)
4
+ if [ (count $cmd) -eq 1 -a $cmd[1] = 'fastlane' ]
5
+ return 0
6
+ end
7
+ return 1
8
+ end
9
+
10
+ if test -e "Fastfile"
11
+ set file "Fastfile"
12
+ else if test -e "fastlane/Fastfile"
13
+ set file "fastlane/Fastfile"
14
+ else if test -e ".fastlane/Fastfile"
15
+ set file ".fastlane/Fastfile"
16
+ else
17
+ exit 1
18
+ end
19
+
20
+ set commands (string match --regex '.*lane\ \:(?!private_)([^\s]*)\ do' (cat $file))
21
+
22
+ set commands_string
23
+
24
+ # Fish returns the fully matched string, plus the capture group. The actual captured value
25
+ # is every other line, starting at line 2.
26
+ set use_command false
27
+
28
+ for line in $commands
29
+ if [ $use_command = true ]
30
+ set commands_string "$commands_string $line"
31
+ set use_command false
32
+ else
33
+ set use_command true
34
+ end
35
+ end
36
+
37
+ complete -c fastlane -n '__fish_fastlane_needs_subcommand' -a (string trim $commands_string) -f
@@ -58,8 +58,8 @@ module Fastlane
58
58
  # Removes .plist files that matched the given expression in the 'ignore' parameter
59
59
  ignore_expression = params[:ignore]
60
60
  if ignore_expression
61
- info_plist_files.select! do |info_plist_file|
62
- !info_plist_file.match(ignore_expression)
61
+ info_plist_files.reject! do |info_plist_file|
62
+ info_plist_file.match(ignore_expression)
63
63
  end
64
64
  end
65
65
 
@@ -22,11 +22,11 @@ module Fastlane
22
22
  UI.verbose(params[:keep_original] ? "Keeping original files" : "Not keeping original files")
23
23
 
24
24
  if params[:fail_on_missing]
25
- missing = artifacts.select { |a| !File.exist?(a) }
25
+ missing = artifacts.reject { |a| File.exist?(a) }
26
26
  UI.user_error! "Not all files were present in copy artifacts. Missing #{missing.join(', ')}" unless missing.empty?
27
27
  else
28
28
  # If we don't fail on non-existant files, don't try to copy non-existant files
29
- artifacts.reject! { |artifact| !File.exist?(artifact) }
29
+ artifacts.select! { |artifact| File.exist?(artifact) }
30
30
  end
31
31
 
32
32
  if params[:keep_original]
@@ -32,7 +32,6 @@ module Fastlane
32
32
  })
33
33
 
34
34
  connection.post("/api/users/#{user_name}/apps", options)
35
-
36
35
  rescue Faraday::Error::TimeoutError
37
36
  UI.crash! "Timed out while uploading build. Check https://deploygate.com/ to see if the upload was completed."
38
37
  end
@@ -43,7 +43,7 @@ module Fastlane
43
43
  file_ruby = file.gsub('\ ', ' ')
44
44
  File.exist?(file_ruby) and
45
45
  (!select_regex or file_ruby =~ select_regex) and
46
- (!exclude_regex or !(file_ruby =~ exclude_regex))
46
+ (!exclude_regex or file_ruby !~ exclude_regex)
47
47
  end
48
48
 
49
49
  command_prefix = [
@@ -33,7 +33,7 @@ module Fastlane
33
33
  end
34
34
 
35
35
  def self.is_supported?(platform)
36
- platform == :ios
36
+ [:ios, :mac].include? platform
37
37
  end
38
38
 
39
39
  def self.example_code
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  module Fastlane
3
4
  module Actions
4
5
  module SharedValues
@@ -4,21 +4,39 @@ module Fastlane
4
4
  # Enable tab auto completion
5
5
  class AutoComplete
6
6
  def self.execute
7
- fastlane_conf_dir = "~/.fastlane"
8
- confirm = UI.confirm "This will copy a shell script into #{fastlane_conf_dir} that provides the command tab completion. Sound good?"
9
- return unless confirm
7
+ shell = ENV['SHELL']
10
8
 
11
- # create the ~/.fastlane directory
12
- fastlane_conf_dir = File.expand_path fastlane_conf_dir
13
- FileUtils.mkdir_p fastlane_conf_dir
9
+ if shell.end_with? "fish"
10
+ fish_completions_dir = "~/.config/fish/completions"
11
+ confirm = UI.confirm "This will copy a fish script into #{fish_completions_dir} that provides the command tab completion. If the directory does not exist it will be created. Sound good?"
12
+ return unless confirm
14
13
 
15
- # then copy all of the completions files into it from the gem
16
- completion_script_path = File.join(Fastlane::ROOT, 'lib', 'assets', 'completions')
17
- FileUtils.cp_r completion_script_path, fastlane_conf_dir
14
+ fish_completions_dir = File.expand_path fish_completions_dir
15
+ FileUtils.mkdir_p fish_completions_dir
18
16
 
19
- UI.success "Copied! To use auto complete for fastlane, add the following line to your favorite rc file (e.g. ~/.bashrc)"
20
- UI.important " . ~/.fastlane/completions/completion.sh"
21
- UI.success "Don't forget to source that file in your current shell! 🐚"
17
+ completion_script_path = File.join(Fastlane::ROOT, 'lib', 'assets', 'completions', 'completion.fish')
18
+ final_completion_script_path = File.join(fish_completions_dir, 'fastlane.fish')
19
+
20
+ FileUtils.cp completion_script_path, final_completion_script_path
21
+
22
+ UI.success "Copied! You can now use tab completion for lanes"
23
+ else
24
+ fastlane_conf_dir = "~/.fastlane"
25
+ confirm = UI.confirm "This will copy a shell script into #{fastlane_conf_dir} that provides the command tab completion. Sound good?"
26
+ return unless confirm
27
+
28
+ # create the ~/.fastlane directory
29
+ fastlane_conf_dir = File.expand_path fastlane_conf_dir
30
+ FileUtils.mkdir_p fastlane_conf_dir
31
+
32
+ # then copy all of the completions files into it from the gem
33
+ completion_script_path = File.join(Fastlane::ROOT, 'lib', 'assets', 'completions')
34
+ FileUtils.cp_r completion_script_path, fastlane_conf_dir
35
+
36
+ UI.success "Copied! To use auto complete for fastlane, add the following line to your favorite rc file (e.g. ~/.bashrc)"
37
+ UI.important " . ~/.fastlane/completions/completion.sh"
38
+ UI.success "Don't forget to source that file in your current shell! 🐚"
39
+ end
22
40
  end
23
41
  end
24
42
  end
@@ -81,6 +81,19 @@ Style/DotPosition:
81
81
  Style/DoubleNegation:
82
82
  Enabled: false
83
83
 
84
+ # Prevent to replace [] into %i
85
+ Style/SymbolArray:
86
+ Enabled: false
87
+
88
+ # We still support Ruby 2.0.0
89
+ Style/IndentHeredoc:
90
+ Enabled: false
91
+
92
+ # This cop would not work fine with rspec
93
+ Style/MixinGrouping:
94
+ Exclude:
95
+ - '**/spec/**/*'
96
+
84
97
  # Sometimes we allow a rescue block that doesn't contain code
85
98
  Lint/HandleExceptions:
86
99
  Enabled: false
@@ -89,6 +102,9 @@ Lint/HandleExceptions:
89
102
  Lint/UnusedBlockArgument:
90
103
  Enabled: false
91
104
 
105
+ Lint/AmbiguousBlockAssociation:
106
+ Enabled: false
107
+
92
108
  # Needed for $verbose
93
109
  Style/GlobalVars:
94
110
  Enabled: false
@@ -195,6 +211,18 @@ AllCops:
195
211
  - '**/lib/assets/custom_action_template.rb'
196
212
  - './vendor/**/*'
197
213
 
214
+ # They have not to be snake_case
215
+ Style/FileName:
216
+ Exclude:
217
+ - '**/Dangerfile'
218
+ - '**/Brewfile'
219
+ - '**/Gemfile'
220
+ - '**/Podfile'
221
+ - '**/Rakefile'
222
+ - '**/Fastfile'
223
+ - '**/Deliverfile'
224
+ - '**/Snapfile'
225
+
198
226
  # We're not there yet
199
227
  Style/Documentation:
200
228
  Enabled: false
@@ -1,4 +1,4 @@
1
1
  module Fastlane
2
- VERSION = '2.24.0.beta.20170327010009'.freeze
2
+ VERSION = '2.24.0.beta.20170328010037'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  end
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  module Gym
3
4
  # This classes methods are called when something goes wrong in the building process
4
5
  class ErrorHandler
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+
2
3
  # from https://stackoverflow.com/a/9857493/445598
3
4
  # because of
4
5
  # `incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)`
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+
2
3
  # from https://stackoverflow.com/a/9857493/445598
3
4
  # because of
4
5
  # `incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)`
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+
2
3
  # from https://stackoverflow.com/a/9857493/445598
3
4
  # because of
4
5
  # `incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)`
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+
2
3
  # from https://stackoverflow.com/a/9857493/445598
3
4
  # because of
4
5
  # `incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)`
@@ -9,7 +9,7 @@ module Scan
9
9
  end
10
10
 
11
11
  def self.available_options
12
- containing = Helper.fastlane_enabled? ? './fastlane' : '.'
12
+ containing = Helper.fastlane_enabled? ? FastlaneCore::FastlaneFolder.path : '.'
13
13
 
14
14
  [
15
15
  FastlaneCore::ConfigItem.new(key: :workspace,
@@ -48,7 +48,7 @@ module Screengrab
48
48
 
49
49
  c.action do |args, options|
50
50
  require 'screengrab/setup'
51
- path = (Screengrab::Helper.fastlane_enabled? ? './fastlane' : '.')
51
+ path = Screengrab::Helper.fastlane_enabled? ? FastlaneCore::FastlaneFolder.path : '.'
52
52
  Screengrab::Setup.create(path)
53
53
  end
54
54
  end
@@ -42,7 +42,7 @@ open class Snapshot: NSObject {
42
42
 
43
43
  do {
44
44
  let trimCharacterSet = CharacterSet.whitespacesAndNewlines
45
- deviceLanguage = try NSString(contentsOfFile: path, encoding: String.Encoding.utf8.rawValue).trimmingCharacters(in: trimCharacterSet) as String
45
+ deviceLanguage = try String(contentsOf: path, encoding: .utf8).trimmingCharacters(in: trimCharacterSet)
46
46
  app.launchArguments += ["-AppleLanguages", "(\(deviceLanguage))"]
47
47
  } catch {
48
48
  print("Couldn't detect/set language...")
@@ -58,7 +58,7 @@ open class Snapshot: NSObject {
58
58
 
59
59
  do {
60
60
  let trimCharacterSet = CharacterSet.whitespacesAndNewlines
61
- locale = try NSString(contentsOfFile: path, encoding: String.Encoding.utf8.rawValue).trimmingCharacters(in: trimCharacterSet) as String
61
+ locale = try String(contentsOf: path, encoding: .utf8).trimmingCharacters(in: trimCharacterSet)
62
62
  } catch {
63
63
  print("Couldn't detect/set locale...")
64
64
  }
@@ -77,7 +77,7 @@ open class Snapshot: NSObject {
77
77
  app.launchArguments += ["-FASTLANE_SNAPSHOT", "YES", "-ui_testing"]
78
78
 
79
79
  do {
80
- let launchArguments = try NSString(contentsOfFile: path, encoding: String.Encoding.utf8.rawValue) as String
80
+ let launchArguments = try String(contentsOf: path, encoding: String.Encoding.utf8)
81
81
  let regex = try NSRegularExpression(pattern: "(\\\".+?\\\"|\\S+)", options: [])
82
82
  let matches = regex.matches(in: launchArguments, options: [], range: NSRange(location:0, length:launchArguments.characters.count))
83
83
  let results = matches.map { result -> String in
@@ -100,6 +100,8 @@ open class Snapshot: NSObject {
100
100
 
101
101
  #if os(tvOS)
102
102
  XCUIApplication().childrenMatchingType(.Browser).count
103
+ #elseif os(OSX)
104
+ XCUIApplication().typeKey(XCUIKeyboardKeySecondaryFn, modifierFlags: [])
103
105
  #else
104
106
  XCUIDevice.shared().orientation = .unknown
105
107
  #endif
@@ -118,12 +120,34 @@ open class Snapshot: NSObject {
118
120
  }
119
121
  }
120
122
 
121
- class func pathPrefix() -> NSString? {
122
- if let path = ProcessInfo().environment["SIMULATOR_HOST_HOME"] as NSString? {
123
- return path.appendingPathComponent("Library/Caches/tools.fastlane") as NSString?
124
- }
125
- print("Couldn't find Snapshot configuration files at ~/Library/Caches/tools.fastlane")
126
- return nil
123
+ class func pathPrefix() -> URL? {
124
+ let homeDir: URL
125
+ //on OSX config is stored in /Users/<username>/Library
126
+ //and on iOS/tvOS/WatchOS it's in simulator's home dir
127
+ #if os(OSX)
128
+ guard let user = ProcessInfo().environment["USER"] else {
129
+ print("Couldn't find Snapshot configuration files - can't detect current user ")
130
+ return nil
131
+ }
132
+
133
+ guard let usersDir = FileManager.default.urls(for: .userDirectory, in: .localDomainMask).first else {
134
+ print("Couldn't find Snapshot configuration files - can't detect `Users` dir")
135
+ return nil
136
+ }
137
+
138
+ homeDir = usersDir.appendingPathComponent(user)
139
+ #else
140
+ guard let simulatorHostHome = ProcessInfo().environment["SIMULATOR_HOST_HOME"] else {
141
+ print("Couldn't find simulator home location. Please, check SIMULATOR_HOST_HOME env variable.")
142
+ return nil
143
+ }
144
+ guard let homeDirUrl = URL(string: simulatorHostHome) else {
145
+ print("Can't prepare environment. Simulator home location is inaccessible. Does \(simulatorHostHome) exist?")
146
+ return nil
147
+ }
148
+ homeDir = homeDirUrl
149
+ #endif
150
+ return homeDir.appendingPathComponent("Library/Caches/tools.fastlane")
127
151
  }
128
152
  }
129
153
 
@@ -139,4 +163,4 @@ extension XCUIElement {
139
163
 
140
164
  // Please don't remove the lines below
141
165
  // They are used to detect outdated configuration files
142
- // SnapshotHelperVersion [1.2]
166
+ // SnapshotHelperVersion [1.3]
@@ -102,6 +102,8 @@ public class Snapshot: NSObject {
102
102
 
103
103
  #if os(tvOS)
104
104
  XCUIApplication().childrenMatchingType(.Browser).count
105
+ #elseif os(OSX)
106
+ XCUIApplication().typeKey(XCUIKeyboardKeySecondaryFn, modifierFlags: [])
105
107
  #else
106
108
  XCUIDevice.sharedDevice().orientation = .Unknown
107
109
  #endif
@@ -121,11 +123,29 @@ public class Snapshot: NSObject {
121
123
  }
122
124
 
123
125
  class func pathPrefix() -> NSString? {
124
- if let path = NSProcessInfo().environment["SIMULATOR_HOST_HOME"] as NSString? {
125
- return path.stringByAppendingPathComponent("Library/Caches/tools.fastlane")
126
- }
127
- print("Couldn't find Snapshot configuration files at ~/Library/Caches/tools.fastlane")
128
- return nil
126
+ var homeDir: NSString
127
+ //on OSX config is stored in /Users/<username>/Library
128
+ //and on iOS/tvOS/WatchOS it's in simulator's home dir
129
+ #if os(OSX)
130
+
131
+ guard let user = ProcessInfo().environment["USER"] else {
132
+ print("Couldn't find Snapshot configuration files - can't detect current user ")
133
+ return nil
134
+ }
135
+
136
+ guard let usersDir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.NSUserDirectory, NSSearchPathDomainMask.NSLocalDomainMask, true)[0] as NSString? else {
137
+ print("Couldn't find Snapshot configuration files - can't detect `Users` dir")
138
+ return nil
139
+ }
140
+
141
+ homeDir = usersDir.stringByAppendingPathComponent(user) as NSString
142
+ #else
143
+ guard homeDir = ProcessInfo().environment["SIMULATOR_HOST_HOME"] as NSString else {
144
+ print("Couldn't find simulator home location. Please, check SIMULATOR_HOST_HOME env variable.")
145
+ return nil
146
+ }
147
+ #endif
148
+ return homeDir.stringByAppendingPathComponent("Library/Caches/tools.fastlane") as NSString
129
149
  }
130
150
  }
131
151
 
@@ -141,4 +161,4 @@ extension XCUIElement {
141
161
 
142
162
  // Please don't remove the lines below
143
163
  // They are used to detect outdated configuration files
144
- // SnapshotHelperVersion [1.2]
164
+ // SnapshotHelperVersion [1.3]
@@ -75,18 +75,33 @@ module Snapshot
75
75
  def self.check_activity(activity, to_store)
76
76
  # On iOS, we look for the "Unknown" rotation gesture that signals a snapshot was taken here.
77
77
  # On tvOS, we look for "Browser" count.
78
- # These are both events that are not normally triggered by UI testing, making it easy for us to
78
+ # On OSX we look for type `Fn` key on keyboard, it shouldn't change anything for app
79
+ # These are events that are not normally triggered by UI testing, making it easy for us to
79
80
  # locate where snapshot() was invoked.
80
- if activity["Title"] == "Set device orientation to Unknown" || activity["Title"] == "Get number of matches for: Children matching type Browser"
81
- if activity["Attachments"]
82
- to_store << activity["Attachments"].last["FileName"]
83
- else # Xcode 7.3 has stopped including 'Attachments', so we synthesize the filename manually
84
- to_store << "Screenshot_#{activity['UUID']}.png"
85
- end
81
+ ios_detected = activity["Title"] == "Set device orientation to Unknown"
82
+ tvos_detected = activity["Title"] == "Get number of matches for: Children matching type Browser"
83
+ osx_detected = activity["Title"] == "Type 'Fn' key (XCUIKeyboardKeySecondaryFn) with no modifiers"
84
+ if ios_detected || tvos_detected || osx_detected
85
+ find_screenshot = find_screenshot(activity)
86
+ to_store << find_screenshot
86
87
  end
88
+
87
89
  (activity["SubActivities"] || []).each do |subactivity|
88
90
  check_activity(subactivity, to_store)
89
91
  end
90
92
  end
93
+
94
+ def self.find_screenshot(activity)
95
+ (activity["SubActivities"] || []).each do |subactivity|
96
+ # we are interested in `Synthesize event` part of event in subactivities
97
+ return find_screenshot(subactivity) if subactivity["Title"] == "Synthesize event"
98
+ end
99
+
100
+ if activity["Attachments"]
101
+ return activity["Attachments"].last["FileName"]
102
+ else # Xcode 7.3 has stopped including 'Attachments', so we synthesize the filename manually
103
+ return "Screenshot_#{activity['UUID']}.png"
104
+ end
105
+ end
91
106
  end
92
107
  end
@@ -44,7 +44,7 @@ module Snapshot
44
44
 
45
45
  c.action do |args, options|
46
46
  require 'snapshot/setup'
47
- path = (Snapshot::Helper.fastlane_enabled? ? './fastlane' : '.')
47
+ path = Snapshot::Helper.fastlane_enabled? ? FastlaneCore::FastlaneFolder.path : '.'
48
48
  Snapshot::Setup.create(path)
49
49
  end
50
50
  end
@@ -22,7 +22,7 @@ module Snapshot
22
22
  Snapshot.project.select_scheme(preferred_to_include: "UITests")
23
23
 
24
24
  # Devices
25
- unless config[:devices]
25
+ if config[:devices].nil? && !Snapshot.project.mac?
26
26
  config[:devices] = []
27
27
 
28
28
  # We only care about a subset of the simulators
@@ -50,6 +50,8 @@ module Snapshot
50
50
 
51
51
  config[:devices] << sim.name
52
52
  end
53
+ elsif Snapshot.project.mac?
54
+ config[:devices] << "Mac"
53
55
  end
54
56
  end
55
57
  end
@@ -43,8 +43,9 @@ module Snapshot
43
43
  verify_block: proc do |value|
44
44
  available = FastlaneCore::DeviceManager.simulators
45
45
  value.each do |current|
46
- unless available.any? { |d| d.name.strip == current.strip }
47
- UI.user_error!("Device '#{current}' not in list of available simulators '#{available.join(', ')}'")
46
+ device = current.strip
47
+ unless available.any? { |d| d.name.strip == device } || device == "Mac"
48
+ UI.user_error!("Device '#{device}' not in list of available simulators '#{available.join(', ')}'")
48
49
  end
49
50
  end
50
51
  end),
@@ -146,22 +146,24 @@ module Snapshot
146
146
  File.write(File.join(prefix, "locale.txt"), locale || "")
147
147
  File.write(File.join(prefix, "snapshot-launch_arguments.txt"), launch_arguments.last)
148
148
 
149
- # Kill and shutdown all currently running simulators so that the following settings
150
- # changes will be picked up when they are started again.
151
- Snapshot.kill_simulator # because of https://github.com/fastlane/snapshot/issues/337
152
- `xcrun simctl shutdown booted &> /dev/null`
153
-
154
- Fixes::SimulatorZoomFix.patch
155
- Fixes::HardwareKeyboardFix.patch
156
-
157
- if Snapshot.config[:erase_simulator] || Snapshot.config[:localize_simulator]
158
- erase_simulator(device_type)
159
- if Snapshot.config[:localize_simulator]
160
- localize_simulator(device_type, language, locale)
149
+ unless device_type == "Mac"
150
+ # Kill and shutdown all currently running simulators so that the following settings
151
+ # changes will be picked up when they are started again.
152
+ Snapshot.kill_simulator # because of https://github.com/fastlane/snapshot/issues/337
153
+ `xcrun simctl shutdown booted &> /dev/null`
154
+
155
+ Fixes::SimulatorZoomFix.patch
156
+ Fixes::HardwareKeyboardFix.patch
157
+
158
+ if Snapshot.config[:erase_simulator] || Snapshot.config[:localize_simulator]
159
+ erase_simulator(device_type)
160
+ if Snapshot.config[:localize_simulator]
161
+ localize_simulator(device_type, language, locale)
162
+ end
163
+ elsif Snapshot.config[:reinstall_app]
164
+ # no need to reinstall if device has been erased
165
+ uninstall_app(device_type)
161
166
  end
162
- elsif Snapshot.config[:reinstall_app]
163
- # no need to reinstall if device has been erased
164
- uninstall_app(device_type)
165
167
  end
166
168
 
167
169
  add_media(device_type, :photo, Snapshot.config[:add_photos]) if Snapshot.config[:add_photos]
@@ -90,6 +90,9 @@ module Snapshot
90
90
  end
91
91
 
92
92
  def destination(device_name)
93
+ # on Mac we will always run on host machine, so should specify only platform
94
+ return ["-destination 'platform=macOS'"] if device_name =~ /^Mac/
95
+
93
96
  os = device_name =~ /^Apple TV/ ? "tvOS" : "iOS"
94
97
  os_version = Snapshot.config[:ios_version] || Snapshot::LatestOsVersion.version(os)
95
98
 
@@ -91,7 +91,7 @@ module Spaceship
91
91
 
92
92
  # @return (Array) Returns all devices that can be used for iOS profiles (all devices except TVs)
93
93
  def all_ios_profile_devices
94
- all.select { |device| device.device_type != "tvOS" }
94
+ all.reject { |device| device.device_type == "tvOS" }
95
95
  end
96
96
 
97
97
  # @return (Array) Returns all devices matching the provided profile_type
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.24.0.beta.20170327010009
4
+ version: 2.24.0.beta.20170328010037
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2017-03-27 00:00:00.000000000 Z
17
+ date: 2017-03-28 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: slack-notifier
@@ -658,14 +658,14 @@ dependencies:
658
658
  requirements:
659
659
  - - "~>"
660
660
  - !ruby/object:Gem::Version
661
- version: 0.47.0
661
+ version: '0.48'
662
662
  type: :development
663
663
  prerelease: false
664
664
  version_requirements: !ruby/object:Gem::Requirement
665
665
  requirements:
666
666
  - - "~>"
667
667
  - !ruby/object:Gem::Version
668
- version: 0.47.0
668
+ version: '0.48'
669
669
  - !ruby/object:Gem::Dependency
670
670
  name: rb-readline
671
671
  requirement: !ruby/object:Gem::Requirement
@@ -759,6 +759,7 @@ files:
759
759
  - fastlane/lib/assets/DefaultFastfileTemplate
760
760
  - fastlane/lib/assets/FastfileTemplateAndroid
761
761
  - fastlane/lib/assets/completions/completion.bash
762
+ - fastlane/lib/assets/completions/completion.fish
762
763
  - fastlane/lib/assets/completions/completion.sh
763
764
  - fastlane/lib/assets/completions/completion.zsh
764
765
  - fastlane/lib/assets/custom_action_template.rb
@@ -1296,23 +1297,23 @@ metadata:
1296
1297
  post_install_message:
1297
1298
  rdoc_options: []
1298
1299
  require_paths:
1299
- - spaceship/lib
1300
- - fastlane/lib
1301
- - credentials_manager/lib
1302
- - screengrab/lib
1303
- - deliver/lib
1304
- - sigh/lib
1300
+ - pilot/lib
1301
+ - snapshot/lib
1302
+ - match/lib
1305
1303
  - fastlane_core/lib
1304
+ - gym/lib
1305
+ - deliver/lib
1306
+ - spaceship/lib
1306
1307
  - cert/lib
1307
- - supply/lib
1308
- - pem/lib
1309
- - produce/lib
1310
1308
  - scan/lib
1309
+ - screengrab/lib
1310
+ - pem/lib
1311
+ - supply/lib
1312
+ - sigh/lib
1311
1313
  - frameit/lib
1312
- - pilot/lib
1313
- - gym/lib
1314
- - match/lib
1315
- - snapshot/lib
1314
+ - produce/lib
1315
+ - fastlane/lib
1316
+ - credentials_manager/lib
1316
1317
  required_ruby_version: !ruby/object:Gem::Requirement
1317
1318
  requirements:
1318
1319
  - - ">="