├── ARAlbertDemo3D ├── Assets.xcassets │ ├── Contents.json │ ├── hardwood.imageset │ │ ├── hardwood.jpg │ │ └── Contents.json │ ├── Cardboard.imageset │ │ ├── Cardboard.png │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ ├── albert-o copy.jpg │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-57x57@1x.png │ │ ├── Icon-App-57x57@2x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-72x72@1x.png │ │ ├── Icon-App-72x72@2x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ ├── Icon-App-83.5x83.5@2x.png │ │ ├── Icon-Small-50x50@1x.png │ │ ├── Icon-Small-50x50@2x.png │ │ └── Contents.json │ ├── wrapping_paper_1.imageset │ │ ├── wrapping_paper_1.jpg │ │ ├── wrapping_paper_1-1.jpg │ │ ├── wrapping_paper_1-2.jpg │ │ └── Contents.json │ ├── wrapping_paper_2.imageset │ │ ├── wrapping_paper_2.jpg │ │ ├── wrapping_paper_2-1.jpg │ │ ├── wrapping_paper_2-2.jpg │ │ └── Contents.json │ └── wrapping_paper_3.imageset │ │ ├── wrapping_paper_3.jpg │ │ ├── wrapping_paper_3-1.jpg │ │ ├── wrapping_paper_3-2.jpg │ │ └── Contents.json ├── AppDelegate.swift ├── BoxyNode.swift ├── Info.plist ├── Base.lproj │ └── LaunchScreen.storyboard ├── PlaneNode.swift └── ViewController.swift ├── README.md ├── ARAlbertDemo3D.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── xcuserdata │ └── glenners.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── project.pbxproj ├── ARAlbertDemo3DTests ├── Info.plist └── ARAlbertDemo3DTests.swift ├── LICENSE └── .gitignore /ARAlbertDemo3D/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/hardwood.imageset/hardwood.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/hardwood.imageset/hardwood.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/Cardboard.imageset/Cardboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/Cardboard.imageset/Cardboard.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/albert-o copy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/albert-o copy.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # arkit-demo 2 | 3 | The art assets come from: 4 | 5 | https://opengameart.org/node/11950 — hardwood 6 | 7 | https://opengameart.org/content/tiling-cardboard-texture - cardboard 8 | -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_1.imageset/wrapping_paper_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_1.imageset/wrapping_paper_1.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_2.imageset/wrapping_paper_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_2.imageset/wrapping_paper_2.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_3.imageset/wrapping_paper_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_3.imageset/wrapping_paper_3.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_1.imageset/wrapping_paper_1-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_1.imageset/wrapping_paper_1-1.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_1.imageset/wrapping_paper_1-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_1.imageset/wrapping_paper_1-2.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_2.imageset/wrapping_paper_2-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_2.imageset/wrapping_paper_2-1.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_2.imageset/wrapping_paper_2-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_2.imageset/wrapping_paper_2-2.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_3.imageset/wrapping_paper_3-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_3.imageset/wrapping_paper_3-1.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_3.imageset/wrapping_paper_3-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glenna/arkit-demo/HEAD/ARAlbertDemo3D/Assets.xcassets/wrapping_paper_3.imageset/wrapping_paper_3-2.jpg -------------------------------------------------------------------------------- /ARAlbertDemo3D.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ARAlbertDemo3D.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/hardwood.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "hardwood.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/Cardboard.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Cardboard.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "wrapping_paper_1.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "wrapping_paper_1-1.jpg", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "wrapping_paper_1-2.jpg", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "wrapping_paper_2.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "wrapping_paper_2-1.jpg", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "wrapping_paper_2-2.jpg", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/wrapping_paper_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "wrapping_paper_3.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "wrapping_paper_3-1.jpg", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "wrapping_paper_3-2.jpg", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ARAlbertDemo3D.xcodeproj/xcuserdata/glenners.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ARAlbertDemo3D.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | ARAlbertDemo3D.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /ARAlbertDemo3DTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /ARAlbertDemo3D/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // ARAlbertDemo3D 4 | // 5 | // Created by Glenna L Buford on 7/2/17. 6 | // Copyright © 2017 Glenna L Buford. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | window = UIWindow(frame: UIScreen.main.bounds) 18 | 19 | let initialViewController: ViewController = ViewController() 20 | 21 | window?.rootViewController = initialViewController 22 | window?.makeKeyAndVisible() 23 | 24 | return true 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Glenna Buford 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 all 13 | 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ARAlbertDemo3DTests/ARAlbertDemo3DTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ARAlbertDemo3DTests.swift 3 | // ARAlbertDemo3DTests 4 | // 5 | // Created by Glenna L Buford on 7/2/17. 6 | // Copyright © 2017 Glenna L Buford. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import ARAlbertDemo3D 11 | 12 | class ARAlbertDemo3DTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /ARAlbertDemo3D/BoxyNode.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BoxyNode.swift 3 | // ARAlbertDemo3D 4 | // 5 | // Created by Glenna L Buford on 8/24/17. 6 | // Copyright © 2017 Glenna L Buford. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SceneKit 11 | 12 | class BoxyNode: SCNNode { 13 | 14 | override init() { 15 | super.init() 16 | 17 | let cube: SCNBox = createBox() 18 | geometry = cube; 19 | 20 | let physics: SCNPhysicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: cube, options: nil)) 21 | physics.mass = 0.02 22 | physics.categoryBitMask = 1 23 | 24 | physicsBody = physics 25 | } 26 | 27 | required init?(coder aDecoder: NSCoder) { 28 | fatalError() 29 | } 30 | 31 | func createBox() -> SCNBox { 32 | let dimension: CGFloat = CGFloat(Float.random(in: 0.2...0.25)) 33 | let cube: SCNBox = SCNBox(width: dimension, height: dimension, length: dimension, chamferRadius: 0.01) 34 | 35 | let material: SCNMaterial = SCNMaterial() 36 | material.diffuse.contents = UIImage(named: "wrapping_paper_\(Int.random(in: 1...3))")! 37 | 38 | cube.materials = [material] 39 | 40 | return cube 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | # Package.pins 40 | .build/ 41 | 42 | # CocoaPods 43 | # 44 | # We recommend against adding the Pods directory to your .gitignore. However 45 | # you should judge for yourself, the pros and cons are mentioned at: 46 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 47 | # 48 | # Pods/ 49 | 50 | # Carthage 51 | # 52 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 53 | # Carthage/Checkouts 54 | 55 | Carthage/Build 56 | 57 | # fastlane 58 | # 59 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 60 | # screenshots whenever they are needed. 61 | # For more information about the recommended setup visit: 62 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 63 | 64 | fastlane/report.xml 65 | fastlane/Preview.html 66 | fastlane/screenshots 67 | fastlane/test_output 68 | -------------------------------------------------------------------------------- /ARAlbertDemo3D/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | NSCameraUsageDescription 24 | This application will use the camera for Augmented Reality. 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIRequiresFullScreen 32 | 33 | UIStatusBarHidden 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /ARAlbertDemo3D/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 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 | -------------------------------------------------------------------------------- /ARAlbertDemo3D/PlaneNode.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Plane.swift 3 | // ARAlbertDemo3D 4 | // 5 | // Created by Glenna L Buford on 8/23/17. 6 | // Copyright © 2017 Glenna L Buford. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SceneKit 11 | import ARKit 12 | 13 | class PlaneNode : SCNNode { 14 | 15 | var plane: SCNPlane! 16 | var childPlaneNode: SCNNode! 17 | 18 | init(withAnchor anchor: ARPlaneAnchor) { 19 | super.init() 20 | 21 | plane = SCNPlane(width: CGFloat(anchor.extent.x), height: CGFloat(anchor.extent.z)) 22 | let floorMaterial = SCNMaterial() 23 | floorMaterial.diffuse.contents = #imageLiteral(resourceName: "hardwood") 24 | floorMaterial.diffuse.contentsTransform = SCNMatrix4MakeScale(anchor.extent.x, anchor.extent.z, 1) 25 | floorMaterial.diffuse.wrapT = .repeat 26 | floorMaterial.diffuse.wrapS = .repeat 27 | plane.materials = [floorMaterial] 28 | 29 | childPlaneNode = SCNNode(geometry: plane) 30 | childPlaneNode.position = SCNVector3Make(anchor.center.x, 0, anchor.center.z) 31 | childPlaneNode.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0) 32 | 33 | addChildNode(childPlaneNode) 34 | } 35 | 36 | required init?(coder aDecoder: NSCoder) { 37 | fatalError() 38 | } 39 | 40 | func update(withAnchor anchor: ARPlaneAnchor) { 41 | plane.width = CGFloat(anchor.extent.x) 42 | plane.height = CGFloat(anchor.extent.z) 43 | if let floorMaterial = plane.firstMaterial { 44 | floorMaterial.diffuse.contentsTransform = SCNMatrix4MakeScale(anchor.extent.x,anchor.extent.z, 1) 45 | floorMaterial.diffuse.wrapT = .repeat 46 | floorMaterial.diffuse.wrapS = .repeat 47 | } 48 | 49 | let physics = SCNPhysicsBody(type: .kinematic, shape: SCNPhysicsShape(geometry: plane, options: nil)) 50 | childPlaneNode.physicsBody = physics 51 | childPlaneNode.position = SCNVector3Make(anchor.center.x, 0, anchor.center.z) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /ARAlbertDemo3D/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "57x57", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-57x57@1x.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "57x57", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-57x57@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "60x60", 59 | "idiom" : "iphone", 60 | "filename" : "Icon-App-60x60@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "60x60", 65 | "idiom" : "iphone", 66 | "filename" : "Icon-App-60x60@3x.png", 67 | "scale" : "3x" 68 | }, 69 | { 70 | "size" : "20x20", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-20x20@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "20x20", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-20x20@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "29x29", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-29x29@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "29x29", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-29x29@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "40x40", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-40x40@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "40x40", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-40x40@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-Small-50x50@1x.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "50x50", 113 | "idiom" : "ipad", 114 | "filename" : "Icon-Small-50x50@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "Icon-App-72x72@1x.png", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "size" : "72x72", 125 | "idiom" : "ipad", 126 | "filename" : "Icon-App-72x72@2x.png", 127 | "scale" : "2x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "Icon-App-76x76@1x.png", 133 | "scale" : "1x" 134 | }, 135 | { 136 | "size" : "76x76", 137 | "idiom" : "ipad", 138 | "filename" : "Icon-App-76x76@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "size" : "83.5x83.5", 143 | "idiom" : "ipad", 144 | "filename" : "Icon-App-83.5x83.5@2x.png", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "size" : "1024x1024", 149 | "idiom" : "ios-marketing", 150 | "filename" : "albert-o copy.jpg", 151 | "scale" : "1x" 152 | } 153 | ], 154 | "info" : { 155 | "version" : 1, 156 | "author" : "xcode" 157 | } 158 | } -------------------------------------------------------------------------------- /ARAlbertDemo3D/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // ARAlbertDemo3D 4 | // 5 | // Created by Glenna L Buford on 7/2/17. 6 | // Copyright © 2017 Glenna L Buford. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import SceneKit 11 | import ARKit 12 | 13 | class ViewController: UIViewController, ARSCNViewDelegate { 14 | private let planeDetectionSwitch: UISwitch = { 15 | let planeSwitch: UISwitch = UISwitch() 16 | planeSwitch.addTarget(self, action: #selector(onPlaneDetectionSwitchChanged(_:)), for: UIControl.Event.valueChanged) 17 | planeSwitch.isOn = true 18 | return planeSwitch 19 | }() 20 | private let sceneView: ARSCNView = ARSCNView() 21 | private var boxes = Array() { 22 | didSet { 23 | print("number of boxes \(boxes.count)") 24 | } 25 | } 26 | 27 | init() { 28 | super.init(nibName: nil, bundle: nil) 29 | 30 | // Set the view's delegate 31 | sceneView.delegate = self 32 | 33 | // Show statistics such as fps and timing information 34 | sceneView.showsStatistics = true 35 | 36 | // show the feature points 37 | sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints] 38 | 39 | setupViews() 40 | } 41 | 42 | required init?(coder aDecoder: NSCoder) { 43 | fatalError("init?(coder:) not implemented") 44 | } 45 | 46 | func setupViews() { 47 | let planeDetectionSwitchStackView: UIStackView = UIStackView() 48 | planeDetectionSwitchStackView.axis = .vertical 49 | planeDetectionSwitchStackView.alignment = .center 50 | planeDetectionSwitchStackView.spacing = 4.0 51 | 52 | let planeDetectionLabel: UILabel = UILabel() 53 | planeDetectionLabel.text = "Plane Detection" 54 | 55 | planeDetectionSwitchStackView.addArrangedSubview(planeDetectionSwitch) 56 | planeDetectionSwitchStackView.addArrangedSubview(planeDetectionLabel) 57 | 58 | let featurePointSwitchStackView: UIStackView = UIStackView() 59 | featurePointSwitchStackView.axis = .vertical 60 | featurePointSwitchStackView.alignment = .center 61 | featurePointSwitchStackView.spacing = 4.0 62 | 63 | let featurePointSwitch: UISwitch = UISwitch() 64 | featurePointSwitch.addTarget(self, action: #selector(onFeaturePointSwitchChanged(_:)), for: UIControl.Event.valueChanged) 65 | featurePointSwitch.isOn = true 66 | 67 | let featurePointLabel: UILabel = UILabel() 68 | featurePointLabel.text = "Feature Point" 69 | 70 | featurePointSwitchStackView.addArrangedSubview(featurePointSwitch) 71 | featurePointSwitchStackView.addArrangedSubview(featurePointLabel) 72 | 73 | let refreshButton: UIButton = UIButton(type: .custom) 74 | refreshButton.setTitle("Refresh", for: .normal) 75 | refreshButton.addTarget(self, action: #selector(onRefreshPressed(_:)), for: .touchUpInside) 76 | 77 | let controlStackView: UIStackView = UIStackView(arrangedSubviews: [planeDetectionSwitchStackView, 78 | featurePointSwitchStackView, 79 | refreshButton]) 80 | controlStackView.axis = .horizontal 81 | controlStackView.alignment = .center 82 | controlStackView.distribution = .fillEqually 83 | controlStackView.spacing = 5.0 84 | controlStackView.translatesAutoresizingMaskIntoConstraints = false 85 | view.addSubview(controlStackView) 86 | 87 | sceneView.backgroundColor = UIColor.lightGray 88 | sceneView.translatesAutoresizingMaskIntoConstraints = false 89 | view.addSubview(sceneView) 90 | 91 | let tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, 92 | action: #selector(handleTap(_:))) 93 | sceneView.addGestureRecognizer(tapGestureRecognizer) 94 | 95 | 96 | view.backgroundColor = UIColor.darkGray 97 | 98 | NSLayoutConstraint.activate([ 99 | controlStackView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor), 100 | controlStackView.rightAnchor.constraint(equalTo: view.rightAnchor), 101 | controlStackView.leftAnchor.constraint(equalTo: view.leftAnchor), 102 | sceneView.topAnchor.constraint(equalTo: controlStackView.bottomAnchor), 103 | sceneView.rightAnchor.constraint(equalTo: view.rightAnchor), 104 | sceneView.leftAnchor.constraint(equalTo: view.leftAnchor), 105 | sceneView.bottomAnchor.constraint(equalTo: view.bottomAnchor)]) 106 | } 107 | 108 | override func viewWillAppear(_ animated: Bool) { 109 | super.viewWillAppear(animated) 110 | 111 | // Create a session configuration 112 | let configuration: ARWorldTrackingConfiguration = ARWorldTrackingConfiguration() 113 | configuration.planeDetection = .horizontal 114 | 115 | // Run the view's session 116 | sceneView.session.run(configuration) 117 | } 118 | 119 | override func viewWillDisappear(_ animated: Bool) { 120 | super.viewWillDisappear(animated) 121 | 122 | // Pause the view's session 123 | sceneView.session.pause() 124 | } 125 | 126 | override var prefersStatusBarHidden: Bool { 127 | return true 128 | } 129 | 130 | // MARK: - ARSCNViewDelegate 131 | 132 | func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) { 133 | guard 134 | let planeAnchor: ARPlaneAnchor = anchor as? ARPlaneAnchor, 135 | let planeNode: PlaneNode = node as? PlaneNode 136 | else { return } 137 | 138 | planeNode.update(withAnchor: planeAnchor) 139 | } 140 | 141 | func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { 142 | guard let planeAnchor: ARPlaneAnchor = anchor as? ARPlaneAnchor else { return nil } 143 | return PlaneNode(withAnchor: planeAnchor) 144 | } 145 | 146 | // MARK: - Actions 147 | 148 | @objc private func handleTap(_ sender: UITapGestureRecognizer) { 149 | let tapPoint: CGPoint = sender.location(in: sceneView) 150 | let results: [ARHitTestResult] = sceneView.hitTest(tapPoint, types: ARHitTestResult.ResultType.existingPlaneUsingExtent) 151 | 152 | if let arhitresult: ARHitTestResult = results.first { 153 | addABox(at: arhitresult) 154 | } 155 | } 156 | 157 | // MARK: more ARSCNViewDelegate 158 | 159 | func session(_ session: ARSession, didFailWithError error: Error) { 160 | // Present an error message to the user 161 | print("session didFailWithError \(session)") 162 | } 163 | 164 | func sessionWasInterrupted(_ session: ARSession) { 165 | // Inform the user that the session has been interrupted, for example, by presenting an overlay 166 | print("session interrupted \(session)") 167 | } 168 | 169 | func sessionInterruptionEnded(_ session: ARSession) { 170 | // Reset tracking and/or remove existing anchors if consistent tracking is required 171 | print("session ended \(session)") 172 | } 173 | 174 | func addABox(at hitPoint: ARHitTestResult) { 175 | let cubeNode: BoxyNode = BoxyNode() 176 | cubeNode.position = positionFromHitTestResult(hitPoint) 177 | 178 | sceneView.scene.rootNode.addChildNode(cubeNode) 179 | 180 | let anchor: ARAnchor = ARAnchor(transform: hitPoint.worldTransform) 181 | sceneView.session.add(anchor: anchor) 182 | boxes.append(cubeNode) 183 | } 184 | 185 | func positionFromHitTestResult(_ hitPoint: ARHitTestResult) -> SCNVector3 { 186 | let yOffset: Float = 0.5 187 | return SCNVector3Make(hitPoint.worldTransform.columns.3.x, 188 | hitPoint.worldTransform.columns.3.y + yOffset, 189 | hitPoint.worldTransform.columns.3.z) 190 | } 191 | 192 | 193 | // MARK: - More Actions 194 | 195 | @objc private func onRefreshPressed(_ sender: UIButton) { 196 | let sessionConfig: ARWorldTrackingConfiguration = ARWorldTrackingConfiguration() 197 | if planeDetectionSwitch.isOn { 198 | sessionConfig.planeDetection = .horizontal 199 | } 200 | sceneView.session.run(sessionConfig, options: [.resetTracking, .removeExistingAnchors]) 201 | boxes.removeAll() 202 | } 203 | 204 | @objc private func onPlaneDetectionSwitchChanged(_ sender: UISwitch) { 205 | //stop/start plane detection 206 | let sessionConfig: ARWorldTrackingConfiguration = ARWorldTrackingConfiguration() 207 | if sender.isOn { 208 | sessionConfig.planeDetection = .horizontal 209 | } 210 | 211 | sceneView.session.run(sessionConfig, options: []) 212 | } 213 | 214 | @objc private func onFeaturePointSwitchChanged(_ sender: UISwitch) { 215 | if sender.isOn { 216 | sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints] 217 | } else { 218 | sceneView.debugOptions = [] 219 | } 220 | } 221 | } 222 | -------------------------------------------------------------------------------- /ARAlbertDemo3D.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | FD2121A41F4F3A6900E1F4F8 /* BoxyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD2121A31F4F3A6900E1F4F8 /* BoxyNode.swift */; }; 11 | FD4CA6781F0936A00024CD5C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD4CA6771F0936A00024CD5C /* AppDelegate.swift */; }; 12 | FD4CA67C1F0936A00024CD5C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD4CA67B1F0936A00024CD5C /* ViewController.swift */; }; 13 | FD4CA6811F0936A00024CD5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FD4CA6801F0936A00024CD5C /* Assets.xcassets */; }; 14 | FD4CA6841F0936A00024CD5C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FD4CA6821F0936A00024CD5C /* LaunchScreen.storyboard */; }; 15 | FD4CA68F1F0936A00024CD5C /* ARAlbertDemo3DTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD4CA68E1F0936A00024CD5C /* ARAlbertDemo3DTests.swift */; }; 16 | FD562BD91F4DFFD8004317B3 /* PlaneNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD562BD81F4DFFD8004317B3 /* PlaneNode.swift */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXContainerItemProxy section */ 20 | FD4CA68B1F0936A00024CD5C /* PBXContainerItemProxy */ = { 21 | isa = PBXContainerItemProxy; 22 | containerPortal = FD4CA66C1F0936A00024CD5C /* Project object */; 23 | proxyType = 1; 24 | remoteGlobalIDString = FD4CA6731F0936A00024CD5C; 25 | remoteInfo = ARAlbertDemo3D; 26 | }; 27 | /* End PBXContainerItemProxy section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | FD2121A31F4F3A6900E1F4F8 /* BoxyNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoxyNode.swift; sourceTree = ""; }; 31 | FD4CA6741F0936A00024CD5C /* ARAlbertDemo3D.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ARAlbertDemo3D.app; sourceTree = BUILT_PRODUCTS_DIR; }; 32 | FD4CA6771F0936A00024CD5C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33 | FD4CA67B1F0936A00024CD5C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 34 | FD4CA6801F0936A00024CD5C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 35 | FD4CA6831F0936A00024CD5C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 36 | FD4CA6851F0936A00024CD5C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 37 | FD4CA68A1F0936A00024CD5C /* ARAlbertDemo3DTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ARAlbertDemo3DTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | FD4CA68E1F0936A00024CD5C /* ARAlbertDemo3DTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ARAlbertDemo3DTests.swift; sourceTree = ""; }; 39 | FD4CA6901F0936A00024CD5C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 40 | FD562BD81F4DFFD8004317B3 /* PlaneNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaneNode.swift; sourceTree = ""; }; 41 | /* End PBXFileReference section */ 42 | 43 | /* Begin PBXFrameworksBuildPhase section */ 44 | FD4CA6711F0936A00024CD5C /* Frameworks */ = { 45 | isa = PBXFrameworksBuildPhase; 46 | buildActionMask = 2147483647; 47 | files = ( 48 | ); 49 | runOnlyForDeploymentPostprocessing = 0; 50 | }; 51 | FD4CA6871F0936A00024CD5C /* Frameworks */ = { 52 | isa = PBXFrameworksBuildPhase; 53 | buildActionMask = 2147483647; 54 | files = ( 55 | ); 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | /* End PBXFrameworksBuildPhase section */ 59 | 60 | /* Begin PBXGroup section */ 61 | FD4CA66B1F0936A00024CD5C = { 62 | isa = PBXGroup; 63 | children = ( 64 | FD4CA6761F0936A00024CD5C /* ARAlbertDemo3D */, 65 | FD4CA68D1F0936A00024CD5C /* ARAlbertDemo3DTests */, 66 | FD4CA6751F0936A00024CD5C /* Products */, 67 | ); 68 | sourceTree = ""; 69 | }; 70 | FD4CA6751F0936A00024CD5C /* Products */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | FD4CA6741F0936A00024CD5C /* ARAlbertDemo3D.app */, 74 | FD4CA68A1F0936A00024CD5C /* ARAlbertDemo3DTests.xctest */, 75 | ); 76 | name = Products; 77 | sourceTree = ""; 78 | }; 79 | FD4CA6761F0936A00024CD5C /* ARAlbertDemo3D */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | FD4CA6771F0936A00024CD5C /* AppDelegate.swift */, 83 | FD4CA67B1F0936A00024CD5C /* ViewController.swift */, 84 | FD4CA6801F0936A00024CD5C /* Assets.xcassets */, 85 | FD4CA6821F0936A00024CD5C /* LaunchScreen.storyboard */, 86 | FD4CA6851F0936A00024CD5C /* Info.plist */, 87 | FD562BD81F4DFFD8004317B3 /* PlaneNode.swift */, 88 | FD2121A31F4F3A6900E1F4F8 /* BoxyNode.swift */, 89 | ); 90 | path = ARAlbertDemo3D; 91 | sourceTree = ""; 92 | }; 93 | FD4CA68D1F0936A00024CD5C /* ARAlbertDemo3DTests */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | FD4CA68E1F0936A00024CD5C /* ARAlbertDemo3DTests.swift */, 97 | FD4CA6901F0936A00024CD5C /* Info.plist */, 98 | ); 99 | path = ARAlbertDemo3DTests; 100 | sourceTree = ""; 101 | }; 102 | /* End PBXGroup section */ 103 | 104 | /* Begin PBXNativeTarget section */ 105 | FD4CA6731F0936A00024CD5C /* ARAlbertDemo3D */ = { 106 | isa = PBXNativeTarget; 107 | buildConfigurationList = FD4CA6931F0936A00024CD5C /* Build configuration list for PBXNativeTarget "ARAlbertDemo3D" */; 108 | buildPhases = ( 109 | FD4CA6701F0936A00024CD5C /* Sources */, 110 | FD4CA6711F0936A00024CD5C /* Frameworks */, 111 | FD4CA6721F0936A00024CD5C /* Resources */, 112 | ); 113 | buildRules = ( 114 | ); 115 | dependencies = ( 116 | ); 117 | name = ARAlbertDemo3D; 118 | productName = ARAlbertDemo3D; 119 | productReference = FD4CA6741F0936A00024CD5C /* ARAlbertDemo3D.app */; 120 | productType = "com.apple.product-type.application"; 121 | }; 122 | FD4CA6891F0936A00024CD5C /* ARAlbertDemo3DTests */ = { 123 | isa = PBXNativeTarget; 124 | buildConfigurationList = FD4CA6961F0936A00024CD5C /* Build configuration list for PBXNativeTarget "ARAlbertDemo3DTests" */; 125 | buildPhases = ( 126 | FD4CA6861F0936A00024CD5C /* Sources */, 127 | FD4CA6871F0936A00024CD5C /* Frameworks */, 128 | FD4CA6881F0936A00024CD5C /* Resources */, 129 | ); 130 | buildRules = ( 131 | ); 132 | dependencies = ( 133 | FD4CA68C1F0936A00024CD5C /* PBXTargetDependency */, 134 | ); 135 | name = ARAlbertDemo3DTests; 136 | productName = ARAlbertDemo3DTests; 137 | productReference = FD4CA68A1F0936A00024CD5C /* ARAlbertDemo3DTests.xctest */; 138 | productType = "com.apple.product-type.bundle.unit-test"; 139 | }; 140 | /* End PBXNativeTarget section */ 141 | 142 | /* Begin PBXProject section */ 143 | FD4CA66C1F0936A00024CD5C /* Project object */ = { 144 | isa = PBXProject; 145 | attributes = { 146 | LastSwiftUpdateCheck = 0900; 147 | LastUpgradeCheck = 1010; 148 | ORGANIZATIONNAME = "Glenna L Buford"; 149 | TargetAttributes = { 150 | FD4CA6731F0936A00024CD5C = { 151 | CreatedOnToolsVersion = 9.0; 152 | }; 153 | FD4CA6891F0936A00024CD5C = { 154 | CreatedOnToolsVersion = 9.0; 155 | LastSwiftMigration = 1010; 156 | TestTargetID = FD4CA6731F0936A00024CD5C; 157 | }; 158 | }; 159 | }; 160 | buildConfigurationList = FD4CA66F1F0936A00024CD5C /* Build configuration list for PBXProject "ARAlbertDemo3D" */; 161 | compatibilityVersion = "Xcode 8.0"; 162 | developmentRegion = en; 163 | hasScannedForEncodings = 0; 164 | knownRegions = ( 165 | en, 166 | Base, 167 | ); 168 | mainGroup = FD4CA66B1F0936A00024CD5C; 169 | productRefGroup = FD4CA6751F0936A00024CD5C /* Products */; 170 | projectDirPath = ""; 171 | projectRoot = ""; 172 | targets = ( 173 | FD4CA6731F0936A00024CD5C /* ARAlbertDemo3D */, 174 | FD4CA6891F0936A00024CD5C /* ARAlbertDemo3DTests */, 175 | ); 176 | }; 177 | /* End PBXProject section */ 178 | 179 | /* Begin PBXResourcesBuildPhase section */ 180 | FD4CA6721F0936A00024CD5C /* Resources */ = { 181 | isa = PBXResourcesBuildPhase; 182 | buildActionMask = 2147483647; 183 | files = ( 184 | FD4CA6841F0936A00024CD5C /* LaunchScreen.storyboard in Resources */, 185 | FD4CA6811F0936A00024CD5C /* Assets.xcassets in Resources */, 186 | ); 187 | runOnlyForDeploymentPostprocessing = 0; 188 | }; 189 | FD4CA6881F0936A00024CD5C /* Resources */ = { 190 | isa = PBXResourcesBuildPhase; 191 | buildActionMask = 2147483647; 192 | files = ( 193 | ); 194 | runOnlyForDeploymentPostprocessing = 0; 195 | }; 196 | /* End PBXResourcesBuildPhase section */ 197 | 198 | /* Begin PBXSourcesBuildPhase section */ 199 | FD4CA6701F0936A00024CD5C /* Sources */ = { 200 | isa = PBXSourcesBuildPhase; 201 | buildActionMask = 2147483647; 202 | files = ( 203 | FD4CA67C1F0936A00024CD5C /* ViewController.swift in Sources */, 204 | FD2121A41F4F3A6900E1F4F8 /* BoxyNode.swift in Sources */, 205 | FD4CA6781F0936A00024CD5C /* AppDelegate.swift in Sources */, 206 | FD562BD91F4DFFD8004317B3 /* PlaneNode.swift in Sources */, 207 | ); 208 | runOnlyForDeploymentPostprocessing = 0; 209 | }; 210 | FD4CA6861F0936A00024CD5C /* Sources */ = { 211 | isa = PBXSourcesBuildPhase; 212 | buildActionMask = 2147483647; 213 | files = ( 214 | FD4CA68F1F0936A00024CD5C /* ARAlbertDemo3DTests.swift in Sources */, 215 | ); 216 | runOnlyForDeploymentPostprocessing = 0; 217 | }; 218 | /* End PBXSourcesBuildPhase section */ 219 | 220 | /* Begin PBXTargetDependency section */ 221 | FD4CA68C1F0936A00024CD5C /* PBXTargetDependency */ = { 222 | isa = PBXTargetDependency; 223 | target = FD4CA6731F0936A00024CD5C /* ARAlbertDemo3D */; 224 | targetProxy = FD4CA68B1F0936A00024CD5C /* PBXContainerItemProxy */; 225 | }; 226 | /* End PBXTargetDependency section */ 227 | 228 | /* Begin PBXVariantGroup section */ 229 | FD4CA6821F0936A00024CD5C /* LaunchScreen.storyboard */ = { 230 | isa = PBXVariantGroup; 231 | children = ( 232 | FD4CA6831F0936A00024CD5C /* Base */, 233 | ); 234 | name = LaunchScreen.storyboard; 235 | sourceTree = ""; 236 | }; 237 | /* End PBXVariantGroup section */ 238 | 239 | /* Begin XCBuildConfiguration section */ 240 | FD4CA6911F0936A00024CD5C /* Debug */ = { 241 | isa = XCBuildConfiguration; 242 | buildSettings = { 243 | ALWAYS_SEARCH_USER_PATHS = NO; 244 | CLANG_ANALYZER_NONNULL = YES; 245 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 246 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 247 | CLANG_CXX_LIBRARY = "libc++"; 248 | CLANG_ENABLE_MODULES = YES; 249 | CLANG_ENABLE_OBJC_ARC = YES; 250 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 251 | CLANG_WARN_BOOL_CONVERSION = YES; 252 | CLANG_WARN_COMMA = YES; 253 | CLANG_WARN_CONSTANT_CONVERSION = YES; 254 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 255 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 256 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 257 | CLANG_WARN_EMPTY_BODY = YES; 258 | CLANG_WARN_ENUM_CONVERSION = YES; 259 | CLANG_WARN_INFINITE_RECURSION = YES; 260 | CLANG_WARN_INT_CONVERSION = YES; 261 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 262 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 263 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 264 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 265 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 266 | CLANG_WARN_STRICT_PROTOTYPES = YES; 267 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 268 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 269 | CLANG_WARN_UNREACHABLE_CODE = YES; 270 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 271 | CODE_SIGN_IDENTITY = "iPhone Developer"; 272 | COPY_PHASE_STRIP = NO; 273 | DEBUG_INFORMATION_FORMAT = dwarf; 274 | ENABLE_STRICT_OBJC_MSGSEND = YES; 275 | ENABLE_TESTABILITY = YES; 276 | GCC_C_LANGUAGE_STANDARD = gnu11; 277 | GCC_DYNAMIC_NO_PIC = NO; 278 | GCC_NO_COMMON_BLOCKS = YES; 279 | GCC_OPTIMIZATION_LEVEL = 0; 280 | GCC_PREPROCESSOR_DEFINITIONS = ( 281 | "DEBUG=1", 282 | "$(inherited)", 283 | ); 284 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 285 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 286 | GCC_WARN_UNDECLARED_SELECTOR = YES; 287 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 288 | GCC_WARN_UNUSED_FUNCTION = YES; 289 | GCC_WARN_UNUSED_VARIABLE = YES; 290 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 291 | MTL_ENABLE_DEBUG_INFO = YES; 292 | ONLY_ACTIVE_ARCH = YES; 293 | SDKROOT = iphoneos; 294 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 295 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 296 | }; 297 | name = Debug; 298 | }; 299 | FD4CA6921F0936A00024CD5C /* Release */ = { 300 | isa = XCBuildConfiguration; 301 | buildSettings = { 302 | ALWAYS_SEARCH_USER_PATHS = NO; 303 | CLANG_ANALYZER_NONNULL = YES; 304 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 305 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 306 | CLANG_CXX_LIBRARY = "libc++"; 307 | CLANG_ENABLE_MODULES = YES; 308 | CLANG_ENABLE_OBJC_ARC = YES; 309 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 310 | CLANG_WARN_BOOL_CONVERSION = YES; 311 | CLANG_WARN_COMMA = YES; 312 | CLANG_WARN_CONSTANT_CONVERSION = YES; 313 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 314 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 315 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 316 | CLANG_WARN_EMPTY_BODY = YES; 317 | CLANG_WARN_ENUM_CONVERSION = YES; 318 | CLANG_WARN_INFINITE_RECURSION = YES; 319 | CLANG_WARN_INT_CONVERSION = YES; 320 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 321 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 322 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 323 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 324 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 325 | CLANG_WARN_STRICT_PROTOTYPES = YES; 326 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 327 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 328 | CLANG_WARN_UNREACHABLE_CODE = YES; 329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 330 | CODE_SIGN_IDENTITY = "iPhone Developer"; 331 | COPY_PHASE_STRIP = NO; 332 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 333 | ENABLE_NS_ASSERTIONS = NO; 334 | ENABLE_STRICT_OBJC_MSGSEND = YES; 335 | GCC_C_LANGUAGE_STANDARD = gnu11; 336 | GCC_NO_COMMON_BLOCKS = YES; 337 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 338 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 339 | GCC_WARN_UNDECLARED_SELECTOR = YES; 340 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 341 | GCC_WARN_UNUSED_FUNCTION = YES; 342 | GCC_WARN_UNUSED_VARIABLE = YES; 343 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 344 | MTL_ENABLE_DEBUG_INFO = NO; 345 | SDKROOT = iphoneos; 346 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 347 | VALIDATE_PRODUCT = YES; 348 | }; 349 | name = Release; 350 | }; 351 | FD4CA6941F0936A00024CD5C /* Debug */ = { 352 | isa = XCBuildConfiguration; 353 | buildSettings = { 354 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 355 | DEVELOPMENT_TEAM = MNS274XJU5; 356 | INFOPLIST_FILE = ARAlbertDemo3D/Info.plist; 357 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 358 | PRODUCT_BUNDLE_IDENTIFIER = com.glenners.ARAlbertDemo3D; 359 | PRODUCT_NAME = "$(TARGET_NAME)"; 360 | SWIFT_VERSION = 4.2; 361 | TARGETED_DEVICE_FAMILY = "1,2"; 362 | }; 363 | name = Debug; 364 | }; 365 | FD4CA6951F0936A00024CD5C /* Release */ = { 366 | isa = XCBuildConfiguration; 367 | buildSettings = { 368 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 369 | DEVELOPMENT_TEAM = MNS274XJU5; 370 | INFOPLIST_FILE = ARAlbertDemo3D/Info.plist; 371 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 372 | PRODUCT_BUNDLE_IDENTIFIER = com.glenners.ARAlbertDemo3D; 373 | PRODUCT_NAME = "$(TARGET_NAME)"; 374 | SWIFT_VERSION = 4.2; 375 | TARGETED_DEVICE_FAMILY = "1,2"; 376 | }; 377 | name = Release; 378 | }; 379 | FD4CA6971F0936A00024CD5C /* Debug */ = { 380 | isa = XCBuildConfiguration; 381 | buildSettings = { 382 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 383 | BUNDLE_LOADER = "$(TEST_HOST)"; 384 | INFOPLIST_FILE = ARAlbertDemo3DTests/Info.plist; 385 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 386 | PRODUCT_BUNDLE_IDENTIFIER = com.glenners.ARAlbertDemo3DTests; 387 | PRODUCT_NAME = "$(TARGET_NAME)"; 388 | SWIFT_VERSION = 4.2; 389 | TARGETED_DEVICE_FAMILY = "1,2"; 390 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ARAlbertDemo3D.app/ARAlbertDemo3D"; 391 | }; 392 | name = Debug; 393 | }; 394 | FD4CA6981F0936A00024CD5C /* Release */ = { 395 | isa = XCBuildConfiguration; 396 | buildSettings = { 397 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 398 | BUNDLE_LOADER = "$(TEST_HOST)"; 399 | INFOPLIST_FILE = ARAlbertDemo3DTests/Info.plist; 400 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 401 | PRODUCT_BUNDLE_IDENTIFIER = com.glenners.ARAlbertDemo3DTests; 402 | PRODUCT_NAME = "$(TARGET_NAME)"; 403 | SWIFT_VERSION = 4.2; 404 | TARGETED_DEVICE_FAMILY = "1,2"; 405 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ARAlbertDemo3D.app/ARAlbertDemo3D"; 406 | }; 407 | name = Release; 408 | }; 409 | /* End XCBuildConfiguration section */ 410 | 411 | /* Begin XCConfigurationList section */ 412 | FD4CA66F1F0936A00024CD5C /* Build configuration list for PBXProject "ARAlbertDemo3D" */ = { 413 | isa = XCConfigurationList; 414 | buildConfigurations = ( 415 | FD4CA6911F0936A00024CD5C /* Debug */, 416 | FD4CA6921F0936A00024CD5C /* Release */, 417 | ); 418 | defaultConfigurationIsVisible = 0; 419 | defaultConfigurationName = Release; 420 | }; 421 | FD4CA6931F0936A00024CD5C /* Build configuration list for PBXNativeTarget "ARAlbertDemo3D" */ = { 422 | isa = XCConfigurationList; 423 | buildConfigurations = ( 424 | FD4CA6941F0936A00024CD5C /* Debug */, 425 | FD4CA6951F0936A00024CD5C /* Release */, 426 | ); 427 | defaultConfigurationIsVisible = 0; 428 | defaultConfigurationName = Release; 429 | }; 430 | FD4CA6961F0936A00024CD5C /* Build configuration list for PBXNativeTarget "ARAlbertDemo3DTests" */ = { 431 | isa = XCConfigurationList; 432 | buildConfigurations = ( 433 | FD4CA6971F0936A00024CD5C /* Debug */, 434 | FD4CA6981F0936A00024CD5C /* Release */, 435 | ); 436 | defaultConfigurationIsVisible = 0; 437 | defaultConfigurationName = Release; 438 | }; 439 | /* End XCConfigurationList section */ 440 | }; 441 | rootObject = FD4CA66C1F0936A00024CD5C /* Project object */; 442 | } 443 | --------------------------------------------------------------------------------