lanekit 0.3.5 → 0.4.1

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 (26) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +14 -2
  3. data/lib/lanekit/generate/model.rb +2 -0
  4. data/lib/lanekit/generate/provider.rb +3 -3
  5. data/lib/lanekit/generate/tableviewcontroller.rb +110 -0
  6. data/lib/lanekit/generate.rb +1 -0
  7. data/lib/lanekit/version.rb +1 -1
  8. data/lib/lanekit.rb +15 -0
  9. data/lib/template/LKFeedCell.h.erb +16 -0
  10. data/lib/template/LKFeedCell.m.erb +148 -0
  11. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKAppDelegate.m +4 -6
  12. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/Base.lproj/Main_iPad.storyboard +3 -116
  13. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/Base.lproj/Main_iPhone.storyboard +4 -82
  14. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/placeholder@2x.png +0 -0
  15. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project.xcodeproj/project.pbxproj +4 -12
  16. data/lib/template/lanekit-ios-project/lanekit-ios-project.xcworkspace/xcuserdata/larry.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  17. data/lib/template/model.m.erb +8 -0
  18. data/lib/template/model_base.h.erb +2 -0
  19. data/lib/template/model_base.m.erb +30 -0
  20. data/lib/template/tvc.h.erb +14 -0
  21. data/lib/template/tvc.m.erb +158 -0
  22. metadata +14 -12
  23. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKDetailViewController.h +0 -12
  24. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKDetailViewController.m +0 -68
  25. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKMasterViewController.h +0 -13
  26. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKMasterViewController.m +0 -122
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDBjMDYxZWZiNDI0NmIzNGNkODNlMjhhNzRjZmUyYTU3MzU2MjM1Mg==
4
+ ZTU2MzMwNGYzZDE3YWVjZTI4MWVkZTNiZjg3ZGNiMDI4NmFiZDgyNQ==
5
5
  data.tar.gz: !binary |-
6
- ZTdiNGU4NGQxMTFhNjg3OTA0MTc3MjI0YzI5MTU5N2Q1OGI1NjE3Nw==
6
+ MWI2ZGUxZjc5YzEyYTc3MTYwNzkxZjgxNzQ0NjVkM2NiNzNiZDAxZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YTRhZmUxYzIzOTViODgxMmRjMWRjYTA4ZTlhZDFhNmE0NTgwMDQzMjExZDJk
10
- ZDg3ZDE2N2FkY2NjZWE1NTBmMDg4MjE4ZDRlNjNlOTk1OTNmMmQ1ZmZkODIz
11
- YzU1MjllMjk2MzU0NWFmNjZjMWIyZWIwOTVkMDU5MmMyMWZhN2I=
9
+ ODJhMmMzNDJiN2MxZTY2NTQ5ZWM2Y2U4YWIxODZiNTg4OTg0NzBhMDMxYmVh
10
+ YWRkNTlmYzUxZGE0ZTFlODY4NmYxOWRiYzMwZDI2ODNmZTRkNjU2ZWRjYmQ5
11
+ ZTJjOTNjNzE0NWYzNWIxMDhkMjc4YjE5N2Y3OWMwODdhNTM3Y2U=
12
12
  data.tar.gz: !binary |-
