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

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="