rufus 0.1 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile.lock +1 -1
- data/LICENSE.txt +21 -0
- data/README.md +63 -78
- data/RufusApp/RufusApp/RUViewController.h +4 -1
- data/RufusApp/RufusApp/RUViewController.m +21 -0
- data/RufusApp/RufusApp/RufusPageViewController.xib +52 -372
- data/RufusApp/RufusApp/en.lproj/RUViewController.xib +75 -525
- data/features/alert.feature +16 -0
- data/features/step_definitions/alert_steps.rb.rb +4 -0
- data/features/step_definitions/view_steps.rb +6 -0
- data/features/support/hooks.rb +3 -0
- data/features/support/screens/home_page.rb +3 -0
- data/features/view.feature +2 -6
- data/lib/rufus/accessors/accessors.rb +4 -0
- data/lib/rufus/accessors/view.rb +4 -0
- data/lib/rufus/driver.rb +74 -18
- data/lib/rufus/drivers/iOS_device.rb +23 -0
- data/lib/rufus/drivers/iOS_simulator.rb +25 -0
- data/rufus.gemspec +3 -2
- data/spec/{driver_spec.rb → drivers_specs/driver_spec.rb} +138 -11
- data/spec/drivers_specs/iOS_device_spec.rb +18 -0
- data/spec/drivers_specs/iOS_simulator_spec.rb +17 -0
- data/spec/view_spec.rb +8 -0
- metadata +16 -13
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MTYxMGQ2OWIzYTFiMDQ3YmU2MmExYjJiMTI2NTc3NTY5ZGM3NDY2Ng==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
Mzg4YmI0ODc0MWM2NGFlNGI0ZDM3ZTJkNDZmOWE0YzM4ZWQ4YmZmYQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ODA3MTAzMjhiMDU1OWZlMDZlMmNmMDJjNzcxMTA3ZWVjNWU5NDY2NmZlZGQ1
|
10
|
+
ZTEzYjI2OGY4MDQwZDQ3NzA5OWIxZjQ2NzVkYTJkYjdjZjJiOTVkZjJhZWIy
|
11
|
+
NTgwMDU3NzMyNzgxZDhlMmRhMDkxZjUyOTU1ZjhhYWEwMDI0ZWY=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MWY0MjFkMDMzNzc5ZTRhYWFjOTU3OWYzZDFhYzNhNzM4MjRiZTY3NTExZjcz
|
14
|
+
NTIxYTYxY2RhMTRlZTVlZTQzZTUxNzAxNWJjN2E3MjI2NDIyY2RmOGM5YzY4
|
15
|
+
MTJkNDdiMjJkOTU2ZTI0Y2I0N2UxOWExMTllMGQwODlhNjAyMmY=
|
data/Gemfile.lock
CHANGED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013 Jeremy Stewart
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,120 +1,105 @@
|
|
1
|
-
Last Updated: 9-
|
1
|
+
Last Updated: 9-25-2013
|
2
2
|
|
3
3
|
This project is intended to facilitate automated testing on iOS devices using cucumber and the Page Object pattern.
|
4
4
|
|
5
|
-
|
6
|
-
QUICK START GUIDE
|
7
|
-
-----------------
|
8
|
-
1. gem install rufus
|
9
|
-
2. require 'rufus' in your Gemfile
|
10
|
-
3. Clone appium into project directory (where .xcodeproj resides). Repo located at: https://github.com/appium/appium.git
|
11
|
-
4. Create a config.yml in project directory with the following information:
|
12
|
-
|
13
|
-
browser: iOS
|
14
|
-
platform: Mac
|
15
|
-
version: 6.1
|
16
|
-
app:$HOME/Library/Developer/Xcode/DerivedData/<UNIQUE>/Build/Products/Debug-iphoneos/YourApp.app
|
17
|
-
|
18
|
-
5. Start appium server using node
|
19
|
-
>appium -U <UDID> --app <PATH_TO_APP>
|
20
|
-
|
21
|
-
6. Deploy to iOS device using libimobiledevice. Repo located at: https://github.com/benvium/libimobiledevice-macosx
|
22
|
-
|
23
|
-
7. Run tests
|
24
|
-
>bundle exec cucumber
|
25
|
-
|
26
|
-
|
27
|
-
LONG START GUIDE
|
28
|
-
----------------
|
29
|
-
|
30
|
-
PREREQUISITES
|
5
|
+
PREREQUISITES
|
31
6
|
--------------------------
|
32
|
-
|
33
|
-
2. Homebrew
|
34
|
-
3. Bundler
|
7
|
+
-Ruby
|
35
8
|
|
36
|
-
|
37
|
-
-----------------------------
|
9
|
+
-Homebrew
|
38
10
|
|
39
|
-
-
|
40
|
-
- brew install node
|
41
|
-
- curl https://npmjs.org/install.sh | sh
|
42
|
-
- export NODE_PATH="/usr/local/lib/node"
|
43
|
-
- export PATH="/usr/local/share/npm/bin:$PATH"
|
44
|
-
- node -v <= check to see that node installed correctly
|
11
|
+
-Bundler
|
45
12
|
|
46
|
-
|
47
|
-
------
|
13
|
+
In order to use appium you'll first need to install node and npm. Perform the following steps in the terminal to retrieve the necessary items:
|
48
14
|
|
49
|
-
|
15
|
+
>brew install node
|
50
16
|
|
51
|
-
>
|
52
|
-
>git submodule update
|
17
|
+
>curl https://npmjs.org/install.sh | sh
|
53
18
|
|
54
|
-
|
19
|
+
>export NODE_PATH="/usr/local/lib/node"
|
55
20
|
|
56
|
-
|
57
|
-
--------------------------------------------
|
58
|
-
Rufus relies on a config.yml file to exists in the project's root directory. This is used to tell appium about the physical device and the software under test. Below is a typical configuration to run automated tests on the iPad.
|
21
|
+
>export PATH="/usr/local/share/npm/bin:$PATH
|
59
22
|
|
60
|
-
|
61
|
-
platform: Mac
|
62
|
-
version: 6.1
|
63
|
-
app:$HOME/Library/Developer/Xcode/DerivedData/<UNIQUE_ID>/Build/Products/Debug-iphoneos/YourApp.app
|
23
|
+
>npm install -g appium
|
64
24
|
|
65
|
-
|
66
|
-
-----------------------------------------
|
67
|
-
Open a separate terminal window and navigate to you appium installation. This will be the window that shows the appium server output. In this window issue the following command to start the appium server
|
25
|
+
>npm install wd
|
68
26
|
|
69
|
-
>node server.js -U <UDID> --app <PATH_TO_APP>
|
70
27
|
|
71
|
-
|
28
|
+
QUICK START GUIDE
|
29
|
+
------------------------------
|
30
|
+
- gem install rufus
|
31
|
+
- require 'rufus' in your Gemfile
|
32
|
+
- Create a config.yml in project directory (the one with .xcodeproj in it) with the following information:
|
72
33
|
|
73
|
-
|
34
|
+
````YAML
|
35
|
+
browser: iOS
|
36
|
+
platform: Mac
|
37
|
+
version: 7.0
|
38
|
+
app:$HOME/Library/Developer/Xcode/DerivedData/<UNIQUE>/Build/Products/Debug-iphoneos/YourApp.app
|
39
|
+
````
|
40
|
+
- Start appium server in new terminal window
|
74
41
|
|
75
|
-
|
76
|
-
----------------------------------
|
42
|
+
>appium -U DEVICE_UDID --app YourApp.app
|
77
43
|
|
78
|
-
|
44
|
+
- Deploy to iOS device using XCode or libimobiledevice. Libimobiledevice repo located at: https://github.com/benvium/libimobiledevice-macosx
|
79
45
|
|
80
|
-
|
81
|
-
|
82
|
-
1. Build the app for deployment to device
|
83
|
-
2. Navigate to the .app file that should be found in the ../Debug-iphoneos/ directory
|
84
|
-
3. Create a folder in that directory named 'Payload'. It must be named Payload.
|
85
|
-
4. Put a copy of the .app file in the Payload directory
|
86
|
-
5. Compress the directory into a .zip archive
|
87
|
-
6. Change the .zip extension to .ipa
|
88
|
-
7. Issue the command ideviceinstaller -i YourApp.ipa (This installs the app)
|
46
|
+
- Run tests
|
89
47
|
|
48
|
+
>bundle exec cucumber
|
90
49
|
|
91
50
|
USING THE RUFUS IRB DRIVER
|
92
51
|
--------------------------
|
93
52
|
After installing the gem, open an irb session from the same directory as your config.yml.
|
94
53
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
54
|
+
````ruby
|
55
|
+
require 'rufus/driver'
|
56
|
+
driver = Rufus.new
|
57
|
+
driver.start (starts the app)
|
58
|
+
````
|
99
59
|
|
100
60
|
DEFINING A BUTTON SEQUENCE
|
101
61
|
--------------------------
|
102
62
|
|
103
63
|
Rufus doesn't mind the mindless work of pushing buttons in sequence. The following command will push the goodButton, badButton and sortaOkayButton in sequence 10 times in a row if such a sequence is possible. In this example, the goodButton must be available to be pressed after pushing the sortaOkayButton in order for the loop to continue.
|
104
64
|
|
105
|
-
|
65
|
+
````ruby
|
66
|
+
driver.sequence 'goodButton', 'badButton', 'sortaOkayButton', '10'
|
67
|
+
````
|
106
68
|
|
107
69
|
OTHER DRIVER USE CASES
|
108
70
|
----------------------
|
109
71
|
|
110
72
|
Push a button by name
|
111
73
|
|
112
|
-
|
74
|
+
````ruby
|
75
|
+
driver.push_button 'buttonName'
|
76
|
+
````
|
113
77
|
|
114
|
-
|
78
|
+
Get a list of all the button names
|
115
79
|
|
116
|
-
|
80
|
+
````ruby
|
81
|
+
driver.buttons (example return: ['go', 'yesButton','noButton'])
|
82
|
+
````
|
117
83
|
|
118
84
|
Enter 'Hello' into text field
|
119
85
|
|
120
|
-
|
86
|
+
````ruby
|
87
|
+
driver.type 'hello' 'textFieldName'
|
88
|
+
````
|
89
|
+
|
90
|
+
DEPLOYING TO DEVICE WITHOUT USING XCODE
|
91
|
+
----------------------------------------------------------------------
|
92
|
+
|
93
|
+
Rufus doesn't necessarily care how your app made it onto the device as long as selenium can see it, but I found the most consistent method to be through libimobiledevice. That project also is included as a submodule to this one. The original repository is https://github.com/benvium/libimobiledevice-macosx. Look at the libimobiledevice Readme in order to configure the environment variables your system needs to use this deployment mechanism.
|
94
|
+
|
95
|
+
The only gotcha I ran into was generating the .ipa archive that libimobiledevice uses. Take the following steps to generate the .ipa archive.
|
96
|
+
|
97
|
+
1. Build the app for deployment to device
|
98
|
+
2. Navigate to the .app file that should be found in the ../Debug-iphoneos/ directory
|
99
|
+
3. Create a folder in that directory named 'Payload'. It must be named Payload.
|
100
|
+
4. Put a copy of the .app file in the Payload directory
|
101
|
+
5. Compress the directory into a .zip archive
|
102
|
+
6. Change the .zip extension to .ipa
|
103
|
+
7. Issue the command ideviceinstaller -i YourApp.ipa (This installs the app)
|
104
|
+
|
105
|
+
|
@@ -8,9 +8,12 @@
|
|
8
8
|
|
9
9
|
#import <UIKit/UIKit.h>
|
10
10
|
|
11
|
-
@interface RUViewController : UIViewController
|
11
|
+
@interface RUViewController : UIViewController <UIAlertViewDelegate>
|
12
12
|
|
13
|
+
@property (weak, nonatomic) IBOutlet UIButton *showAlertButton;
|
13
14
|
@property (weak, nonatomic) IBOutlet UIButton *rufusButton;
|
14
15
|
- (IBAction)toRufusPage:(id)sender;
|
16
|
+
- (IBAction)showAlert:(id)sender;
|
17
|
+
|
15
18
|
|
16
19
|
@end
|
@@ -31,4 +31,25 @@
|
|
31
31
|
RufusPageViewController *rufusPageViewController = [[RufusPageViewController alloc] init];
|
32
32
|
[[self navigationController] pushViewController:rufusPageViewController animated:YES];
|
33
33
|
}
|
34
|
+
|
35
|
+
- (IBAction)showAlert:(id)sender
|
36
|
+
{
|
37
|
+
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Rufus Alert" message:@"You've chosen to show the rufus alert" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
|
38
|
+
|
39
|
+
[alert show];
|
40
|
+
}
|
41
|
+
|
42
|
+
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
|
43
|
+
{
|
44
|
+
if (buttonIndex == [alertView cancelButtonIndex])
|
45
|
+
{
|
46
|
+
alertView = nil;
|
47
|
+
}
|
48
|
+
else
|
49
|
+
{
|
50
|
+
[self toRufusPage:nil];
|
51
|
+
}
|
52
|
+
|
53
|
+
}
|
54
|
+
|
34
55
|
@end
|
@@ -1,372 +1,52 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
|
54
|
-
<string key="IBUIText">This is the Rufus Page</string>
|
55
|
-
<object class="NSColor" key="IBUITextColor">
|
56
|
-
<int key="NSColorSpace">1</int>
|
57
|
-
<bytes key="NSRGB">MCAwIDAAA</bytes>
|
58
|
-
<string key="IBUIColorCocoaTouchKeyPath">darkTextColor</string>
|
59
|
-
</object>
|
60
|
-
<nil key="IBUIHighlightedColor"/>
|
61
|
-
<int key="IBUIBaselineAdjustment">0</int>
|
62
|
-
<int key="IBUITextAlignment">1</int>
|
63
|
-
<object class="IBUIFontDescription" key="IBUIFontDescription">
|
64
|
-
<int key="type">1</int>
|
65
|
-
<double key="pointSize">17</double>
|
66
|
-
</object>
|
67
|
-
<object class="NSFont" key="IBUIFont">
|
68
|
-
<string key="NSName">Helvetica</string>
|
69
|
-
<double key="NSSize">17</double>
|
70
|
-
<int key="NSfFlags">16</int>
|
71
|
-
</object>
|
72
|
-
<bool key="IBUIAdjustsFontSizeToFit">NO</bool>
|
73
|
-
</object>
|
74
|
-
<object class="IBUIButton" id="760254641">
|
75
|
-
<reference key="NSNextResponder" ref="766721923"/>
|
76
|
-
<int key="NSvFlags">292</int>
|
77
|
-
<string key="NSFrame">{{300, 391}, {172, 44}}</string>
|
78
|
-
<reference key="NSSuperview" ref="766721923"/>
|
79
|
-
<string key="NSReuseIdentifierKey">_NS:9</string>
|
80
|
-
<bool key="IBUIOpaque">NO</bool>
|
81
|
-
<object class="IBUIAccessibilityConfiguration" key="IBUIAccessibilityConfiguration">
|
82
|
-
<string key="IBUIAccessibilityLabel">rufusPageButton</string>
|
83
|
-
</object>
|
84
|
-
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
|
85
|
-
<int key="IBUIContentHorizontalAlignment">0</int>
|
86
|
-
<int key="IBUIContentVerticalAlignment">0</int>
|
87
|
-
<int key="IBUIButtonType">1</int>
|
88
|
-
<string key="IBUINormalTitle">Rufus Page Button</string>
|
89
|
-
<object class="NSColor" key="IBUIHighlightedTitleColor">
|
90
|
-
<int key="NSColorSpace">3</int>
|
91
|
-
<bytes key="NSWhite">MQA</bytes>
|
92
|
-
</object>
|
93
|
-
<object class="NSColor" key="IBUINormalTitleColor">
|
94
|
-
<int key="NSColorSpace">1</int>
|
95
|
-
<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
|
96
|
-
</object>
|
97
|
-
<object class="NSColor" key="IBUINormalTitleShadowColor">
|
98
|
-
<int key="NSColorSpace">3</int>
|
99
|
-
<bytes key="NSWhite">MC41AA</bytes>
|
100
|
-
</object>
|
101
|
-
<object class="IBUIFontDescription" key="IBUIFontDescription">
|
102
|
-
<int key="type">2</int>
|
103
|
-
<double key="pointSize">15</double>
|
104
|
-
</object>
|
105
|
-
<object class="NSFont" key="IBUIFont">
|
106
|
-
<string key="NSName">Helvetica-Bold</string>
|
107
|
-
<double key="NSSize">15</double>
|
108
|
-
<int key="NSfFlags">16</int>
|
109
|
-
</object>
|
110
|
-
</object>
|
111
|
-
</array>
|
112
|
-
<string key="NSFrame">{{0, 20}, {768, 1004}}</string>
|
113
|
-
<reference key="NSSuperview"/>
|
114
|
-
<reference key="NSNextKeyView" ref="138991431"/>
|
115
|
-
<object class="NSColor" key="IBUIBackgroundColor">
|
116
|
-
<int key="NSColorSpace">3</int>
|
117
|
-
<bytes key="NSWhite">MQA</bytes>
|
118
|
-
<object class="NSColorSpace" key="NSCustomColorSpace">
|
119
|
-
<int key="NSID">2</int>
|
120
|
-
</object>
|
121
|
-
</object>
|
122
|
-
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
123
|
-
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
|
124
|
-
<int key="IBUIStatusBarStyle">2</int>
|
125
|
-
</object>
|
126
|
-
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
|
127
|
-
</object>
|
128
|
-
</array>
|
129
|
-
<object class="IBObjectContainer" key="IBDocument.Objects">
|
130
|
-
<array class="NSMutableArray" key="connectionRecords">
|
131
|
-
<object class="IBConnectionRecord">
|
132
|
-
<object class="IBCocoaTouchOutletConnection" key="connection">
|
133
|
-
<string key="label">view</string>
|
134
|
-
<reference key="source" ref="841351856"/>
|
135
|
-
<reference key="destination" ref="766721923"/>
|
136
|
-
</object>
|
137
|
-
<int key="connectionID">3</int>
|
138
|
-
</object>
|
139
|
-
<object class="IBConnectionRecord">
|
140
|
-
<object class="IBCocoaTouchOutletConnection" key="connection">
|
141
|
-
<string key="label">rufusPageButton</string>
|
142
|
-
<reference key="source" ref="841351856"/>
|
143
|
-
<reference key="destination" ref="760254641"/>
|
144
|
-
</object>
|
145
|
-
<int key="connectionID">17</int>
|
146
|
-
</object>
|
147
|
-
<object class="IBConnectionRecord">
|
148
|
-
<object class="IBCocoaTouchEventConnection" key="connection">
|
149
|
-
<string key="label">goToHomePage:</string>
|
150
|
-
<reference key="source" ref="760254641"/>
|
151
|
-
<reference key="destination" ref="841351856"/>
|
152
|
-
<int key="IBEventType">7</int>
|
153
|
-
</object>
|
154
|
-
<int key="connectionID">18</int>
|
155
|
-
</object>
|
156
|
-
</array>
|
157
|
-
<object class="IBMutableOrderedSet" key="objectRecords">
|
158
|
-
<array key="orderedObjects">
|
159
|
-
<object class="IBObjectRecord">
|
160
|
-
<int key="objectID">0</int>
|
161
|
-
<array key="object" id="0"/>
|
162
|
-
<reference key="children" ref="1000"/>
|
163
|
-
<nil key="parent"/>
|
164
|
-
</object>
|
165
|
-
<object class="IBObjectRecord">
|
166
|
-
<int key="objectID">-1</int>
|
167
|
-
<reference key="object" ref="841351856"/>
|
168
|
-
<reference key="parent" ref="0"/>
|
169
|
-
<string key="objectName">File's Owner</string>
|
170
|
-
</object>
|
171
|
-
<object class="IBObjectRecord">
|
172
|
-
<int key="objectID">-2</int>
|
173
|
-
<reference key="object" ref="606714003"/>
|
174
|
-
<reference key="parent" ref="0"/>
|
175
|
-
</object>
|
176
|
-
<object class="IBObjectRecord">
|
177
|
-
<int key="objectID">2</int>
|
178
|
-
<reference key="object" ref="766721923"/>
|
179
|
-
<array class="NSMutableArray" key="children">
|
180
|
-
<object class="IBNSLayoutConstraint" id="624600486">
|
181
|
-
<reference key="firstItem" ref="760254641"/>
|
182
|
-
<int key="firstAttribute">3</int>
|
183
|
-
<int key="relation">0</int>
|
184
|
-
<reference key="secondItem" ref="766721923"/>
|
185
|
-
<int key="secondAttribute">3</int>
|
186
|
-
<float key="multiplier">1</float>
|
187
|
-
<object class="IBLayoutConstant" key="constant">
|
188
|
-
<double key="value">391</double>
|
189
|
-
</object>
|
190
|
-
<float key="priority">1000</float>
|
191
|
-
<reference key="containingView" ref="766721923"/>
|
192
|
-
<int key="scoringType">3</int>
|
193
|
-
<float key="scoringTypeFloat">9</float>
|
194
|
-
<int key="contentType">3</int>
|
195
|
-
</object>
|
196
|
-
<object class="IBNSLayoutConstraint" id="531322201">
|
197
|
-
<reference key="firstItem" ref="138991431"/>
|
198
|
-
<int key="firstAttribute">5</int>
|
199
|
-
<int key="relation">0</int>
|
200
|
-
<reference key="secondItem" ref="760254641"/>
|
201
|
-
<int key="secondAttribute">5</int>
|
202
|
-
<float key="multiplier">1</float>
|
203
|
-
<object class="IBLayoutConstant" key="constant">
|
204
|
-
<double key="value">0.0</double>
|
205
|
-
</object>
|
206
|
-
<float key="priority">1000</float>
|
207
|
-
<reference key="containingView" ref="766721923"/>
|
208
|
-
<int key="scoringType">6</int>
|
209
|
-
<float key="scoringTypeFloat">24</float>
|
210
|
-
<int key="contentType">2</int>
|
211
|
-
</object>
|
212
|
-
<object class="IBNSLayoutConstraint" id="288956434">
|
213
|
-
<reference key="firstItem" ref="138991431"/>
|
214
|
-
<int key="firstAttribute">6</int>
|
215
|
-
<int key="relation">0</int>
|
216
|
-
<reference key="secondItem" ref="760254641"/>
|
217
|
-
<int key="secondAttribute">6</int>
|
218
|
-
<float key="multiplier">1</float>
|
219
|
-
<object class="IBLayoutConstant" key="constant">
|
220
|
-
<double key="value">0.0</double>
|
221
|
-
</object>
|
222
|
-
<float key="priority">1000</float>
|
223
|
-
<reference key="containingView" ref="766721923"/>
|
224
|
-
<int key="scoringType">6</int>
|
225
|
-
<float key="scoringTypeFloat">24</float>
|
226
|
-
<int key="contentType">2</int>
|
227
|
-
</object>
|
228
|
-
<object class="IBNSLayoutConstraint" id="638909364">
|
229
|
-
<reference key="firstItem" ref="138991431"/>
|
230
|
-
<int key="firstAttribute">5</int>
|
231
|
-
<int key="relation">0</int>
|
232
|
-
<reference key="secondItem" ref="766721923"/>
|
233
|
-
<int key="secondAttribute">5</int>
|
234
|
-
<float key="multiplier">1</float>
|
235
|
-
<object class="IBLayoutConstant" key="constant">
|
236
|
-
<double key="value">300</double>
|
237
|
-
</object>
|
238
|
-
<float key="priority">1000</float>
|
239
|
-
<reference key="containingView" ref="766721923"/>
|
240
|
-
<int key="scoringType">3</int>
|
241
|
-
<float key="scoringTypeFloat">9</float>
|
242
|
-
<int key="contentType">3</int>
|
243
|
-
</object>
|
244
|
-
<object class="IBNSLayoutConstraint" id="539535921">
|
245
|
-
<reference key="firstItem" ref="138991431"/>
|
246
|
-
<int key="firstAttribute">3</int>
|
247
|
-
<int key="relation">0</int>
|
248
|
-
<reference key="secondItem" ref="766721923"/>
|
249
|
-
<int key="secondAttribute">3</int>
|
250
|
-
<float key="multiplier">1</float>
|
251
|
-
<object class="IBLayoutConstant" key="constant">
|
252
|
-
<double key="value">295</double>
|
253
|
-
</object>
|
254
|
-
<float key="priority">1000</float>
|
255
|
-
<reference key="containingView" ref="766721923"/>
|
256
|
-
<int key="scoringType">3</int>
|
257
|
-
<float key="scoringTypeFloat">9</float>
|
258
|
-
<int key="contentType">3</int>
|
259
|
-
</object>
|
260
|
-
<reference ref="138991431"/>
|
261
|
-
<reference ref="760254641"/>
|
262
|
-
</array>
|
263
|
-
<reference key="parent" ref="0"/>
|
264
|
-
</object>
|
265
|
-
<object class="IBObjectRecord">
|
266
|
-
<int key="objectID">4</int>
|
267
|
-
<reference key="object" ref="138991431"/>
|
268
|
-
<array class="NSMutableArray" key="children">
|
269
|
-
<object class="IBNSLayoutConstraint" id="573769063">
|
270
|
-
<reference key="firstItem" ref="138991431"/>
|
271
|
-
<int key="firstAttribute">8</int>
|
272
|
-
<int key="relation">0</int>
|
273
|
-
<nil key="secondItem"/>
|
274
|
-
<int key="secondAttribute">0</int>
|
275
|
-
<float key="multiplier">1</float>
|
276
|
-
<object class="IBLayoutConstant" key="constant">
|
277
|
-
<double key="value">81</double>
|
278
|
-
</object>
|
279
|
-
<float key="priority">1000</float>
|
280
|
-
<reference key="containingView" ref="138991431"/>
|
281
|
-
<int key="scoringType">3</int>
|
282
|
-
<float key="scoringTypeFloat">9</float>
|
283
|
-
<int key="contentType">1</int>
|
284
|
-
</object>
|
285
|
-
</array>
|
286
|
-
<reference key="parent" ref="766721923"/>
|
287
|
-
</object>
|
288
|
-
<object class="IBObjectRecord">
|
289
|
-
<int key="objectID">5</int>
|
290
|
-
<reference key="object" ref="539535921"/>
|
291
|
-
<reference key="parent" ref="766721923"/>
|
292
|
-
</object>
|
293
|
-
<object class="IBObjectRecord">
|
294
|
-
<int key="objectID">8</int>
|
295
|
-
<reference key="object" ref="573769063"/>
|
296
|
-
<reference key="parent" ref="138991431"/>
|
297
|
-
</object>
|
298
|
-
<object class="IBObjectRecord">
|
299
|
-
<int key="objectID">9</int>
|
300
|
-
<reference key="object" ref="638909364"/>
|
301
|
-
<reference key="parent" ref="766721923"/>
|
302
|
-
</object>
|
303
|
-
<object class="IBObjectRecord">
|
304
|
-
<int key="objectID">11</int>
|
305
|
-
<reference key="object" ref="760254641"/>
|
306
|
-
<array class="NSMutableArray" key="children"/>
|
307
|
-
<reference key="parent" ref="766721923"/>
|
308
|
-
</object>
|
309
|
-
<object class="IBObjectRecord">
|
310
|
-
<int key="objectID">12</int>
|
311
|
-
<reference key="object" ref="624600486"/>
|
312
|
-
<reference key="parent" ref="766721923"/>
|
313
|
-
</object>
|
314
|
-
<object class="IBObjectRecord">
|
315
|
-
<int key="objectID">14</int>
|
316
|
-
<reference key="object" ref="288956434"/>
|
317
|
-
<reference key="parent" ref="766721923"/>
|
318
|
-
</object>
|
319
|
-
<object class="IBObjectRecord">
|
320
|
-
<int key="objectID">16</int>
|
321
|
-
<reference key="object" ref="531322201"/>
|
322
|
-
<reference key="parent" ref="766721923"/>
|
323
|
-
</object>
|
324
|
-
</array>
|
325
|
-
</object>
|
326
|
-
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
327
|
-
<string key="-1.CustomClassName">RufusPageViewController</string>
|
328
|
-
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
329
|
-
<string key="-2.CustomClassName">UIResponder</string>
|
330
|
-
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
331
|
-
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
332
|
-
<boolean value="NO" key="11.IBViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
333
|
-
<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
334
|
-
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
335
|
-
<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
336
|
-
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
337
|
-
<array key="2.IBViewMetadataConstraints">
|
338
|
-
<reference ref="539535921"/>
|
339
|
-
<reference ref="638909364"/>
|
340
|
-
<reference ref="288956434"/>
|
341
|
-
<reference ref="531322201"/>
|
342
|
-
<reference ref="624600486"/>
|
343
|
-
</array>
|
344
|
-
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
345
|
-
<array class="NSMutableArray" key="4.IBViewMetadataConstraints">
|
346
|
-
<reference ref="573769063"/>
|
347
|
-
</array>
|
348
|
-
<boolean value="NO" key="4.IBViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
349
|
-
<object class="NSMutableAttributedString" key="4.notes">
|
350
|
-
<object class="NSMutableString" key="NSString">
|
351
|
-
<characters key="NS.bytes"/>
|
352
|
-
</object>
|
353
|
-
</object>
|
354
|
-
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
355
|
-
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
356
|
-
<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
357
|
-
</dictionary>
|
358
|
-
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
359
|
-
<nil key="activeLocalization"/>
|
360
|
-
<dictionary class="NSMutableDictionary" key="localizations"/>
|
361
|
-
<nil key="sourceID"/>
|
362
|
-
<int key="maxID">18</int>
|
363
|
-
</object>
|
364
|
-
<object class="IBClassDescriber" key="IBDocument.Classes"/>
|
365
|
-
<int key="IBDocument.localizationMode">0</int>
|
366
|
-
<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
|
367
|
-
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
368
|
-
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
369
|
-
<bool key="IBDocument.UseAutolayout">YES</bool>
|
370
|
-
<string key="IBCocoaTouchPluginVersion">2083</string>
|
371
|
-
</data>
|
372
|
-
</archive>
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES">
|
3
|
+
<dependencies>
|
4
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/>
|
5
|
+
</dependencies>
|
6
|
+
<objects>
|
7
|
+
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RufusPageViewController">
|
8
|
+
<connections>
|
9
|
+
<outlet property="rufusPageButton" destination="11" id="17"/>
|
10
|
+
<outlet property="view" destination="2" id="3"/>
|
11
|
+
</connections>
|
12
|
+
</placeholder>
|
13
|
+
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
14
|
+
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="2">
|
15
|
+
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
16
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
17
|
+
<subviews>
|
18
|
+
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="This is the Rufus Page" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4">
|
19
|
+
<rect key="frame" x="300" y="295" width="172" height="81"/>
|
20
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
21
|
+
<accessibility key="accessibilityConfiguration" label="rufusDescription"/>
|
22
|
+
<constraints>
|
23
|
+
<constraint firstAttribute="height" constant="81" id="8"/>
|
24
|
+
</constraints>
|
25
|
+
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
26
|
+
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
27
|
+
<nil key="highlightedColor"/>
|
28
|
+
</label>
|
29
|
+
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="11">
|
30
|
+
<rect key="frame" x="300" y="391" width="172" height="30"/>
|
31
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
32
|
+
<accessibility key="accessibilityConfiguration" label="rufusPageButton"/>
|
33
|
+
<state key="normal" title="Rufus Page Button">
|
34
|
+
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
35
|
+
</state>
|
36
|
+
<connections>
|
37
|
+
<action selector="goToHomePage:" destination="-1" eventType="touchUpInside" id="18"/>
|
38
|
+
</connections>
|
39
|
+
</button>
|
40
|
+
</subviews>
|
41
|
+
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
42
|
+
<constraints>
|
43
|
+
<constraint firstItem="4" firstAttribute="top" secondItem="2" secondAttribute="top" constant="295" id="5"/>
|
44
|
+
<constraint firstItem="4" firstAttribute="leading" secondItem="2" secondAttribute="leading" constant="300" id="9"/>
|
45
|
+
<constraint firstItem="11" firstAttribute="top" secondItem="2" secondAttribute="top" constant="391" id="12"/>
|
46
|
+
<constraint firstItem="4" firstAttribute="trailing" secondItem="11" secondAttribute="trailing" id="14"/>
|
47
|
+
<constraint firstItem="4" firstAttribute="leading" secondItem="11" secondAttribute="leading" id="16"/>
|
48
|
+
</constraints>
|
49
|
+
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackOpaque"/>
|
50
|
+
</view>
|
51
|
+
</objects>
|
52
|
+
</document>
|