├── .gitignore ├── CPU Identifier.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── CPU test ├── A4.png ├── A5.png ├── A5X.png ├── A6.png ├── A6X.png ├── A7.png ├── A7X.png ├── A8.png ├── A8X.png ├── A9.png ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ └── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── iTunesArtwork@2x-1.png │ │ ├── iTunesArtwork@2x-2.png │ │ ├── iTunesArtwork@2x-3.png │ │ ├── iTunesArtwork@2x-4.png │ │ ├── iTunesArtwork@2x-5.png │ │ └── iTunesArtwork@2x.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist ├── MobileGestalt.h ├── ViewController.h ├── ViewController.m ├── background.png ├── libMobileGestalt.tbd └── main.m └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | .DS_Store 20 | libMobileGestalt.dylib 21 | 22 | # CocoaPods 23 | # 24 | # We recommend against adding the Pods directory to your .gitignore. However 25 | # you should judge for yourself, the pros and cons are mentioned at: 26 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 27 | # 28 | # Pods/ 29 | -------------------------------------------------------------------------------- /CPU Identifier.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4E71C3391BB97BA5002B0FF1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4E71C3371BB97BA5002B0FF1 /* Main.storyboard */; settings = {ASSET_TAGS = (); }; }; 11 | 4E71C36A1BB98507002B0FF1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E71C3691BB98507002B0FF1 /* UIKit.framework */; }; 12 | 4E8550031BBBFB8D00F8D77E /* A9.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E8550021BBBFB8D00F8D77E /* A9.png */; settings = {ASSET_TAGS = (); }; }; 13 | 4E8550051BBBFE7C00F8D77E /* A7.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E8550041BBBFE7C00F8D77E /* A7.png */; settings = {ASSET_TAGS = (); }; }; 14 | 4E85500E1BBC047A00F8D77E /* A4.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E8550061BBC047A00F8D77E /* A4.png */; settings = {ASSET_TAGS = (); }; }; 15 | 4E85500F1BBC047A00F8D77E /* A5.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E8550071BBC047A00F8D77E /* A5.png */; settings = {ASSET_TAGS = (); }; }; 16 | 4E8550101BBC047A00F8D77E /* A5X.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E8550081BBC047A00F8D77E /* A5X.png */; settings = {ASSET_TAGS = (); }; }; 17 | 4E8550111BBC047A00F8D77E /* A6.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E8550091BBC047A00F8D77E /* A6.png */; settings = {ASSET_TAGS = (); }; }; 18 | 4E8550121BBC047A00F8D77E /* A6X.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E85500A1BBC047A00F8D77E /* A6X.png */; settings = {ASSET_TAGS = (); }; }; 19 | 4E8550131BBC047A00F8D77E /* A7X.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E85500B1BBC047A00F8D77E /* A7X.png */; settings = {ASSET_TAGS = (); }; }; 20 | 4E8550141BBC047A00F8D77E /* A8.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E85500C1BBC047A00F8D77E /* A8.png */; settings = {ASSET_TAGS = (); }; }; 21 | 4E8550151BBC047A00F8D77E /* A8X.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E85500D1BBC047A00F8D77E /* A8X.png */; settings = {ASSET_TAGS = (); }; }; 22 | 4EB000BE1BB9502800054208 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB000BD1BB9502800054208 /* main.m */; }; 23 | 4EB000C11BB9502800054208 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB000C01BB9502800054208 /* AppDelegate.m */; }; 24 | 4EB000C41BB9502800054208 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB000C31BB9502800054208 /* ViewController.m */; }; 25 | 4EB000C91BB9502800054208 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4EB000C81BB9502800054208 /* Assets.xcassets */; }; 26 | 4EB000CC1BB9502800054208 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4EB000CA1BB9502800054208 /* LaunchScreen.storyboard */; }; 27 | CA8FFD5B1BB9B91100093C55 /* background.png in Resources */ = {isa = PBXBuildFile; fileRef = CA8FFD5A1BB9B91100093C55 /* background.png */; settings = {ASSET_TAGS = (); }; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXFileReference section */ 31 | 4E71C3321BB95AD6002B0FF1 /* MobileGestalt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MobileGestalt.h; sourceTree = ""; }; 32 | 4E71C3381BB97BA5002B0FF1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 33 | 4E71C3691BB98507002B0FF1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 34 | 4E8550021BBBFB8D00F8D77E /* A9.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A9.png; sourceTree = ""; }; 35 | 4E8550041BBBFE7C00F8D77E /* A7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A7.png; sourceTree = ""; }; 36 | 4E8550061BBC047A00F8D77E /* A4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A4.png; sourceTree = ""; }; 37 | 4E8550071BBC047A00F8D77E /* A5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A5.png; sourceTree = ""; }; 38 | 4E8550081BBC047A00F8D77E /* A5X.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A5X.png; sourceTree = ""; }; 39 | 4E8550091BBC047A00F8D77E /* A6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A6.png; sourceTree = ""; }; 40 | 4E85500A1BBC047A00F8D77E /* A6X.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A6X.png; sourceTree = ""; }; 41 | 4E85500B1BBC047A00F8D77E /* A7X.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A7X.png; sourceTree = ""; }; 42 | 4E85500C1BBC047A00F8D77E /* A8.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A8.png; sourceTree = ""; }; 43 | 4E85500D1BBC047A00F8D77E /* A8X.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = A8X.png; sourceTree = ""; }; 44 | 4EB000B91BB9502800054208 /* CPU Identifier.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CPU Identifier.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 4EB000BD1BB9502800054208 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 46 | 4EB000BF1BB9502800054208 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 47 | 4EB000C01BB9502800054208 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 48 | 4EB000C21BB9502800054208 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 49 | 4EB000C31BB9502800054208 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 50 | 4EB000C81BB9502800054208 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 51 | 4EB000CB1BB9502800054208 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 52 | 4EB000CD1BB9502800054208 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53 | CA8FFD5A1BB9B91100093C55 /* background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = background.png; sourceTree = ""; }; 54 | /* End PBXFileReference section */ 55 | 56 | /* Begin PBXFrameworksBuildPhase section */ 57 | 4EB000B61BB9502800054208 /* Frameworks */ = { 58 | isa = PBXFrameworksBuildPhase; 59 | buildActionMask = 2147483647; 60 | files = ( 61 | 4E71C36A1BB98507002B0FF1 /* UIKit.framework in Frameworks */, 62 | ); 63 | runOnlyForDeploymentPostprocessing = 0; 64 | }; 65 | /* End PBXFrameworksBuildPhase section */ 66 | 67 | /* Begin PBXGroup section */ 68 | 4E71C36B1BB98523002B0FF1 /* Framework */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 4E71C3691BB98507002B0FF1 /* UIKit.framework */, 72 | ); 73 | name = Framework; 74 | path = ..; 75 | sourceTree = ""; 76 | }; 77 | 4E8550011BBBFB8100F8D77E /* Resource */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 4E8550061BBC047A00F8D77E /* A4.png */, 81 | 4E8550071BBC047A00F8D77E /* A5.png */, 82 | 4E8550081BBC047A00F8D77E /* A5X.png */, 83 | 4E8550091BBC047A00F8D77E /* A6.png */, 84 | 4E85500A1BBC047A00F8D77E /* A6X.png */, 85 | 4E85500B1BBC047A00F8D77E /* A7X.png */, 86 | 4E85500C1BBC047A00F8D77E /* A8.png */, 87 | 4E85500D1BBC047A00F8D77E /* A8X.png */, 88 | 4E8550021BBBFB8D00F8D77E /* A9.png */, 89 | 4E8550041BBBFE7C00F8D77E /* A7.png */, 90 | ); 91 | name = Resource; 92 | sourceTree = ""; 93 | }; 94 | 4EB000B01BB9502800054208 = { 95 | isa = PBXGroup; 96 | children = ( 97 | 4EB000BB1BB9502800054208 /* CPU Identifier */, 98 | 4EB000BA1BB9502800054208 /* Products */, 99 | ); 100 | sourceTree = ""; 101 | }; 102 | 4EB000BA1BB9502800054208 /* Products */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 4EB000B91BB9502800054208 /* CPU Identifier.app */, 106 | ); 107 | name = Products; 108 | sourceTree = ""; 109 | }; 110 | 4EB000BB1BB9502800054208 /* CPU Identifier */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 4E8550011BBBFB8100F8D77E /* Resource */, 114 | 4EB000BF1BB9502800054208 /* AppDelegate.h */, 115 | 4EB000C01BB9502800054208 /* AppDelegate.m */, 116 | 4EB000C21BB9502800054208 /* ViewController.h */, 117 | 4EB000C31BB9502800054208 /* ViewController.m */, 118 | 4E71C3371BB97BA5002B0FF1 /* Main.storyboard */, 119 | 4E71C3321BB95AD6002B0FF1 /* MobileGestalt.h */, 120 | 4EB000C81BB9502800054208 /* Assets.xcassets */, 121 | 4EB000CA1BB9502800054208 /* LaunchScreen.storyboard */, 122 | 4EB000CD1BB9502800054208 /* Info.plist */, 123 | CA8FFD5A1BB9B91100093C55 /* background.png */, 124 | 4EB000BC1BB9502800054208 /* Supporting Files */, 125 | 4E71C36B1BB98523002B0FF1 /* Framework */, 126 | ); 127 | name = "CPU Identifier"; 128 | path = "CPU test"; 129 | sourceTree = ""; 130 | }; 131 | 4EB000BC1BB9502800054208 /* Supporting Files */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | 4EB000BD1BB9502800054208 /* main.m */, 135 | ); 136 | name = "Supporting Files"; 137 | sourceTree = ""; 138 | }; 139 | /* End PBXGroup section */ 140 | 141 | /* Begin PBXNativeTarget section */ 142 | 4EB000B81BB9502800054208 /* CPU Identifier */ = { 143 | isa = PBXNativeTarget; 144 | buildConfigurationList = 4EB000E61BB9502800054208 /* Build configuration list for PBXNativeTarget "CPU Identifier" */; 145 | buildPhases = ( 146 | 4EB000B51BB9502800054208 /* Sources */, 147 | 4EB000B61BB9502800054208 /* Frameworks */, 148 | 4EB000B71BB9502800054208 /* Resources */, 149 | ); 150 | buildRules = ( 151 | ); 152 | dependencies = ( 153 | ); 154 | name = "CPU Identifier"; 155 | productName = "CPU test"; 156 | productReference = 4EB000B91BB9502800054208 /* CPU Identifier.app */; 157 | productType = "com.apple.product-type.application"; 158 | }; 159 | /* End PBXNativeTarget section */ 160 | 161 | /* Begin PBXProject section */ 162 | 4EB000B11BB9502800054208 /* Project object */ = { 163 | isa = PBXProject; 164 | attributes = { 165 | LastUpgradeCheck = 0700; 166 | ORGANIZATIONNAME = Gary; 167 | TargetAttributes = { 168 | 4EB000B81BB9502800054208 = { 169 | CreatedOnToolsVersion = 7.0; 170 | DevelopmentTeam = Q6F5UHP863; 171 | }; 172 | }; 173 | }; 174 | buildConfigurationList = 4EB000B41BB9502800054208 /* Build configuration list for PBXProject "CPU Identifier" */; 175 | compatibilityVersion = "Xcode 3.2"; 176 | developmentRegion = English; 177 | hasScannedForEncodings = 0; 178 | knownRegions = ( 179 | en, 180 | Base, 181 | ); 182 | mainGroup = 4EB000B01BB9502800054208; 183 | productRefGroup = 4EB000BA1BB9502800054208 /* Products */; 184 | projectDirPath = ""; 185 | projectRoot = ""; 186 | targets = ( 187 | 4EB000B81BB9502800054208 /* CPU Identifier */, 188 | ); 189 | }; 190 | /* End PBXProject section */ 191 | 192 | /* Begin PBXResourcesBuildPhase section */ 193 | 4EB000B71BB9502800054208 /* Resources */ = { 194 | isa = PBXResourcesBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | 4E8550141BBC047A00F8D77E /* A8.png in Resources */, 198 | 4E8550111BBC047A00F8D77E /* A6.png in Resources */, 199 | 4E8550101BBC047A00F8D77E /* A5X.png in Resources */, 200 | 4E8550151BBC047A00F8D77E /* A8X.png in Resources */, 201 | 4E8550031BBBFB8D00F8D77E /* A9.png in Resources */, 202 | 4E85500E1BBC047A00F8D77E /* A4.png in Resources */, 203 | 4E71C3391BB97BA5002B0FF1 /* Main.storyboard in Resources */, 204 | CA8FFD5B1BB9B91100093C55 /* background.png in Resources */, 205 | 4E8550131BBC047A00F8D77E /* A7X.png in Resources */, 206 | 4EB000CC1BB9502800054208 /* LaunchScreen.storyboard in Resources */, 207 | 4EB000C91BB9502800054208 /* Assets.xcassets in Resources */, 208 | 4E8550051BBBFE7C00F8D77E /* A7.png in Resources */, 209 | 4E8550121BBC047A00F8D77E /* A6X.png in Resources */, 210 | 4E85500F1BBC047A00F8D77E /* A5.png in Resources */, 211 | ); 212 | runOnlyForDeploymentPostprocessing = 0; 213 | }; 214 | /* End PBXResourcesBuildPhase section */ 215 | 216 | /* Begin PBXSourcesBuildPhase section */ 217 | 4EB000B51BB9502800054208 /* Sources */ = { 218 | isa = PBXSourcesBuildPhase; 219 | buildActionMask = 2147483647; 220 | files = ( 221 | 4EB000C41BB9502800054208 /* ViewController.m in Sources */, 222 | 4EB000C11BB9502800054208 /* AppDelegate.m in Sources */, 223 | 4EB000BE1BB9502800054208 /* main.m in Sources */, 224 | ); 225 | runOnlyForDeploymentPostprocessing = 0; 226 | }; 227 | /* End PBXSourcesBuildPhase section */ 228 | 229 | /* Begin PBXVariantGroup section */ 230 | 4E71C3371BB97BA5002B0FF1 /* Main.storyboard */ = { 231 | isa = PBXVariantGroup; 232 | children = ( 233 | 4E71C3381BB97BA5002B0FF1 /* Base */, 234 | ); 235 | name = Main.storyboard; 236 | sourceTree = ""; 237 | }; 238 | 4EB000CA1BB9502800054208 /* LaunchScreen.storyboard */ = { 239 | isa = PBXVariantGroup; 240 | children = ( 241 | 4EB000CB1BB9502800054208 /* Base */, 242 | ); 243 | name = LaunchScreen.storyboard; 244 | sourceTree = ""; 245 | }; 246 | /* End PBXVariantGroup section */ 247 | 248 | /* Begin XCBuildConfiguration section */ 249 | 4EB000E41BB9502800054208 /* Debug */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | ALWAYS_SEARCH_USER_PATHS = NO; 253 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 254 | CLANG_CXX_LIBRARY = "libc++"; 255 | CLANG_ENABLE_MODULES = YES; 256 | CLANG_ENABLE_OBJC_ARC = YES; 257 | CLANG_WARN_BOOL_CONVERSION = YES; 258 | CLANG_WARN_CONSTANT_CONVERSION = YES; 259 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 260 | CLANG_WARN_EMPTY_BODY = YES; 261 | CLANG_WARN_ENUM_CONVERSION = YES; 262 | CLANG_WARN_INT_CONVERSION = YES; 263 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 264 | CLANG_WARN_UNREACHABLE_CODE = YES; 265 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 266 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 267 | COPY_PHASE_STRIP = NO; 268 | DEBUG_INFORMATION_FORMAT = dwarf; 269 | ENABLE_STRICT_OBJC_MSGSEND = YES; 270 | ENABLE_TESTABILITY = YES; 271 | GCC_C_LANGUAGE_STANDARD = gnu99; 272 | GCC_DYNAMIC_NO_PIC = NO; 273 | GCC_NO_COMMON_BLOCKS = YES; 274 | GCC_OPTIMIZATION_LEVEL = 0; 275 | GCC_PREPROCESSOR_DEFINITIONS = ( 276 | "DEBUG=1", 277 | "$(inherited)", 278 | ); 279 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 280 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 281 | GCC_WARN_UNDECLARED_SELECTOR = YES; 282 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 283 | GCC_WARN_UNUSED_FUNCTION = YES; 284 | GCC_WARN_UNUSED_VARIABLE = YES; 285 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 286 | MTL_ENABLE_DEBUG_INFO = YES; 287 | ONLY_ACTIVE_ARCH = NO; 288 | SDKROOT = iphoneos; 289 | VALID_ARCHS = "armv7 armv7s arm64"; 290 | }; 291 | name = Debug; 292 | }; 293 | 4EB000E51BB9502800054208 /* Release */ = { 294 | isa = XCBuildConfiguration; 295 | buildSettings = { 296 | ALWAYS_SEARCH_USER_PATHS = NO; 297 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 298 | CLANG_CXX_LIBRARY = "libc++"; 299 | CLANG_ENABLE_MODULES = YES; 300 | CLANG_ENABLE_OBJC_ARC = YES; 301 | CLANG_WARN_BOOL_CONVERSION = YES; 302 | CLANG_WARN_CONSTANT_CONVERSION = YES; 303 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 304 | CLANG_WARN_EMPTY_BODY = YES; 305 | CLANG_WARN_ENUM_CONVERSION = YES; 306 | CLANG_WARN_INT_CONVERSION = YES; 307 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 308 | CLANG_WARN_UNREACHABLE_CODE = YES; 309 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 310 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 311 | COPY_PHASE_STRIP = NO; 312 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 313 | ENABLE_NS_ASSERTIONS = NO; 314 | ENABLE_STRICT_OBJC_MSGSEND = YES; 315 | GCC_C_LANGUAGE_STANDARD = gnu99; 316 | GCC_NO_COMMON_BLOCKS = YES; 317 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 318 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 319 | GCC_WARN_UNDECLARED_SELECTOR = YES; 320 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 321 | GCC_WARN_UNUSED_FUNCTION = YES; 322 | GCC_WARN_UNUSED_VARIABLE = YES; 323 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 324 | MTL_ENABLE_DEBUG_INFO = NO; 325 | ONLY_ACTIVE_ARCH = NO; 326 | SDKROOT = iphoneos; 327 | VALIDATE_PRODUCT = YES; 328 | VALID_ARCHS = "armv7 armv7s arm64"; 329 | }; 330 | name = Release; 331 | }; 332 | 4EB000E71BB9502800054208 /* Debug */ = { 333 | isa = XCBuildConfiguration; 334 | buildSettings = { 335 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 336 | CODE_SIGN_IDENTITY = "iPhone Developer"; 337 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 338 | ENABLE_BITCODE = NO; 339 | FRAMEWORK_SEARCH_PATHS = ( 340 | "$(inherited)", 341 | "$(PROJECT_DIR)", 342 | ); 343 | INFOPLIST_FILE = "CPU test/Info.plist"; 344 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 345 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 346 | LIBRARY_SEARCH_PATHS = ( 347 | "$(inherited)", 348 | "$(PROJECT_DIR)", 349 | "$(PROJECT_DIR)/CPU", 350 | test, 351 | "$(PROJECT_DIR)/CPU", 352 | test, 353 | ); 354 | OTHER_LDFLAGS = ( 355 | "-Obj-C", 356 | "-all_load", 357 | ); 358 | PRODUCT_BUNDLE_IDENTIFIER = tw.hiraku.cpuidentifier; 359 | PRODUCT_NAME = "CPU Identifier"; 360 | PROVISIONING_PROFILE = ""; 361 | }; 362 | name = Debug; 363 | }; 364 | 4EB000E81BB9502800054208 /* Release */ = { 365 | isa = XCBuildConfiguration; 366 | buildSettings = { 367 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 368 | CODE_SIGN_IDENTITY = "iPhone Developer"; 369 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 370 | ENABLE_BITCODE = NO; 371 | FRAMEWORK_SEARCH_PATHS = ( 372 | "$(inherited)", 373 | "$(PROJECT_DIR)", 374 | ); 375 | INFOPLIST_FILE = "CPU test/Info.plist"; 376 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 377 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 378 | LIBRARY_SEARCH_PATHS = ( 379 | "$(inherited)", 380 | "$(PROJECT_DIR)", 381 | "$(PROJECT_DIR)/CPU", 382 | test, 383 | "$(PROJECT_DIR)/CPU", 384 | test, 385 | ); 386 | OTHER_LDFLAGS = ( 387 | "-Obj-C", 388 | "-all_load", 389 | ); 390 | PRODUCT_BUNDLE_IDENTIFIER = tw.hiraku.cpuidentifier; 391 | PRODUCT_NAME = "CPU Identifier"; 392 | PROVISIONING_PROFILE = ""; 393 | }; 394 | name = Release; 395 | }; 396 | /* End XCBuildConfiguration section */ 397 | 398 | /* Begin XCConfigurationList section */ 399 | 4EB000B41BB9502800054208 /* Build configuration list for PBXProject "CPU Identifier" */ = { 400 | isa = XCConfigurationList; 401 | buildConfigurations = ( 402 | 4EB000E41BB9502800054208 /* Debug */, 403 | 4EB000E51BB9502800054208 /* Release */, 404 | ); 405 | defaultConfigurationIsVisible = 0; 406 | defaultConfigurationName = Release; 407 | }; 408 | 4EB000E61BB9502800054208 /* Build configuration list for PBXNativeTarget "CPU Identifier" */ = { 409 | isa = XCConfigurationList; 410 | buildConfigurations = ( 411 | 4EB000E71BB9502800054208 /* Debug */, 412 | 4EB000E81BB9502800054208 /* Release */, 413 | ); 414 | defaultConfigurationIsVisible = 0; 415 | defaultConfigurationName = Release; 416 | }; 417 | /* End XCConfigurationList section */ 418 | }; 419 | rootObject = 4EB000B11BB9502800054208 /* Project object */; 420 | } 421 | -------------------------------------------------------------------------------- /CPU Identifier.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CPU test/A4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A4.png -------------------------------------------------------------------------------- /CPU test/A5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A5.png -------------------------------------------------------------------------------- /CPU test/A5X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A5X.png -------------------------------------------------------------------------------- /CPU test/A6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A6.png -------------------------------------------------------------------------------- /CPU test/A6X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A6X.png -------------------------------------------------------------------------------- /CPU test/A7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A7.png -------------------------------------------------------------------------------- /CPU test/A7X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A7X.png -------------------------------------------------------------------------------- /CPU test/A8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A8.png -------------------------------------------------------------------------------- /CPU test/A8X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A8X.png -------------------------------------------------------------------------------- /CPU test/A9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/A9.png -------------------------------------------------------------------------------- /CPU test/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CPU test 4 | // 5 | // Created by Gary on 2015/9/28. 6 | // Copyright © 2015年 Gary. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /CPU test/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // CPU test 4 | // 5 | // Created by Gary on 2015/9/28. 6 | // Copyright © 2015年 Gary. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // 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. 25 | // 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. 26 | } 27 | 28 | - (void)applicationDidEnterBackground:(UIApplication *)application { 29 | // 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. 30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 31 | } 32 | 33 | - (void)applicationWillEnterForeground:(UIApplication *)application { 34 | // 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. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application { 38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application { 42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /CPU test/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "iTunesArtwork@2x-4.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "iTunesArtwork@2x-5.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "40x40", 17 | "idiom" : "iphone", 18 | "filename" : "iTunesArtwork@2x-2.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "iTunesArtwork@2x-3.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "60x60", 29 | "idiom" : "iphone", 30 | "filename" : "iTunesArtwork@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "60x60", 35 | "idiom" : "iphone", 36 | "filename" : "iTunesArtwork@2x-1.png", 37 | "scale" : "3x" 38 | } 39 | ], 40 | "info" : { 41 | "version" : 1, 42 | "author" : "xcode" 43 | } 44 | } -------------------------------------------------------------------------------- /CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-1.png -------------------------------------------------------------------------------- /CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-2.png -------------------------------------------------------------------------------- /CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-3.png -------------------------------------------------------------------------------- /CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-4.png -------------------------------------------------------------------------------- /CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x-5.png -------------------------------------------------------------------------------- /CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /CPU test/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 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 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 | -------------------------------------------------------------------------------- /CPU test/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 | -------------------------------------------------------------------------------- /CPU test/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 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 | CFBundleSignature 20 | ???? 21 | CFBundleURLTypes 22 | 23 | 24 | CFBundleURLSchemes 25 | 26 | fb938538479537694 27 | 28 | 29 | 30 | CFBundleVersion 31 | 1 32 | FacebookAppID 33 | 938538479537694 34 | FacebookDisplayName 35 | CPU Identifier 36 | LSApplicationQueriesSchemes 37 | 38 | fbauth2 39 | 40 | LSRequiresIPhoneOS 41 | 42 | NSAppTransportSecurity 43 | 44 | NSAllowsArbitraryLoads 45 | 46 | 47 | UILaunchStoryboardName 48 | LaunchScreen 49 | UIMainStoryboardFile 50 | Main 51 | UIRequiredDeviceCapabilities 52 | 53 | armv7 54 | 55 | UISupportedInterfaceOrientations 56 | 57 | UIInterfaceOrientationPortrait 58 | UIInterfaceOrientationLandscapeLeft 59 | UIInterfaceOrientationLandscapeRight 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /CPU test/MobileGestalt.h: -------------------------------------------------------------------------------- 1 | /* 2 | * libMobileGestalt header. 3 | * Mobile gestalt functions as a QA system. You ask it a question, and it gives you the answer! :) 4 | * 5 | * Copyright (c) 2013-2014 Cykey (David Murray) 6 | * All rights reserved. 7 | */ 8 | 9 | #ifndef LIBMOBILEGESTALT_H_ 10 | #define LIBMOBILEGESTALT_H_ 11 | 12 | #include 13 | 14 | #if __cplusplus 15 | extern "C" { 16 | #endif 17 | 18 | #pragma mark - API 19 | 20 | CFPropertyListRef MGCopyAnswer(CFStringRef property); 21 | 22 | Boolean MGGetBoolAnswer(CFStringRef property); 23 | 24 | /* 25 | * Arguments are still a mistery. 26 | * CFPropertyListRef MGCopyAnswerWithError(CFStringRef question, int *error, ...); 27 | */ 28 | 29 | /* Use 0 for __unknown0. */ 30 | CFPropertyListRef MGCopyMultipleAnswers(CFArrayRef questions, int __unknown0); 31 | 32 | /* 33 | * Not all questions are assignable. 34 | * For example, kMGUserAssignedDeviceName is assignable but 35 | * kMGProductType is not. 36 | */ 37 | int MGSetAnswer(CFStringRef question, CFTypeRef answer); 38 | 39 | #pragma mark - Identifying Information 40 | 41 | static const CFStringRef kMGDiskUsage = CFSTR("DiskUsage"); 42 | static const CFStringRef kMGModelNumber = CFSTR("ModelNumber"); 43 | static const CFStringRef kMGSIMTrayStatus = CFSTR("SIMTrayStatus"); 44 | static const CFStringRef kMGSerialNumber = CFSTR("SerialNumber"); 45 | static const CFStringRef kMGMLBSerialNumber = CFSTR("MLBSerialNumber"); 46 | static const CFStringRef kMGUniqueDeviceID = CFSTR("UniqueDeviceID"); 47 | static const CFStringRef kMGUniqueDeviceIDData = CFSTR("UniqueDeviceIDData"); 48 | static const CFStringRef kMGUniqueChipID = CFSTR("UniqueChipID"); 49 | static const CFStringRef kMGInverseDeviceID = CFSTR("InverseDeviceID"); 50 | static const CFStringRef kMGDiagnosticsData = CFSTR("DiagData"); 51 | static const CFStringRef kMGDieID = CFSTR("DieId"); 52 | static const CFStringRef kMGCPUArchitecture = CFSTR("CPUArchitecture"); 53 | static const CFStringRef kMGPartitionType = CFSTR("PartitionType"); 54 | static const CFStringRef kMGUserAssignedDeviceName = CFSTR("UserAssignedDeviceName"); 55 | 56 | #pragma mark - Bluetooth Information 57 | 58 | static const CFStringRef kMGBluetoothAddress = CFSTR("BluetoothAddress"); 59 | 60 | #pragma mark - Battery Information 61 | 62 | static const CFStringRef kMGRequiredBatteryLevelForSoftwareUpdate = CFSTR("RequiredBatteryLevelForSoftwareUpdate"); 63 | static const CFStringRef kMGBatteryIsFullyCharged = CFSTR("BatteryIsFullyCharged"); 64 | static const CFStringRef kMGBatteryIsCharging = CFSTR("BatteryIsCharging"); 65 | static const CFStringRef kMGBatteryCurrentCapacity = CFSTR("BatteryCurrentCapacity"); 66 | static const CFStringRef kMGExternalPowerSourceConnected = CFSTR("ExternalPowerSourceConnected"); 67 | 68 | #pragma mark - Baseband Information 69 | 70 | static const CFStringRef kMGBasebandSerialNumber = CFSTR("BasebandSerialNumber"); 71 | static const CFStringRef kMGBasebandCertId = CFSTR("BasebandCertId"); 72 | static const CFStringRef kMGBasebandChipId = CFSTR("BasebandChipId"); 73 | static const CFStringRef kMGBasebandFirmwareManifestData = CFSTR("BasebandFirmwareManifestData"); 74 | static const CFStringRef kMGBasebandFirmwareVersion = CFSTR("BasebandFirmwareVersion"); 75 | static const CFStringRef kMGBasebandKeyHashInformation = CFSTR("BasebandKeyHashInformation"); 76 | 77 | #pragma mark - Telephony Information 78 | 79 | static const CFStringRef kMGCarrierBundleInfo = CFSTR("CarrierBundleInfoArray"); 80 | static const CFStringRef kMGCarrierInstallCapability = CFSTR("CarrierInstallCapability"); 81 | static const CFStringRef kMGInternationalMobileEquipmentIdentity = CFSTR("InternationalMobileEquipmentIdentity"); 82 | static const CFStringRef kMGMobileSubscriberCountryCode = CFSTR("MobileSubscriberCountryCode"); 83 | static const CFStringRef kMGMobileSubscriberNetworkCode = CFSTR("MobileSubscriberNetworkCode"); 84 | 85 | #pragma mark - Device Information 86 | 87 | static const CFStringRef kMGChipID = CFSTR("ChipID"); 88 | static const CFStringRef kMGComputerName = CFSTR("ComputerName"); 89 | static const CFStringRef kMGDeviceVariant = CFSTR("DeviceVariant"); 90 | static const CFStringRef kMGHWModel = CFSTR("HWModelStr"); 91 | static const CFStringRef kMGBoardId = CFSTR("BoardId"); 92 | static const CFStringRef kMGHardwarePlatform = CFSTR("HardwarePlatform"); 93 | static const CFStringRef kMGDeviceName = CFSTR("DeviceName"); 94 | static const CFStringRef kMGDeviceColor = CFSTR("DeviceColor"); 95 | static const CFStringRef kMGDeviceClassNumber = CFSTR("DeviceClassNumber"); 96 | static const CFStringRef kMGDeviceClass = CFSTR("DeviceClass"); 97 | static const CFStringRef kMGBuildVersion = CFSTR("BuildVersion"); 98 | static const CFStringRef kMGProductName = CFSTR("ProductName"); 99 | static const CFStringRef kMGProductType = CFSTR("ProductType"); 100 | static const CFStringRef kMGProductVersion = CFSTR("ProductVersion"); 101 | static const CFStringRef kMGFirmwareNonce = CFSTR("FirmwareNonce"); 102 | static const CFStringRef kMGFirmwareVersion = CFSTR("FirmwareVersion"); 103 | static const CFStringRef kMGFirmwarePreflightInfo = CFSTR("FirmwarePreflightInfo"); 104 | static const CFStringRef kMGIntegratedCircuitCardIdentifier = CFSTR("IntegratedCircuitCardIdentifier"); 105 | static const CFStringRef kMGAirplaneMode = CFSTR("AirplaneMode"); 106 | static const CFStringRef kMGAllowYouTube = CFSTR("AllowYouTube"); 107 | static const CFStringRef kMGAllowYouTubePlugin = CFSTR("AllowYouTubePlugin"); 108 | static const CFStringRef kMGMinimumSupportediTunesVersion = CFSTR("MinimumSupportediTunesVersion"); 109 | static const CFStringRef kMGProximitySensorCalibration = CFSTR("ProximitySensorCalibration"); 110 | static const CFStringRef kMGRegionCode = CFSTR("RegionCode"); 111 | static const CFStringRef kMGRegionInfo = CFSTR("RegionInfo"); 112 | static const CFStringRef kMGRegulatoryIdentifiers = CFSTR("RegulatoryIdentifiers"); 113 | static const CFStringRef kMGSBAllowSensitiveUI = CFSTR("SBAllowSensitiveUI"); 114 | static const CFStringRef kMGSBCanForceDebuggingInfo = CFSTR("SBCanForceDebuggingInfo"); 115 | static const CFStringRef kMGSDIOManufacturerTuple = CFSTR("SDIOManufacturerTuple"); 116 | static const CFStringRef kMGSDIOProductInfo = CFSTR("SDIOProductInfo"); 117 | static const CFStringRef kMGShouldHactivate = CFSTR("ShouldHactivate"); 118 | static const CFStringRef kMGSigningFuse = CFSTR("SigningFuse"); 119 | static const CFStringRef kMGSoftwareBehavior = CFSTR("SoftwareBehavior"); 120 | static const CFStringRef kMGSoftwareBundleVersion = CFSTR("SoftwareBundleVersion"); 121 | static const CFStringRef kMGSupportedDeviceFamilies = CFSTR("SupportedDeviceFamilies"); 122 | static const CFStringRef kMSupportedKeyboards = CFSTR("SupportedKeyboards"); 123 | static const CFStringRef kMGTotalSystemAvailable = CFSTR("TotalSystemAvailable"); 124 | 125 | #pragma mark - Capability Information 126 | 127 | static const CFStringRef kMGAllDeviceCapabilities = CFSTR("AllDeviceCapabilities"); 128 | static const CFStringRef kMGAppleInternalInstallCapability = CFSTR("AppleInternalInstallCapability"); 129 | static const CFStringRef kMGExternalChargeCapability = CFSTR("ExternalChargeCapability"); 130 | static const CFStringRef kMGForwardCameraCapability = CFSTR("ForwardCameraCapability"); 131 | static const CFStringRef kMGPanoramaCameraCapability = CFSTR("PanoramaCameraCapability"); 132 | static const CFStringRef kMGRearCameraCapability = CFSTR("RearCameraCapability"); 133 | static const CFStringRef kMGHasAllFeaturesCapability = CFSTR("HasAllFeaturesCapability"); 134 | static const CFStringRef kMGHasBaseband = CFSTR("HasBaseband"); 135 | static const CFStringRef kMGHasInternalSettingsBundle = CFSTR("HasInternalSettingsBundle"); 136 | static const CFStringRef kMGHasSpringBoard = CFSTR("HasSpringBoard"); 137 | static const CFStringRef kMGInternalBuild = CFSTR("InternalBuild"); 138 | static const CFStringRef kMGIsSimulator = CFSTR("IsSimulator"); 139 | static const CFStringRef kMGIsThereEnoughBatteryLevelForSoftwareUpdate = CFSTR("IsThereEnoughBatteryLevelForSoftwareUpdate"); 140 | static const CFStringRef kMGIsUIBuild = CFSTR("IsUIBuild"); 141 | 142 | #pragma mark - Regional Behaviour 143 | 144 | static const CFStringRef kMGRegionalBehaviorAll = CFSTR("RegionalBehaviorAll"); 145 | static const CFStringRef kMGRegionalBehaviorChinaBrick = CFSTR("RegionalBehaviorChinaBrick"); 146 | static const CFStringRef kMGRegionalBehaviorEUVolumeLimit = CFSTR("RegionalBehaviorEUVolumeLimit"); 147 | static const CFStringRef kMGRegionalBehaviorGB18030 = CFSTR("RegionalBehaviorGB18030"); 148 | static const CFStringRef kMGRegionalBehaviorGoogleMail = CFSTR("RegionalBehaviorGoogleMail"); 149 | static const CFStringRef kMGRegionalBehaviorNTSC = CFSTR("RegionalBehaviorNTSC"); 150 | static const CFStringRef kMGRegionalBehaviorNoPasscodeLocationTiles = CFSTR("RegionalBehaviorNoPasscodeLocationTiles"); 151 | static const CFStringRef kMGRegionalBehaviorNoVOIP = CFSTR("RegionalBehaviorNoVOIP"); 152 | static const CFStringRef kMGRegionalBehaviorNoWiFi = CFSTR("RegionalBehaviorNoWiFi"); 153 | static const CFStringRef kMGRegionalBehaviorShutterClick = CFSTR("RegionalBehaviorShutterClick"); 154 | static const CFStringRef kMGRegionalBehaviorVolumeLimit = CFSTR("RegionalBehaviorVolumeLimit"); 155 | 156 | #pragma mark - Wireless Information 157 | 158 | static const CFStringRef kMGActiveWirelessTechnology = CFSTR("ActiveWirelessTechnology"); 159 | static const CFStringRef kMGWifiAddress = CFSTR("WifiAddress"); 160 | static const CFStringRef kMGWifiAddressData = CFSTR("WifiAddressData"); 161 | static const CFStringRef kMGWifiVendor = CFSTR("WifiVendor"); 162 | 163 | #pragma mark - FaceTime Information 164 | 165 | static const CFStringRef kMGFaceTimeBitRate2G = CFSTR("FaceTimeBitRate2G"); 166 | static const CFStringRef kMGFaceTimeBitRate3G = CFSTR("FaceTimeBitRate3G"); 167 | static const CFStringRef kMGFaceTimeBitRateLTE = CFSTR("FaceTimeBitRateLTE"); 168 | static const CFStringRef kMGFaceTimeBitRateWiFi = CFSTR("FaceTimeBitRateWiFi"); 169 | static const CFStringRef kMGFaceTimeDecodings = CFSTR("FaceTimeDecodings"); 170 | static const CFStringRef kMGFaceTimeEncodings = CFSTR("FaceTimeEncodings"); 171 | static const CFStringRef kMGFaceTimePreferredDecoding = CFSTR("FaceTimePreferredDecoding"); 172 | static const CFStringRef kMGFaceTimePreferredEncoding = CFSTR("FaceTimePreferredEncoding"); 173 | 174 | #pragma mark - More Device Capabilities 175 | 176 | static const CFStringRef kMGDeviceSupportsFaceTime = CFSTR("DeviceSupportsFaceTime"); 177 | static const CFStringRef kMGDeviceSupportsTethering = CFSTR("DeviceSupportsTethering"); 178 | static const CFStringRef kMGDeviceSupportsSimplisticRoadMesh = CFSTR("DeviceSupportsSimplisticRoadMesh"); 179 | static const CFStringRef kMGDeviceSupportsNavigation = CFSTR("DeviceSupportsNavigation"); 180 | static const CFStringRef kMGDeviceSupportsLineIn = CFSTR("DeviceSupportsLineIn"); 181 | static const CFStringRef kMGDeviceSupports9Pin = CFSTR("DeviceSupports9Pin"); 182 | static const CFStringRef kMGDeviceSupports720p = CFSTR("DeviceSupports720p"); 183 | static const CFStringRef kMGDeviceSupports4G = CFSTR("DeviceSupports4G"); 184 | static const CFStringRef kMGDeviceSupports3DMaps = CFSTR("DeviceSupports3DMaps"); 185 | static const CFStringRef kMGDeviceSupports3DImagery = CFSTR("DeviceSupports3DImagery"); 186 | static const CFStringRef kMGDeviceSupports1080p = CFSTR("DeviceSupports1080p"); 187 | 188 | #if __cplusplus 189 | } 190 | #endif 191 | 192 | #endif /* LIBMOBILEGESTALT_H_ */ -------------------------------------------------------------------------------- /CPU test/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // CPU test 4 | // 5 | // Created by Gary on 2015/9/28. 6 | // Copyright © 2015年 Gary. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 12 | #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 13 | #define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0) 14 | 15 | #define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 16 | #define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 17 | #define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT)) 18 | #define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT)) 19 | #define FOOTER_HEIGHT 44 20 | 21 | #define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0) 22 | #define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0) 23 | #define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0) 24 | #define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0) 25 | #define HeightDevide_FOR_GoogleAD 12 26 | 27 | @interface ViewController : UIViewController { 28 | NSString* imageName; 29 | UIScrollView *mainScrollView; 30 | } 31 | @end 32 | 33 | -------------------------------------------------------------------------------- /CPU test/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // CPU test 4 | // 5 | // Created by Gary on 2015/9/28. 6 | // Copyright © 2015年 Gary. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #include 11 | #include 12 | #include 13 | #include 14 | #import "MobileGestalt.h" 15 | #import "AppDelegate.h" 16 | 17 | static CFStringRef (*$MGCopyAnswer)(CFStringRef); 18 | 19 | @implementation ViewController 20 | 21 | - (void)viewDidLoad { 22 | [super viewDidLoad]; 23 | 24 | int adH ,upperOffset = 70; 25 | if(IS_IPHONE_6P ){ 26 | adH = 66; 27 | }else if(IS_IPHONE_6){ 28 | adH = 60; 29 | }else{ 30 | adH = 52; 31 | } 32 | 33 | mainScrollView = [[UIScrollView alloc] init]; 34 | [self.view addSubview:mainScrollView]; 35 | [mainScrollView setTranslatesAutoresizingMaskIntoConstraints:NO]; 36 | [self.view addConstraint:[NSLayoutConstraint constraintWithItem:mainScrollView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]]; 37 | [self.view addConstraint:[NSLayoutConstraint constraintWithItem:mainScrollView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]]; 38 | [self.view addConstraint:[NSLayoutConstraint constraintWithItem:mainScrollView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]]; 39 | [self.view addConstraint:[NSLayoutConstraint constraintWithItem:mainScrollView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1.0 constant:-adH]]; 40 | 41 | void *gestalt = dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_GLOBAL | RTLD_LAZY); 42 | $MGCopyAnswer = dlsym(gestalt, "MGCopyAnswer"); 43 | CFStringRef boardID = (CFStringRef)$MGCopyAnswer(CFSTR("HardwarePlatform")); 44 | UILabel* boardIDLabel = [[UILabel alloc] init]; 45 | UILabel* manufactory = [[UILabel alloc] init]; 46 | 47 | boardIDLabel.text = (__bridge NSString *)boardID; 48 | BOOL isA9 = NO; 49 | manufactory.text = @""; 50 | if ([(__bridge NSString *)boardID isEqualToString:@"s8000"]) { 51 | manufactory.text = @"Samsung"; 52 | isA9 = YES; 53 | imageName = @"A9"; 54 | } 55 | if ([(__bridge NSString *)boardID isEqualToString:@"s8003"]) { 56 | manufactory.text = @"TSMC"; 57 | isA9 = YES; 58 | imageName = @"A9"; 59 | } 60 | 61 | NSString* str2Cmp = [(__bridge NSString *)boardID lowercaseString]; 62 | if ([str2Cmp hasPrefix:@"s5l8960"] || [str2Cmp hasPrefix:@"s5l8965"]){ 63 | imageName = @"A7"; 64 | }else if ([str2Cmp hasPrefix:@"t7000"]){ 65 | imageName = @"A8"; 66 | }else if ([str2Cmp hasPrefix:@"t7001"]){ 67 | imageName = @"A8X"; 68 | }else if ([str2Cmp hasPrefix:@"s5l8950"]){ 69 | imageName = @"A6"; 70 | }else if ([str2Cmp hasPrefix:@"s5L8955"]){ 71 | imageName = @"A6X"; 72 | }else if ([str2Cmp hasPrefix:@"s5l8940"] || [str2Cmp hasPrefix:@"s5l8942"] ){ 73 | imageName = @"A5"; 74 | }else if ([str2Cmp hasPrefix:@"s5l8945"]){ 75 | imageName = @"A5X"; 76 | }else if ([str2Cmp hasPrefix:@"s5l8930"]){ 77 | imageName = @"A4"; 78 | } 79 | 80 | [boardIDLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; 81 | [manufactory setTranslatesAutoresizingMaskIntoConstraints:NO]; 82 | [boardIDLabel setFont:[UIFont systemFontOfSize:36]]; 83 | [mainScrollView addSubview:boardIDLabel]; 84 | [mainScrollView addSubview:manufactory]; 85 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:boardIDLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:mainScrollView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]]; 86 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:boardIDLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:mainScrollView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:-upperOffset]]; 87 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:manufactory attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:mainScrollView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]]; 88 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:manufactory attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:mainScrollView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:50-upperOffset]]; 89 | 90 | //Add chip icon 91 | UIImageView *imgView = [[UIImageView alloc] init]; 92 | if(imageName) { 93 | imgView.image = [UIImage imageNamed:imageName]; 94 | imgView.backgroundColor = [UIColor clearColor]; 95 | imgView.contentMode = UIViewContentModeScaleAspectFit; 96 | [mainScrollView addSubview: imgView]; 97 | [imgView setTranslatesAutoresizingMaskIntoConstraints:NO]; 98 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:imgView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:mainScrollView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]]; 99 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:imgView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:mainScrollView attribute:NSLayoutAttributeWidth multiplier:0.4 constant:0]]; 100 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:imgView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:imgView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]]; 101 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:imgView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:boardIDLabel attribute:NSLayoutAttributeTop multiplier:1.0 constant:-24]]; 102 | } 103 | 104 | //Append chart 105 | UIWebView *webView = [[UIWebView alloc] init]; 106 | NSURL* url = [NSURL URLWithString:@"http://demo.hiraku.tw/CPUIdentifier/chart.php"]; 107 | webView.backgroundColor = [UIColor grayColor]; 108 | [webView loadRequest:[NSURLRequest requestWithURL:url]]; 109 | 110 | [mainScrollView addSubview:webView]; 111 | webView.userInteractionEnabled = NO; 112 | [webView setTranslatesAutoresizingMaskIntoConstraints:NO]; 113 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:webView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:mainScrollView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]]; 114 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:webView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:mainScrollView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]]; 115 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:webView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:manufactory attribute:NSLayoutAttributeBottom multiplier:1.0 constant:100-upperOffset]]; 116 | [mainScrollView addConstraint:[NSLayoutConstraint constraintWithItem:webView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:1300]]; 117 | 118 | mainScrollView.contentSize = CGSizeMake(self.view.frame.size.width, SCREEN_HEIGHT + 952 -upperOffset*2); 119 | } 120 | 121 | 122 | - (void)didReceiveMemoryWarning { 123 | [super didReceiveMemoryWarning]; 124 | // Dispose of any resources that can be recreated. 125 | } 126 | 127 | @end 128 | 129 | -------------------------------------------------------------------------------- /CPU test/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirakujira/CPU-Identifier/9a7092522de2b93d6e8ed0f4d1c98c9ebd8e826a/CPU test/background.png -------------------------------------------------------------------------------- /CPU test/libMobileGestalt.tbd: -------------------------------------------------------------------------------- 1 | --- 2 | archs: [ armv7, armv7s, arm64 ] 3 | platform: ios 4 | install-name: /usr/lib/libMobileGestalt.dylib 5 | exports: 6 | - archs: [ armv7, armv7s, arm64 ] 7 | symbols: [ _MGCancelNotifications, _MGCopyAnswer, _MGCopyAnswerWithError, 8 | _MGCopyMultipleAnswers, _MGGetBoolAnswer, _MGGetFloat32Answer, 9 | _MGGetProductType, _MGGetSInt32Answer, _MGGetSInt64Answer, 10 | _MGIsDeviceOfType, _MGIsDeviceOneOfType, _MGIsQuestionValid, 11 | _MGRegisterForBulkUpdates, _MGRegisterForUpdates, 12 | _MGSetAnswer, _MGSetLogHandler, __MGCacheValid, 13 | __MGClearInProcessCache, __MGCopyDeviceDescription, 14 | __MGCopyIteratedDeviceDescription, __MGIterateDevices, 15 | __MGLog, __MGPrintIteratedDeviceDescription, __MGServerCopyAnswerWithError, 16 | __MGSetServer, __MGWaitForDevices, __MGWriteCache, 17 | _kMGQDiskUsageAmountDataAvailable, _kMGQDiskUsageAmountDataReserved, 18 | _kMGQDiskUsageTotalDataAvailable, _kMGQDiskUsageTotalDataCapacity, 19 | _kMGQDiskUsageTotalDiskCapacity, _kMGQDiskUsageTotalSystemAvailable, 20 | _kMGQDiskUsageTotalSystemCapacity ] 21 | ... 22 | -------------------------------------------------------------------------------- /CPU test/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CPU test 4 | // 5 | // Created by Gary on 2015/9/28. 6 | // Copyright © 2015年 Gary. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CPU Identifier 2 | 3 | This tiny app can detect the CPU chipset of your iPhone. For iPhone 6s / 6s Plus, it can also detect the manufactory (TSMC or Samsung) of A9 chip. 4 | 5 | The compiled (and signed) binary file that I distrubte would upload the chip model, device model and an [unique id](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDevice_Class/#//apple_ref/occ/instp/UIDevice/identifierForVendor) (not UDID, SN or IMEI) to my server, but it's for statistics only. Therefore, I can't identify you from these information. The statistic result is [here](http://demo.hiraku.tw/CPUIdentifier). 6 | 7 | ## How to Use 8 | Open [http://demo.hiraku.tw/CPUIdentifier](http://demo.hiraku.tw/CPUIdentifier) on your iPhone, and follow the introduction to install. 9 | 10 | ## Reference 11 | The iPhone Wiki: [s8000](https://www.theiphonewiki.com/wiki/S8000) [s8003](https://www.theiphonewiki.com/wiki/S8003) 12 | 13 | Ars Technica: [ 14 | Chipworks: Both Samsung and TSMC are making the A9 chip for Apple](http://arstechnica.com/apple/2015/09/chipworks-b…) 15 | 16 | ## License 17 | MIT. Please kindly keep the credit of contributors. 18 | 19 | 20 | ## About Me 21 | I'm a iOS jailbreak tweaks developer. You can find me on my twitter [@hirakujira](http://twitter.com/hirakujira). 22 | --------------------------------------------------------------------------------