├── .gitignore ├── README.md ├── iBeaconTemplate.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── iBeaconTemplate.xccheckout └── xcuserdata │ └── jnsears.xcuserdatad │ └── xcschemes │ ├── iBeaconTemplate.xcscheme │ └── xcschememanagement.plist ├── iBeaconTemplate ├── Base.lproj │ └── Main.storyboard ├── IMAppDelegate.h ├── IMAppDelegate.m ├── IMViewController.h ├── IMViewController.m ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── LaunchImage.launchimage │ │ └── Contents.json ├── en.lproj │ └── InfoPlist.strings ├── iBeaconTemplate-Info.plist ├── iBeaconTemplate-Prefix.pch └── main.m └── iBeaconTemplateTests ├── en.lproj └── InfoPlist.strings ├── iBeaconTemplateTests-Info.plist └── iBeaconTemplateTests.m /.gitignore: -------------------------------------------------------------------------------- 1 | Cinder 2 | _Store 3 | *.swp 4 | *~.nib 5 | 6 | build/ 7 | 8 | *.pbxuser 9 | *.perspective 10 | *.perspectivev3 11 | 12 | *.mode1v3 13 | *.mode2v3 14 | 15 | xcuserdata 16 | DerivedData 17 | 18 | .DS_Store 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ibeacon-tutorial 2 | ================ 3 | 4 | Tutorial template for getting started with iBeacon 5 | 6 | See http://ibeaconmodules.us/blogs/news/14279747-tutorial-getting-started-with-ibeacon-app-development for details. 7 | -------------------------------------------------------------------------------- /iBeaconTemplate.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 44DF2A7619377216001158B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44DF2A7519377216001158B0 /* Foundation.framework */; }; 11 | 44DF2A7819377216001158B0 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44DF2A7719377216001158B0 /* CoreGraphics.framework */; }; 12 | 44DF2A7A19377216001158B0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44DF2A7919377216001158B0 /* UIKit.framework */; }; 13 | 44DF2A8019377216001158B0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 44DF2A7E19377216001158B0 /* InfoPlist.strings */; }; 14 | 44DF2A8219377216001158B0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 44DF2A8119377216001158B0 /* main.m */; }; 15 | 44DF2A8619377216001158B0 /* IMAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 44DF2A8519377216001158B0 /* IMAppDelegate.m */; }; 16 | 44DF2A8919377216001158B0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 44DF2A8719377216001158B0 /* Main.storyboard */; }; 17 | 44DF2A8C19377216001158B0 /* IMViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 44DF2A8B19377216001158B0 /* IMViewController.m */; }; 18 | 44DF2A8E19377216001158B0 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 44DF2A8D19377216001158B0 /* Images.xcassets */; }; 19 | 44DF2A9519377216001158B0 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44DF2A9419377216001158B0 /* XCTest.framework */; }; 20 | 44DF2A9619377216001158B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44DF2A7519377216001158B0 /* Foundation.framework */; }; 21 | 44DF2A9719377216001158B0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44DF2A7919377216001158B0 /* UIKit.framework */; }; 22 | 44DF2A9F19377216001158B0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 44DF2A9D19377216001158B0 /* InfoPlist.strings */; }; 23 | 44DF2AA119377216001158B0 /* iBeaconTemplateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44DF2AA019377216001158B0 /* iBeaconTemplateTests.m */; }; 24 | 44DF2AAB193775D3001158B0 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44DF2AAA193775D3001158B0 /* CoreLocation.framework */; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXContainerItemProxy section */ 28 | 44DF2A9819377216001158B0 /* PBXContainerItemProxy */ = { 29 | isa = PBXContainerItemProxy; 30 | containerPortal = 44DF2A6A19377216001158B0 /* Project object */; 31 | proxyType = 1; 32 | remoteGlobalIDString = 44DF2A7119377216001158B0; 33 | remoteInfo = iBeaconTemplate; 34 | }; 35 | /* End PBXContainerItemProxy section */ 36 | 37 | /* Begin PBXFileReference section */ 38 | 44DF2A7219377216001158B0 /* iBeaconTemplate.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iBeaconTemplate.app; sourceTree = BUILT_PRODUCTS_DIR; }; 39 | 44DF2A7519377216001158B0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 40 | 44DF2A7719377216001158B0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 41 | 44DF2A7919377216001158B0 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 42 | 44DF2A7D19377216001158B0 /* iBeaconTemplate-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iBeaconTemplate-Info.plist"; sourceTree = ""; }; 43 | 44DF2A7F19377216001158B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 44 | 44DF2A8119377216001158B0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 45 | 44DF2A8319377216001158B0 /* iBeaconTemplate-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iBeaconTemplate-Prefix.pch"; sourceTree = ""; }; 46 | 44DF2A8419377216001158B0 /* IMAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IMAppDelegate.h; sourceTree = ""; }; 47 | 44DF2A8519377216001158B0 /* IMAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IMAppDelegate.m; sourceTree = ""; }; 48 | 44DF2A8819377216001158B0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 49 | 44DF2A8A19377216001158B0 /* IMViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IMViewController.h; sourceTree = ""; }; 50 | 44DF2A8B19377216001158B0 /* IMViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IMViewController.m; sourceTree = ""; }; 51 | 44DF2A8D19377216001158B0 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 52 | 44DF2A9319377216001158B0 /* iBeaconTemplateTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iBeaconTemplateTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | 44DF2A9419377216001158B0 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 54 | 44DF2A9C19377216001158B0 /* iBeaconTemplateTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iBeaconTemplateTests-Info.plist"; sourceTree = ""; }; 55 | 44DF2A9E19377216001158B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 56 | 44DF2AA019377216001158B0 /* iBeaconTemplateTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iBeaconTemplateTests.m; sourceTree = ""; }; 57 | 44DF2AAA193775D3001158B0 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 58 | /* End PBXFileReference section */ 59 | 60 | /* Begin PBXFrameworksBuildPhase section */ 61 | 44DF2A6F19377216001158B0 /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | 44DF2AAB193775D3001158B0 /* CoreLocation.framework in Frameworks */, 66 | 44DF2A7819377216001158B0 /* CoreGraphics.framework in Frameworks */, 67 | 44DF2A7A19377216001158B0 /* UIKit.framework in Frameworks */, 68 | 44DF2A7619377216001158B0 /* Foundation.framework in Frameworks */, 69 | ); 70 | runOnlyForDeploymentPostprocessing = 0; 71 | }; 72 | 44DF2A9019377216001158B0 /* Frameworks */ = { 73 | isa = PBXFrameworksBuildPhase; 74 | buildActionMask = 2147483647; 75 | files = ( 76 | 44DF2A9519377216001158B0 /* XCTest.framework in Frameworks */, 77 | 44DF2A9719377216001158B0 /* UIKit.framework in Frameworks */, 78 | 44DF2A9619377216001158B0 /* Foundation.framework in Frameworks */, 79 | ); 80 | runOnlyForDeploymentPostprocessing = 0; 81 | }; 82 | /* End PBXFrameworksBuildPhase section */ 83 | 84 | /* Begin PBXGroup section */ 85 | 44DF2A6919377216001158B0 = { 86 | isa = PBXGroup; 87 | children = ( 88 | 44DF2A7B19377216001158B0 /* iBeaconTemplate */, 89 | 44DF2A9A19377216001158B0 /* iBeaconTemplateTests */, 90 | 44DF2A7419377216001158B0 /* Frameworks */, 91 | 44DF2A7319377216001158B0 /* Products */, 92 | ); 93 | sourceTree = ""; 94 | }; 95 | 44DF2A7319377216001158B0 /* Products */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 44DF2A7219377216001158B0 /* iBeaconTemplate.app */, 99 | 44DF2A9319377216001158B0 /* iBeaconTemplateTests.xctest */, 100 | ); 101 | name = Products; 102 | sourceTree = ""; 103 | }; 104 | 44DF2A7419377216001158B0 /* Frameworks */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 44DF2AAA193775D3001158B0 /* CoreLocation.framework */, 108 | 44DF2A7519377216001158B0 /* Foundation.framework */, 109 | 44DF2A7719377216001158B0 /* CoreGraphics.framework */, 110 | 44DF2A7919377216001158B0 /* UIKit.framework */, 111 | 44DF2A9419377216001158B0 /* XCTest.framework */, 112 | ); 113 | name = Frameworks; 114 | sourceTree = ""; 115 | }; 116 | 44DF2A7B19377216001158B0 /* iBeaconTemplate */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | 44DF2A8419377216001158B0 /* IMAppDelegate.h */, 120 | 44DF2A8519377216001158B0 /* IMAppDelegate.m */, 121 | 44DF2A8719377216001158B0 /* Main.storyboard */, 122 | 44DF2A8A19377216001158B0 /* IMViewController.h */, 123 | 44DF2A8B19377216001158B0 /* IMViewController.m */, 124 | 44DF2A8D19377216001158B0 /* Images.xcassets */, 125 | 44DF2A7C19377216001158B0 /* Supporting Files */, 126 | ); 127 | path = iBeaconTemplate; 128 | sourceTree = ""; 129 | }; 130 | 44DF2A7C19377216001158B0 /* Supporting Files */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 44DF2A7D19377216001158B0 /* iBeaconTemplate-Info.plist */, 134 | 44DF2A7E19377216001158B0 /* InfoPlist.strings */, 135 | 44DF2A8119377216001158B0 /* main.m */, 136 | 44DF2A8319377216001158B0 /* iBeaconTemplate-Prefix.pch */, 137 | ); 138 | name = "Supporting Files"; 139 | sourceTree = ""; 140 | }; 141 | 44DF2A9A19377216001158B0 /* iBeaconTemplateTests */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 44DF2AA019377216001158B0 /* iBeaconTemplateTests.m */, 145 | 44DF2A9B19377216001158B0 /* Supporting Files */, 146 | ); 147 | path = iBeaconTemplateTests; 148 | sourceTree = ""; 149 | }; 150 | 44DF2A9B19377216001158B0 /* Supporting Files */ = { 151 | isa = PBXGroup; 152 | children = ( 153 | 44DF2A9C19377216001158B0 /* iBeaconTemplateTests-Info.plist */, 154 | 44DF2A9D19377216001158B0 /* InfoPlist.strings */, 155 | ); 156 | name = "Supporting Files"; 157 | sourceTree = ""; 158 | }; 159 | /* End PBXGroup section */ 160 | 161 | /* Begin PBXNativeTarget section */ 162 | 44DF2A7119377216001158B0 /* iBeaconTemplate */ = { 163 | isa = PBXNativeTarget; 164 | buildConfigurationList = 44DF2AA419377216001158B0 /* Build configuration list for PBXNativeTarget "iBeaconTemplate" */; 165 | buildPhases = ( 166 | 44DF2A6E19377216001158B0 /* Sources */, 167 | 44DF2A6F19377216001158B0 /* Frameworks */, 168 | 44DF2A7019377216001158B0 /* Resources */, 169 | ); 170 | buildRules = ( 171 | ); 172 | dependencies = ( 173 | ); 174 | name = iBeaconTemplate; 175 | productName = iBeaconTemplate; 176 | productReference = 44DF2A7219377216001158B0 /* iBeaconTemplate.app */; 177 | productType = "com.apple.product-type.application"; 178 | }; 179 | 44DF2A9219377216001158B0 /* iBeaconTemplateTests */ = { 180 | isa = PBXNativeTarget; 181 | buildConfigurationList = 44DF2AA719377216001158B0 /* Build configuration list for PBXNativeTarget "iBeaconTemplateTests" */; 182 | buildPhases = ( 183 | 44DF2A8F19377216001158B0 /* Sources */, 184 | 44DF2A9019377216001158B0 /* Frameworks */, 185 | 44DF2A9119377216001158B0 /* Resources */, 186 | ); 187 | buildRules = ( 188 | ); 189 | dependencies = ( 190 | 44DF2A9919377216001158B0 /* PBXTargetDependency */, 191 | ); 192 | name = iBeaconTemplateTests; 193 | productName = iBeaconTemplateTests; 194 | productReference = 44DF2A9319377216001158B0 /* iBeaconTemplateTests.xctest */; 195 | productType = "com.apple.product-type.bundle.unit-test"; 196 | }; 197 | /* End PBXNativeTarget section */ 198 | 199 | /* Begin PBXProject section */ 200 | 44DF2A6A19377216001158B0 /* Project object */ = { 201 | isa = PBXProject; 202 | attributes = { 203 | CLASSPREFIX = IM; 204 | LastUpgradeCheck = 0510; 205 | ORGANIZATIONNAME = iBeaconModules.us; 206 | TargetAttributes = { 207 | 44DF2A7119377216001158B0 = { 208 | SystemCapabilities = { 209 | com.apple.BackgroundModes = { 210 | enabled = 1; 211 | }; 212 | }; 213 | }; 214 | 44DF2A9219377216001158B0 = { 215 | TestTargetID = 44DF2A7119377216001158B0; 216 | }; 217 | }; 218 | }; 219 | buildConfigurationList = 44DF2A6D19377216001158B0 /* Build configuration list for PBXProject "iBeaconTemplate" */; 220 | compatibilityVersion = "Xcode 3.2"; 221 | developmentRegion = English; 222 | hasScannedForEncodings = 0; 223 | knownRegions = ( 224 | en, 225 | Base, 226 | ); 227 | mainGroup = 44DF2A6919377216001158B0; 228 | productRefGroup = 44DF2A7319377216001158B0 /* Products */; 229 | projectDirPath = ""; 230 | projectRoot = ""; 231 | targets = ( 232 | 44DF2A7119377216001158B0 /* iBeaconTemplate */, 233 | 44DF2A9219377216001158B0 /* iBeaconTemplateTests */, 234 | ); 235 | }; 236 | /* End PBXProject section */ 237 | 238 | /* Begin PBXResourcesBuildPhase section */ 239 | 44DF2A7019377216001158B0 /* Resources */ = { 240 | isa = PBXResourcesBuildPhase; 241 | buildActionMask = 2147483647; 242 | files = ( 243 | 44DF2A8E19377216001158B0 /* Images.xcassets in Resources */, 244 | 44DF2A8019377216001158B0 /* InfoPlist.strings in Resources */, 245 | 44DF2A8919377216001158B0 /* Main.storyboard in Resources */, 246 | ); 247 | runOnlyForDeploymentPostprocessing = 0; 248 | }; 249 | 44DF2A9119377216001158B0 /* Resources */ = { 250 | isa = PBXResourcesBuildPhase; 251 | buildActionMask = 2147483647; 252 | files = ( 253 | 44DF2A9F19377216001158B0 /* InfoPlist.strings in Resources */, 254 | ); 255 | runOnlyForDeploymentPostprocessing = 0; 256 | }; 257 | /* End PBXResourcesBuildPhase section */ 258 | 259 | /* Begin PBXSourcesBuildPhase section */ 260 | 44DF2A6E19377216001158B0 /* Sources */ = { 261 | isa = PBXSourcesBuildPhase; 262 | buildActionMask = 2147483647; 263 | files = ( 264 | 44DF2A8619377216001158B0 /* IMAppDelegate.m in Sources */, 265 | 44DF2A8219377216001158B0 /* main.m in Sources */, 266 | 44DF2A8C19377216001158B0 /* IMViewController.m in Sources */, 267 | ); 268 | runOnlyForDeploymentPostprocessing = 0; 269 | }; 270 | 44DF2A8F19377216001158B0 /* Sources */ = { 271 | isa = PBXSourcesBuildPhase; 272 | buildActionMask = 2147483647; 273 | files = ( 274 | 44DF2AA119377216001158B0 /* iBeaconTemplateTests.m in Sources */, 275 | ); 276 | runOnlyForDeploymentPostprocessing = 0; 277 | }; 278 | /* End PBXSourcesBuildPhase section */ 279 | 280 | /* Begin PBXTargetDependency section */ 281 | 44DF2A9919377216001158B0 /* PBXTargetDependency */ = { 282 | isa = PBXTargetDependency; 283 | target = 44DF2A7119377216001158B0 /* iBeaconTemplate */; 284 | targetProxy = 44DF2A9819377216001158B0 /* PBXContainerItemProxy */; 285 | }; 286 | /* End PBXTargetDependency section */ 287 | 288 | /* Begin PBXVariantGroup section */ 289 | 44DF2A7E19377216001158B0 /* InfoPlist.strings */ = { 290 | isa = PBXVariantGroup; 291 | children = ( 292 | 44DF2A7F19377216001158B0 /* en */, 293 | ); 294 | name = InfoPlist.strings; 295 | sourceTree = ""; 296 | }; 297 | 44DF2A8719377216001158B0 /* Main.storyboard */ = { 298 | isa = PBXVariantGroup; 299 | children = ( 300 | 44DF2A8819377216001158B0 /* Base */, 301 | ); 302 | name = Main.storyboard; 303 | sourceTree = ""; 304 | }; 305 | 44DF2A9D19377216001158B0 /* InfoPlist.strings */ = { 306 | isa = PBXVariantGroup; 307 | children = ( 308 | 44DF2A9E19377216001158B0 /* en */, 309 | ); 310 | name = InfoPlist.strings; 311 | sourceTree = ""; 312 | }; 313 | /* End PBXVariantGroup section */ 314 | 315 | /* Begin XCBuildConfiguration section */ 316 | 44DF2AA219377216001158B0 /* Debug */ = { 317 | isa = XCBuildConfiguration; 318 | buildSettings = { 319 | ALWAYS_SEARCH_USER_PATHS = NO; 320 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 321 | CLANG_CXX_LIBRARY = "libc++"; 322 | CLANG_ENABLE_MODULES = YES; 323 | CLANG_ENABLE_OBJC_ARC = YES; 324 | CLANG_WARN_BOOL_CONVERSION = YES; 325 | CLANG_WARN_CONSTANT_CONVERSION = YES; 326 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 327 | CLANG_WARN_EMPTY_BODY = YES; 328 | CLANG_WARN_ENUM_CONVERSION = YES; 329 | CLANG_WARN_INT_CONVERSION = YES; 330 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 331 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 332 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 333 | COPY_PHASE_STRIP = NO; 334 | GCC_C_LANGUAGE_STANDARD = gnu99; 335 | GCC_DYNAMIC_NO_PIC = NO; 336 | GCC_OPTIMIZATION_LEVEL = 0; 337 | GCC_PREPROCESSOR_DEFINITIONS = ( 338 | "DEBUG=1", 339 | "$(inherited)", 340 | ); 341 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 342 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 343 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 344 | GCC_WARN_UNDECLARED_SELECTOR = YES; 345 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 346 | GCC_WARN_UNUSED_FUNCTION = YES; 347 | GCC_WARN_UNUSED_VARIABLE = YES; 348 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 349 | ONLY_ACTIVE_ARCH = YES; 350 | SDKROOT = iphoneos; 351 | }; 352 | name = Debug; 353 | }; 354 | 44DF2AA319377216001158B0 /* Release */ = { 355 | isa = XCBuildConfiguration; 356 | buildSettings = { 357 | ALWAYS_SEARCH_USER_PATHS = NO; 358 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 359 | CLANG_CXX_LIBRARY = "libc++"; 360 | CLANG_ENABLE_MODULES = YES; 361 | CLANG_ENABLE_OBJC_ARC = YES; 362 | CLANG_WARN_BOOL_CONVERSION = YES; 363 | CLANG_WARN_CONSTANT_CONVERSION = YES; 364 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 365 | CLANG_WARN_EMPTY_BODY = YES; 366 | CLANG_WARN_ENUM_CONVERSION = YES; 367 | CLANG_WARN_INT_CONVERSION = YES; 368 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 369 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 370 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 371 | COPY_PHASE_STRIP = YES; 372 | ENABLE_NS_ASSERTIONS = NO; 373 | GCC_C_LANGUAGE_STANDARD = gnu99; 374 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 375 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 376 | GCC_WARN_UNDECLARED_SELECTOR = YES; 377 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 378 | GCC_WARN_UNUSED_FUNCTION = YES; 379 | GCC_WARN_UNUSED_VARIABLE = YES; 380 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 381 | SDKROOT = iphoneos; 382 | VALIDATE_PRODUCT = YES; 383 | }; 384 | name = Release; 385 | }; 386 | 44DF2AA519377216001158B0 /* Debug */ = { 387 | isa = XCBuildConfiguration; 388 | buildSettings = { 389 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 390 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 391 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 392 | GCC_PREFIX_HEADER = "iBeaconTemplate/iBeaconTemplate-Prefix.pch"; 393 | INFOPLIST_FILE = "iBeaconTemplate/iBeaconTemplate-Info.plist"; 394 | PRODUCT_NAME = "$(TARGET_NAME)"; 395 | WRAPPER_EXTENSION = app; 396 | }; 397 | name = Debug; 398 | }; 399 | 44DF2AA619377216001158B0 /* Release */ = { 400 | isa = XCBuildConfiguration; 401 | buildSettings = { 402 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 403 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 404 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 405 | GCC_PREFIX_HEADER = "iBeaconTemplate/iBeaconTemplate-Prefix.pch"; 406 | INFOPLIST_FILE = "iBeaconTemplate/iBeaconTemplate-Info.plist"; 407 | PRODUCT_NAME = "$(TARGET_NAME)"; 408 | WRAPPER_EXTENSION = app; 409 | }; 410 | name = Release; 411 | }; 412 | 44DF2AA819377216001158B0 /* Debug */ = { 413 | isa = XCBuildConfiguration; 414 | buildSettings = { 415 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/iBeaconTemplate.app/iBeaconTemplate"; 416 | FRAMEWORK_SEARCH_PATHS = ( 417 | "$(SDKROOT)/Developer/Library/Frameworks", 418 | "$(inherited)", 419 | "$(DEVELOPER_FRAMEWORKS_DIR)", 420 | ); 421 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 422 | GCC_PREFIX_HEADER = "iBeaconTemplate/iBeaconTemplate-Prefix.pch"; 423 | GCC_PREPROCESSOR_DEFINITIONS = ( 424 | "DEBUG=1", 425 | "$(inherited)", 426 | ); 427 | INFOPLIST_FILE = "iBeaconTemplateTests/iBeaconTemplateTests-Info.plist"; 428 | PRODUCT_NAME = "$(TARGET_NAME)"; 429 | TEST_HOST = "$(BUNDLE_LOADER)"; 430 | WRAPPER_EXTENSION = xctest; 431 | }; 432 | name = Debug; 433 | }; 434 | 44DF2AA919377216001158B0 /* Release */ = { 435 | isa = XCBuildConfiguration; 436 | buildSettings = { 437 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/iBeaconTemplate.app/iBeaconTemplate"; 438 | FRAMEWORK_SEARCH_PATHS = ( 439 | "$(SDKROOT)/Developer/Library/Frameworks", 440 | "$(inherited)", 441 | "$(DEVELOPER_FRAMEWORKS_DIR)", 442 | ); 443 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 444 | GCC_PREFIX_HEADER = "iBeaconTemplate/iBeaconTemplate-Prefix.pch"; 445 | INFOPLIST_FILE = "iBeaconTemplateTests/iBeaconTemplateTests-Info.plist"; 446 | PRODUCT_NAME = "$(TARGET_NAME)"; 447 | TEST_HOST = "$(BUNDLE_LOADER)"; 448 | WRAPPER_EXTENSION = xctest; 449 | }; 450 | name = Release; 451 | }; 452 | /* End XCBuildConfiguration section */ 453 | 454 | /* Begin XCConfigurationList section */ 455 | 44DF2A6D19377216001158B0 /* Build configuration list for PBXProject "iBeaconTemplate" */ = { 456 | isa = XCConfigurationList; 457 | buildConfigurations = ( 458 | 44DF2AA219377216001158B0 /* Debug */, 459 | 44DF2AA319377216001158B0 /* Release */, 460 | ); 461 | defaultConfigurationIsVisible = 0; 462 | defaultConfigurationName = Release; 463 | }; 464 | 44DF2AA419377216001158B0 /* Build configuration list for PBXNativeTarget "iBeaconTemplate" */ = { 465 | isa = XCConfigurationList; 466 | buildConfigurations = ( 467 | 44DF2AA519377216001158B0 /* Debug */, 468 | 44DF2AA619377216001158B0 /* Release */, 469 | ); 470 | defaultConfigurationIsVisible = 0; 471 | defaultConfigurationName = Release; 472 | }; 473 | 44DF2AA719377216001158B0 /* Build configuration list for PBXNativeTarget "iBeaconTemplateTests" */ = { 474 | isa = XCConfigurationList; 475 | buildConfigurations = ( 476 | 44DF2AA819377216001158B0 /* Debug */, 477 | 44DF2AA919377216001158B0 /* Release */, 478 | ); 479 | defaultConfigurationIsVisible = 0; 480 | defaultConfigurationName = Release; 481 | }; 482 | /* End XCConfigurationList section */ 483 | }; 484 | rootObject = 44DF2A6A19377216001158B0 /* Project object */; 485 | } 486 | -------------------------------------------------------------------------------- /iBeaconTemplate.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /iBeaconTemplate.xcodeproj/project.xcworkspace/xcshareddata/iBeaconTemplate.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 03F6AFC9-BB00-4259-B841-4D3CBC12EE98 9 | IDESourceControlProjectName 10 | iBeaconTemplate 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 8D7D58E0-B202-4975-B5C4-E5208C4AAF9D 14 | ssh://github.com/relevante/ibeacon-tutorial.git 15 | 16 | IDESourceControlProjectPath 17 | iBeaconTemplate.xcodeproj/project.xcworkspace 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | 8D7D58E0-B202-4975-B5C4-E5208C4AAF9D 21 | ../.. 22 | 23 | IDESourceControlProjectURL 24 | ssh://github.com/relevante/ibeacon-tutorial.git 25 | IDESourceControlProjectVersion 26 | 110 27 | IDESourceControlProjectWCCIdentifier 28 | 8D7D58E0-B202-4975-B5C4-E5208C4AAF9D 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | 8D7D58E0-B202-4975-B5C4-E5208C4AAF9D 36 | IDESourceControlWCCName 37 | iBeaconTemplate 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /iBeaconTemplate.xcodeproj/xcuserdata/jnsears.xcuserdatad/xcschemes/iBeaconTemplate.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 61 | 62 | 68 | 69 | 70 | 71 | 72 | 73 | 79 | 80 | 86 | 87 | 88 | 89 | 91 | 92 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /iBeaconTemplate.xcodeproj/xcuserdata/jnsears.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | iBeaconTemplate.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 44DF2A7119377216001158B0 16 | 17 | primary 18 | 19 | 20 | 44DF2A9219377216001158B0 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /iBeaconTemplate/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 | -------------------------------------------------------------------------------- /iBeaconTemplate/IMAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // IMAppDelegate.h 3 | // iBeaconTemplate 4 | // 5 | // Created by James Nick Sears on 5/29/14. 6 | // Copyright (c) 2014 iBeaconModules.us. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface IMAppDelegate : UIResponder 13 | 14 | @property (strong, nonatomic) UIWindow *window; 15 | @property (strong, nonatomic) CLLocationManager *locationManager; 16 | @property CLProximity lastProximity; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /iBeaconTemplate/IMAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // IMAppDelegate.m 3 | // iBeaconTemplate 4 | // 5 | // Created by James Nick Sears on 5/29/14. 6 | // Copyright (c) 2014 iBeaconModules.us. All rights reserved. 7 | // 8 | 9 | #import "IMAppDelegate.h" 10 | #import "IMViewController.h" 11 | #import 12 | 13 | @implementation IMAppDelegate 14 | 15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 16 | { 17 | // Override point for customization after application launch. 18 | NSUUID *beaconUUID = [[NSUUID alloc] initWithUUIDString:@"EBEFD083-70A2-47C8-9837-E7B5634DF524"]; 19 | NSString *regionIdentifier = @"us.iBeaconModules"; 20 | CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:beaconUUID identifier:regionIdentifier]; 21 | 22 | switch ([CLLocationManager authorizationStatus]) { 23 | case kCLAuthorizationStatusAuthorizedAlways: 24 | NSLog(@"Authorized Always"); 25 | break; 26 | case kCLAuthorizationStatusAuthorizedWhenInUse: 27 | NSLog(@"Authorized when in use"); 28 | break; 29 | case kCLAuthorizationStatusDenied: 30 | NSLog(@"Denied"); 31 | break; 32 | case kCLAuthorizationStatusNotDetermined: 33 | NSLog(@"Not determined"); 34 | break; 35 | case kCLAuthorizationStatusRestricted: 36 | NSLog(@"Restricted"); 37 | break; 38 | 39 | default: 40 | break; 41 | } 42 | 43 | self.locationManager = [[CLLocationManager alloc] init]; 44 | if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 45 | [self.locationManager requestAlwaysAuthorization]; 46 | } 47 | self.locationManager.delegate = self; 48 | self.locationManager.pausesLocationUpdatesAutomatically = NO; 49 | [self.locationManager startMonitoringForRegion:beaconRegion]; 50 | [self.locationManager startRangingBeaconsInRegion:beaconRegion]; 51 | [self.locationManager startUpdatingLocation]; 52 | 53 | return YES; 54 | } 55 | 56 | -(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { 57 | [manager startRangingBeaconsInRegion:(CLBeaconRegion*)region]; 58 | [self.locationManager startUpdatingLocation]; 59 | 60 | NSLog(@"You entered the region."); 61 | [self sendLocalNotificationWithMessage:@"You entered the region."]; 62 | } 63 | 64 | -(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { 65 | [manager stopRangingBeaconsInRegion:(CLBeaconRegion*)region]; 66 | [self.locationManager stopUpdatingLocation]; 67 | 68 | NSLog(@"You exited the region."); 69 | [self sendLocalNotificationWithMessage:@"You exited the region."]; 70 | } 71 | 72 | -(void)sendLocalNotificationWithMessage:(NSString*)message { 73 | UILocalNotification *notification = [[UILocalNotification alloc] init]; 74 | notification.alertBody = message; 75 | [[UIApplication sharedApplication] scheduleLocalNotification:notification]; 76 | } 77 | 78 | -(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { 79 | NSString *message = @""; 80 | 81 | IMViewController *viewController = (IMViewController*)self.window.rootViewController; 82 | viewController.beacons = beacons; 83 | [viewController.tableView reloadData]; 84 | 85 | if(beacons.count > 0) { 86 | CLBeacon *nearestBeacon = beacons.firstObject; 87 | if(nearestBeacon.proximity == self.lastProximity || 88 | nearestBeacon.proximity == CLProximityUnknown) { 89 | return; 90 | } 91 | self.lastProximity = nearestBeacon.proximity; 92 | 93 | switch(nearestBeacon.proximity) { 94 | case CLProximityFar: 95 | message = @"You are far away from the beacon"; 96 | break; 97 | case CLProximityNear: 98 | message = @"You are near the beacon"; 99 | break; 100 | case CLProximityImmediate: 101 | message = @"You are in the immediate proximity of the beacon"; 102 | break; 103 | case CLProximityUnknown: 104 | return; 105 | } 106 | } else { 107 | message = @"No beacons are nearby"; 108 | } 109 | 110 | NSLog(@"%@", message); 111 | [self sendLocalNotificationWithMessage:message]; 112 | } 113 | 114 | - (void)applicationWillResignActive:(UIApplication *)application 115 | { 116 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 117 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 118 | } 119 | 120 | - (void)applicationDidEnterBackground:(UIApplication *)application 121 | { 122 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 123 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 124 | } 125 | 126 | - (void)applicationWillEnterForeground:(UIApplication *)application 127 | { 128 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 129 | } 130 | 131 | - (void)applicationDidBecomeActive:(UIApplication *)application 132 | { 133 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 134 | } 135 | 136 | - (void)applicationWillTerminate:(UIApplication *)application 137 | { 138 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 139 | } 140 | 141 | @end 142 | -------------------------------------------------------------------------------- /iBeaconTemplate/IMViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // IMViewController.h 3 | // iBeaconTemplate 4 | // 5 | // Created by James Nick Sears on 5/29/14. 6 | // Copyright (c) 2014 iBeaconModules.us. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface IMViewController : UIViewController 12 | 13 | @property IBOutlet UITableView *tableView; 14 | @property (strong) NSArray *beacons; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /iBeaconTemplate/IMViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // IMViewController.m 3 | // iBeaconTemplate 4 | // 5 | // Created by James Nick Sears on 5/29/14. 6 | // Copyright (c) 2014 iBeaconModules.us. All rights reserved. 7 | // 8 | 9 | #import "IMViewController.h" 10 | #import 11 | 12 | @interface IMViewController () 13 | 14 | @end 15 | 16 | @implementation IMViewController 17 | 18 | - (void)viewDidLoad 19 | { 20 | [super viewDidLoad]; 21 | // Do any additional setup after loading the view, typically from a nib. 22 | } 23 | 24 | - (void)didReceiveMemoryWarning 25 | { 26 | [super didReceiveMemoryWarning]; 27 | // Dispose of any resources that can be recreated. 28 | } 29 | 30 | - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 31 | return self.beacons.count; 32 | } 33 | 34 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 35 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"]; 36 | 37 | if (cell == nil) { 38 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier"]; 39 | cell.selectionStyle = UITableViewCellSelectionStyleNone; 40 | } 41 | 42 | CLBeacon *beacon = (CLBeacon*)[self.beacons objectAtIndex:indexPath.row]; 43 | NSString *proximityLabel = @""; 44 | switch (beacon.proximity) { 45 | case CLProximityFar: 46 | proximityLabel = @"Far"; 47 | break; 48 | case CLProximityNear: 49 | proximityLabel = @"Near"; 50 | break; 51 | case CLProximityImmediate: 52 | proximityLabel = @"Immediate"; 53 | break; 54 | case CLProximityUnknown: 55 | proximityLabel = @"Unknown"; 56 | break; 57 | } 58 | 59 | cell.textLabel.text = proximityLabel; 60 | 61 | NSString *detailLabel = [NSString stringWithFormat:@"Major: %d, Minor: %d, RSSI: %d, UUID: %@", 62 | beacon.major.intValue, beacon.minor.intValue, (int)beacon.rssi, beacon.proximityUUID.UUIDString]; 63 | cell.detailTextLabel.text = detailLabel; 64 | 65 | return cell; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /iBeaconTemplate/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /iBeaconTemplate/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /iBeaconTemplate/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /iBeaconTemplate/iBeaconTemplate-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSLocationAlwaysUsageDescription 6 | For iBeacon ranging 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleDisplayName 10 | ${PRODUCT_NAME} 11 | CFBundleExecutable 12 | ${EXECUTABLE_NAME} 13 | CFBundleIdentifier 14 | IM.${PRODUCT_NAME:rfc1034identifier} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.0 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 1.0 27 | LSRequiresIPhoneOS 28 | 29 | UIBackgroundModes 30 | 31 | bluetooth-central 32 | location 33 | 34 | UIMainStoryboardFile 35 | Main 36 | UIRequiredDeviceCapabilities 37 | 38 | armv7 39 | 40 | UISupportedInterfaceOrientations 41 | 42 | UIInterfaceOrientationPortrait 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /iBeaconTemplate/iBeaconTemplate-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /iBeaconTemplate/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // iBeaconTemplate 4 | // 5 | // Created by James Nick Sears on 5/29/14. 6 | // Copyright (c) 2014 iBeaconModules.us. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "IMAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([IMAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /iBeaconTemplateTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /iBeaconTemplateTests/iBeaconTemplateTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | IM.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /iBeaconTemplateTests/iBeaconTemplateTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // iBeaconTemplateTests.m 3 | // iBeaconTemplateTests 4 | // 5 | // Created by James Nick Sears on 5/29/14. 6 | // Copyright (c) 2014 iBeaconModules.us. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface iBeaconTemplateTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation iBeaconTemplateTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | --------------------------------------------------------------------------------