snapshot 1.6.0 → 1.7.0
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.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/lib/assets/SnapshotHelper.swift +2 -1
- data/lib/snapshot/collector.rb +19 -11
- data/lib/snapshot/dependency_checker.rb +22 -22
- data/lib/snapshot/error_handler.rb +3 -14
- data/lib/snapshot/fixes/simulator_zoom_fix.rb +1 -1
- data/lib/snapshot/options.rb +12 -6
- data/lib/snapshot/reports_generator.rb +2 -2
- data/lib/snapshot/runner.rb +47 -32
- data/lib/snapshot/screenshot_flatten.rb +2 -2
- data/lib/snapshot/screenshot_rotate.rb +2 -2
- data/lib/snapshot/update.rb +9 -11
- data/lib/snapshot/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bfb5b368926119bc4632fb4621c5c0cec9ff2c4
|
4
|
+
data.tar.gz: 8045f7a9167e3cef5b8fa19231c3dd16dfd31b31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60fce8fd07f9784372473296ab2106f83a4db5855acd1a887869b751fd504d39c4e512dfc96e0535182a9267e7cd1e133b22af43227d9363e309205265709f65
|
7
|
+
data.tar.gz: 683460e6eba4fe459133f0ed94c563b7c6b86be798566541e30cf1b6622bf26479633c24b12588ee73305e094aa4a4437580a9dc44b5c731712f8e0e423357fc
|
data/README.md
CHANGED
@@ -201,6 +201,12 @@ Reinstall the app before running `snapshot`
|
|
201
201
|
snapshot --reinstall_app --app_identifier "tools.fastlane.app"
|
202
202
|
```
|
203
203
|
|
204
|
+
By default `snapshot` automatically retries running UI Tests if they fail. This is due to randomly failing UI Tests (e.g. [#372](https://github.com/fastlane/snapshot/issues/372)). You can adapt this number using
|
205
|
+
|
206
|
+
```sh
|
207
|
+
snapshot --number_of_retries 3
|
208
|
+
```
|
209
|
+
|
204
210
|
For a list for all available options run
|
205
211
|
|
206
212
|
```sh
|
@@ -10,6 +10,7 @@ import Foundation
|
|
10
10
|
import XCTest
|
11
11
|
|
12
12
|
var deviceLanguage = ""
|
13
|
+
var locale = ""
|
13
14
|
|
14
15
|
@available(*, deprecated, message="use setupSnapshot: instead")
|
15
16
|
func setLanguage(app: XCUIApplication) {
|
@@ -35,7 +36,7 @@ class Snapshot: NSObject {
|
|
35
36
|
let path = "/tmp/language.txt"
|
36
37
|
|
37
38
|
do {
|
38
|
-
|
39
|
+
locale = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) as String
|
39
40
|
deviceLanguage = locale.substringToIndex(locale.startIndex.advancedBy(2, limit:locale.endIndex))
|
40
41
|
app.launchArguments += ["-AppleLanguages", "(\(deviceLanguage))", "-AppleLocale", "\"\(locale)\"", "-ui_testing"]
|
41
42
|
} catch {
|
data/lib/snapshot/collector.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Snapshot
|
2
2
|
# Responsible for collecting the generated screenshots and copying them over to the output directory
|
3
3
|
class Collector
|
4
|
+
# Returns true if it succeeds
|
4
5
|
def self.fetch_screenshots(output, language, device_type, launch_arguments_index)
|
5
6
|
# Documentation about how this works in the project README
|
6
7
|
containing = File.join(TestCommandGenerator.derived_data_path, "Logs", "Test")
|
@@ -14,7 +15,7 @@ module Snapshot
|
|
14
15
|
end
|
15
16
|
|
16
17
|
if matches.count != to_store.count
|
17
|
-
|
18
|
+
UI.error "Looks like the number of screenshots (#{to_store.count}) doesn't match the number of names (#{matches.count})"
|
18
19
|
end
|
19
20
|
|
20
21
|
matches.each_with_index do |current, index|
|
@@ -30,9 +31,9 @@ module Snapshot
|
|
30
31
|
output_path = File.join(language_folder, components.join("-") + ".png")
|
31
32
|
from_path = File.join(attachments_path, filename)
|
32
33
|
if $verbose
|
33
|
-
|
34
|
+
UI.success "Copying file '#{from_path}' to '#{output_path}'..."
|
34
35
|
else
|
35
|
-
|
36
|
+
UI.success "Copying '#{output_path}'..."
|
36
37
|
end
|
37
38
|
FileUtils.cp(from_path, output_path)
|
38
39
|
end
|
@@ -41,10 +42,10 @@ module Snapshot
|
|
41
42
|
end
|
42
43
|
|
43
44
|
def self.attachments(containing)
|
44
|
-
|
45
|
+
UI.message "Collecting screenshots..."
|
45
46
|
|
46
47
|
plist_path = Dir[File.join(containing, "*.plist")].last # we clean the folder before each run
|
47
|
-
|
48
|
+
UI.verbose "Loading up '#{plist_path}'..."
|
48
49
|
report = Plist.parse_xml(plist_path)
|
49
50
|
|
50
51
|
to_store = [] # contains the names of all the attachments we want to use
|
@@ -54,10 +55,7 @@ module Snapshot
|
|
54
55
|
(subtest["Subtests"] || []).each do |subtest2|
|
55
56
|
(subtest2["Subtests"] || []).each do |subtest3|
|
56
57
|
(subtest3["ActivitySummaries"] || []).each do |activity|
|
57
|
-
|
58
|
-
if activity["Title"] == "Set device orientation to Unknown"
|
59
|
-
to_store << activity["Attachments"].last["FileName"]
|
60
|
-
end
|
58
|
+
check_activity(activity, to_store)
|
61
59
|
end
|
62
60
|
end
|
63
61
|
end
|
@@ -65,9 +63,19 @@ module Snapshot
|
|
65
63
|
end
|
66
64
|
end
|
67
65
|
|
68
|
-
|
69
|
-
|
66
|
+
UI.message "Found #{to_store.count} screenshots..."
|
67
|
+
UI.verbose "Found #{to_store.join(', ')}"
|
70
68
|
return to_store
|
71
69
|
end
|
70
|
+
|
71
|
+
def self.check_activity(activity, to_store)
|
72
|
+
# We now check if it's the rotation gesture, because that's the only thing we care about
|
73
|
+
if activity["Title"] == "Set device orientation to Unknown"
|
74
|
+
to_store << activity["Attachments"].last["FileName"]
|
75
|
+
end
|
76
|
+
(activity["SubActivities"] || []).each do |subactivity|
|
77
|
+
check_activity(subactivity, to_store)
|
78
|
+
end
|
79
|
+
end
|
72
80
|
end
|
73
81
|
end
|
@@ -9,41 +9,41 @@ module Snapshot
|
|
9
9
|
|
10
10
|
def self.check_xcode_select
|
11
11
|
unless `xcode-select -v`.include? "xcode-select version"
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
UI.error '#############################################################'
|
13
|
+
UI.error "# You have to install the Xcode commdand line tools to use snapshot"
|
14
|
+
UI.error "# Install the latest version of Xcode from the AppStore"
|
15
|
+
UI.error "# Run xcode-select --install to install the developer tools"
|
16
|
+
UI.error '#############################################################'
|
17
|
+
UI.user_error!("Run 'xcode-select --install' and start snapshot again")
|
18
18
|
end
|
19
19
|
|
20
20
|
if Snapshot::LatestIosVersion.version.to_f < 9 # to_f is bad, but should be good enough
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
UI.error '#############################################################'
|
22
|
+
UI.error "# Your xcode-select Xcode version is below 7.0"
|
23
|
+
UI.error "# To use snapshot 1.0 and above you need at least iOS 9"
|
24
|
+
UI.error "# Set the path to the Xcode version that supports UI Tests"
|
25
|
+
UI.error "# or downgrade to versions older than snapshot 1.0"
|
26
|
+
UI.error '#############################################################'
|
27
|
+
UI.user_error!("Run 'sudo xcode-select -s /Applications/Xcode-beta.app'")
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.check_simulators
|
32
|
-
|
32
|
+
UI.verbose("Found #{FastlaneCore::Simulator.all.count} simulators.")
|
33
33
|
if FastlaneCore::Simulator.all.count == 0
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
UI.error '#############################################################'
|
35
|
+
UI.error "# You have to add new simulators using Xcode"
|
36
|
+
UI.error "# You can let snapshot create new simulators: 'snapshot reset_simulators'"
|
37
|
+
UI.error "# Manually: Xcode => Window => Devices"
|
38
|
+
UI.error "# Please run `instruments -s` to verify your xcode path"
|
39
|
+
UI.error '#############################################################'
|
40
|
+
UI.user_error!("Create the new simulators and run this script again")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.check_simctl
|
45
45
|
unless `xcrun simctl`.include? "openurl"
|
46
|
-
|
46
|
+
UI.user_error!("Could not find `xcrun simctl`. Make sure you have the latest version of Xcode and Mac OS installed.")
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -1,9 +1,5 @@
|
|
1
1
|
module Snapshot
|
2
|
-
# This classes methods are called when something goes wrong in the building process
|
3
2
|
class ErrorHandler
|
4
|
-
class TestsFailedException < StandardError
|
5
|
-
end
|
6
|
-
|
7
3
|
class << self
|
8
4
|
# @param [Array] The output of the errored build (line by line)
|
9
5
|
# This method should raise an exception in any case, as the return code indicated a failed build
|
@@ -11,23 +7,16 @@ module Snapshot
|
|
11
7
|
# The order of the handling below is import
|
12
8
|
|
13
9
|
if return_code == 65
|
14
|
-
|
10
|
+
UI.user_error!("Tests failed - check out the log above")
|
15
11
|
end
|
16
12
|
|
17
13
|
case output
|
18
14
|
when /com\.apple\.CoreSimulator\.SimError/
|
19
|
-
|
15
|
+
UI.important "The simulator failed to launch - retrying..."
|
20
16
|
when /is not configured for Running/
|
21
|
-
|
17
|
+
UI.user_error!("Scheme is not properly configured, make sure to check out the snapshot README")
|
22
18
|
end
|
23
19
|
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
# Just to make things easier
|
28
|
-
def print(text)
|
29
|
-
Helper.log.error text.red
|
30
|
-
end
|
31
20
|
end
|
32
21
|
end
|
33
22
|
end
|
@@ -10,7 +10,7 @@ module Snapshot
|
|
10
10
|
# First we need to kill the simulator
|
11
11
|
Snapshot.kill_simulator
|
12
12
|
|
13
|
-
|
13
|
+
UI.message "Patching '#{config_path}' to scale simulator to 100%"
|
14
14
|
|
15
15
|
FastlaneCore::Simulator.all.each do |simulator|
|
16
16
|
simulator_name = simulator.name.tr("\s", "-")
|
data/lib/snapshot/options.rb
CHANGED
@@ -62,11 +62,6 @@ module Snapshot
|
|
62
62
|
description: "By default, the latest version should be used automatically. If you want to change it, do it here",
|
63
63
|
short_option: "-i",
|
64
64
|
default_value: Snapshot::LatestIosVersion.version),
|
65
|
-
FastlaneCore::ConfigItem.new(key: :stop_after_first_error,
|
66
|
-
env_name: 'SNAPSHOT_BREAK_ON_FIRST_ERROR',
|
67
|
-
description: "Should snapshot stop immediately after one of the tests failed on one device?",
|
68
|
-
default_value: false,
|
69
|
-
is_string: false),
|
70
65
|
FastlaneCore::ConfigItem.new(key: :skip_open_summary,
|
71
66
|
env_name: 'SNAPSHOT_SKIP_OPEN_SUMMARY',
|
72
67
|
description: "Don't open the HTML summary after running `snapshot`",
|
@@ -121,7 +116,18 @@ module Snapshot
|
|
121
116
|
short_option: "-s",
|
122
117
|
env_name: 'SNAPSHOT_SCHEME',
|
123
118
|
description: "The scheme you want to use, this must be the scheme for the UI Tests",
|
124
|
-
optional: true) # optional true because we offer a picker to the user
|
119
|
+
optional: true), # optional true because we offer a picker to the user
|
120
|
+
FastlaneCore::ConfigItem.new(key: :number_of_retries,
|
121
|
+
short_option: "-n",
|
122
|
+
env_name: 'SNAPSHOT_NUMBER_OF_RETRIES',
|
123
|
+
description: "The number of times a test can fail before snapshot should stop retrying",
|
124
|
+
type: Integer,
|
125
|
+
default_value: 1),
|
126
|
+
FastlaneCore::ConfigItem.new(key: :stop_after_first_error,
|
127
|
+
env_name: 'SNAPSHOT_BREAK_ON_FIRST_ERROR',
|
128
|
+
description: "Should snapshot stop immediately after the tests completely failed on one device?",
|
129
|
+
default_value: false,
|
130
|
+
is_string: false)
|
125
131
|
]
|
126
132
|
end
|
127
133
|
end
|
@@ -4,7 +4,7 @@ require 'fastimage'
|
|
4
4
|
module Snapshot
|
5
5
|
class ReportsGenerator
|
6
6
|
def generate
|
7
|
-
|
7
|
+
UI.message "Generating HTML Report"
|
8
8
|
|
9
9
|
screens_path = Snapshot.config[:output_directory]
|
10
10
|
|
@@ -34,7 +34,7 @@ module Snapshot
|
|
34
34
|
File.write(export_path, html)
|
35
35
|
|
36
36
|
export_path = File.expand_path(export_path)
|
37
|
-
|
37
|
+
UI.success "Successfully created HTML file with an overview of all the screenshots: '#{export_path}'"
|
38
38
|
system("open '#{export_path}'") unless Snapshot.config[:skip_open_summary]
|
39
39
|
end
|
40
40
|
|
data/lib/snapshot/runner.rb
CHANGED
@@ -3,14 +3,18 @@ require 'plist'
|
|
3
3
|
|
4
4
|
module Snapshot
|
5
5
|
class Runner
|
6
|
-
|
6
|
+
# The number of times we failed on launching the simulator... sigh
|
7
|
+
attr_accessor :number_of_retries_due_to_failing_simulator
|
8
|
+
|
9
|
+
# All the errors we experience while running snapshot
|
10
|
+
attr_accessor :collected_errors
|
7
11
|
|
8
12
|
def work
|
9
13
|
if File.exist?("./fastlane/snapshot.js") or File.exist?("./snapshot.js")
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
+
UI.error "Found old snapshot configuration file 'snapshot.js'"
|
15
|
+
UI.error "You updated to snapshot 1.0 which now uses UI Automation"
|
16
|
+
UI.error "Please follow the migration guide: https://github.com/fastlane/snapshot/blob/master/MigrationGuide.md"
|
17
|
+
UI.error "And read the updated documentation: https://github.com/fastlane/snapshot"
|
14
18
|
sleep 3 # to be sure the user sees this, as compiling clears the screen
|
15
19
|
end
|
16
20
|
|
@@ -20,10 +24,10 @@ module Snapshot
|
|
20
24
|
|
21
25
|
clear_previous_screenshots if Snapshot.config[:clear_previous_screenshots]
|
22
26
|
|
23
|
-
|
27
|
+
UI.success "Building and running project - this might take some time..."
|
24
28
|
|
25
|
-
self.
|
26
|
-
|
29
|
+
self.number_of_retries_due_to_failing_simulator = 0
|
30
|
+
self.collected_errors = []
|
27
31
|
results = {} # collect all the results for a nice table
|
28
32
|
launch_arguments_set = config_launch_arguments
|
29
33
|
Snapshot.config[:devices].each do |device|
|
@@ -31,22 +35,14 @@ module Snapshot
|
|
31
35
|
Snapshot.config[:languages].each do |language|
|
32
36
|
results[device] ||= {}
|
33
37
|
|
34
|
-
|
35
|
-
results[device][language] = launch(language, device, launch_arguments)
|
36
|
-
rescue => ex
|
37
|
-
Helper.log.error ex # we should to show right here as well
|
38
|
-
Helper.log.error "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
|
39
|
-
errors << ex
|
40
|
-
results[device][language] = false
|
41
|
-
raise ex if Snapshot.config[:stop_after_first_error]
|
42
|
-
end
|
38
|
+
results[device][language] = run_for_device_and_language(language, device, launch_arguments)
|
43
39
|
end
|
44
40
|
end
|
45
41
|
end
|
46
42
|
|
47
43
|
print_results(results)
|
48
44
|
|
49
|
-
raise
|
45
|
+
raise self.collected_errors.join('; ') if self.collected_errors.count > 0
|
50
46
|
|
51
47
|
# Generate HTML report
|
52
48
|
ReportsGenerator.new.generate
|
@@ -55,6 +51,24 @@ module Snapshot
|
|
55
51
|
FileUtils.rm_rf(TestCommandGenerator.derived_data_path)
|
56
52
|
end
|
57
53
|
|
54
|
+
# This is its own method so that it can re-try if the tests fail randomly
|
55
|
+
# @return true/false depending on if the tests succeded
|
56
|
+
def run_for_device_and_language(language, device, launch_arguments, retries = 0)
|
57
|
+
return launch(language, device, launch_arguments)
|
58
|
+
rescue => ex
|
59
|
+
UI.error ex.to_s # show the reason for failure to the user, but still maybe retry
|
60
|
+
|
61
|
+
if retries < Snapshot.config[:number_of_retries]
|
62
|
+
UI.important "Tests failed, re-trying #{retries + 1} out of #{Snapshot.config[:number_of_retries] + 1} times"
|
63
|
+
run_for_device_and_language(language, device, launch_arguments, retries + 1)
|
64
|
+
else
|
65
|
+
UI.error "Backtrace:\n\t#{ex.backtrace.join("\n\t")}" if $verbose
|
66
|
+
self.collected_errors << ex
|
67
|
+
raise ex if Snapshot.config[:stop_after_first_error]
|
68
|
+
return false # for the results
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
58
72
|
def config_launch_arguments
|
59
73
|
launch_arguments = Array(Snapshot.config[:launch_arguments])
|
60
74
|
# if more than 1 set of arguments, use a tuple with an index
|
@@ -87,6 +101,7 @@ module Snapshot
|
|
87
101
|
puts ""
|
88
102
|
end
|
89
103
|
|
104
|
+
# Returns true if it succeded
|
90
105
|
def launch(language, device_type, launch_arguments)
|
91
106
|
screenshots_path = TestCommandGenerator.derived_data_path
|
92
107
|
FileUtils.rm_rf(File.join(screenshots_path, "Logs"))
|
@@ -105,7 +120,7 @@ module Snapshot
|
|
105
120
|
|
106
121
|
command = TestCommandGenerator.generate(device_type: device_type)
|
107
122
|
|
108
|
-
|
123
|
+
UI.header("#{device_type} - #{language}")
|
109
124
|
|
110
125
|
prefix_hash = [
|
111
126
|
{
|
@@ -125,14 +140,14 @@ module Snapshot
|
|
125
140
|
ErrorHandler.handle_test_error(output, return_code)
|
126
141
|
|
127
142
|
# no exception raised... that means we need to retry
|
128
|
-
|
143
|
+
UI.error "Caught error... #{return_code}"
|
129
144
|
|
130
|
-
self.
|
131
|
-
if self.
|
145
|
+
self.number_of_retries_due_to_failing_simulator += 1
|
146
|
+
if self.number_of_retries_due_to_failing_simulator < 20
|
132
147
|
launch(language, device_type, launch_arguments)
|
133
148
|
else
|
134
149
|
# It's important to raise an error, as we don't want to collect the screenshots
|
135
|
-
|
150
|
+
UI.crash!("Too many errors... no more retries...")
|
136
151
|
end
|
137
152
|
end)
|
138
153
|
|
@@ -141,19 +156,19 @@ module Snapshot
|
|
141
156
|
end
|
142
157
|
|
143
158
|
def uninstall_app(device_type)
|
144
|
-
|
159
|
+
UI.verbose "Uninstalling app '#{Snapshot.config[:app_identifier]}' from #{device_type}..."
|
145
160
|
Snapshot.config[:app_identifier] ||= ask("App Identifier: ")
|
146
161
|
device_udid = TestCommandGenerator.device_udid(device_type)
|
147
162
|
|
148
|
-
|
149
|
-
|
163
|
+
UI.message "Launch Simulator #{device_type}"
|
164
|
+
Helper.backticks("xcrun instruments -w #{device_udid} &> /dev/null")
|
150
165
|
|
151
|
-
|
152
|
-
|
166
|
+
UI.message "Uninstall application #{Snapshot.config[:app_identifier]}"
|
167
|
+
Helper.backticks("xcrun simctl uninstall #{device_udid} #{Snapshot.config[:app_identifier]} &> /dev/null")
|
153
168
|
end
|
154
169
|
|
155
170
|
def clear_previous_screenshots
|
156
|
-
|
171
|
+
UI.important "Clearing previously generated screenshots"
|
157
172
|
path = File.join(".", Snapshot.config[:output_directory], "*", "*.png")
|
158
173
|
Dir[path].each do |current|
|
159
174
|
File.delete(current)
|
@@ -167,9 +182,9 @@ module Snapshot
|
|
167
182
|
content = File.read(path)
|
168
183
|
|
169
184
|
if content.include?("start.pressForDuration(0, thenDragToCoordinate: finish)")
|
170
|
-
|
171
|
-
|
172
|
-
|
185
|
+
UI.error "Your '#{path}' is outdated, please run `snapshot update`"
|
186
|
+
UI.error "to update your Helper file"
|
187
|
+
UI.user_error!("Please update your Snapshot Helper file")
|
173
188
|
end
|
174
189
|
end
|
175
190
|
end
|
@@ -3,13 +3,13 @@ module Snapshot
|
|
3
3
|
class ScreenshotFlatten
|
4
4
|
# @param (String) The path in which the screenshots are located in
|
5
5
|
def run(path)
|
6
|
-
|
6
|
+
UI.message "Removing the alpha channel from generated png files"
|
7
7
|
flatten(path)
|
8
8
|
end
|
9
9
|
|
10
10
|
def flatten(path)
|
11
11
|
Dir.glob([path, '/**/*.png'].join('/')).each do |file|
|
12
|
-
|
12
|
+
UI.verbose("Removing alpha channel from '#{file}'")
|
13
13
|
`sips -s format bmp '#{file}' &> /dev/null` # &> /dev/null because there is warning because of the extension
|
14
14
|
`sips -s format png '#{file}'`
|
15
15
|
end
|
@@ -5,13 +5,13 @@ module Snapshot
|
|
5
5
|
class ScreenshotRotate
|
6
6
|
# @param (String) The path in which the screenshots are located in
|
7
7
|
def run(path)
|
8
|
-
|
8
|
+
UI.verbose "Rotating the screenshots (if necessary)"
|
9
9
|
rotate(path)
|
10
10
|
end
|
11
11
|
|
12
12
|
def rotate(path)
|
13
13
|
Dir.glob([path, '/**/*.png'].join('/')).each do |file|
|
14
|
-
|
14
|
+
UI.verbose "Rotating '#{file}'"
|
15
15
|
|
16
16
|
command = nil
|
17
17
|
if file.end_with? "landscapeleft.png"
|
data/lib/snapshot/update.rb
CHANGED
@@ -10,23 +10,21 @@ module Snapshot
|
|
10
10
|
gem_path = Helper.gem_path("snapshot")
|
11
11
|
paths = self.class.find_helper
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
Helper.log.info "The underlying API will not change. You can always migrate manually by looking at"
|
20
|
-
Helper.log.info "https://github.com/fastlane/snapshot/blob/master/lib/assets/SnapshotHelper.swift"
|
13
|
+
UI.message "Found the following SnapshotHelper:"
|
14
|
+
paths.each { |p| UI.message "\t#{p}" }
|
15
|
+
UI.important "Are you sure you want to automatically update the helpers listed above?"
|
16
|
+
UI.message "This will overwrite all its content with the latest code."
|
17
|
+
UI.message "The underlying API will not change. You can always migrate manually by looking at"
|
18
|
+
UI.message "https://github.com/fastlane/snapshot/blob/master/lib/assets/SnapshotHelper.swift"
|
21
19
|
|
22
|
-
return 1 unless
|
20
|
+
return 1 unless UI.confirm("Overwrite configuration files?")
|
23
21
|
|
24
22
|
paths.each do |path|
|
25
|
-
|
23
|
+
UI.message "Updating '#{path}'..."
|
26
24
|
File.write(path, File.read("#{gem_path}/lib/assets/SnapshotHelper.swift"))
|
27
25
|
end
|
28
26
|
|
29
|
-
|
27
|
+
UI.success "Successfully updated helper files"
|
30
28
|
end
|
31
29
|
end
|
32
30
|
end
|
data/lib/snapshot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snapshot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastimage
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.36.1
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: 1.0.0
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.
|
43
|
+
version: 0.36.1
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 1.0.0
|