├── ARMuseum.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── lukasingelheim.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ └── lukasingelheim.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── ARMuseum ├── ARMuseum - Final App.m4v ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ └── Mona Lisa Room.arresourcegroup │ │ ├── Contents.json │ │ └── monalisa.arreferenceimage │ │ ├── Contents.json │ │ └── monalisa.jpg ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── ImageInformationViewController.swift ├── Info.plist ├── Scene.sks ├── Scene.swift └── ViewController.swift └── README.md /ARMuseum.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 003D4AAE20836F2E00C6E4A0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003D4AAD20836F2E00C6E4A0 /* AppDelegate.swift */; }; 11 | 003D4AB020836F2E00C6E4A0 /* Scene.sks in Resources */ = {isa = PBXBuildFile; fileRef = 003D4AAF20836F2E00C6E4A0 /* Scene.sks */; }; 12 | 003D4AB220836F2E00C6E4A0 /* Scene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003D4AB120836F2E00C6E4A0 /* Scene.swift */; }; 13 | 003D4AB420836F2E00C6E4A0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003D4AB320836F2E00C6E4A0 /* ViewController.swift */; }; 14 | 003D4AB720836F2E00C6E4A0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 003D4AB520836F2E00C6E4A0 /* Main.storyboard */; }; 15 | 003D4AB920836F3000C6E4A0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 003D4AB820836F3000C6E4A0 /* Assets.xcassets */; }; 16 | 003D4ABC20836F3000C6E4A0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 003D4ABA20836F3000C6E4A0 /* LaunchScreen.storyboard */; }; 17 | 00C5AFE4208DF37000943839 /* ImageInformationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C5AFE3208DF37000943839 /* ImageInformationViewController.swift */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 003D4AAA20836F2E00C6E4A0 /* ARMuseum.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ARMuseum.app; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 003D4AAD20836F2E00C6E4A0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 23 | 003D4AAF20836F2E00C6E4A0 /* Scene.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Scene.sks; sourceTree = ""; }; 24 | 003D4AB120836F2E00C6E4A0 /* Scene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scene.swift; sourceTree = ""; }; 25 | 003D4AB320836F2E00C6E4A0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 26 | 003D4AB620836F2E00C6E4A0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | 003D4AB820836F3000C6E4A0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | 003D4ABB20836F3000C6E4A0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 29 | 003D4ABD20836F3100C6E4A0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | 004D308F2095D38600BA1C03 /* ARMuseum - Final App.m4v */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ARMuseum - Final App.m4v"; sourceTree = ""; }; 31 | 00C5AFE3208DF37000943839 /* ImageInformationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageInformationViewController.swift; sourceTree = ""; }; 32 | /* End PBXFileReference section */ 33 | 34 | /* Begin PBXFrameworksBuildPhase section */ 35 | 003D4AA720836F2E00C6E4A0 /* Frameworks */ = { 36 | isa = PBXFrameworksBuildPhase; 37 | buildActionMask = 2147483647; 38 | files = ( 39 | ); 40 | runOnlyForDeploymentPostprocessing = 0; 41 | }; 42 | /* End PBXFrameworksBuildPhase section */ 43 | 44 | /* Begin PBXGroup section */ 45 | 003D4AA120836F2E00C6E4A0 = { 46 | isa = PBXGroup; 47 | children = ( 48 | 003D4AAC20836F2E00C6E4A0 /* ARMuseum */, 49 | 003D4AAB20836F2E00C6E4A0 /* Products */, 50 | ); 51 | sourceTree = ""; 52 | }; 53 | 003D4AAB20836F2E00C6E4A0 /* Products */ = { 54 | isa = PBXGroup; 55 | children = ( 56 | 003D4AAA20836F2E00C6E4A0 /* ARMuseum.app */, 57 | ); 58 | name = Products; 59 | sourceTree = ""; 60 | }; 61 | 003D4AAC20836F2E00C6E4A0 /* ARMuseum */ = { 62 | isa = PBXGroup; 63 | children = ( 64 | 003D4AAD20836F2E00C6E4A0 /* AppDelegate.swift */, 65 | 003D4AAF20836F2E00C6E4A0 /* Scene.sks */, 66 | 003D4AB120836F2E00C6E4A0 /* Scene.swift */, 67 | 003D4AB320836F2E00C6E4A0 /* ViewController.swift */, 68 | 003D4AB520836F2E00C6E4A0 /* Main.storyboard */, 69 | 003D4AB820836F3000C6E4A0 /* Assets.xcassets */, 70 | 003D4ABA20836F3000C6E4A0 /* LaunchScreen.storyboard */, 71 | 003D4ABD20836F3100C6E4A0 /* Info.plist */, 72 | 00C5AFE3208DF37000943839 /* ImageInformationViewController.swift */, 73 | 004D308F2095D38600BA1C03 /* ARMuseum - Final App.m4v */, 74 | ); 75 | path = ARMuseum; 76 | sourceTree = ""; 77 | }; 78 | /* End PBXGroup section */ 79 | 80 | /* Begin PBXNativeTarget section */ 81 | 003D4AA920836F2E00C6E4A0 /* ARMuseum */ = { 82 | isa = PBXNativeTarget; 83 | buildConfigurationList = 003D4AC020836F3100C6E4A0 /* Build configuration list for PBXNativeTarget "ARMuseum" */; 84 | buildPhases = ( 85 | 003D4AA620836F2E00C6E4A0 /* Sources */, 86 | 003D4AA720836F2E00C6E4A0 /* Frameworks */, 87 | 003D4AA820836F2E00C6E4A0 /* Resources */, 88 | ); 89 | buildRules = ( 90 | ); 91 | dependencies = ( 92 | ); 93 | name = ARMuseum; 94 | productName = ARMuseum; 95 | productReference = 003D4AAA20836F2E00C6E4A0 /* ARMuseum.app */; 96 | productType = "com.apple.product-type.application"; 97 | }; 98 | /* End PBXNativeTarget section */ 99 | 100 | /* Begin PBXProject section */ 101 | 003D4AA220836F2E00C6E4A0 /* Project object */ = { 102 | isa = PBXProject; 103 | attributes = { 104 | LastSwiftUpdateCheck = 0930; 105 | LastUpgradeCheck = 0930; 106 | ORGANIZATIONNAME = "code & co."; 107 | TargetAttributes = { 108 | 003D4AA920836F2E00C6E4A0 = { 109 | CreatedOnToolsVersion = 9.3; 110 | }; 111 | }; 112 | }; 113 | buildConfigurationList = 003D4AA520836F2E00C6E4A0 /* Build configuration list for PBXProject "ARMuseum" */; 114 | compatibilityVersion = "Xcode 9.3"; 115 | developmentRegion = en; 116 | hasScannedForEncodings = 0; 117 | knownRegions = ( 118 | en, 119 | Base, 120 | ); 121 | mainGroup = 003D4AA120836F2E00C6E4A0; 122 | productRefGroup = 003D4AAB20836F2E00C6E4A0 /* Products */; 123 | projectDirPath = ""; 124 | projectRoot = ""; 125 | targets = ( 126 | 003D4AA920836F2E00C6E4A0 /* ARMuseum */, 127 | ); 128 | }; 129 | /* End PBXProject section */ 130 | 131 | /* Begin PBXResourcesBuildPhase section */ 132 | 003D4AA820836F2E00C6E4A0 /* Resources */ = { 133 | isa = PBXResourcesBuildPhase; 134 | buildActionMask = 2147483647; 135 | files = ( 136 | 003D4AB020836F2E00C6E4A0 /* Scene.sks in Resources */, 137 | 003D4ABC20836F3000C6E4A0 /* LaunchScreen.storyboard in Resources */, 138 | 003D4AB920836F3000C6E4A0 /* Assets.xcassets in Resources */, 139 | 003D4AB720836F2E00C6E4A0 /* Main.storyboard in Resources */, 140 | ); 141 | runOnlyForDeploymentPostprocessing = 0; 142 | }; 143 | /* End PBXResourcesBuildPhase section */ 144 | 145 | /* Begin PBXSourcesBuildPhase section */ 146 | 003D4AA620836F2E00C6E4A0 /* Sources */ = { 147 | isa = PBXSourcesBuildPhase; 148 | buildActionMask = 2147483647; 149 | files = ( 150 | 003D4AB420836F2E00C6E4A0 /* ViewController.swift in Sources */, 151 | 003D4AB220836F2E00C6E4A0 /* Scene.swift in Sources */, 152 | 003D4AAE20836F2E00C6E4A0 /* AppDelegate.swift in Sources */, 153 | 00C5AFE4208DF37000943839 /* ImageInformationViewController.swift in Sources */, 154 | ); 155 | runOnlyForDeploymentPostprocessing = 0; 156 | }; 157 | /* End PBXSourcesBuildPhase section */ 158 | 159 | /* Begin PBXVariantGroup section */ 160 | 003D4AB520836F2E00C6E4A0 /* Main.storyboard */ = { 161 | isa = PBXVariantGroup; 162 | children = ( 163 | 003D4AB620836F2E00C6E4A0 /* Base */, 164 | ); 165 | name = Main.storyboard; 166 | sourceTree = ""; 167 | }; 168 | 003D4ABA20836F3000C6E4A0 /* LaunchScreen.storyboard */ = { 169 | isa = PBXVariantGroup; 170 | children = ( 171 | 003D4ABB20836F3000C6E4A0 /* Base */, 172 | ); 173 | name = LaunchScreen.storyboard; 174 | sourceTree = ""; 175 | }; 176 | /* End PBXVariantGroup section */ 177 | 178 | /* Begin XCBuildConfiguration section */ 179 | 003D4ABE20836F3100C6E4A0 /* Debug */ = { 180 | isa = XCBuildConfiguration; 181 | buildSettings = { 182 | ALWAYS_SEARCH_USER_PATHS = NO; 183 | CLANG_ANALYZER_NONNULL = YES; 184 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 185 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 186 | CLANG_CXX_LIBRARY = "libc++"; 187 | CLANG_ENABLE_MODULES = YES; 188 | CLANG_ENABLE_OBJC_ARC = YES; 189 | CLANG_ENABLE_OBJC_WEAK = YES; 190 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 191 | CLANG_WARN_BOOL_CONVERSION = YES; 192 | CLANG_WARN_COMMA = YES; 193 | CLANG_WARN_CONSTANT_CONVERSION = YES; 194 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 195 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 196 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 197 | CLANG_WARN_EMPTY_BODY = YES; 198 | CLANG_WARN_ENUM_CONVERSION = YES; 199 | CLANG_WARN_INFINITE_RECURSION = YES; 200 | CLANG_WARN_INT_CONVERSION = YES; 201 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 202 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 203 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 204 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 205 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 206 | CLANG_WARN_STRICT_PROTOTYPES = YES; 207 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 208 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 209 | CLANG_WARN_UNREACHABLE_CODE = YES; 210 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 211 | CODE_SIGN_IDENTITY = "iPhone Developer"; 212 | COPY_PHASE_STRIP = NO; 213 | DEBUG_INFORMATION_FORMAT = dwarf; 214 | ENABLE_STRICT_OBJC_MSGSEND = YES; 215 | ENABLE_TESTABILITY = YES; 216 | GCC_C_LANGUAGE_STANDARD = gnu11; 217 | GCC_DYNAMIC_NO_PIC = NO; 218 | GCC_NO_COMMON_BLOCKS = YES; 219 | GCC_OPTIMIZATION_LEVEL = 0; 220 | GCC_PREPROCESSOR_DEFINITIONS = ( 221 | "DEBUG=1", 222 | "$(inherited)", 223 | ); 224 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 225 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 226 | GCC_WARN_UNDECLARED_SELECTOR = YES; 227 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 228 | GCC_WARN_UNUSED_FUNCTION = YES; 229 | GCC_WARN_UNUSED_VARIABLE = YES; 230 | IPHONEOS_DEPLOYMENT_TARGET = 11.3; 231 | MTL_ENABLE_DEBUG_INFO = YES; 232 | ONLY_ACTIVE_ARCH = YES; 233 | SDKROOT = iphoneos; 234 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 235 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 236 | }; 237 | name = Debug; 238 | }; 239 | 003D4ABF20836F3100C6E4A0 /* Release */ = { 240 | isa = XCBuildConfiguration; 241 | buildSettings = { 242 | ALWAYS_SEARCH_USER_PATHS = NO; 243 | CLANG_ANALYZER_NONNULL = YES; 244 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 245 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 246 | CLANG_CXX_LIBRARY = "libc++"; 247 | CLANG_ENABLE_MODULES = YES; 248 | CLANG_ENABLE_OBJC_ARC = YES; 249 | CLANG_ENABLE_OBJC_WEAK = 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-with-dsym"; 274 | ENABLE_NS_ASSERTIONS = NO; 275 | ENABLE_STRICT_OBJC_MSGSEND = YES; 276 | GCC_C_LANGUAGE_STANDARD = gnu11; 277 | GCC_NO_COMMON_BLOCKS = YES; 278 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 279 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 280 | GCC_WARN_UNDECLARED_SELECTOR = YES; 281 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 282 | GCC_WARN_UNUSED_FUNCTION = YES; 283 | GCC_WARN_UNUSED_VARIABLE = YES; 284 | IPHONEOS_DEPLOYMENT_TARGET = 11.3; 285 | MTL_ENABLE_DEBUG_INFO = NO; 286 | SDKROOT = iphoneos; 287 | SWIFT_COMPILATION_MODE = wholemodule; 288 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 289 | VALIDATE_PRODUCT = YES; 290 | }; 291 | name = Release; 292 | }; 293 | 003D4AC120836F3100C6E4A0 /* Debug */ = { 294 | isa = XCBuildConfiguration; 295 | buildSettings = { 296 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 297 | CODE_SIGN_STYLE = Automatic; 298 | DEVELOPMENT_TEAM = 4326Z342R9; 299 | INFOPLIST_FILE = ARMuseum/Info.plist; 300 | IPHONEOS_DEPLOYMENT_TARGET = 11.3; 301 | LD_RUNPATH_SEARCH_PATHS = ( 302 | "$(inherited)", 303 | "@executable_path/Frameworks", 304 | ); 305 | PRODUCT_BUNDLE_IDENTIFIER = com.codeandco.ARMuseum; 306 | PRODUCT_NAME = "$(TARGET_NAME)"; 307 | SWIFT_VERSION = 4.0; 308 | TARGETED_DEVICE_FAMILY = "1,2"; 309 | }; 310 | name = Debug; 311 | }; 312 | 003D4AC220836F3100C6E4A0 /* Release */ = { 313 | isa = XCBuildConfiguration; 314 | buildSettings = { 315 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 316 | CODE_SIGN_STYLE = Automatic; 317 | DEVELOPMENT_TEAM = 4326Z342R9; 318 | INFOPLIST_FILE = ARMuseum/Info.plist; 319 | IPHONEOS_DEPLOYMENT_TARGET = 11.3; 320 | LD_RUNPATH_SEARCH_PATHS = ( 321 | "$(inherited)", 322 | "@executable_path/Frameworks", 323 | ); 324 | PRODUCT_BUNDLE_IDENTIFIER = com.codeandco.ARMuseum; 325 | PRODUCT_NAME = "$(TARGET_NAME)"; 326 | SWIFT_VERSION = 4.0; 327 | TARGETED_DEVICE_FAMILY = "1,2"; 328 | }; 329 | name = Release; 330 | }; 331 | /* End XCBuildConfiguration section */ 332 | 333 | /* Begin XCConfigurationList section */ 334 | 003D4AA520836F2E00C6E4A0 /* Build configuration list for PBXProject "ARMuseum" */ = { 335 | isa = XCConfigurationList; 336 | buildConfigurations = ( 337 | 003D4ABE20836F3100C6E4A0 /* Debug */, 338 | 003D4ABF20836F3100C6E4A0 /* Release */, 339 | ); 340 | defaultConfigurationIsVisible = 0; 341 | defaultConfigurationName = Release; 342 | }; 343 | 003D4AC020836F3100C6E4A0 /* Build configuration list for PBXNativeTarget "ARMuseum" */ = { 344 | isa = XCConfigurationList; 345 | buildConfigurations = ( 346 | 003D4AC120836F3100C6E4A0 /* Debug */, 347 | 003D4AC220836F3100C6E4A0 /* Release */, 348 | ); 349 | defaultConfigurationIsVisible = 0; 350 | defaultConfigurationName = Release; 351 | }; 352 | /* End XCConfigurationList section */ 353 | }; 354 | rootObject = 003D4AA220836F2E00C6E4A0 /* Project object */; 355 | } 356 | -------------------------------------------------------------------------------- /ARMuseum.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ARMuseum.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ARMuseum.xcodeproj/project.xcworkspace/xcuserdata/lukasingelheim.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-and-co/ARMuseum/8b2fbf2ee10fdbbb34049029d5f83b113f763de9/ARMuseum.xcodeproj/project.xcworkspace/xcuserdata/lukasingelheim.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ARMuseum.xcodeproj/xcuserdata/lukasingelheim.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ARMuseum.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ARMuseum/ARMuseum - Final App.m4v: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-and-co/ARMuseum/8b2fbf2ee10fdbbb34049029d5f83b113f763de9/ARMuseum/ARMuseum - Final App.m4v -------------------------------------------------------------------------------- /ARMuseum/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | @UIApplicationMain 4 | class AppDelegate: UIResponder, UIApplicationDelegate { 5 | var window: UIWindow? 6 | 7 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 8 | 9 | return true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ARMuseum/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /ARMuseum/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARMuseum/Assets.xcassets/Mona Lisa Room.arresourcegroup/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "resources" : [ 7 | { 8 | "filename" : "monalisa.arreferenceimage" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /ARMuseum/Assets.xcassets/Mona Lisa Room.arresourcegroup/monalisa.arreferenceimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "monalisa.jpg" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "width" : 14.5, 14 | "unit" : "centimeters" 15 | } 16 | } -------------------------------------------------------------------------------- /ARMuseum/Assets.xcassets/Mona Lisa Room.arresourcegroup/monalisa.arreferenceimage/monalisa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-and-co/ARMuseum/8b2fbf2ee10fdbbb34049029d5f83b113f763de9/ARMuseum/Assets.xcassets/Mona Lisa Room.arresourcegroup/monalisa.arreferenceimage/monalisa.jpg -------------------------------------------------------------------------------- /ARMuseum/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 | -------------------------------------------------------------------------------- /ARMuseum/Base.lproj/Main.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 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 52 | 53 | 54 | 55 | Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. 56 | 57 | 58 | 59 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /ARMuseum/ImageInformationViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ImageInformationViewController : UIViewController { 4 | @IBOutlet weak var nameLabel: UILabel! 5 | @IBOutlet weak var imageView: UIImageView! 6 | @IBOutlet weak var descriptionText: UITextView! 7 | 8 | var imageInformation : ImageInformation? 9 | 10 | override func viewDidLoad() { 11 | super.viewDidLoad() 12 | 13 | if let actualImageInformation = imageInformation { 14 | self.nameLabel.text = actualImageInformation.name 15 | self.imageView.image = actualImageInformation.image 16 | self.descriptionText.text = actualImageInformation.description 17 | } 18 | } 19 | 20 | @IBAction func dismissView(_ sender: Any) { 21 | self.dismiss(animated: true, completion: nil) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ARMuseum/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 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | arkit 33 | 34 | UIStatusBarHidden 35 | 36 | UISupportedInterfaceOrientations 37 | 38 | UIInterfaceOrientationPortrait 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UISupportedInterfaceOrientations~ipad 43 | 44 | UIInterfaceOrientationPortrait 45 | UIInterfaceOrientationPortraitUpsideDown 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /ARMuseum/Scene.sks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-and-co/ARMuseum/8b2fbf2ee10fdbbb34049029d5f83b113f763de9/ARMuseum/Scene.sks -------------------------------------------------------------------------------- /ARMuseum/Scene.swift: -------------------------------------------------------------------------------- 1 | import SpriteKit 2 | import ARKit 3 | 4 | class Scene: SKScene {} 5 | -------------------------------------------------------------------------------- /ARMuseum/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import SpriteKit 3 | import ARKit 4 | 5 | struct ImageInformation { 6 | let name: String 7 | let description: String 8 | let image: UIImage 9 | } 10 | 11 | class ViewController: UIViewController, ARSKViewDelegate { 12 | @IBOutlet var sceneView: ARSKView! 13 | var selectedImage : ImageInformation? 14 | 15 | let images = ["monalisa" : ImageInformation(name: "Mona Lisa", description: "The Mona Lisa is a half-length portrait painting by the Italian Renaissance artist Leonardo da Vinci that has been described as 'the best known, the most visited, the most written about, the most sung about, the most parodied work of art in the world'.", image: UIImage(named: "monalisa")!)] 16 | 17 | 18 | override func viewDidLoad() { 19 | super.viewDidLoad() 20 | 21 | sceneView.delegate = self 22 | sceneView.showsFPS = true 23 | sceneView.showsNodeCount = true 24 | 25 | if let scene = SKScene(fileNamed: "Scene") { 26 | sceneView.presentScene(scene) 27 | } 28 | 29 | guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "Mona Lisa Room", bundle: nil) else { 30 | fatalError("Missing expected asset catalog resources.") 31 | } 32 | 33 | let configuration = ARWorldTrackingConfiguration() 34 | configuration.detectionImages = referenceImages 35 | 36 | sceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors]) 37 | } 38 | 39 | 40 | // MARK: - ARSKViewDelegate 41 | func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? { 42 | 43 | if let imageAnchor = anchor as? ARImageAnchor, 44 | let referenceImageName = imageAnchor.referenceImage.name, 45 | let scannedImage = self.images[referenceImageName] { 46 | 47 | self.selectedImage = scannedImage 48 | 49 | self.performSegue(withIdentifier: "showImageInformation", sender: self) 50 | 51 | return imageSeenMarker() 52 | } 53 | 54 | return nil 55 | } 56 | 57 | private func imageSeenMarker() -> SKLabelNode { 58 | let labelNode = SKLabelNode(text: "✅") 59 | labelNode.horizontalAlignmentMode = .center 60 | labelNode.verticalAlignmentMode = .center 61 | 62 | return labelNode 63 | } 64 | 65 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 66 | if segue.identifier == "showImageInformation"{ 67 | if let imageInformationVC = segue.destination as? ImageInformationViewController, 68 | let actualSelectedImage = selectedImage { 69 | imageInformationVC.imageInformation = actualSelectedImage 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ARMuseum 2 | Building an iPhone AR Museum App in iOS 11 with Apple’s ARKit Image Recognition. 3 | 4 | Final code for the tutorial that can be found here: https://medium.com/@codeandco/building-an-iphone-ar-museum-app-in-ios-11-with-apples-arkit-image-recognition-b07febd90a91 5 | --------------------------------------------------------------------------------