13
- NzlmOGM3ZmVkZjEzZTVlYjgxYmRkM2QzNjEyODdhZTc5MDY1NjJjMWUxYmI2
14
- YWRmNTUyOWFmYmY3N2RhZGU1ODVjZjdkYTBhZDg0NWE3YjFjZDY2Njc0NzU3
15
- MDZmZDdhODQ3OGRhYTJlNWI2ZjcxMjU5NjgxZDhjZmViYWVhMjI=
13
+ NzE3ODIyNWU1ZTRiNWE4YzliNzVhNGI2MDg0NGQ4MTlkMGZmYzNkYzE1NjBh
14
+ Nzc1NWQ3ZDg0ZmRhYWJjODYzYjQ5YWZlYmFiZmE4NTQ2ZmFlY2M1M2Q5NTUy
15
+ YTkxOTYzNjEyODc0YjhmZTc0MTAzNzZhY2Y5NzUwMTkyODExNGE=
data/README.md CHANGED
@@ -3,14 +3,14 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/lanekit.png)](http://badge.fury.io/rb/lanekit)
4
4
 
5
5
  LaneKit is an iOS Objective-C code generator for integration with [RestKit](https://github.com/RestKit/RestKit). It generates
6
- models, resource providers, and full iOS apps with mimimal effort. There is support for unit testing with SenTestingKit
6
+ models, resource providers, table views, and full iOS apps with mimimal effort. There is support for unit testing with SenTestingKit
7
7
  including fixtures and tests. LaneKit is a command line app written in Ruby and packaged as a Ruby Gem.
8
8
 
9
9
  - [Source code for LaneKit](https://github.com/LarryAasen/LaneKit/zipball/master) from [GitHub](http://github.com).
10
10
  - Questions? [Stack Overflow](http://stackoverflow.com/questions/tagged/lanekit) is the best place to find answers.
11
11
 
12
12
  ## Benefits
13
- * properly implemented models and resource providers
13
+ * properly implemented models, resource providers, and table views
14
14
  * easy integration with RestKit
15
15
  * consistent Objective-C code
16
16
  * unit tests with OCUnit (SenTestingKit)
@@ -276,10 +276,22 @@ and here is a unit test that was generated in Models/VideoTest.m by LaneKit:
276
276
  Integrating client project
277
277
  clean /Users/larry/Projects/lanekit/SportsFrames/SportsFrames.xcworkspace
278
278
 
279
+ ### Add a new UITableViewController called ContentsViewController
280
+ This will display the Contents model that is a list of videos.
281
+
282
+ $ lanekit generate tableviewcontroller Contents -r LKFeedCell
283
+
284
+ create SportsFrames/SportsFrames/Controllers/ContentsViewController.h
285
+ create SportsFrames/SportsFrames/Controllers/ContentsViewController.m
286
+ create SportsFrames/SportsFrames/Views/LKFeedCell.h
287
+ create SportsFrames/SportsFrames/Views/LKFeedCell.m
288
+
279
289
  ### Add the [Urban Airship](https://github.com/urbanairship/ios-library) CocoaPods Pod to the project.
280
290
 
281
291
  $ lanekit generate pod UrbanAirship-iOS-SDK
282
292
 
293
+ Installing UrbanAirship-iOS-SDK (3.0.1)
294
+
283
295
  ### Sample App
284
296
  The SportsFrames app is a fully functional sample app using RestKit created to demonstrate the use of LaneKit in a real world app. It
285
297
  has models and resource providers that are generated from LaneKit.
@@ -22,6 +22,7 @@ module LaneKit
22
22
 
23
23
  @attributes = []
24
24
  @any_relationships = false
25
+ @first_string_attribute = nil
25
26
 
26
27
  attributes.each {|attribute|
27
28
  name, type, relationship = attribute.split(":")
@@ -37,6 +38,7 @@ module LaneKit
37
38
  :unit_test_assert => LaneKit.objective_c_type_unit_test_assert(@model_name, name, type)
38
39
  }
39
40
  @any_relationships = relationship ? true : @any_relationships
41
+ @first_string_attribute = name if !@first_string_attribute && type == 'string'
40
42
  }
41
43
 
42
44
  @lanefile = LaneKit::Lanefile.new
@@ -46,9 +46,9 @@ module LaneKit
46
46
  @provider_base_file_name = "LKResourceProvider"
47
47
 
48
48
  @provider_file_name = @provider_name
49
-
50
- @providers_folder = "#{@lanefile.app_project_name}/#{@lanefile.app_project_name}/Controllers"
51
- @controllers_group = "#{@lanefile.app_project_name}/Controllers"
49
+
50
+ @providers_folder = LaneKit.controllers_folder(@lanefile)
51
+ @controllers_group = LaneKit.controllers_group(@lanefile)
52
52
  end
53
53
 
54
54
  def create_provider_folders
@@ -0,0 +1,110 @@
1
+ module LaneKit
2
+ class Generate
3
+
4
+ include Thor::Actions
5
+
6
+ desc "tableviewcontroller MODEL_NAME [-r LKFeedCell]", "Generates an Objective-C UITableViewController"
7
+ long_desc <<-LONGDESC
8
+ Generates the Objective-C code for a UITableViewController.\n
9
+ MODEL_NAME: the name of the model used to supply data to the controller. Will create <MODEL_NAME>ViewController class.\n
10
+ -r LKFeedCell: register the LKFeedCell class as the class for use in creating new table cells.
11
+ LONGDESC
12
+ option :register, :required => false, :aliases => "-r", :banner => "register the LKFeedCell class as the class for use in creating new table cells"
13
+ def tableviewcontroller(model_name)
14
+ @using_core_data = options[:use_core_data]
15
+ @register_class = options[:register]
16
+
17
+ error = self.validate_register_class(@register_class)
18
+ if error
19
+ say error, :red
20
+ return
21
+ end
22
+
23
+ @model_name = LaneKit.derive_model_name(model_name)
24
+ @lanefile = LaneKit::Lanefile.new
25
+ lanefile_error = LaneKit.validate_lanefile(@lanefile)
26
+ if lanefile_error
27
+ say lanefile_error, :red
28
+ return
29
+ end
30
+ @app_project_path = @lanefile.app_project_path
31
+
32
+ self.initialize_tvc
33
+ self.create_tvc_files
34
+ self.create_register_files
35
+ end
36
+
37
+ no_commands do
38
+
39
+ def initialize_tvc
40
+ @model_class_name = LaneKit.derive_class_name(@model_name)
41
+ @model_file_name = LaneKit.derive_file_name(@model_name)
42
+ @controller_class_name = "#{LaneKit.derive_class_name(@model_name)}ViewController"
43
+ @provider_class_name = "#{LaneKit.derive_class_name(@model_name)}Provider"
44
+ @provider_file_name = @provider_class_name
45
+ @controller_file_name = @controller_class_name
46
+ @controllers_folder = LaneKit.controllers_folder(@lanefile)
47
+ @controllers_group = LaneKit.controllers_group(@lanefile)
48
+ @views_folder = LaneKit.views_folder(@lanefile)
49
+ @views_group = LaneKit.views_group(@lanefile)
50
+
51
+ if !@register_class
52
+ @register_class = "UITableViewCell"
53
+ end
54
+ end
55
+
56
+ def validate_register_class(class_name)
57
+ if class_name
58
+ if class_name.length < 2
59
+ return "class name must be at least two characters long"
60
+ elsif class_name.include? " "
61
+ return "class name cannot include spaces"
62
+ elsif class_name != "LKFeedCell"
63
+ return "class name must be LKFeedCell"
64
+ end
65
+ end
66
+ return nil
67
+ end
68
+
69
+ def create_tvc_files
70
+ # 1) Create the table view controller
71
+ # Create the .h file
72
+ source = "tvc.h.erb"
73
+ target_file = "#{@controller_file_name}.h"
74
+ target = File.join(@controllers_folder, target_file)
75
+ template(source, target, @@template_opts)
76
+
77
+ LaneKit.add_file_to_project("Controllers/"+target_file, @controllers_group, @app_project_path)
78
+
79
+ # Create the .m file
80
+ source = "tvc.m.erb"
81
+ target_file = "#{@controller_file_name}.m"
82
+ target = File.join(@controllers_folder, target_file)
83
+ template(source, target, @@template_opts)
84
+
85
+ LaneKit.add_file_to_project("Controllers/"+target_file, @controllers_group, @app_project_path, "@all")
86
+ end
87
+
88
+ def create_register_files
89
+ return if @register_class != "LKFeedCell"
90
+
91
+ # 1) Create the LKFeedCell class in the Views group
92
+ # Create the .h file
93
+ source = "#{@register_class}.h.erb"
94
+ target_file = "#{@register_class}.h"
95
+ target = File.join(@views_folder, target_file)
96
+ template(source, target, @@template_opts)
97
+
98
+ LaneKit.add_file_to_project("Views/"+target_file, @views_group, @app_project_path)
99
+
100
+ # Create the .m file
101
+ source = "#{@register_class}.m.erb"
102
+ target_file = "#{@register_class}.m"
103
+ target = File.join(@views_folder, target_file)
104
+ template(source, target, @@template_opts)
105
+
106
+ LaneKit.add_file_to_project("Views/"+target_file, @views_group, @app_project_path, "@all")
107
+ end
108
+ end
109
+ end
110
+ end
@@ -38,6 +38,7 @@ class LaneKit::Generate < Thor
38
38
 
39
39
  require 'lanekit/generate/model'
40
40
  require 'lanekit/generate/provider'
41
+ require 'lanekit/generate/tableviewcontroller'
41
42
  require 'lanekit/generate/urbanairship'
42
43
 
43
44
  class_option :use_core_data, :type => :boolean, :default => false, :banner => "generate code compatible with Core Data (the default is false)", :aliases => "-c" # option --use_core_data=true
@@ -1,3 +1,3 @@
1
1
  module LaneKit
2
- VERSION = "0.3.5"
2
+ VERSION = "0.4.1"
3
3
  end
data/lib/lanekit.rb CHANGED
@@ -234,6 +234,21 @@ module LaneKit
234
234
  end
235
235
  end
236
236
 
237
+ def self.controllers_folder(lanefile)
238
+ "#{lanefile.app_project_name}/#{lanefile.app_project_name}/Controllers"
239
+ end
240
+
241
+ def self.controllers_group(lanefile)
242
+ "#{lanefile.app_project_name}/Controllers"
243
+ end
244
+
245
+ def self.views_folder(lanefile)
246
+ "#{lanefile.app_project_name}/#{lanefile.app_project_name}/Views"
247
+ end
248
+
249
+ def self.views_group(lanefile)
250
+ "#{lanefile.app_project_name}/Views"
251
+ end
237
252
  end
238
253
 
239
254
  module LaneKit
@@ -0,0 +1,16 @@
1
+ //
2
+ // <%=@register_class%>.h
3
+ //
4
+ // This model was created on <%=config[:generate_date]%> by LaneKit v<%=config[:lanekit_version]%>.
5
+ //
6
+ // The following LaneKit command was used to generate this file:
7
+ // <%=config[:command]%>
8
+ //
9
+
10
+ #import <UIKit/UIKit.h>
11
+
12
+ @interface <%=@register_class%> : UITableViewCell
13
+
14
+ + (CGFloat)cellHeight;
15
+
16
+ @end
@@ -0,0 +1,148 @@
1
+ //
2
+ // <%=@register_class%>.m
3
+ //
4
+ // This model was created on <%=config[:generate_date]%> by LaneKit v<%=config[:lanekit_version]%>.
5
+ //
6
+ // The following LaneKit command was used to generate this file:
7
+ // <%=config[:command]%>
8
+ //
9
+
10
+ #import "<%=@register_class%>.h"
11
+ #import <QuartzCore/CALayer.h>
12
+ #import <QuartzCore/CAGradientLayer.h>
13
+
14
+ static CGFloat cellHeight = 178;
15
+
16
+ static CGFloat contentMarginTop = 5;
17
+ static CGFloat contentMarginRight = 5;
18
+ static CGFloat contentMarginBottom = 5;
19
+ static CGFloat contentMarginLeft = 5;
20
+
21
+ static CGFloat textMarginRight = 15;
22
+ static CGFloat textMarginBottom = 10;
23
+ static CGFloat textMarginLeft = 15;
24
+
25
+ @interface <%=@register_class%> ()
26
+ {
27
+ CAGradientLayer *gradientLayer;
28
+ UIView *overlayContainer;
29
+ }
30
+
31
+ -(void)addOverlayToView1:(UIView *)view;
32
+ -(void)addOverlayToView2:(UIView *)view;
33
+
34
+ @end
35
+
36
+ @implementation <%=@register_class%>
37
+
38
+ + (CGFloat)cellHeight
39
+ {
40
+ return cellHeight;
41
+ }
42
+
43
+ - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
44
+ {
45
+ self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
46
+ if (self) {
47
+ self.imageView.contentMode = UIViewContentModeScaleAspectFit;
48
+
49
+ self.textLabel.backgroundColor = [UIColor clearColor];
50
+ self.textLabel.textColor = [UIColor whiteColor];
51
+ self.textLabel.font = [UIFont boldSystemFontOfSize:14];
52
+ self.textLabel.numberOfLines = 0;
53
+ }
54
+ return self;
55
+ }
56
+
57
+ - (void)makeTopSubview:(UIView *)view
58
+ {
59
+ UIView *superview = [view superview];
60
+ [view removeFromSuperview];
61
+ [superview addSubview:view];
62
+ }
63
+
64
+ - (void)makeTopSubview
65
+ {
66
+ [self makeTopSubview:self];
67
+ }
68
+
69
+ - (void)layoutSubviews
70
+ {
71
+ [super layoutSubviews];
72
+
73
+ CGRect bounds = [self bounds];
74
+ bounds.origin.x = contentMarginLeft;
75
+ bounds.origin.y = contentMarginTop;
76
+ bounds.size.width -= contentMarginRight + contentMarginLeft;
77
+ bounds.size.height -= contentMarginTop + contentMarginBottom;
78
+ [self.contentView setFrame:bounds];
79
+
80
+ if (self.imageView)
81
+ {
82
+ CGRect imageFrame = self.imageView.frame;
83
+ imageFrame.size = bounds.size;
84
+ imageFrame.size.width -= 10;
85
+ imageFrame.origin.x = (bounds.size.width - imageFrame.size.width) / 2.0;
86
+ imageFrame.origin.y = 0;
87
+ self.imageView.frame = CGRectIntegral(imageFrame);
88
+
89
+ self.imageView.layer.cornerRadius = 5;
90
+ self.imageView.layer.masksToBounds= YES;
91
+
92
+ [self addOverlayToView1:self.imageView];
93
+ }
94
+
95
+ CGRect textFrame = self.textLabel.frame;
96
+ textFrame.size.width = bounds.size.width - (textMarginRight + textMarginLeft);
97
+ textFrame.size.height = 100;
98
+ textFrame.origin.x = textMarginRight;
99
+ self.textLabel.frame = textFrame;
100
+ [self.textLabel sizeToFit];
101
+
102
+ textFrame = self.textLabel.frame;
103
+ textFrame.origin.y = bounds.size.height - textFrame.size.height - textMarginBottom;
104
+ self.textLabel.frame = textFrame;
105
+
106
+ [self makeTopSubview:self.textLabel];
107
+ }
108
+
109
+ -(void)addOverlayToView1:(UIView *)view
110
+ {
111
+ if (!gradientLayer)
112
+ {
113
+ gradientLayer = [CAGradientLayer layer];
114
+ [view.layer addSublayer:gradientLayer];
115
+ }
116
+
117
+ CGRect frame = view.bounds;
118
+ frame.size.height = frame.size.height / 2;
119
+ frame.origin.y = frame.size.height;
120
+ gradientLayer.frame = CGRectIntegral(frame);
121
+
122
+ gradientLayer.colors = [NSArray arrayWithObjects:
123
+ (id)[UIColor colorWithWhite:1.0f alpha:0.0f].CGColor,
124
+ (id)[UIColor colorWithWhite:0.0f alpha:0.3f].CGColor,
125
+ (id)[UIColor colorWithWhite:0.0f alpha:0.7f].CGColor,
126
+ nil];
127
+
128
+ gradientLayer.locations = @[[NSNumber numberWithFloat:0.25f], [NSNumber numberWithFloat:0.5f], [NSNumber numberWithFloat:0.7f]];
129
+
130
+ gradientLayer.borderWidth = 0;
131
+ }
132
+
133
+ -(void)addOverlayToView2:(UIView *)view
134
+ {
135
+ if (!overlayContainer)
136
+ {
137
+ overlayContainer = [[UIView alloc] initWithFrame:view.bounds];
138
+ overlayContainer.backgroundColor = [UIColor clearColor];
139
+
140
+ CAGradientLayer *gradient = [CAGradientLayer layer];
141
+ gradient.frame = overlayContainer.bounds;
142
+ gradient.colors = @[(id)[[UIColor blackColor] CGColor], (id)[[UIColor clearColor] CGColor]];
143
+ [overlayContainer.layer insertSublayer:gradient atIndex:0];
144
+ [view addSubview:overlayContainer];
145
+ }
146
+ }
147
+
148
+ @end
@@ -8,12 +8,10 @@
8
8
 
9
9
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
10
10
  {
11
- // Override point for customization after application launch.
12
- if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
13
- UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
14
- UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
15
- splitViewController.delegate = (id)navigationController.topViewController;
16
- }
11
+ UIViewController *controller = UIViewController.new;
12
+ [(UINavigationController *)self.window.rootViewController pushViewController:controller animated:NO];
13
+ controller.navigationItem.title = @"lanekit-ios-project";
14
+
17
15
  return YES;
18
16
  }
19
17
 
@@ -1,120 +1,10 @@
1
1
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4510" systemVersion="12F45" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="H1p-Uh-vWS">
2
+ <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4514" systemVersion="12F45" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="vC3-pB-5Vb">
3
3
  <dependencies>
4
4
  <deployment defaultVersion="1536" identifier="iOS"/>
5
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/>
5
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3746"/>
6
6
  </dependencies>
7
7
  <scenes>
8
- <!--Navigation Controller-->
9
- <scene sceneID="pY4-Hu-kfo">
10
- <objects>
11
- <navigationController id="RMx-3f-FxP" sceneMemberID="viewController">
12
- <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="Pmd-2v-anx">
13
- <autoresizingMask key="autoresizingMask"/>
14
- </navigationBar>
15
- <connections>
16
- <segue destination="7bK-jq-Zjz" kind="relationship" relationship="rootViewController" id="tsl-Nk-0bq"/>
17
- </connections>
18
- </navigationController>
19
- <placeholder placeholderIdentifier="IBFirstResponder" id="8fS-aE-onr" sceneMemberID="firstResponder"/>
20
- </objects>
21
- <point key="canvasLocation" x="448" y="-630"/>
22
- </scene>
23
- <!--Detail View Controller - Detail-->
24
- <scene sceneID="yUG-lL-AsK">
25
- <objects>
26
- <viewController title="Detail" id="JEX-9P-axG" customClass="LKDetailViewController" sceneMemberID="viewController">
27
- <layoutGuides>
28
- <viewControllerLayoutGuide type="top" id="8wd-7d-mFo"/>
29
- <viewControllerLayoutGuide type="bottom" id="gMh-B7-yhi"/>
30
- </layoutGuides>
31
- <view key="view" contentMode="scaleToFill" id="svH-Pt-448">
32
- <rect key="frame" x="0.0" y="0.0" width="703" height="768"/>
33
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
34
- <subviews>
35
- <label clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Detail view content goes here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="0XM-y9-sOw">
36
- <rect key="frame" x="20" y="376" width="663" height="17"/>
37
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
38
- <fontDescription key="fontDescription" type="system" size="system"/>
39
- <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
40
- <nil key="highlightedColor"/>
41
- </label>
42
- </subviews>
43
- <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
44
- <constraints>
45
- <constraint firstItem="0XM-y9-sOw" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leading" constant="20" symbolic="YES" id="Tsc-yG-G1q"/>
46
- <constraint firstItem="0XM-y9-sOw" firstAttribute="centerY" secondItem="svH-Pt-448" secondAttribute="centerY" id="jWN-iV-94e"/>
47
- <constraint firstAttribute="trailing" secondItem="0XM-y9-sOw" secondAttribute="trailing" constant="20" symbolic="YES" id="tHV-ZD-HQj"/>
48
- </constraints>
49
- <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
50
- </view>
51
- <toolbarItems/>
52
- <navigationItem key="navigationItem" title="Detail" id="mOI-FS-AaM"/>
53
- <connections>
54
- <outlet property="detailDescriptionLabel" destination="0XM-y9-sOw" id="deQ-Na-JPF"/>
55
- </connections>
56
- </viewController>
57
- <placeholder placeholderIdentifier="IBFirstResponder" id="FJe-Yq-33r" sceneMemberID="firstResponder"/>
58
- </objects>
59
- <point key="canvasLocation" x="448" y="248"/>
60
- </scene>
61
- <!--Split View Controller-->
62
- <scene sceneID="Nki-YV-4Qg">
63
- <objects>
64
- <splitViewController id="H1p-Uh-vWS" sceneMemberID="viewController">
65
- <toolbarItems/>
66
- <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackOpaque"/>
67
- <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
68
- <connections>
69
- <segue destination="RMx-3f-FxP" kind="relationship" relationship="masterViewController" id="BlO-5A-QYV"/>
70
- <segue destination="vC3-pB-5Vb" kind="relationship" relationship="detailViewController" id="Tll-UG-LXB"/>
71
- </connections>
72
- </splitViewController>
73
- <placeholder placeholderIdentifier="IBFirstResponder" id="cZU-Oi-B1e" sceneMemberID="firstResponder"/>
74
- </objects>
75
- <point key="canvasLocation" x="-687" y="-630"/>
76
- </scene>
77
- <!--Master View Controller - Master-->
78
- <scene sceneID="smW-Zh-WAh">
79
- <objects>
80
- <tableViewController title="Master" clearsSelectionOnViewWillAppear="NO" id="7bK-jq-Zjz" customClass="LKMasterViewController" sceneMemberID="viewController">
81
- <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="r7i-6Z-zg0">
82
- <rect key="frame" x="0.0" y="0.0" width="320" height="768"/>
83
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
84
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
85
- <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
86
- <prototypes>
87
- <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="Arm-wq-HPj" style="IBUITableViewCellStyleDefault" id="WCw-Qf-5nD">
88
- <rect key="frame" x="0.0" y="86" width="320" height="44"/>
89
- <autoresizingMask key="autoresizingMask"/>
90
- <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCw-Qf-5nD" id="ydd-e1-P1g">
91
- <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
92
- <autoresizingMask key="autoresizingMask"/>
93
- <subviews>
94
- <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Arm-wq-HPj">
95
- <rect key="frame" x="15" y="0.0" width="290" height="43"/>
96
- <autoresizingMask key="autoresizingMask"/>
97
- <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
98
- <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
99
- <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
100
- </label>
101
- </subviews>
102
- </tableViewCellContentView>
103
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
104
- </tableViewCell>
105
- </prototypes>
106
- <sections/>
107
- <connections>
108
- <outlet property="dataSource" destination="7bK-jq-Zjz" id="Gho-Na-rnu"/>
109
- <outlet property="delegate" destination="7bK-jq-Zjz" id="RA6-mI-bju"/>
110
- </connections>
111
- </tableView>
112
- <navigationItem key="navigationItem" title="Master" id="Zdf-7t-Un8"/>
113
- </tableViewController>
114
- <placeholder placeholderIdentifier="IBFirstResponder" id="Rux-fX-hf1" sceneMemberID="firstResponder"/>
115
- </objects>
116
- <point key="canvasLocation" x="859" y="-631"/>
117
- </scene>
118
8
  <!--Navigation Controller-->
119
9
  <scene sceneID="r7l-gg-dq7">
120
10
  <objects>
@@ -122,13 +12,10 @@
122
12
  <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="DjV-YW-jjY">
123
13
  <autoresizingMask key="autoresizingMask"/>
124
14
  </navigationBar>
125
- <connections>
126
- <segue destination="JEX-9P-axG" kind="relationship" relationship="rootViewController" id="GKi-kA-LjT"/>
127
- </connections>
128
15
  </navigationController>
129
16
  <placeholder placeholderIdentifier="IBFirstResponder" id="SLD-UC-DBI" userLabel="First Responder" sceneMemberID="firstResponder"/>
130
17
  </objects>
131
- <point key="canvasLocation" x="-366" y="248"/>
18
+ <point key="canvasLocation" x="-1074" y="-1548"/>
132
19
  </scene>
133
20
  </scenes>
134
21
  <simulatedMetricsContainer key="defaultSimulatedMetrics">