furter 0.0.3

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.
Files changed (82) hide show
  1. data/.gitignore +21 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +2 -0
  4. data/Changelog +3 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +25 -0
  8. data/Rakefile +30 -0
  9. data/app/FurterApp/Frank/features/my_first.feature +12 -0
  10. data/app/FurterApp/Frank/features/step_definitions/launch_steps.rb +20 -0
  11. data/app/FurterApp/Frank/features/support/env.rb +8 -0
  12. data/app/FurterApp/Frank/frankify.xcconfig +6 -0
  13. data/app/FurterApp/Frank/libCocoaAsyncSocket.a +0 -0
  14. data/app/FurterApp/Frank/libCocoaAsyncSocketMac.a +0 -0
  15. data/app/FurterApp/Frank/libCocoaHTTPServer.a +0 -0
  16. data/app/FurterApp/Frank/libCocoaHTTPServerMac.a +0 -0
  17. data/app/FurterApp/Frank/libCocoaLumberjack.a +0 -0
  18. data/app/FurterApp/Frank/libCocoaLumberjackMac.a +0 -0
  19. data/app/FurterApp/Frank/libFrank.a +0 -0
  20. data/app/FurterApp/Frank/libFrankMac.a +0 -0
  21. data/app/FurterApp/Frank/libShelley.a +0 -0
  22. data/app/FurterApp/Frank/libShelleyMac.a +0 -0
  23. data/app/FurterApp/FurterApp.xcodeproj/project.pbxproj +807 -0
  24. data/app/FurterApp/FurterApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  25. data/app/FurterApp/FurterApp.xcodeproj/project.xcworkspace/xcuserdata/lwilson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  26. data/app/FurterApp/FurterApp.xcodeproj/xcuserdata/lwilson.xcuserdatad/xcschemes/FurterApp.xcscheme +86 -0
  27. data/app/FurterApp/FurterApp.xcodeproj/xcuserdata/lwilson.xcuserdatad/xcschemes/xcschememanagement.plist +22 -0
  28. data/app/FurterApp/FurterApp/AppDelegate.h +22 -0
  29. data/app/FurterApp/FurterApp/AppDelegate.m +161 -0
  30. data/app/FurterApp/FurterApp/Default-568h@2x.png +0 -0
  31. data/app/FurterApp/FurterApp/Default.png +0 -0
  32. data/app/FurterApp/FurterApp/Default@2x.png +0 -0
  33. data/app/FurterApp/FurterApp/DetailViewController.h +23 -0
  34. data/app/FurterApp/FurterApp/DetailViewController.m +80 -0
  35. data/app/FurterApp/FurterApp/FurterApp-Info.plist +59 -0
  36. data/app/FurterApp/FurterApp/FurterApp-Prefix.pch +15 -0
  37. data/app/FurterApp/FurterApp/FurterApp.xcdatamodeld/.xccurrentversion +8 -0
  38. data/app/FurterApp/FurterApp/FurterApp.xcdatamodeld/FurterApp.xcdatamodel/contents +9 -0
  39. data/app/FurterApp/FurterApp/MasterViewController.h +22 -0
  40. data/app/FurterApp/FurterApp/MasterViewController.m +235 -0
  41. data/app/FurterApp/FurterApp/en.lproj/InfoPlist.strings +2 -0
  42. data/app/FurterApp/FurterApp/en.lproj/MainStoryboard_iPad.storyboard +260 -0
  43. data/app/FurterApp/FurterApp/en.lproj/MainStoryboard_iPhone.storyboard +129 -0
  44. data/app/FurterApp/FurterApp/main.m +18 -0
  45. data/cucumber.yml +2 -0
  46. data/features/button.feature +12 -0
  47. data/features/label.feature +10 -0
  48. data/features/navigation.feature +5 -0
  49. data/features/step_definitions/button_steps.rb +7 -0
  50. data/features/step_definitions/label_steps.rb +8 -0
  51. data/features/step_definitions/navigation_steps.rb +7 -0
  52. data/features/step_definitions/switches_steps.rb +12 -0
  53. data/features/step_definitions/text_steps.rb +25 -0
  54. data/features/support/core_ext/string.rb +9 -0
  55. data/features/support/env.rb +25 -0
  56. data/features/support/hooks.rb +3 -0
  57. data/features/support/screens/detail.rb +15 -0
  58. data/features/support/screens/elsewhere_page.rb +7 -0
  59. data/features/switches.feature +7 -0
  60. data/features/text.feature +15 -0
  61. data/furter.gemspec +26 -0
  62. data/lib/furter.rb +53 -0
  63. data/lib/furter/accessors.rb +87 -0
  64. data/lib/furter/accessors/alert_button.rb +18 -0
  65. data/lib/furter/accessors/button.rb +17 -0
  66. data/lib/furter/accessors/label.rb +13 -0
  67. data/lib/furter/accessors/map_pin.rb +18 -0
  68. data/lib/furter/accessors/switch.rb +20 -0
  69. data/lib/furter/accessors/table.rb +15 -0
  70. data/lib/furter/accessors/table_item.rb +10 -0
  71. data/lib/furter/accessors/text.rb +27 -0
  72. data/lib/furter/accessors/view.rb +46 -0
  73. data/lib/furter/navigation.rb +25 -0
  74. data/lib/furter/version.rb +3 -0
  75. data/spec/lib/furter/accessors/button_spec.rb +23 -0
  76. data/spec/lib/furter/accessors/label_spec.rb +24 -0
  77. data/spec/lib/furter/accessors/switch_spec.rb +28 -0
  78. data/spec/lib/furter/accessors/text_spec.rb +39 -0
  79. data/spec/lib/furter/accessors/view_spec.rb +43 -0
  80. data/spec/lib/furter/accessors_spec.rb +116 -0
  81. data/spec/spec_helper.rb +18 -0
  82. metadata +234 -0
