ovaltine 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +17 -0
  3. data/CHANGELOG.md +3 -0
  4. data/LICENSE +22 -0
  5. data/README.md +15 -0
  6. data/Rakefile +5 -0
  7. data/TODO.md +6 -0
  8. data/bin/ovaltine +54 -0
  9. data/features/fixtures/Sample/Sample/Base.lproj/Main.storyboard +125 -0
  10. data/features/fixtures/Sample/Sample/DMMAppDelegate.h +15 -0
  11. data/features/fixtures/Sample/Sample/DMMAppDelegate.m +46 -0
  12. data/features/fixtures/Sample/Sample/DMMViewController.h +13 -0
  13. data/features/fixtures/Sample/Sample/DMMViewController.m +29 -0
  14. data/features/fixtures/Sample/Sample/Images.xcassets/AppIcon.appiconset/Contents.json +23 -0
  15. data/features/fixtures/Sample/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json +23 -0
  16. data/features/fixtures/Sample/Sample/Sample-Info.plist +40 -0
  17. data/features/fixtures/Sample/Sample/Sample-Prefix.pch +16 -0
  18. data/features/fixtures/Sample/Sample/en.lproj/InfoPlist.strings +2 -0
  19. data/features/fixtures/Sample/Sample/main.m +18 -0
  20. data/features/fixtures/Sample/Sample.xcodeproj/project.pbxproj +472 -0
  21. data/features/fixtures/Sample/Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  22. data/features/fixtures/Sample/SampleTests/SampleTests-Info.plist +22 -0
  23. data/features/fixtures/Sample/SampleTests/SampleTests.m +34 -0
  24. data/features/fixtures/Sample/SampleTests/en.lproj/InfoPlist.strings +2 -0
  25. data/lib/ovaltine/objc/storyboard_formatter.rb +139 -0
  26. data/lib/ovaltine/objc/storyboard_templates.rb +59 -0
  27. data/lib/ovaltine/storyboard.rb +51 -0
  28. data/lib/ovaltine/version.rb +3 -0
  29. data/lib/ovaltine.rb +51 -0
  30. data/ovaltine.gemspec +28 -0
  31. data/specs/storyboard_formatter_spec.rb +29 -0
  32. data/specs/storyboard_spec.rb +36 -0
  33. metadata +134 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 27a15d8a6cfd8028b6ed757858fec465d9bf2afc
