├── 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 |
--------------------------------------------------------------------------------