@@ -0,0 +1,15 @@
1
+ //
2
+ // Prefix header for all source files of the 'FurterApp' target in the 'FurterApp' project
3
+ //
4
+
5
+ #import <Availability.h>
6
+
7
+ #ifndef __IPHONE_5_0
8
+ #warning "This project uses features only available in iOS SDK 5.0 and later."
9
+ #endif
10
+
11
+ #ifdef __OBJC__
12
+ #import <UIKit/UIKit.h>
13
+ #import <Foundation/Foundation.h>
14
+ #import <CoreData/CoreData.h>
15
+ #endif
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>_XCCurrentVersionName</key>
6
+ <string>FurterApp.xcdatamodel</string>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <model name="Test1.xcdatamodel" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1" systemVersion="11A491" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
3
+ <entity name="Event">
4
+ <attribute name="timeStamp" optional="YES" attributeType="Date"/>
5
+ </entity>
6
+ <elements>
7
+ <element name="Event" positionX="261" positionY="189" width="128" height="60"/>
8
+ </elements>
9
+ </model>
@@ -0,0 +1,22 @@
1
+ //
2
+ // MasterViewController.h
3
+ // FurterApp
4
+ //
5
+ // Created by Levi Wilson on 3/20/13.
6
+ // Copyright (c) 2013 Levi Wilson. All rights reserved.
7
+ //
8
+
9
+ #import <UIKit/UIKit.h>
10
+
11
+ @class DetailViewController;
12
+
13
+ #import <CoreData/CoreData.h>
14
+
15
+ @interface MasterViewController : UITableViewController <NSFetchedResultsControllerDelegate>
16
+
17
+ @property (strong, nonatomic) DetailViewController *detailViewController;
18
+
19
+ @property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
20
+ @property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
21
+
22
+ @end
@@ -0,0 +1,235 @@
1
+ //
2
+ // MasterViewController.m
3
+ // FurterApp
4
+ //
5
+ // Created by Levi Wilson on 3/20/13.
6
+ // Copyright (c) 2013 Levi Wilson. All rights reserved.
7
+ //
8
+
9
+ #import "MasterViewController.h"
10
+
11
+ #import "DetailViewController.h"
12
+
13
+ @interface MasterViewController ()
14
+ - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
15
+ @end
16
+
17
+ @implementation MasterViewController
18
+
19
+ - (void)awakeFromNib
20
+ {
21
+ if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
22
+ self.clearsSelectionOnViewWillAppear = NO;
23
+ self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);
24
+ }
25
+ [super awakeFromNib];
26
+ }
27
+
28
+ - (void)viewDidLoad
29
+ {
30
+ [super viewDidLoad];
31
+ // Do any additional setup after loading the view, typically from a nib.
32
+ self.navigationItem.leftBarButtonItem = self.editButtonItem;
33
+
34
+ UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
35
+ self.navigationItem.rightBarButtonItem = addButton;
36
+ self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
37
+ }
38
+
39
+ - (void)didReceiveMemoryWarning
40
+ {
41
+ [super didReceiveMemoryWarning];
42
+ // Dispose of any resources that can be recreated.
43
+ }
44
+
45
+ - (void)insertNewObject:(id)sender
46
+ {
47
+ NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
48
+ NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
49
+ NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
50
+
51
+ // If appropriate, configure the new managed object.
52
+ // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template.
53
+ [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"];
54
+
55
+ // Save the context.
56
+ NSError *error = nil;
57
+ if (![context save:&error]) {
58
+ // Replace this implementation with code to handle the error appropriately.
59
+ // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
60
+ NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
61
+ abort();
62
+ }
63
+ }
64
+
65
+ #pragma mark - Table View
66
+
67
+ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
68
+ {
69
+ return [[self.fetchedResultsController sections] count];
70
+ }
71
+
72
+ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
73
+ {
74
+ id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section];
75
+ return [sectionInfo numberOfObjects];
76
+ }
77
+
78
+ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
79
+ {
80
+ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
81
+ [self configureCell:cell atIndexPath:indexPath];
82
+ return cell;
83
+ }
84
+
85
+ - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
86
+ {
87
+ // Return NO if you do not want the specified item to be editable.
88
+ return YES;
89
+ }
90
+
91
+ - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
92
+ {
93
+ if (editingStyle == UITableViewCellEditingStyleDelete) {
94
+ NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
95
+ [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
96
+
97
+ NSError *error = nil;
98
+ if (![context save:&error]) {
99
+ // Replace this implementation with code to handle the error appropriately.
100
+ // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
101
+ NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
102
+ abort();
103
+ }
104
+ }
105
+ }
106
+
107
+ - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
108
+ {
109
+ // The table view should not be re-orderable.
110
+ return NO;
111
+ }
112
+
113
+ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
114
+ {
115
+ if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
116
+ NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
117
+ self.detailViewController.detailItem = object;
118
+ }
119
+ }
120
+
121
+ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
122
+ {
123
+ if ([[segue identifier] isEqualToString:@"showDetail"]) {
124
+ NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
125
+ NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
126
+ [[segue destinationViewController] setDetailItem:object];
127
+ }
128
+ }
129
+
130
+ #pragma mark - Fetched results controller
131
+
132
+ - (NSFetchedResultsController *)fetchedResultsController
133
+ {
134
+ if (_fetchedResultsController != nil) {
135
+ return _fetchedResultsController;
136
+ }
137
+
138
+ NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
139
+ // Edit the entity name as appropriate.
140
+ NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
141
+ [fetchRequest setEntity:entity];
142
+
143
+ // Set the batch size to a suitable number.
144
+ [fetchRequest setFetchBatchSize:20];
145
+
146
+ // Edit the sort key as appropriate.
147
+ NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO];
148
+ NSArray *sortDescriptors = @[sortDescriptor];
149
+
150
+ [fetchRequest setSortDescriptors:sortDescriptors];
151
+
152
+ // Edit the section name key path and cache name if appropriate.
153
+ // nil for section name key path means "no sections".
154
+ NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];
155
+ aFetchedResultsController.delegate = self;
156
+ self.fetchedResultsController = aFetchedResultsController;
157
+
158
+ NSError *error = nil;
159
+ if (![self.fetchedResultsController performFetch:&error]) {
160
+ // Replace this implementation with code to handle the error appropriately.
161
+ // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
162
+ NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
163
+ abort();
164
+ }
165
+
166
+ return _fetchedResultsController;
167
+ }
168
+
169
+ - (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
170
+ {
171
+ [self.tableView beginUpdates];
172
+ }
173
+
174
+ - (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
175
+ atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type
176
+ {
177
+ switch(type) {
178
+ case NSFetchedResultsChangeInsert:
179
+ [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
180
+ break;
181
+
182
+ case NSFetchedResultsChangeDelete:
183
+ [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
184
+ break;
185
+ }
186
+ }
187
+
188
+ - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
189
+ atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
190
+ newIndexPath:(NSIndexPath *)newIndexPath
191
+ {
192
+ UITableView *tableView = self.tableView;
193
+
194
+ switch(type) {
195
+ case NSFetchedResultsChangeInsert:
196
+ [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
197
+ break;
198
+
199
+ case NSFetchedResultsChangeDelete:
200
+ [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
201
+ break;
202
+
203
+ case NSFetchedResultsChangeUpdate:
204
+ [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
205
+ break;
206
+
207
+ case NSFetchedResultsChangeMove:
208
+ [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
209
+ [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
210
+ break;
211
+ }
212
+ }
213
+
214
+ - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
215
+ {
216
+ [self.tableView endUpdates];
217
+ }
218
+
219
+ /*
220
+ // Implementing the above methods to update the table view in response to individual changes may have performance implications if a large number of changes are made simultaneously. If this proves to be an issue, you can instead just implement controllerDidChangeContent: which notifies the delegate that all section and object changes have been processed.
221
+
222
+ - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
223
+ {
224
+ // In the simplest, most efficient, case, reload the table view.
225
+ [self.tableView reloadData];
226
+ }
227
+ */
228
+
229
+ - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
230
+ {
231
+ NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
232
+ cell.textLabel.text = [[object valueForKey:@"timeStamp"] description];
233
+ }
234
+
235
+ @end
@@ -0,0 +1,2 @@
1
+ /* Localized versions of Info.plist keys */
2
+
@@ -0,0 +1,260 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="3084" systemVersion="12D78" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="5">
3
+ <dependencies>
4
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="2083"/>
5
+ </dependencies>
6
+ <scenes>
7
+ <!--Navigation Controller-->
8
+ <scene sceneID="14">
9
+ <objects>
10
+ <navigationController id="3" sceneMemberID="viewController">
11
+ <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="6">
12
+ <autoresizingMask key="autoresizingMask"/>
13
+ </navigationBar>
14
+ <connections>
15
+ <segue destination="19" kind="relationship" relationship="rootViewController" id="25"/>
16
+ </connections>
17
+ </navigationController>
18
+ <placeholder placeholderIdentifier="IBFirstResponder" id="13" sceneMemberID="firstResponder"/>
19
+ </objects>
20
+ <point key="canvasLocation" x="448" y="-630"/>
21
+ </scene>
22
+ <!--Detail View Controller - Detail-->
23
+ <scene sceneID="16">
24
+ <objects>
25
+ <viewController storyboardIdentifier="" title="Detail" id="4" customClass="DetailViewController" sceneMemberID="viewController">
26
+ <view key="view" contentMode="scaleToFill" id="26">
27
+ <rect key="frame" x="0.0" y="64" width="703" height="704"/>
28
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
29
+ <subviews>
30
+ <label clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Detail view content goes here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="27">
31
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
32
+ <accessibility key="accessibilityConfiguration" label="labelByAccessibilityLabel"/>
33
+ <fontDescription key="fontDescription" type="system" size="system"/>
34
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
35
+ <nil key="highlightedColor"/>
36
+ </label>
37
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="First Field" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="mEd-bW-xG3">
38
+ <accessibility key="accessibilityConfiguration" hint="First Field">
39
+ <accessibilityTraits key="traits" none="YES"/>
40
+ </accessibility>
41
+ <constraints>
42
+ <constraint firstAttribute="height" constant="30" id="ZDx-36-Vlf"/>
43
+ <constraint firstAttribute="width" constant="201" id="v52-Lv-Kpf"/>
44
+ </constraints>
45
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
46
+ <textInputTraits key="textInputTraits"/>
47
+ </textField>
48
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="HNa-e4-2od">
49
+ <accessibility key="accessibilityConfiguration" hint="" label="textByLabel">
50
+ <accessibilityTraits key="traits" none="YES"/>
51
+ </accessibility>
52
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
53
+ <textInputTraits key="textInputTraits"/>
54
+ </textField>
55
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Placeholder" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="79f-eU-bDt">
56
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
57
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
58
+ <nil key="highlightedColor"/>
59
+ </label>
60
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nbu-fr-Znd">
61
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
62
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
63
+ <nil key="highlightedColor"/>
64
+ </label>
65
+ <switch opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Nyi-ck-8hR">
66
+ <accessibility key="accessibilityConfiguration" label="switchToggle"/>
67
+ </switch>
68
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MgB-Y1-P3J">
69
+ <constraints>
70
+ <constraint firstAttribute="width" constant="155" id="1Nz-03-QXb"/>
71
+ </constraints>
72
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
73
+ <state key="normal" title="Some Button">
74
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
75
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
76
+ </state>
77
+ <state key="highlighted">
78
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
79
+ </state>
80
+ <connections>
81
+ <action selector="someButtonClick:" destination="4" eventType="touchDown" id="LKw-by-anH"/>
82
+ </connections>
83
+ </button>
84
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6Hu-uu-EUY">
85
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
86
+ <state key="normal" title="Labeled Button">
87
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
88
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
89
+ </state>
90
+ <state key="highlighted">
91
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
92
+ </state>
93
+ <connections>
94
+ <action selector="onLabeledButtonClicked:" destination="4" eventType="touchDown" id="SRl-Pb-TKU"/>
95
+ </connections>
96
+ </button>
97
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="n4M-Kb-ePv">
98
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
99
+ <state key="normal" title="Go Elsewhere">
100
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
101
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
102
+ </state>
103
+ <state key="highlighted">
104
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
105
+ </state>
106
+ <connections>
107
+ <segue destination="2m6-NE-oGx" kind="push" id="g3T-p0-Sec"/>
108
+ </connections>
109
+ </button>
110
+ </subviews>
111
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
112
+ <constraints>
113
+ <constraint firstItem="HNa-e4-2od" firstAttribute="leading" secondItem="mEd-bW-xG3" secondAttribute="leading" type="default" id="078-hV-XP8"/>
114
+ <constraint firstItem="79f-eU-bDt" firstAttribute="leading" secondItem="26" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="1JC-Aj-NzB"/>
115
+ <constraint firstItem="n4M-Kb-ePv" firstAttribute="top" secondItem="6Hu-uu-EUY" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="9II-fH-f7K"/>
116
+ <constraint firstAttribute="trailing" secondItem="27" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="CON-Cb-dBe"/>
117
+ <constraint firstAttribute="trailing" secondItem="Nyi-ck-8hR" secondAttribute="trailing" constant="227" id="G0P-fu-R9M"/>
118
+ <constraint firstItem="6Hu-uu-EUY" firstAttribute="leading" secondItem="MgB-Y1-P3J" secondAttribute="leading" type="default" id="GwV-n1-zD7"/>
119
+ <constraint firstItem="HNa-e4-2od" firstAttribute="top" secondItem="mEd-bW-xG3" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="IGG-em-f1e"/>
120
+ <constraint firstItem="mEd-bW-xG3" firstAttribute="top" secondItem="26" secondAttribute="top" constant="19" id="KGI-gf-TAe"/>
121
+ <constraint firstItem="27" firstAttribute="leading" secondItem="26" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="LAk-gc-aCl"/>
122
+ <constraint firstItem="nbu-fr-Znd" firstAttribute="baseline" secondItem="HNa-e4-2od" secondAttribute="baseline" type="default" id="M5i-yy-h0N"/>
123
+ <constraint firstItem="6Hu-uu-EUY" firstAttribute="top" secondItem="MgB-Y1-P3J" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="MWf-xM-HxM"/>
124
+ <constraint firstItem="nbu-fr-Znd" firstAttribute="leading" secondItem="26" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="RZE-cI-a2V"/>
125
+ <constraint firstItem="MgB-Y1-P3J" firstAttribute="leading" secondItem="HNa-e4-2od" secondAttribute="leading" type="default" id="TI6-aB-T6l"/>
126
+ <constraint firstItem="6Hu-uu-EUY" firstAttribute="trailing" secondItem="MgB-Y1-P3J" secondAttribute="trailing" type="default" id="Tkv-gE-Bb0"/>
127
+ <constraint firstItem="79f-eU-bDt" firstAttribute="top" secondItem="26" secondAttribute="top" constant="23" id="WAb-82-oiE"/>
128
+ <constraint firstItem="HNa-e4-2od" firstAttribute="trailing" secondItem="mEd-bW-xG3" secondAttribute="trailing" type="default" id="e4T-wS-zIa"/>
129
+ <constraint firstItem="27" firstAttribute="centerY" secondItem="26" secondAttribute="centerY" type="default" id="fbb-bQ-YI1"/>
130
+ <constraint firstItem="MgB-Y1-P3J" firstAttribute="top" secondItem="26" secondAttribute="top" constant="120" id="fxO-Da-wfr"/>
131
+ <constraint firstItem="n4M-Kb-ePv" firstAttribute="leading" secondItem="6Hu-uu-EUY" secondAttribute="leading" type="default" id="gQf-GL-AtC"/>
132
+ <constraint firstItem="mEd-bW-xG3" firstAttribute="leading" secondItem="26" secondAttribute="leading" constant="163" id="kHo-k9-xfB"/>
133
+ <constraint firstItem="n4M-Kb-ePv" firstAttribute="trailing" secondItem="6Hu-uu-EUY" secondAttribute="trailing" type="default" id="kXJ-R6-5W3"/>
134
+ <constraint firstItem="79f-eU-bDt" firstAttribute="baseline" secondItem="mEd-bW-xG3" secondAttribute="baseline" type="default" id="piK-8v-q9x"/>
135
+ <constraint firstItem="Nyi-ck-8hR" firstAttribute="top" secondItem="nbu-fr-Znd" secondAttribute="top" type="default" id="wtS-Ul-nbp"/>
136
+ </constraints>
137
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
138
+ </view>
139
+ <toolbarItems/>
140
+ <navigationItem key="navigationItem" title="Detail" id="53"/>
141
+ <connections>
142
+ <outlet property="detailDescriptionLabel" destination="27" id="29"/>
143
+ <outlet property="labelTextField" destination="HNa-e4-2od" id="SHv-1W-wQm"/>
144
+ <outlet property="labeledButton" destination="6Hu-uu-EUY" id="lP4-Wp-TLL"/>
145
+ <outlet property="labeledLabel" destination="27" id="GUQ-6K-Ygb"/>
146
+ <outlet property="placeholderTextField" destination="mEd-bW-xG3" id="WJN-WF-CeJ"/>
147
+ <outlet property="textButton" destination="MgB-Y1-P3J" id="dgB-Uo-P2L"/>
148
+ </connections>
149
+ </viewController>
150
+ <placeholder placeholderIdentifier="IBFirstResponder" id="15" sceneMemberID="firstResponder"/>
151
+ </objects>
152
+ <point key="canvasLocation" x="436" y="248"/>
153
+ </scene>
154
+ <!--View Controller - Elsewhere-->
155
+ <scene sceneID="c75-js-XhF">
156
+ <objects>
157
+ <viewController title="Elsewhere" id="2m6-NE-oGx" sceneMemberID="viewController">
158
+ <view key="view" contentMode="scaleToFill" id="L6v-eP-0Ap">
159
+ <rect key="frame" x="0.0" y="64" width="703" height="704"/>
160
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
161
+ <subviews>
162
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="You are now elsewhere." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Sw-kC-LPj">
163
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
164
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
165
+ <nil key="highlightedColor"/>
166
+ </label>
167
+ </subviews>
168
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
169
+ <constraints>
170
+ <constraint firstItem="2Sw-kC-LPj" firstAttribute="top" secondItem="L6v-eP-0Ap" secondAttribute="top" constant="341" id="fPL-qj-geg"/>
171
+ <constraint firstItem="2Sw-kC-LPj" firstAttribute="centerX" secondItem="L6v-eP-0Ap" secondAttribute="centerX" type="default" id="iV6-oV-7kk"/>
172
+ </constraints>
173
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
174
+ </view>
175
+ <navigationItem key="navigationItem" title="Elsewhere" id="Y1Z-Bv-f1J"/>
176
+ </viewController>
177
+ <placeholder placeholderIdentifier="IBFirstResponder" id="Noc-VA-Z4v" userLabel="First Responder" sceneMemberID="firstResponder"/>
178
+ </objects>
179
+ <point key="canvasLocation" x="1193" y="248"/>
180
+ </scene>
181
+ <!--Split View Controller-->
182
+ <scene sceneID="18">
183
+ <objects>
184
+ <splitViewController id="5" sceneMemberID="viewController">
185
+ <toolbarItems/>
186
+ <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/>
187
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
188
+ <connections>
189
+ <segue destination="3" kind="relationship" relationship="masterViewController" id="9"/>
190
+ <segue destination="42" kind="relationship" relationship="detailViewController" id="51"/>
191
+ </connections>
192
+ </splitViewController>
193
+ <placeholder placeholderIdentifier="IBFirstResponder" id="17" sceneMemberID="firstResponder"/>
194
+ </objects>
195
+ <point key="canvasLocation" x="-687" y="-630"/>
196
+ </scene>
197
+ <!--Master View Controller - Master-->
198
+ <scene sceneID="24">
199
+ <objects>
200
+ <tableViewController storyboardIdentifier="" title="Master" clearsSelectionOnViewWillAppear="NO" id="19" customClass="MasterViewController" sceneMemberID="viewController">
201
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="20">
202
+ <rect key="frame" x="0.0" y="64" width="320" height="704"/>
203
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
204
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
205
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
206
+ <prototypes>
207
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="tIi-5l-S0i" style="IBUITableViewCellStyleDefault" id="ZSw-0O-9Pw">
208
+ <rect key="frame" x="0.0" y="22" width="320" height="44"/>
209
+ <autoresizingMask key="autoresizingMask"/>
210
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
211
+ <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
212
+ <autoresizingMask key="autoresizingMask"/>
213
+ <subviews>
214
+ <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="tIi-5l-S0i">
215
+ <rect key="frame" x="10" y="0.0" width="300" height="43"/>
216
+ <autoresizingMask key="autoresizingMask"/>
217
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
218
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
219
+ <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
220
+ </label>
221
+ </subviews>
222
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
223
+ </view>
224
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
225
+ </tableViewCell>
226
+ </prototypes>
227
+ <sections/>
228
+ <connections>
229
+ <outlet property="dataSource" destination="19" id="22"/>
230
+ <outlet property="delegate" destination="19" id="21"/>
231
+ </connections>
232
+ </tableView>
233
+ <navigationItem key="navigationItem" title="Master" id="40"/>
234
+ </tableViewController>
235
+ <placeholder placeholderIdentifier="IBFirstResponder" id="23" sceneMemberID="firstResponder"/>
236
+ </objects>
237
+ <point key="canvasLocation" x="859" y="-631"/>
238
+ </scene>
239
+ <!--Navigation Controller-->
240
+ <scene sceneID="50">
241
+ <objects>
242
+ <navigationController id="42" sceneMemberID="viewController">
243
+ <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="43">
244
+ <autoresizingMask key="autoresizingMask"/>
245
+ </navigationBar>
246
+ <connections>
247
+ <segue destination="4" kind="relationship" relationship="rootViewController" id="52"/>
248
+ </connections>
249
+ </navigationController>
250
+ <placeholder placeholderIdentifier="IBFirstResponder" id="49" userLabel="First Responder" sceneMemberID="firstResponder"/>
251
+ </objects>
252
+ <point key="canvasLocation" x="-366" y="248"/>
253
+ </scene>
254
+ </scenes>
255
+ <simulatedMetricsContainer key="defaultSimulatedMetrics">
256
+ <simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/>
257
+ <simulatedOrientationMetrics key="orientation"/>
258
+ <simulatedScreenMetrics key="destination"/>
259
+ </simulatedMetricsContainer>
260
+ </document>