Class: RunLoop::App
- Inherits:
-
Object
- Object
- RunLoop::App
- Defined in:
- lib/run_loop/app.rb
Overview
A class for interacting with .app bundles.
Instance Attribute Summary collapse
-
#path ⇒ String
readonly
The path to the app bundle .app.
Instance Method Summary collapse
-
#arches ⇒ Object
Returns the arches for the binary.
-
#build_version ⇒ RunLoop::Version?
(also: #bundle_version)
Returns the CFBundleVersionString of the app as Version instance.
-
#bundle_identifier ⇒ String
Inspects the app’s Info.plist for the bundle identifier.
-
#calabash_server_version ⇒ Object
Inspects the app’s file for the server version.
-
#executable_name ⇒ String
Inspects the app’s Info.plist for the executable name.
-
#info_plist_path ⇒ Object
Returns the Info.plist path.
-
#initialize(app_bundle_path) ⇒ RunLoop::App
constructor
Creates a new App instance.
-
#marketing_version ⇒ RunLoop::Version?
(also: #short_bundle_version)
Returns the CFBundleShortVersionString of the app as Version instance.
-
#physical_device? ⇒ Boolean
True if the app has been built for physical devices.
-
#sha1 ⇒ Object
Returns the sha1 of the application.
-
#simulator? ⇒ Boolean
True if the app has been built for the simulator.
-
#valid? ⇒ Boolean
Is this a valid app?.
Constructor Details
#initialize(app_bundle_path) ⇒ RunLoop::App
The ‘app_bundle_path` is expanded during initialization.
Creates a new App instance.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/run_loop/app.rb', line 15 def initialize(app_bundle_path) @path = File.(app_bundle_path) if !App.valid?(app_bundle_path) raise ArgumentError, %Q{App does not exist at path or is not an app bundle. #{app_bundle_path} Bundle must: 1. be a directory that exists, 2. have a .app extension, 3. contain an Info.plist, 4. and the app binary (CFBundleExecutable) must exist } end end |
Instance Attribute Details
#path ⇒ String (readonly)
Returns The path to the app bundle .app.
7 8 9 |
# File 'lib/run_loop/app.rb', line 7 def path @path end |
Instance Method Details
#arches ⇒ Object
Returns the arches for the binary.
105 106 107 |
# File 'lib/run_loop/app.rb', line 105 def arches @arches ||= lipo.info end |
#build_version ⇒ RunLoop::Version? Also known as: bundle_version
Returns the CFBundleVersionString of the app as Version instance.
Apple docs:
CFBundleVersion specifies the build version number of the bundle, which identifies an iteration (released or unreleased) of the bundle. The build version number should be a string comprised of three non-negative, period-separated integers with the first integer being greater than zero. The string should only contain numeric (0-9) and period (.) characters. Leading zeros are truncated from each integer and will be ignored (that is, 1.02.3 is equivalent to 1.2.3).
197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/run_loop/app.rb', line 197 def build_version string = plist_buddy.plist_read("CFBundleVersionString", info_plist_path) begin version = RunLoop::Version.new(string) rescue if string && string != "" RunLoop.log_debug("CFBundleVersionString: '#{string}' is not a well formed version string") else RunLoop.log_debug("CFBundleVersionString is not defined in Info.plist") end version = nil end version end |
#bundle_identifier ⇒ String
Inspects the app’s Info.plist for the bundle identifier.
84 85 86 87 88 89 90 |
# File 'lib/run_loop/app.rb', line 84 def bundle_identifier identifier = plist_buddy.plist_read("CFBundleIdentifier", info_plist_path) unless identifier raise "Expected key 'CFBundleIdentifier' in '#{info_plist_path}'" end identifier end |
#calabash_server_version ⇒ Object
Inspects the app’s file for the server version
122 123 124 125 126 127 128 129 |
# File 'lib/run_loop/app.rb', line 122 def calabash_server_version version = nil executables.each do |executable| version = strings(executable).server_version break if version end version end |
#executable_name ⇒ String
Inspects the app’s Info.plist for the executable name.
96 97 98 99 100 101 102 |
# File 'lib/run_loop/app.rb', line 96 def executable_name name = plist_buddy.plist_read("CFBundleExecutable", info_plist_path) unless name raise "Expected key 'CFBundleExecutable' in '#{info_plist_path}'" end name end |
#info_plist_path ⇒ Object
Returns the Info.plist path.
76 77 78 |
# File 'lib/run_loop/app.rb', line 76 def info_plist_path @info_plist_path ||= File.join(path, 'Info.plist') end |
#marketing_version ⇒ RunLoop::Version? Also known as: short_bundle_version
Returns the CFBundleShortVersionString of the app as Version instance.
Apple docs:
CFBundleShortVersionString specifies the release version number of the bundle, which identifies a released iteration of the app. The release version number is a string comprised of three period-separated integers.
The first integer represents major revisions to the app, such as revisions that implement new features or major changes. The second integer denotes revisions that implement less prominent features. The third integer represents maintenance releases.
The value for this key differs from the value for CFBundleVersion, which identifies an iteration (released or unreleased) of the app. This key can be localized by including it in your InfoPlist.strings files.
165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/run_loop/app.rb', line 165 def marketing_version string = plist_buddy.plist_read("CFBundleShortVersionString", info_plist_path) begin version = RunLoop::Version.new(string) rescue if string && string != "" RunLoop.log_debug("CFBundleShortVersionString: '#{string}' is not a well formed version string") else RunLoop.log_debug("CFBundleShortVersionString is not defined in Info.plist") end version = nil end version end |
#physical_device? ⇒ Boolean
True if the app has been built for physical devices
115 116 117 118 119 |
# File 'lib/run_loop/app.rb', line 115 def physical_device? arches.any? do |arch| arch[/arm/, 0] end end |
#sha1 ⇒ Object
Returns the sha1 of the application.
229 230 231 |
# File 'lib/run_loop/app.rb', line 229 def sha1 RunLoop::Directory.directory_digest(path) end |
#simulator? ⇒ Boolean
True if the app has been built for the simulator
110 111 112 |
# File 'lib/run_loop/app.rb', line 110 def simulator? arches.include?("i386") || arches.include?("x86_64") end |
#valid? ⇒ Boolean
Is this a valid app?
58 59 60 |
# File 'lib/run_loop/app.rb', line 58 def valid? App.valid?(path) end |