4
+ data.tar.gz: 2b2502d9fbb12440abbe37b224116d649695388d
5
+ SHA512:
6
+ metadata.gz: 64929cba79d0660909ac0b17a35c48e9c3eb34a4b653cd9278d2e8766423182cd09845b15f58a28091fed4934e519c3a1d7461d92894f08d7fbf5037012449c8
7
+ data.tar.gz: 3689f04525b55b8a58fdbbafc84c065ed2720c07a407dd812c3991523eadb5486772b871d271e3bd543d77cb9aead1ba9fcf89a86a816998d6bb41a77950a2f6
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ language: ruby
2
+
3
+ #travis workaround for bundler failing on 1.8.7
4
+ before_install:
5
+ - gem update --system 2.1.11
6
+ - gem --version
7
+
8
+ install:
9
+ - bundle install
10
+
11
+ rvm:
12
+ - 2.1.0
13
+ - 1.9.3
14
+ - 1.8.7
15
+
16
+ script: rake spec
17
+
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ # 1.0.0
2
+
3
+ - Initial release!
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Delisa Mason
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # Ovaltine
2
+
3
+ The chocolatey treat which makes your code clean! Yum!
4
+
5
+ `Ovaltine` scans your `storyboard` files and generates constant files for view controller, segue, and reuse identifiers. For instance, if you have a storyboard called `Main` and a view controller with the Storyboard ID `authenticationViewController`, then you can instantiate that controller with something like `[ABCMainStoryboard instantiateAuthenticationViewController]`. No mistyping, plenty of chocolately goodness.
6
+
7
+ # Installation
8
+
9
+ ```
10
+ gem install ovaltine
11
+ ```
12
+
13
+ # Usage
14
+
15
+ Run `ovaltine` from the command line
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+
2
+ desc "Run unit tests"
3
+ task :spec do
4
+ sh 'bacon specs/*_spec.rb'
5
+ end
data/TODO.md ADDED
@@ -0,0 +1,6 @@
1
+
2
+ ## TODO
3
+
4
+ * Support adding generated files to projects (with minimal dependencies, for easier tool integration)
5
+ * Add switch for language preferences
6
+ * Add support for OS X storyboards
data/bin/ovaltine ADDED
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if RUBY_VERSION < '1.8.7'
4
+ abort "error: Ovaltine requires Ruby 1.8.7 or higher."
5
+ end
6
+
7
+ if $0 == __FILE__
8
+ $:.unshift File.expand_path('../../lib', __FILE__)
9
+ end
10
+
11
+ require 'ovaltine'
12
+ require 'optparse'
13
+
14
+ parser_options = {
15
+ :output_directory => '.',
16
+ :prefix => ''
17
+ }
18
+
19
+ def exit_with_error(message)
20
+ $stderr.puts "[!] #{message}"
21
+ $stderr.puts opts
22
+ exit 1
23
+ end
24
+
25
+ OptionParser.new do |opts|
26
+ opts.banner = "Usage: ovaltine [options] PATH"
27
+ opts.on('-p', '--project PROJECT', 'Specify path to .xcodeproj directory') do |path|
28
+ parser_options[:project] = path
29
+ end
30
+ opts.on('-o', '--output DIR', 'Specify output directory. Default is pwd') do |path|
31
+ parser_options[:output_directory] = path
32
+ end
33
+ opts.on('--prefix PREFIX', 'Class prefix for generated files') do |prefix|
34
+ parser_options[:prefix] = prefix
35
+ end
36
+ opts.on('--auto-add', 'Automatically add generated files to the Xcode project') do
37
+ parser_options[:auto_add] = true
38
+ end
39
+ opts.on('--auto-replace', 'Automatically replace files with the same name as generated files') do
40
+ parser_options[:auto_replace] = true
41
+ end
42
+ opts.on_tail('-h', '--help', 'Show this message') { puts opts; exit }
43
+ opts.on_tail("-v", "--version", "Show version") { puts Ovaltine::VERSION; exit }
44
+ opts.parse!
45
+ end
46
+
47
+ project_path = ARGV.last
48
+ if !project_path
49
+ exit_with_error("No file path specified")
50
+ elsif !File.exist?(project_path)
51
+ exit_with_error("File not found for path: #{project_path}")
52
+ end
53
+
54
+ Ovaltine.create_constant_files(project_path, parser_options)
@@ -0,0 +1,125 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="Rge-Ae-WFm">
3
+ <dependencies>
4
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
5
+ </dependencies>
6
+ <scenes>
7
+ <!--View Controller-->
8
+ <scene sceneID="ufC-wZ-h7g">
9
+ <objects>
10
+ <viewController storyboardIdentifier="sampleViewController" id="vXZ-lx-hvc" customClass="DMMViewController" sceneMemberID="viewController">
11
+ <layoutGuides>
12
+ <viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
13
+ <viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
14
+ </layoutGuides>
15
+ <view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
16
+ <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
17
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
18
+ <subviews>
19
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yMY-0R-ijt">
20
+ <rect key="frame" x="137" y="359" width="46" height="30"/>
21
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
22
+ <state key="normal" title="Button">
23
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
24
+ </state>
25
+ <connections>
26
+ <segue destination="5au-Nw-4lc" kind="push" identifier="starterSegueIdentifier" id="1Jc-Bc-ntv"/>
27
+ </connections>
28
+ </button>
29
+ </subviews>
30
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
31
+ </view>
32
+ <navigationItem key="navigationItem" id="6dJ-W9-jgX"/>
33
+ </viewController>
34
+ <placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
35
+ </objects>
36
+ <point key="canvasLocation" x="621" y="112"/>
37
+ </scene>
38
+ <!--Table View Controller-->
39
+ <scene sceneID="js1-cK-hm4">
40
+ <objects>
41
+ <tableViewController storyboardIdentifier="listViewController" id="5au-Nw-4lc" sceneMemberID="viewController">
42
+ <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="gae-V3-cAi">
43
+ <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
44
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
45
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
46
+ <prototypes>
47
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="sampleCellIdentifier" id="Na8-u9-vI1">
48
+ <rect key="frame" x="0.0" y="86" width="320" height="44"/>
49
+ <autoresizingMask key="autoresizingMask"/>
50
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Na8-u9-vI1" id="5hw-Zc-gxr">
51
+ <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
52
+ <autoresizingMask key="autoresizingMask"/>
53
+ </tableViewCellContentView>
54
+ </tableViewCell>
55
+ </prototypes>
56
+ <connections>
57
+ <outlet property="dataSource" destination="5au-Nw-4lc" id="pgF-lu-lId"/>
58
+ <outlet property="delegate" destination="5au-Nw-4lc" id="NRK-mw-uWQ"/>
59
+ </connections>
60
+ </tableView>
61
+ <navigationItem key="navigationItem" id="DmE-ek-7YY"/>
62
+ </tableViewController>
63
+ <placeholder placeholderIdentifier="IBFirstResponder" id="L8a-Lh-xxy" userLabel="First Responder" sceneMemberID="firstResponder"/>
64
+ </objects>
65
+ <point key="canvasLocation" x="959" y="112"/>
66
+ </scene>
67
+ <!--Collection View Controller-->
68
+ <scene sceneID="P5w-Ff-Sbg">
69
+ <objects>
70
+ <collectionViewController storyboardIdentifier="collectionViewController" autoresizesArchivedViewToFullSize="NO" id="Ng9-Ce-lhk" sceneMemberID="viewController">
71
+ <collectionView key="view" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" minimumZoomScale="0.0" maximumZoomScale="0.0" dataMode="prototypes" id="ZVh-E3-eOP">
72
+ <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
73
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
74
+ <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="5cp-KN-Cx8">
75
+ <size key="itemSize" width="50" height="50"/>
76
+ <size key="headerReferenceSize" width="0.0" height="0.0"/>
77
+ <size key="footerReferenceSize" width="0.0" height="0.0"/>
78
+ <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
79
+ </collectionViewFlowLayout>
80
+ <cells>
81
+ <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="squareCellIdentifier" id="yyf-Ud-STC">
82
+ <rect key="frame" x="0.0" y="0.0" width="50" height="50"/>
83
+ <autoresizingMask key="autoresizingMask"/>
84
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
85
+ <rect key="frame" x="0.0" y="0.0" width="50" height="50"/>
86
+ <autoresizingMask key="autoresizingMask"/>
87
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
88
+ </view>
89
+ </collectionViewCell>
90
+ </cells>
91
+ <connections>
92
+ <outlet property="dataSource" destination="Ng9-Ce-lhk" id="IK5-dX-2DS"/>
93
+ <outlet property="delegate" destination="Ng9-Ce-lhk" id="ZLV-Ol-7La"/>
94
+ </connections>
95
+ </collectionView>
96
+ </collectionViewController>
97
+ <placeholder placeholderIdentifier="IBFirstResponder" id="DNz-X4-ZRW" userLabel="First Responder" sceneMemberID="firstResponder"/>
98
+ </objects>
99
+ <point key="canvasLocation" x="1298" y="112"/>
100
+ </scene>
101
+ <!--Navigation Controller-->
102
+ <scene sceneID="i23-07-0sf">
103
+ <objects>
104
+ <navigationController automaticallyAdjustsScrollViewInsets="NO" id="Rge-Ae-WFm" sceneMemberID="viewController">
105
+ <toolbarItems/>
106
+ <navigationBar key="navigationBar" contentMode="scaleToFill" id="gRu-BS-tP3">
107
+ <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
108
+ <autoresizingMask key="autoresizingMask"/>
109
+ </navigationBar>
110
+ <nil name="viewControllers"/>
111
+ <connections>
112
+ <segue destination="vXZ-lx-hvc" kind="relationship" relationship="rootViewController" id="fVy-EK-YUg"/>
113
+ </connections>
114
+ </navigationController>
115
+ <placeholder placeholderIdentifier="IBFirstResponder" id="syy-dE-biK" userLabel="First Responder" sceneMemberID="firstResponder"/>
116
+ </objects>
117
+ <point key="canvasLocation" x="65" y="780"/>
118
+ </scene>
119
+ </scenes>
120
+ <simulatedMetricsContainer key="defaultSimulatedMetrics">
121
+ <simulatedStatusBarMetrics key="statusBar"/>
122
+ <simulatedOrientationMetrics key="orientation"/>
123
+ <simulatedScreenMetrics key="destination" type="retina4"/>
124
+ </simulatedMetricsContainer>
125
+ </document>
@@ -0,0 +1,15 @@
1
+ //
2
+ // DMMAppDelegate.h
3
+ // Sample
4
+ //
5
+ // Created by Delisa Mason on 8/2/14.
6
+ // Copyright (c) 2014 Delisa Mason. All rights reserved.
7
+ //
8
+
9
+ #import <UIKit/UIKit.h>
10
+
11
+ @interface DMMAppDelegate : UIResponder <UIApplicationDelegate>
12
+
13
+ @property (strong, nonatomic) UIWindow *window;
14
+
15
+ @end
@@ -0,0 +1,46 @@
1
+ //
2
+ // DMMAppDelegate.m
3
+ // Sample
4
+ //
5
+ // Created by Delisa Mason on 8/2/14.
6
+ // Copyright (c) 2014 Delisa Mason. All rights reserved.
7
+ //
8
+
9
+ #import "DMMAppDelegate.h"
10
+
11
+ @implementation DMMAppDelegate
12
+
13
+ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
14
+ {
15
+ // Override point for customization after application launch.
16
+ return YES;
17
+ }
18
+
19
+ - (void)applicationWillResignActive:(UIApplication *)application
20
+ {
21
+ // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
22
+ // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
23
+ }
24
+
25
+ - (void)applicationDidEnterBackground:(UIApplication *)application
26
+ {
27
+ // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
28
+ // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
29
+ }
30
+
31
+ - (void)applicationWillEnterForeground:(UIApplication *)application
32
+ {
33
+ // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
34
+ }
35
+
36
+ - (void)applicationDidBecomeActive:(UIApplication *)application
37
+ {
38
+ // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
39
+ }
40
+
41
+ - (void)applicationWillTerminate:(UIApplication *)application
42
+ {
43
+ // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
44
+ }
45
+
46
+ @end
@@ -0,0 +1,13 @@
1
+ //
2
+ // DMMViewController.h
3
+ // Sample
4
+ //
5
+ // Created by Delisa Mason on 8/2/14.
6
+ // Copyright (c) 2014 Delisa Mason. All rights reserved.
7
+ //
8
+
9
+ #import <UIKit/UIKit.h>
10
+
11
+ @interface DMMViewController : UIViewController
12
+
13
+ @end
@@ -0,0 +1,29 @@
1
+ //
2
+ // DMMViewController.m
3
+ // Sample
4
+ //
5
+ // Created by Delisa Mason on 8/2/14.
6
+ // Copyright (c) 2014 Delisa Mason. All rights reserved.
7
+ //
8
+
9
+ #import "DMMViewController.h"
10
+
11
+ @interface DMMViewController ()
12
+
13
+ @end
14
+
15
+ @implementation DMMViewController
16
+
17
+ - (void)viewDidLoad
18
+ {
19
+ [super viewDidLoad];
20
+ // Do any additional setup after loading the view, typically from a nib.
21
+ }
22
+
23
+ - (void)didReceiveMemoryWarning
24
+ {
25
+ [super didReceiveMemoryWarning];
26
+ // Dispose of any resources that can be recreated.
27
+ }
28
+
29
+ @end
@@ -0,0 +1,23 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "idiom" : "iphone",
5
+ "size" : "29x29",
6
+ "scale" : "2x"
7
+ },
8
+ {
9
+ "idiom" : "iphone",
10
+ "size" : "40x40",
11
+ "scale" : "2x"
12
+ },
13
+ {
14
+ "idiom" : "iphone",
15
+ "size" : "60x60",
16
+ "scale" : "2x"
17
+ }
18
+ ],
19
+ "info" : {
20
+ "version" : 1,
21
+ "author" : "xcode"
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "orientation" : "portrait",
5
+ "idiom" : "iphone",
6
+ "extent" : "full-screen",
7
+ "minimum-system-version" : "7.0",
8
+ "scale" : "2x"
9
+ },
10
+ {
11
+ "orientation" : "portrait",
12
+ "idiom" : "iphone",
13
+ "subtype" : "retina4",
14
+ "extent" : "full-screen",
15
+ "minimum-system-version" : "7.0",
16
+ "scale" : "2x"
17
+ }
18
+ ],
19
+ "info" : {
20
+ "version" : 1,
21
+ "author" : "xcode"
22
+ }
23
+ }
@@ -0,0 +1,40 @@
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>CFBundleDevelopmentRegion</key>
6
+ <string>en</string>
7
+ <key>CFBundleDisplayName</key>
8
+ <string>${PRODUCT_NAME}</string>
9
+ <key>CFBundleExecutable</key>
10
+ <string>${EXECUTABLE_NAME}</string>
11
+ <key>CFBundleIdentifier</key>
12
+ <string>me.delisa.${PRODUCT_NAME:rfc1034identifier}</string>
13
+ <key>CFBundleInfoDictionaryVersion</key>
14
+ <string>6.0</string>
15
+ <key>CFBundleName</key>
16
+ <string>${PRODUCT_NAME}</string>
17
+ <key>CFBundlePackageType</key>
18
+ <string>APPL</string>
19
+ <key>CFBundleShortVersionString</key>
20
+ <string>1.0</string>
21
+ <key>CFBundleSignature</key>
22
+ <string>????</string>
23
+ <key>CFBundleVersion</key>
24
+ <string>1.0</string>
25
+ <key>LSRequiresIPhoneOS</key>
26
+ <true/>
27
+ <key>UIMainStoryboardFile</key>
28
+ <string>Main</string>
29
+ <key>UIRequiredDeviceCapabilities</key>
30
+ <array>
31
+ <string>armv7</string>
32
+ </array>
33
+ <key>UISupportedInterfaceOrientations</key>
34
+ <array>
35
+ <string>UIInterfaceOrientationPortrait</string>
36
+ <string>UIInterfaceOrientationLandscapeLeft</string>
37
+ <string>UIInterfaceOrientationLandscapeRight</string>
38
+ </array>
39
+ </dict>
40
+ </plist>
@@ -0,0 +1,16 @@
1
+ //
2
+ // Prefix header
3
+ //
4
+ // The contents of this file are implicitly included at the beginning of every source file.
5
+ //
6
+
7
+ #import <Availability.h>
8
+
9
+ #ifndef __IPHONE_5_0
10
+ #warning "This project uses features only available in iOS SDK 5.0 and later."
11
+ #endif
12
+
13
+ #ifdef __OBJC__
14
+ #import <UIKit/UIKit.h>
15
+ #import <Foundation/Foundation.h>
16
+ #endif
@@ -0,0 +1,2 @@
1
+ /* Localized versions of Info.plist keys */
2
+
@@ -0,0 +1,18 @@
1
+ //
2
+ // main.m
3
+ // Sample
4
+ //
5
+ // Created by Delisa Mason on 8/2/14.
6
+ // Copyright (c) 2014 Delisa Mason. All rights reserved.
7
+ //
8
+
9
+ #import <UIKit/UIKit.h>
10
+
11
+ #import "DMMAppDelegate.h"
12
+
13
+ int main(int argc, char * argv[])
14
+ {
15
+ @autoreleasepool {
16
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([DMMAppDelegate class]));
17
+ }
18
+ }