snapshot 0.0.2 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2062cd7ffe2f73085accb032e996a17a6bae3366
4
- data.tar.gz: 28cece95de94cbcd1ce1b01af91cd49686440799
3
+ metadata.gz: a66a1a9280b45c2ab1a4791bc85878ea76dc9929
4
+ data.tar.gz: c0fdea38499e026ba90f5d50064308c1da2c488a
5
5
  SHA512:
6
- metadata.gz: 54f045eba2b950217cb20b701166d3301909217d45f5f13fe7e7379ff6da1c32bffa1fb956148674726a3b6ee73af9dae831d371db4374c904c9d53f817f3e85
7
- data.tar.gz: 82935ebf00ecdbab062e4353b69debb8fd6744eccf5fe3364993784f40b2051d2ee8fa39150ec304eeecbab8a730a806786d4174df3827679790f207aed6527f
6
+ metadata.gz: 95c00e2071a985cb2430f42fded88f4b208ed94432df393b8637fca9c2e407b55c2c9cb89304f98fe9d4a5a2cf253152bbe0ea9640eabc56439d36ad08503190
7
+ data.tar.gz: 6ea6bf77f028ed25ce463a2ab85c0164c2bf313426528c5463698154a93f0472260ec9265cfb598bd6f146fcf502f5358d297469f292b3e7b6ea57383924212e
data/README.md CHANGED
@@ -22,6 +22,7 @@ Follow the developer on Twitter: [@KrauseFx](https://twitter.com/KrauseFx)
22
22
  -------
23
23
  [Features](#features) •
24
24
  [Installation](#installation) •
25
+ [UI Automation](#ui-automation) •
25
26
  [Quick Start](#quick-start) •
26
27
  [Usage](#usage) •
27
28
  [Tips](#tips) •
@@ -35,6 +36,16 @@ Follow the developer on Twitter: [@KrauseFx](https://twitter.com/KrauseFx)
35
36
  - Configure it once, store the configuration in git
36
37
  - Do something else, while the computer takes the screenshots for you
37
38
  - Very easy to integrate with ```deliver```
39
+ - ```Snapshot``` automatically waits for network requests to be finished before taking a screenshot (we don't want loading images in the App Store screenshots)
40
+
41
+ ## Why?
42
+ This gem automatically switches the language and device type and runs the automation script to take all screenshots.
43
+
44
+ **Why use ```snapshot``` instead of....**
45
+
46
+ - **UI Automation in Instruments**: Instruments can only run your app on one device in one language. You have to manually switch it.
47
+ - **[ui-screen-shooter](https://github.com/jonathanpenn/ui-screen-shooter)**: This ist the best alternative out there right now. It's based on AppleScript, you can not update it properly and there are quite some hacks in there. ```Snapshot``` uses a very similar technique - just in a clean and maintainable Ruby gem.
48
+ - **[Subliminal](https://github.com/inkling/Subliminal)**: A good approach to write the interaction code in Objective C. Unfortunately it has a lot of open issues with the latest release of Xcode.
38
49
 
39
50
  # Installation
40
51
 
@@ -45,6 +56,28 @@ Install the gem
45
56
  Make sure, you have the latest version of the Xcode command line tools installed:
46
57
 
47
58
  xcode-select --install
59
+
60
+ # UI Automation
61
+
62
+ ## Get started
63
+ This project uses Apple's ```UI Automation``` under the hood. I will not go into detail on how to write scripts.
64
+
65
+ Here a few links to get started:
66
+
67
+ - [Apple's official documentation](https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAutomationInstrument.html)
68
+ - [UI Automation: An Introduction (cocoamanifest.net)](http://cocoamanifest.net/articles/2011/05/uiautomation-an-introduction.html)
69
+ - [Functional Testing UI Automation (mattmccomb.com)](http://www.mattmccomb.com/blog/2013/06/02/ios-functional-testing-with-uiautomation/)
70
+
71
+ ## Record your first script
72
+ Profile your app (CMD + I), choose ```Automation``` and click the Record button on the bottom of the window.
73
+
74
+ This will get you started. Save the generated file with the extension ```js``` into your project root.
75
+
76
+ Add ```#import "SnapshotHelper.js"``` on the top of your file.
77
+
78
+ Now you can use ```captureLocalizedScreenshot('0-name')``` to take a snapshot.
79
+
80
+ You can take a look at the example project to play around with it.
48
81
 
49
82
  # Quick Start
50
83
 
@@ -92,7 +125,7 @@ languages([
92
125
  ])
93
126
  ```
94
127
 
95
- ### Javascript file
128
+ ### JavaScript file
96
129
  Usually ```snapshot``` automatically finds your JavaScript file. If that's not the case, you can pass the path
97
130
  to your test file.
98
131
  ```ruby
@@ -105,6 +138,12 @@ To not be asked which scheme to use, just set it like this:
105
138
  scheme "Name"
106
139
  ```
107
140
 
141
+ ### Screenshots output path
142
+ All generated screenshots will be stored in the given path.
143
+ ```ruby
144
+ screenshots_path './screenshots'
145
+ ```
146
+
108
147
  ### Project Path
109
148
  By default, ```snapshot``` will look for your project in the current directory. If it is located somewhere else, pass your custom path:
110
149
  ```ruby
@@ -128,7 +167,7 @@ ios_version "9.0"
128
167
  ## Use a clean status bar
129
168
  You can use [SimulatorStatusMagic](https://github.com/shinydevelopment/SimulatorStatusMagic) to clean up the status bar.
130
169
 
131
- ## Editing the ```Deliverfile```
170
+ ## Editing the ```Snapfile```
132
171
  Change syntax highlighting to *Ruby*.
133
172
 
134
173
  # Need help?
@@ -7,8 +7,6 @@ require 'snapshot/builder'
7
7
  require 'snapshot/snapshot_file'
8
8
  require 'snapshot/languages'
9
9
 
10
- require 'pry' # TODO: Remove
11
-
12
10
  # Third Party code
13
11
  require 'colored'
14
12
 
@@ -6,14 +6,14 @@ module Snapshot
6
6
 
7
7
 
8
8
  def initialize
9
-
9
+ FileUtils.rm_rf(BUILD_DIR)
10
10
  end
11
11
 
12
12
  def build_app
13
13
  raise "Could not find project. Please pass the path to your project using 'project_path'.".red unless SnapshotConfig.shared_instance.project_name
14
14
  command = generate_build_command
15
15
 
16
- Helper.log.info "Building project '#{SnapshotConfig.shared_instance.project_name}'... this might take some time...".green
16
+ Helper.log.info "Building project '#{SnapshotConfig.shared_instance.project_name}' - this might take some time...".green
17
17
  Helper.log.debug command.yellow
18
18
 
19
19
  all_lines = []
@@ -49,12 +49,16 @@ module Snapshot
49
49
  def generate_build_command
50
50
  scheme = SnapshotConfig.shared_instance.scheme
51
51
 
52
+ proj_path = SnapshotConfig.shared_instance.project_path
53
+ proj_key = 'project'
54
+ proj_key = 'workspace' if proj_path.end_with?'.xcworkspace'
55
+
52
56
  build_command = (DependencyChecker.xctool_installed? ? 'xctool' : 'xcodebuild')
53
57
  [
54
58
  build_command,
55
59
  "-sdk iphonesimulator#{SnapshotConfig.shared_instance.ios_version}",
56
60
  "CONFIGURATION_BUILD_DIR='#{BUILD_DIR}/build'",
57
- "-workspace '#{SnapshotConfig.shared_instance.project_path}'",
61
+ "-#{proj_key} '#{proj_path}'",
58
62
  "-scheme '#{scheme}'",
59
63
  "-configuration Debug",
60
64
  "DSTROOT='#{BUILD_DIR}'",
@@ -9,8 +9,6 @@ module Snapshot
9
9
  end
10
10
 
11
11
  def work
12
- @screenshots_path = './screenshots'
13
-
14
12
  SnapshotConfig.shared_instance.js_file # to verify the file can be found
15
13
 
16
14
  Builder.new.build_app
@@ -27,6 +25,9 @@ module Snapshot
27
25
 
28
26
  end
29
27
  end
28
+
29
+ Helper.log.info "Successfully finished generating screenshots.".green
30
+ Helper.log.info "Check it out here: #{SnapshotConfig.shared_instance.screenshots_path}".green
30
31
  end
31
32
 
32
33
  def clean_old_traces
@@ -83,8 +84,11 @@ module Snapshot
83
84
  end
84
85
 
85
86
  def copy_screenshots(language)
86
- resulting_path = [@screenshots_path, language].join('/')
87
+ resulting_path = [SnapshotConfig.shared_instance.screenshots_path, language].join('/')
88
+ resulting_path.gsub!("~", ENV['HOME']) # some strange bug requires this
89
+
87
90
  FileUtils.mkdir_p resulting_path
91
+
88
92
  Dir.glob("#{TRACE_DIR}/**/*.png") do |file|
89
93
  FileUtils.cp_r(file, resulting_path + '/')
90
94
  end
@@ -22,6 +22,9 @@ module Snapshot
22
22
  # @return (String) The path to the JavaScript file to use
23
23
  attr_accessor :manual_js_file
24
24
 
25
+ # @return (String) The path, in which the screenshots should be stored
26
+ attr_accessor :screenshots_path
27
+
25
28
 
26
29
  # A shared singleton
27
30
  def self.shared_instance
@@ -46,7 +49,7 @@ module Snapshot
46
49
  "iPhone 6 (#{self.ios_version} Simulator)",
47
50
  "iPhone 6 Plus (#{self.ios_version} Simulator)",
48
51
  "iPhone 5 (#{self.ios_version} Simulator)",
49
- "iPhone 4S (#{self.ios_version} Simulator)"
52
+ "iPhone 4s (#{self.ios_version} Simulator)"
50
53
  ]
51
54
 
52
55
  self.languages = [
@@ -54,6 +57,8 @@ module Snapshot
54
57
  'en-US'
55
58
  ]
56
59
 
60
+ self.screenshots_path = './screenshots'
61
+
57
62
  self.project_path = (Dir.glob("./*.xcworkspace").first rescue nil)
58
63
  self.project_path ||= (Dir.glob("./*.xcodeproj").first rescue nil)
59
64
  end
@@ -82,6 +87,7 @@ module Snapshot
82
87
  schemes = `#{command}`.split("Schemes:").last.split("\n").each { |a| a.strip! }.delete_if { |a| a == '' }
83
88
  Helper.log.debug "Found available schemes: #{schemes}"
84
89
 
90
+ self.manual_scheme = schemes.first if schemes.count == 1
85
91
 
86
92
  if self.manual_scheme
87
93
  if not schemes.include?manual_scheme
@@ -33,6 +33,9 @@ module Snapshot
33
33
  raise "js_file has to be an String".red unless value.kind_of?String
34
34
  raise "js_file at path '#{value}' not found".red unless File.exists?value
35
35
  @config.manual_js_file = value
36
+ when :screenshots_path
37
+ raise "screenshots_path has to be an String".red unless value.kind_of?String
38
+ @config.screenshots_path = value
36
39
  when :project_path
37
40
  raise "project_path has to be an String".red unless value.kind_of?String
38
41
 
@@ -48,14 +51,16 @@ module Snapshot
48
51
 
49
52
  def verify_devices(value)
50
53
  raise "Devices has to be an array".red unless value.kind_of?Array
54
+ @config.devices = []
51
55
  value.each do |current|
52
56
  current += " (#{@config.ios_version} Simulator)" unless current.include?"Simulator"
53
57
 
54
58
  unless SnapshotFile.available_devices.include?current
55
59
  raise "Device '#{current}' not found. Available device types: #{SnapshotFile.available_devices}".red
60
+ else
61
+ @config.devices << current
56
62
  end
57
63
  end
58
- @config.devices = value
59
64
  end
60
65
 
61
66
  def verify_languages(value)
@@ -1,3 +1,3 @@
1
1
  module Snapshot
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snapshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause