├── .gitignore ├── .gitmodules ├── Classes ├── JBAppDelegate.h ├── JBAppDelegate.m ├── JBResultsViewController.h └── JBResultsViewController.m ├── JSONBenchmarks.xcodeproj └── project.pbxproj ├── LICENSE ├── Other Sources ├── JBConstants.h ├── JBConstants.m ├── JSONBenchmarks_Prefix.pch └── main.m ├── Readme.markdown └── Resources ├── Default-Landscape~ipad.png ├── Default-Portrait~ipad.png ├── Default.png ├── Default@2x.png ├── JSONBenchmarks-Info.plist └── twitter_public_timeline.json /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | build 3 | *.mode1v3 4 | *.pbxuser 5 | project.xcworkspace 6 | xcuserdata 7 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Classes/Vendor/yajl-objc"] 2 | path = Classes/Vendor/yajl-objc 3 | url = https://github.com/gabriel/yajl-objc.git 4 | [submodule "Classes/Vendor/json-framework"] 5 | path = Classes/Vendor/json-framework 6 | url = http://github.com/stig/json-framework.git 7 | [submodule "Classes/Vendor/JSONKit"] 8 | path = Classes/Vendor/JSONKit 9 | url = http://github.com/johnezang/JSONKit.git 10 | [submodule "Classes/Vendor/TouchJSON"] 11 | path = Classes/Vendor/TouchJSON 12 | url = https://github.com/TouchCode/TouchJSON.git 13 | [submodule "Classes/Vendor/Statistics"] 14 | path = Classes/Vendor/Statistics 15 | url = http://github.com/stig/Statistics.git 16 | [submodule "Classes/Vendor/NextiveJson"] 17 | path = Classes/Vendor/NextiveJson 18 | url = https://github.com/nextive/NextiveJson.git 19 | -------------------------------------------------------------------------------- /Classes/JBAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // JBAppDelegate.h 3 | // JSONBenchmarks 4 | // 5 | // Created by Sam Soffes on 11/4/09. 6 | // Copyright 2009 Sam Soffes. All rights reserved. 7 | // 8 | 9 | @interface JBAppDelegate : UIView { 10 | 11 | UIWindow *_window; 12 | UINavigationController *_navigationController; 13 | } 14 | 15 | - (void)benchmark; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Classes/JBAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // JBAppDelegate.m 3 | // JSONBenchmarks 4 | // 5 | // Created by Sam Soffes on 11/4/09. 6 | // Copyright 2009 Sam Soffes. All rights reserved. 7 | // 8 | 9 | #import "JBAppDelegate.h" 10 | #import "JBResultsViewController.h" 11 | #import "JBConstants.h" 12 | #import 13 | #import "JSONKit.h" 14 | #import "CJSONDeserializer.h" 15 | #import "CJSONSerializer.h" 16 | #import "NSObject+YAJL.h" 17 | #import "SBStatistics.h" 18 | #import "NXJsonParser.h" 19 | #import "NXJsonSerializer.h" 20 | 21 | // Number of iterations to run 22 | #define kIterations 10 23 | 24 | // Run five times so block overhead is less of a factor 25 | #define x(x) do { x; x; x; x; x; } while (0) 26 | 27 | // Comparer function for sorting 28 | static int _compareResults(NSDictionary *result1, NSDictionary *result2, void *context) { 29 | return [[result1 objectForKey:JBAverageTimeKey] compare:[result2 objectForKey:JBAverageTimeKey]]; 30 | } 31 | 32 | // Benchmark function 33 | static inline void bench(NSString *what, NSString *direction, void (^block)(void), NSMutableArray *results) { 34 | 35 | SBStatistics *stats = [[SBStatistics new] autorelease]; 36 | 37 | for (NSInteger i = 0; i < kIterations; i++) { 38 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 39 | NSDate *before = [NSDate date]; 40 | block(); 41 | [stats addDouble:-[before timeIntervalSinceNow] * 1000]; 42 | [pool release]; 43 | } 44 | 45 | [results addObject:[NSDictionary dictionaryWithObjectsAndKeys: 46 | what, JBLibraryKey, 47 | [NSNumber numberWithDouble:stats.mean], JBAverageTimeKey, 48 | nil]]; 49 | 50 | NSLog(@"%@ %@ min/mean/max (ms): %.3f/%.3f/%.3f - stddev: %.3f", what, direction, stats.min, stats.mean, stats.max, [stats standardDeviation]); 51 | } 52 | 53 | @implementation JBAppDelegate 54 | 55 | #pragma mark NSObject 56 | 57 | - (void)dealloc { 58 | [_navigationController release]; 59 | [_window release]; 60 | [super dealloc]; 61 | } 62 | 63 | #pragma mark Benchmarking 64 | 65 | 66 | - (void)benchmark { 67 | // This could obviously be better, but I'm trying to keep things simple. 68 | 69 | // Configuration 70 | NSLog(@"Starting benchmarks with %i iterations for each library", kIterations); 71 | NSStringEncoding stringEncoding = NSUTF8StringEncoding; 72 | NSStringEncoding dataEncoding = stringEncoding; // NSUTF32BigEndianStringEncoding; 73 | 74 | // Setup result arrays 75 | NSMutableArray *readingResults = [[NSMutableArray alloc] init]; 76 | NSMutableArray *writingResults = [[NSMutableArray alloc] init]; 77 | 78 | // Load JSON string 79 | NSString *jsonString = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"twitter_public_timeline" ofType:@"json"] encoding:stringEncoding error:nil]; 80 | NSData *jsonData = [jsonString dataUsingEncoding:dataEncoding]; 81 | id object = [[CJSONDeserializer deserializer] deserialize:jsonData error:nil]; 82 | 83 | SBJsonParser *sbjsonParser = [[SBJsonParser new] autorelease]; 84 | SBJsonWriter *sbjsonWriter = [[SBJsonWriter new] autorelease]; 85 | bench(@"SBJson", @"read", ^{ x([sbjsonParser objectWithData:jsonData]); }, readingResults); 86 | bench(@"SBJson", @"write", ^{ x([sbjsonWriter dataWithObject:object]); }, writingResults); 87 | 88 | JSONDecoder *jsonKitDecoder = [JSONDecoder decoder]; 89 | bench(@"JSONKit", @"read", ^{ x([jsonKitDecoder objectWithData:jsonData]); }, readingResults); 90 | bench(@"JSONKit", @"write", ^{ x([object JSONString]); }, writingResults); 91 | 92 | CJSONDeserializer *cjsonDeserialiser = [CJSONDeserializer deserializer]; 93 | CJSONSerializer *cjsonSerializer = [CJSONSerializer serializer]; 94 | bench(@"TouchJSON", @"read", ^{ x([cjsonDeserialiser deserialize:jsonData error:nil]); }, readingResults); 95 | bench(@"TouchJSON", @"write", ^{ x([cjsonSerializer serializeArray:object error:nil]); }, writingResults); 96 | 97 | bench(@"YAJL", @"read", ^{ x([jsonString yajl_JSON]); }, readingResults); 98 | bench(@"YAJL", @"write", ^{ x([object yajl_JSONString]); }, writingResults); 99 | 100 | bench(@"NextiveJson", @"read", ^{ x([NXJsonParser parseString:jsonString error:nil ignoreNulls:NO]); }, readingResults); 101 | bench(@"NextiveJson", @"write", ^{ x([NXJsonSerializer serialize:object]); }, writingResults); 102 | 103 | 104 | 105 | // Sort results 106 | [readingResults sortUsingFunction:_compareResults context:nil]; 107 | [writingResults sortUsingFunction:_compareResults context:nil]; 108 | 109 | // Post notification 110 | NSDictionary *allResults = [[NSDictionary alloc] initWithObjectsAndKeys: 111 | readingResults, JBReadingKey, 112 | writingResults, JBWritingKey, 113 | nil]; 114 | [[NSNotificationCenter defaultCenter] postNotificationName:JBDidFinishBenchmarksNotification object:allResults]; 115 | 116 | // Clean up 117 | [readingResults release]; 118 | [writingResults release]; 119 | [allResults release]; 120 | } 121 | 122 | 123 | #pragma mark UIApplicationDelegate 124 | 125 | - (void)applicationDidFinishLaunching:(UIApplication *)application { 126 | 127 | // Setup UI 128 | _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 129 | JBResultsViewController *viewController = [[JBResultsViewController alloc] init]; 130 | _navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; 131 | [viewController release]; 132 | [_window addSubview:_navigationController.view]; 133 | [_window makeKeyAndVisible]; 134 | 135 | // Perform after delay so UI doesn't block 136 | [self performSelector:@selector(benchmark) withObject:nil afterDelay:0.1]; 137 | } 138 | 139 | @end 140 | -------------------------------------------------------------------------------- /Classes/JBResultsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // JBResultsViewController.h 3 | // JSONBenchmarks 4 | // 5 | // Created by Sam Soffes on 9/12/10. 6 | // Copyright 2010 Sam Soffes. All rights reserved. 7 | // 8 | 9 | @interface JBResultsViewController : UITableViewController { 10 | 11 | UISegmentedControl *_segmentedControl; 12 | NSDictionary *_allResults; 13 | } 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Classes/JBResultsViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // JBResultsViewController.m 3 | // JSONBenchmarks 4 | // 5 | // Created by Sam Soffes on 9/12/10. 6 | // Copyright 2010 Sam Soffes. All rights reserved. 7 | // 8 | 9 | #import "JBResultsViewController.h" 10 | #import "JBConstants.h" 11 | 12 | @interface JBResultsViewController (PrivateMethods) 13 | - (void)_didFinishBenchmarks:(NSNotification *)notification; 14 | - (NSArray *)_results; 15 | @end 16 | 17 | 18 | @implementation JBResultsViewController 19 | 20 | #pragma mark NSObject 21 | 22 | - (id)init { 23 | if ((self = [super initWithStyle:UITableViewStyleGrouped])) { 24 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didFinishBenchmarks:) name:JBDidFinishBenchmarksNotification object:nil]; 25 | } 26 | return self; 27 | } 28 | 29 | 30 | - (void)dealloc { 31 | [[NSNotificationCenter defaultCenter] removeObserver:self]; 32 | [_segmentedControl release]; 33 | [_allResults release]; 34 | [super dealloc]; 35 | } 36 | 37 | 38 | #pragma mark UIViewController 39 | 40 | - (void)viewDidLoad { 41 | [super viewDidLoad]; 42 | 43 | // Segmented control 44 | NSArray *items = [[NSArray alloc] initWithObjects:@"Reading", @"Writing", nil]; 45 | _segmentedControl = [[UISegmentedControl alloc] initWithItems:items]; 46 | [items release]; 47 | _segmentedControl.enabled = NO; 48 | _segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; 49 | _segmentedControl.selectedSegmentIndex = 0; 50 | _segmentedControl.frame = CGRectMake(0.0, 0.0, 300.0, 32.0); 51 | [_segmentedControl addTarget:self.tableView action:@selector(reloadData) forControlEvents:UIControlEventValueChanged]; 52 | 53 | // Indicator 54 | UIActivityIndicatorViewStyle indicatorStyle = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? UIActivityIndicatorViewStyleGray : UIActivityIndicatorViewStyleWhite; 55 | UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:indicatorStyle]; 56 | [indicator startAnimating]; 57 | self.navigationItem.titleView = indicator; 58 | [indicator release]; 59 | } 60 | 61 | 62 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 63 | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 64 | return YES; 65 | } 66 | return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 67 | } 68 | 69 | 70 | #pragma mark Private Methods 71 | 72 | - (void)_didFinishBenchmarks:(NSNotification *)notification { 73 | [_allResults release]; 74 | _allResults = [[notification object] retain]; 75 | 76 | // Update UI 77 | _segmentedControl.enabled = YES; 78 | self.navigationItem.titleView = _segmentedControl; 79 | [self.tableView reloadData]; 80 | } 81 | 82 | - (NSArray *)_results { 83 | return [_allResults objectForKey:((_segmentedControl.selectedSegmentIndex == 0) ? JBReadingKey : JBWritingKey)]; 84 | } 85 | 86 | 87 | #pragma mark UITableViewDataSource 88 | 89 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 90 | return [[self _results] count]; 91 | } 92 | 93 | 94 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 95 | static NSString *cellIdentifier = @"cellIdentifier"; 96 | 97 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 98 | if (cell == nil) { 99 | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier] autorelease]; 100 | cell.selectionStyle = UITableViewCellSelectionStyleNone; 101 | } 102 | 103 | NSDictionary *result = [[self _results] objectAtIndex:indexPath.row]; 104 | cell.textLabel.text = [result objectForKey:JBLibraryKey]; 105 | cell.detailTextLabel.text = [NSString stringWithFormat:@"%.03f ms", [[result objectForKey:JBAverageTimeKey] floatValue]]; 106 | 107 | return cell; 108 | } 109 | 110 | @end 111 | -------------------------------------------------------------------------------- /JSONBenchmarks.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 11 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 12 | 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; }; 13 | 45C5321A13DB4BB70034BFC4 /* NSError+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C5317713DB4BB70034BFC4 /* NSError+Extensions.m */; }; 14 | 45C5321B13DB4BB70034BFC4 /* NXDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C5317913DB4BB70034BFC4 /* NXDebug.m */; }; 15 | 45C5321C13DB4BB70034BFC4 /* NXJsonParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C5317B13DB4BB70034BFC4 /* NXJsonParser.m */; }; 16 | 45C5321D13DB4BB70034BFC4 /* NXJsonSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C5317D13DB4BB70034BFC4 /* NXJsonSerializer.m */; }; 17 | B20294AF123C9D4500D64200 /* JBResultsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B20294AE123C9D4500D64200 /* JBResultsViewController.m */; }; 18 | B20294C2123CA12A00D64200 /* JBConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B20294C1123CA12A00D64200 /* JBConstants.m */; }; 19 | B2078E871367BE95003FC4B3 /* CDataScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E701367BE95003FC4B3 /* CDataScanner.m */; }; 20 | B2078E881367BE95003FC4B3 /* CFilteringJSONSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E731367BE95003FC4B3 /* CFilteringJSONSerializer.m */; }; 21 | B2078E891367BE95003FC4B3 /* CJSONDeserializer_BlocksExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E751367BE95003FC4B3 /* CJSONDeserializer_BlocksExtensions.m */; }; 22 | B2078E8A1367BE95003FC4B3 /* CJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E771367BE95003FC4B3 /* CJSONSerialization.m */; }; 23 | B2078E8B1367BE95003FC4B3 /* CJSONSerializedData.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E791367BE95003FC4B3 /* CJSONSerializedData.m */; }; 24 | B2078E8C1367BE95003FC4B3 /* CDataScanner_Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E7C1367BE95003FC4B3 /* CDataScanner_Extensions.m */; }; 25 | B2078E8D1367BE95003FC4B3 /* NSDictionary_JSONExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E7E1367BE95003FC4B3 /* NSDictionary_JSONExtensions.m */; }; 26 | B2078E8E1367BE95003FC4B3 /* CJSONDeserializer.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E811367BE95003FC4B3 /* CJSONDeserializer.m */; }; 27 | B2078E8F1367BE95003FC4B3 /* CJSONScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E831367BE95003FC4B3 /* CJSONScanner.m */; }; 28 | B2078E901367BE95003FC4B3 /* CJSONSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = B2078E851367BE95003FC4B3 /* CJSONSerializer.m */; }; 29 | B2078EA41367BEDF003FC4B3 /* libYAJLiOSDevice.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B2078E9F1367BEDC003FC4B3 /* libYAJLiOSDevice.a */; }; 30 | B213445410A0BA690001FE31 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B213445110A0BA690001FE31 /* main.m */; }; 31 | B2457E8410A164A400BD3540 /* twitter_public_timeline.json in Resources */ = {isa = PBXBuildFile; fileRef = B2457E8310A164A400BD3540 /* twitter_public_timeline.json */; }; 32 | B2457ED010A1671E00BD3540 /* JBAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B2457ECF10A1671E00BD3540 /* JBAppDelegate.m */; }; 33 | B2749907123C91F700A2A9E0 /* JSONKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B27498D9123C91F700A2A9E0 /* JSONKit.m */; }; 34 | B2CD579C13BE79B400166C10 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = B2CD579A13BE79B400166C10 /* Default.png */; }; 35 | B2CD579D13BE79B400166C10 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B2CD579B13BE79B400166C10 /* Default@2x.png */; }; 36 | B2CD57A113BE7A7600166C10 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = B2CD57A013BE7A7600166C10 /* Default-Portrait~ipad.png */; }; 37 | B2CD57A913BE852F00166C10 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = B2CD57A813BE852F00166C10 /* Default-Landscape~ipad.png */; }; 38 | BC2BBBE213A38B2E00D69AB5 /* libsbjson-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BC2BBBE113A38B2E00D69AB5 /* libsbjson-ios.a */; }; 39 | BC8363B7123D8C2600E6F313 /* SBFullStatistics.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8363B1123D8C2600E6F313 /* SBFullStatistics.m */; }; 40 | BC8363B9123D8C2600E6F313 /* SBStatistics.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8363B5123D8C2600E6F313 /* SBStatistics.m */; }; 41 | /* End PBXBuildFile section */ 42 | 43 | /* Begin PBXContainerItemProxy section */ 44 | B2078E9E1367BEDC003FC4B3 /* PBXContainerItemProxy */ = { 45 | isa = PBXContainerItemProxy; 46 | containerPortal = B2078E931367BEDC003FC4B3 /* YAJLiOS.xcodeproj */; 47 | proxyType = 2; 48 | remoteGlobalIDString = 0065977C11BEEF4000E89ABD; 49 | remoteInfo = "YAJLiOS (Device)"; 50 | }; 51 | B2078EA01367BEDC003FC4B3 /* PBXContainerItemProxy */ = { 52 | isa = PBXContainerItemProxy; 53 | containerPortal = B2078E931367BEDC003FC4B3 /* YAJLiOS.xcodeproj */; 54 | proxyType = 2; 55 | remoteGlobalIDString = 006597AC11BEEF4800E89ABD; 56 | remoteInfo = "YAJLiOS (Simulator)"; 57 | }; 58 | B2078EA21367BEDC003FC4B3 /* PBXContainerItemProxy */ = { 59 | isa = PBXContainerItemProxy; 60 | containerPortal = B2078E931367BEDC003FC4B3 /* YAJLiOS.xcodeproj */; 61 | proxyType = 2; 62 | remoteGlobalIDString = 006597EA11BEEF5400E89ABD; 63 | remoteInfo = Tests; 64 | }; 65 | B24E392C138AD00F00E1D550 /* PBXContainerItemProxy */ = { 66 | isa = PBXContainerItemProxy; 67 | containerPortal = B2078E931367BEDC003FC4B3 /* YAJLiOS.xcodeproj */; 68 | proxyType = 1; 69 | remoteGlobalIDString = 0065975811BEEF4000E89ABD; 70 | remoteInfo = "YAJLiOS (Device)"; 71 | }; 72 | BC2BBBD713A38AE600D69AB5 /* PBXContainerItemProxy */ = { 73 | isa = PBXContainerItemProxy; 74 | containerPortal = BC2BBBCD13A38AE500D69AB5 /* SBJson.xcodeproj */; 75 | proxyType = 2; 76 | remoteGlobalIDString = BC12323D1391D5CC00131607; 77 | remoteInfo = SBJson; 78 | }; 79 | BC2BBBD913A38AE600D69AB5 /* PBXContainerItemProxy */ = { 80 | isa = PBXContainerItemProxy; 81 | containerPortal = BC2BBBCD13A38AE500D69AB5 /* SBJson.xcodeproj */; 82 | proxyType = 2; 83 | remoteGlobalIDString = BC1232521391D5CC00131607; 84 | remoteInfo = SBJsonTests; 85 | }; 86 | BC2BBBDB13A38AE600D69AB5 /* PBXContainerItemProxy */ = { 87 | isa = PBXContainerItemProxy; 88 | containerPortal = BC2BBBCD13A38AE500D69AB5 /* SBJson.xcodeproj */; 89 | proxyType = 2; 90 | remoteGlobalIDString = BCC2626913920FC7003D9994; 91 | remoteInfo = "sbjson-ios"; 92 | }; 93 | BC2BBBDD13A38AE600D69AB5 /* PBXContainerItemProxy */ = { 94 | isa = PBXContainerItemProxy; 95 | containerPortal = BC2BBBCD13A38AE500D69AB5 /* SBJson.xcodeproj */; 96 | proxyType = 2; 97 | remoteGlobalIDString = BCC2627313920FC7003D9994; 98 | remoteInfo = "sbjson-iosTests"; 99 | }; 100 | BC2BBBDF13A38B2400D69AB5 /* PBXContainerItemProxy */ = { 101 | isa = PBXContainerItemProxy; 102 | containerPortal = BC2BBBCD13A38AE500D69AB5 /* SBJson.xcodeproj */; 103 | proxyType = 1; 104 | remoteGlobalIDString = BCC2626813920FC7003D9994; 105 | remoteInfo = "sbjson-ios"; 106 | }; 107 | /* End PBXContainerItemProxy section */ 108 | 109 | /* Begin PBXFileReference section */ 110 | 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 111 | 1D6058910D05DD3D006BFB54 /* JSONBenchmarks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JSONBenchmarks.app; sourceTree = BUILT_PRODUCTS_DIR; }; 112 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 113 | 288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 114 | 45C5317613DB4BB70034BFC4 /* NSError+Extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+Extensions.h"; sourceTree = ""; }; 115 | 45C5317713DB4BB70034BFC4 /* NSError+Extensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+Extensions.m"; sourceTree = ""; }; 116 | 45C5317813DB4BB70034BFC4 /* NXDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NXDebug.h; sourceTree = ""; }; 117 | 45C5317913DB4BB70034BFC4 /* NXDebug.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NXDebug.m; sourceTree = ""; }; 118 | 45C5317A13DB4BB70034BFC4 /* NXJsonParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NXJsonParser.h; sourceTree = ""; }; 119 | 45C5317B13DB4BB70034BFC4 /* NXJsonParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NXJsonParser.m; sourceTree = ""; }; 120 | 45C5317C13DB4BB70034BFC4 /* NXJsonSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NXJsonSerializer.h; sourceTree = ""; }; 121 | 45C5317D13DB4BB70034BFC4 /* NXJsonSerializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NXJsonSerializer.m; sourceTree = ""; }; 122 | 45C5317E13DB4BB70034BFC4 /* NXSerializable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NXSerializable.h; sourceTree = ""; }; 123 | B20294AD123C9D4500D64200 /* JBResultsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JBResultsViewController.h; sourceTree = ""; }; 124 | B20294AE123C9D4500D64200 /* JBResultsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JBResultsViewController.m; sourceTree = ""; }; 125 | B20294C0123CA12A00D64200 /* JBConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JBConstants.h; sourceTree = ""; }; 126 | B20294C1123CA12A00D64200 /* JBConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JBConstants.m; sourceTree = ""; }; 127 | B2078E6F1367BE95003FC4B3 /* CDataScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDataScanner.h; sourceTree = ""; }; 128 | B2078E701367BE95003FC4B3 /* CDataScanner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDataScanner.m; sourceTree = ""; }; 129 | B2078E721367BE95003FC4B3 /* CFilteringJSONSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFilteringJSONSerializer.h; sourceTree = ""; }; 130 | B2078E731367BE95003FC4B3 /* CFilteringJSONSerializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CFilteringJSONSerializer.m; sourceTree = ""; }; 131 | B2078E741367BE95003FC4B3 /* CJSONDeserializer_BlocksExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSONDeserializer_BlocksExtensions.h; sourceTree = ""; }; 132 | B2078E751367BE95003FC4B3 /* CJSONDeserializer_BlocksExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CJSONDeserializer_BlocksExtensions.m; sourceTree = ""; }; 133 | B2078E761367BE95003FC4B3 /* CJSONSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSONSerialization.h; sourceTree = ""; }; 134 | B2078E771367BE95003FC4B3 /* CJSONSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CJSONSerialization.m; sourceTree = ""; }; 135 | B2078E781367BE95003FC4B3 /* CJSONSerializedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSONSerializedData.h; sourceTree = ""; }; 136 | B2078E791367BE95003FC4B3 /* CJSONSerializedData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CJSONSerializedData.m; sourceTree = ""; }; 137 | B2078E7B1367BE95003FC4B3 /* CDataScanner_Extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDataScanner_Extensions.h; sourceTree = ""; }; 138 | B2078E7C1367BE95003FC4B3 /* CDataScanner_Extensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDataScanner_Extensions.m; sourceTree = ""; }; 139 | B2078E7D1367BE95003FC4B3 /* NSDictionary_JSONExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSDictionary_JSONExtensions.h; sourceTree = ""; }; 140 | B2078E7E1367BE95003FC4B3 /* NSDictionary_JSONExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSDictionary_JSONExtensions.m; sourceTree = ""; }; 141 | B2078E801367BE95003FC4B3 /* CJSONDeserializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSONDeserializer.h; sourceTree = ""; }; 142 | B2078E811367BE95003FC4B3 /* CJSONDeserializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CJSONDeserializer.m; sourceTree = ""; }; 143 | B2078E821367BE95003FC4B3 /* CJSONScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSONScanner.h; sourceTree = ""; }; 144 | B2078E831367BE95003FC4B3 /* CJSONScanner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CJSONScanner.m; sourceTree = ""; }; 145 | B2078E841367BE95003FC4B3 /* CJSONSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CJSONSerializer.h; sourceTree = ""; }; 146 | B2078E851367BE95003FC4B3 /* CJSONSerializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CJSONSerializer.m; sourceTree = ""; }; 147 | B2078E861367BE95003FC4B3 /* JSONRepresentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONRepresentation.h; sourceTree = ""; }; 148 | B2078E931367BEDC003FC4B3 /* YAJLiOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = YAJLiOS.xcodeproj; path = "yajl-objc/Project-iOS/YAJLiOS.xcodeproj"; sourceTree = ""; }; 149 | B213445010A0BA690001FE31 /* JSONBenchmarks_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONBenchmarks_Prefix.pch; sourceTree = ""; }; 150 | B213445110A0BA690001FE31 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 151 | B213445310A0BA690001FE31 /* JSONBenchmarks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "JSONBenchmarks-Info.plist"; sourceTree = ""; }; 152 | B2457E8310A164A400BD3540 /* twitter_public_timeline.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = twitter_public_timeline.json; sourceTree = ""; }; 153 | B2457ECE10A1671E00BD3540 /* JBAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JBAppDelegate.h; sourceTree = ""; }; 154 | B2457ECF10A1671E00BD3540 /* JBAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JBAppDelegate.m; sourceTree = ""; }; 155 | B27498D8123C91F700A2A9E0 /* JSONKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONKit.h; sourceTree = ""; }; 156 | B27498D9123C91F700A2A9E0 /* JSONKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSONKit.m; sourceTree = ""; }; 157 | B2CD579A13BE79B400166C10 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 158 | B2CD579B13BE79B400166C10 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 159 | B2CD57A013BE7A7600166C10 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait~ipad.png"; sourceTree = ""; }; 160 | B2CD57A813BE852F00166C10 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape~ipad.png"; sourceTree = ""; }; 161 | BC2BBBCD13A38AE500D69AB5 /* SBJson.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SBJson.xcodeproj; path = "json-framework/SBJson.xcodeproj"; sourceTree = ""; }; 162 | BC2BBBE113A38B2E00D69AB5 /* libsbjson-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libsbjson-ios.a"; sourceTree = SOURCE_ROOT; }; 163 | BC8363B1123D8C2600E6F313 /* SBFullStatistics.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SBFullStatistics.m; path = Statistics/Classes/SBFullStatistics.m; sourceTree = ""; }; 164 | BC8363B4123D8C2600E6F313 /* SBStatistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SBStatistics.h; path = Statistics/Classes/SBStatistics.h; sourceTree = ""; }; 165 | BC8363B5123D8C2600E6F313 /* SBStatistics.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SBStatistics.m; path = Statistics/Classes/SBStatistics.m; sourceTree = ""; }; 166 | /* End PBXFileReference section */ 167 | 168 | /* Begin PBXFrameworksBuildPhase section */ 169 | 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { 170 | isa = PBXFrameworksBuildPhase; 171 | buildActionMask = 2147483647; 172 | files = ( 173 | BC2BBBE213A38B2E00D69AB5 /* libsbjson-ios.a in Frameworks */, 174 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 175 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 176 | 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */, 177 | B2078EA41367BEDF003FC4B3 /* libYAJLiOSDevice.a in Frameworks */, 178 | ); 179 | runOnlyForDeploymentPostprocessing = 0; 180 | }; 181 | /* End PBXFrameworksBuildPhase section */ 182 | 183 | /* Begin PBXGroup section */ 184 | 080E96DDFE201D6D7F000001 /* Classes */ = { 185 | isa = PBXGroup; 186 | children = ( 187 | B2457ECE10A1671E00BD3540 /* JBAppDelegate.h */, 188 | B2457ECF10A1671E00BD3540 /* JBAppDelegate.m */, 189 | B20294AD123C9D4500D64200 /* JBResultsViewController.h */, 190 | B20294AE123C9D4500D64200 /* JBResultsViewController.m */, 191 | B2457E8510A164A800BD3540 /* Vendor */, 192 | ); 193 | path = Classes; 194 | sourceTree = ""; 195 | }; 196 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 197 | isa = PBXGroup; 198 | children = ( 199 | 1D6058910D05DD3D006BFB54 /* JSONBenchmarks.app */, 200 | ); 201 | name = Products; 202 | sourceTree = ""; 203 | }; 204 | 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { 205 | isa = PBXGroup; 206 | children = ( 207 | 080E96DDFE201D6D7F000001 /* Classes */, 208 | B213444F10A0BA690001FE31 /* Other Sources */, 209 | B213445210A0BA690001FE31 /* Resources */, 210 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 211 | 19C28FACFE9D520D11CA2CBB /* Products */, 212 | ); 213 | name = CustomTemplate; 214 | sourceTree = ""; 215 | }; 216 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 217 | isa = PBXGroup; 218 | children = ( 219 | BC2BBBE113A38B2E00D69AB5 /* libsbjson-ios.a */, 220 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, 221 | 1D30AB110D05D00D00671497 /* Foundation.framework */, 222 | 288765FC0DF74451002DB57D /* CoreGraphics.framework */, 223 | ); 224 | name = Frameworks; 225 | sourceTree = ""; 226 | }; 227 | 45C5308A13DB4BB60034BFC4 /* NextiveJson */ = { 228 | isa = PBXGroup; 229 | children = ( 230 | 45C5317513DB4BB70034BFC4 /* Json */, 231 | ); 232 | path = NextiveJson; 233 | sourceTree = ""; 234 | }; 235 | 45C5317513DB4BB70034BFC4 /* Json */ = { 236 | isa = PBXGroup; 237 | children = ( 238 | 45C5317613DB4BB70034BFC4 /* NSError+Extensions.h */, 239 | 45C5317713DB4BB70034BFC4 /* NSError+Extensions.m */, 240 | 45C5317813DB4BB70034BFC4 /* NXDebug.h */, 241 | 45C5317913DB4BB70034BFC4 /* NXDebug.m */, 242 | 45C5317A13DB4BB70034BFC4 /* NXJsonParser.h */, 243 | 45C5317B13DB4BB70034BFC4 /* NXJsonParser.m */, 244 | 45C5317C13DB4BB70034BFC4 /* NXJsonSerializer.h */, 245 | 45C5317D13DB4BB70034BFC4 /* NXJsonSerializer.m */, 246 | 45C5317E13DB4BB70034BFC4 /* NXSerializable.h */, 247 | ); 248 | path = Json; 249 | sourceTree = ""; 250 | }; 251 | B2078E711367BE95003FC4B3 /* Experimental */ = { 252 | isa = PBXGroup; 253 | children = ( 254 | B2078E721367BE95003FC4B3 /* CFilteringJSONSerializer.h */, 255 | B2078E731367BE95003FC4B3 /* CFilteringJSONSerializer.m */, 256 | B2078E741367BE95003FC4B3 /* CJSONDeserializer_BlocksExtensions.h */, 257 | B2078E751367BE95003FC4B3 /* CJSONDeserializer_BlocksExtensions.m */, 258 | B2078E761367BE95003FC4B3 /* CJSONSerialization.h */, 259 | B2078E771367BE95003FC4B3 /* CJSONSerialization.m */, 260 | B2078E781367BE95003FC4B3 /* CJSONSerializedData.h */, 261 | B2078E791367BE95003FC4B3 /* CJSONSerializedData.m */, 262 | ); 263 | path = Experimental; 264 | sourceTree = ""; 265 | }; 266 | B2078E7A1367BE95003FC4B3 /* Extensions */ = { 267 | isa = PBXGroup; 268 | children = ( 269 | B2078E7B1367BE95003FC4B3 /* CDataScanner_Extensions.h */, 270 | B2078E7C1367BE95003FC4B3 /* CDataScanner_Extensions.m */, 271 | B2078E7D1367BE95003FC4B3 /* NSDictionary_JSONExtensions.h */, 272 | B2078E7E1367BE95003FC4B3 /* NSDictionary_JSONExtensions.m */, 273 | ); 274 | path = Extensions; 275 | sourceTree = ""; 276 | }; 277 | B2078E7F1367BE95003FC4B3 /* JSON */ = { 278 | isa = PBXGroup; 279 | children = ( 280 | B2078E801367BE95003FC4B3 /* CJSONDeserializer.h */, 281 | B2078E811367BE95003FC4B3 /* CJSONDeserializer.m */, 282 | B2078E821367BE95003FC4B3 /* CJSONScanner.h */, 283 | B2078E831367BE95003FC4B3 /* CJSONScanner.m */, 284 | B2078E841367BE95003FC4B3 /* CJSONSerializer.h */, 285 | B2078E851367BE95003FC4B3 /* CJSONSerializer.m */, 286 | B2078E861367BE95003FC4B3 /* JSONRepresentation.h */, 287 | ); 288 | path = JSON; 289 | sourceTree = ""; 290 | }; 291 | B2078E941367BEDC003FC4B3 /* Products */ = { 292 | isa = PBXGroup; 293 | children = ( 294 | B2078E9F1367BEDC003FC4B3 /* libYAJLiOSDevice.a */, 295 | B2078EA11367BEDC003FC4B3 /* libYAJLiOSSimulator.a */, 296 | B2078EA31367BEDC003FC4B3 /* Tests.app */, 297 | ); 298 | name = Products; 299 | sourceTree = ""; 300 | }; 301 | B213444F10A0BA690001FE31 /* Other Sources */ = { 302 | isa = PBXGroup; 303 | children = ( 304 | B213445010A0BA690001FE31 /* JSONBenchmarks_Prefix.pch */, 305 | B213445110A0BA690001FE31 /* main.m */, 306 | B20294C0123CA12A00D64200 /* JBConstants.h */, 307 | B20294C1123CA12A00D64200 /* JBConstants.m */, 308 | ); 309 | path = "Other Sources"; 310 | sourceTree = ""; 311 | }; 312 | B213445210A0BA690001FE31 /* Resources */ = { 313 | isa = PBXGroup; 314 | children = ( 315 | B2CD57A813BE852F00166C10 /* Default-Landscape~ipad.png */, 316 | B2CD57A013BE7A7600166C10 /* Default-Portrait~ipad.png */, 317 | B2CD579A13BE79B400166C10 /* Default.png */, 318 | B2CD579B13BE79B400166C10 /* Default@2x.png */, 319 | B2457E8310A164A400BD3540 /* twitter_public_timeline.json */, 320 | B213445310A0BA690001FE31 /* JSONBenchmarks-Info.plist */, 321 | ); 322 | path = Resources; 323 | sourceTree = ""; 324 | }; 325 | B2457E8510A164A800BD3540 /* Vendor */ = { 326 | isa = PBXGroup; 327 | children = ( 328 | 45C5308A13DB4BB60034BFC4 /* NextiveJson */, 329 | BC2BBBCD13A38AE500D69AB5 /* SBJson.xcodeproj */, 330 | BC8363BA123D8C2E00E6F313 /* Statistics */, 331 | B2749885123C91F700A2A9E0 /* JSONKit */, 332 | B274976F123C91E000A2A9E0 /* TouchJSON */, 333 | B2078E931367BEDC003FC4B3 /* YAJLiOS.xcodeproj */, 334 | ); 335 | path = Vendor; 336 | sourceTree = ""; 337 | }; 338 | B25465FE132028E300B39371 /* Source */ = { 339 | isa = PBXGroup; 340 | children = ( 341 | B2078E6F1367BE95003FC4B3 /* CDataScanner.h */, 342 | B2078E701367BE95003FC4B3 /* CDataScanner.m */, 343 | B2078E711367BE95003FC4B3 /* Experimental */, 344 | B2078E7A1367BE95003FC4B3 /* Extensions */, 345 | B2078E7F1367BE95003FC4B3 /* JSON */, 346 | ); 347 | path = Source; 348 | sourceTree = ""; 349 | }; 350 | B274976F123C91E000A2A9E0 /* TouchJSON */ = { 351 | isa = PBXGroup; 352 | children = ( 353 | B25465FE132028E300B39371 /* Source */, 354 | ); 355 | path = TouchJSON; 356 | sourceTree = ""; 357 | }; 358 | B2749885123C91F700A2A9E0 /* JSONKit */ = { 359 | isa = PBXGroup; 360 | children = ( 361 | B27498D8123C91F700A2A9E0 /* JSONKit.h */, 362 | B27498D9123C91F700A2A9E0 /* JSONKit.m */, 363 | ); 364 | path = JSONKit; 365 | sourceTree = ""; 366 | }; 367 | BC2BBBCE13A38AE500D69AB5 /* Products */ = { 368 | isa = PBXGroup; 369 | children = ( 370 | BC2BBBD813A38AE600D69AB5 /* SBJson.framework */, 371 | BC2BBBDA13A38AE600D69AB5 /* SBJsonTests.octest */, 372 | BC2BBBDC13A38AE600D69AB5 /* libsbjson-ios.a */, 373 | BC2BBBDE13A38AE600D69AB5 /* sbjson-iosTests.octest */, 374 | ); 375 | name = Products; 376 | sourceTree = ""; 377 | }; 378 | BC8363BA123D8C2E00E6F313 /* Statistics */ = { 379 | isa = PBXGroup; 380 | children = ( 381 | BC8363B1123D8C2600E6F313 /* SBFullStatistics.m */, 382 | BC8363B4123D8C2600E6F313 /* SBStatistics.h */, 383 | BC8363B5123D8C2600E6F313 /* SBStatistics.m */, 384 | ); 385 | name = Statistics; 386 | sourceTree = ""; 387 | }; 388 | /* End PBXGroup section */ 389 | 390 | /* Begin PBXNativeTarget section */ 391 | 1D6058900D05DD3D006BFB54 /* JSONBenchmarks */ = { 392 | isa = PBXNativeTarget; 393 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "JSONBenchmarks" */; 394 | buildPhases = ( 395 | 1D60588D0D05DD3D006BFB54 /* Resources */, 396 | 1D60588E0D05DD3D006BFB54 /* Sources */, 397 | 1D60588F0D05DD3D006BFB54 /* Frameworks */, 398 | ); 399 | buildRules = ( 400 | ); 401 | dependencies = ( 402 | BC2BBBE013A38B2400D69AB5 /* PBXTargetDependency */, 403 | B24E392D138AD00F00E1D550 /* PBXTargetDependency */, 404 | ); 405 | name = JSONBenchmarks; 406 | productName = JSONBenchmarks; 407 | productReference = 1D6058910D05DD3D006BFB54 /* JSONBenchmarks.app */; 408 | productType = "com.apple.product-type.application"; 409 | }; 410 | /* End PBXNativeTarget section */ 411 | 412 | /* Begin PBXProject section */ 413 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 414 | isa = PBXProject; 415 | attributes = { 416 | LastUpgradeCheck = 0420; 417 | ORGANIZATIONNAME = "Sam Soffes"; 418 | }; 419 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "JSONBenchmarks" */; 420 | compatibilityVersion = "Xcode 3.2"; 421 | developmentRegion = English; 422 | hasScannedForEncodings = 1; 423 | knownRegions = ( 424 | en, 425 | ); 426 | mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; 427 | projectDirPath = ""; 428 | projectReferences = ( 429 | { 430 | ProductGroup = BC2BBBCE13A38AE500D69AB5 /* Products */; 431 | ProjectRef = BC2BBBCD13A38AE500D69AB5 /* SBJson.xcodeproj */; 432 | }, 433 | { 434 | ProductGroup = B2078E941367BEDC003FC4B3 /* Products */; 435 | ProjectRef = B2078E931367BEDC003FC4B3 /* YAJLiOS.xcodeproj */; 436 | }, 437 | ); 438 | projectRoot = ""; 439 | targets = ( 440 | 1D6058900D05DD3D006BFB54 /* JSONBenchmarks */, 441 | ); 442 | }; 443 | /* End PBXProject section */ 444 | 445 | /* Begin PBXReferenceProxy section */ 446 | B2078E9F1367BEDC003FC4B3 /* libYAJLiOSDevice.a */ = { 447 | isa = PBXReferenceProxy; 448 | fileType = archive.ar; 449 | path = libYAJLiOSDevice.a; 450 | remoteRef = B2078E9E1367BEDC003FC4B3 /* PBXContainerItemProxy */; 451 | sourceTree = BUILT_PRODUCTS_DIR; 452 | }; 453 | B2078EA11367BEDC003FC4B3 /* libYAJLiOSSimulator.a */ = { 454 | isa = PBXReferenceProxy; 455 | fileType = archive.ar; 456 | path = libYAJLiOSSimulator.a; 457 | remoteRef = B2078EA01367BEDC003FC4B3 /* PBXContainerItemProxy */; 458 | sourceTree = BUILT_PRODUCTS_DIR; 459 | }; 460 | B2078EA31367BEDC003FC4B3 /* Tests.app */ = { 461 | isa = PBXReferenceProxy; 462 | fileType = wrapper.application; 463 | path = Tests.app; 464 | remoteRef = B2078EA21367BEDC003FC4B3 /* PBXContainerItemProxy */; 465 | sourceTree = BUILT_PRODUCTS_DIR; 466 | }; 467 | BC2BBBD813A38AE600D69AB5 /* SBJson.framework */ = { 468 | isa = PBXReferenceProxy; 469 | fileType = wrapper.framework; 470 | path = SBJson.framework; 471 | remoteRef = BC2BBBD713A38AE600D69AB5 /* PBXContainerItemProxy */; 472 | sourceTree = BUILT_PRODUCTS_DIR; 473 | }; 474 | BC2BBBDA13A38AE600D69AB5 /* SBJsonTests.octest */ = { 475 | isa = PBXReferenceProxy; 476 | fileType = wrapper.cfbundle; 477 | path = SBJsonTests.octest; 478 | remoteRef = BC2BBBD913A38AE600D69AB5 /* PBXContainerItemProxy */; 479 | sourceTree = BUILT_PRODUCTS_DIR; 480 | }; 481 | BC2BBBDC13A38AE600D69AB5 /* libsbjson-ios.a */ = { 482 | isa = PBXReferenceProxy; 483 | fileType = archive.ar; 484 | path = "libsbjson-ios.a"; 485 | remoteRef = BC2BBBDB13A38AE600D69AB5 /* PBXContainerItemProxy */; 486 | sourceTree = BUILT_PRODUCTS_DIR; 487 | }; 488 | BC2BBBDE13A38AE600D69AB5 /* sbjson-iosTests.octest */ = { 489 | isa = PBXReferenceProxy; 490 | fileType = wrapper.cfbundle; 491 | path = "sbjson-iosTests.octest"; 492 | remoteRef = BC2BBBDD13A38AE600D69AB5 /* PBXContainerItemProxy */; 493 | sourceTree = BUILT_PRODUCTS_DIR; 494 | }; 495 | /* End PBXReferenceProxy section */ 496 | 497 | /* Begin PBXResourcesBuildPhase section */ 498 | 1D60588D0D05DD3D006BFB54 /* Resources */ = { 499 | isa = PBXResourcesBuildPhase; 500 | buildActionMask = 2147483647; 501 | files = ( 502 | B2457E8410A164A400BD3540 /* twitter_public_timeline.json in Resources */, 503 | B2CD579C13BE79B400166C10 /* Default.png in Resources */, 504 | B2CD579D13BE79B400166C10 /* Default@2x.png in Resources */, 505 | B2CD57A113BE7A7600166C10 /* Default-Portrait~ipad.png in Resources */, 506 | B2CD57A913BE852F00166C10 /* Default-Landscape~ipad.png in Resources */, 507 | ); 508 | runOnlyForDeploymentPostprocessing = 0; 509 | }; 510 | /* End PBXResourcesBuildPhase section */ 511 | 512 | /* Begin PBXSourcesBuildPhase section */ 513 | 1D60588E0D05DD3D006BFB54 /* Sources */ = { 514 | isa = PBXSourcesBuildPhase; 515 | buildActionMask = 2147483647; 516 | files = ( 517 | B213445410A0BA690001FE31 /* main.m in Sources */, 518 | B2457ED010A1671E00BD3540 /* JBAppDelegate.m in Sources */, 519 | B2749907123C91F700A2A9E0 /* JSONKit.m in Sources */, 520 | B20294AF123C9D4500D64200 /* JBResultsViewController.m in Sources */, 521 | B20294C2123CA12A00D64200 /* JBConstants.m in Sources */, 522 | BC8363B7123D8C2600E6F313 /* SBFullStatistics.m in Sources */, 523 | BC8363B9123D8C2600E6F313 /* SBStatistics.m in Sources */, 524 | B2078E871367BE95003FC4B3 /* CDataScanner.m in Sources */, 525 | B2078E881367BE95003FC4B3 /* CFilteringJSONSerializer.m in Sources */, 526 | B2078E891367BE95003FC4B3 /* CJSONDeserializer_BlocksExtensions.m in Sources */, 527 | B2078E8A1367BE95003FC4B3 /* CJSONSerialization.m in Sources */, 528 | B2078E8B1367BE95003FC4B3 /* CJSONSerializedData.m in Sources */, 529 | B2078E8C1367BE95003FC4B3 /* CDataScanner_Extensions.m in Sources */, 530 | B2078E8D1367BE95003FC4B3 /* NSDictionary_JSONExtensions.m in Sources */, 531 | B2078E8E1367BE95003FC4B3 /* CJSONDeserializer.m in Sources */, 532 | B2078E8F1367BE95003FC4B3 /* CJSONScanner.m in Sources */, 533 | B2078E901367BE95003FC4B3 /* CJSONSerializer.m in Sources */, 534 | 45C5321A13DB4BB70034BFC4 /* NSError+Extensions.m in Sources */, 535 | 45C5321B13DB4BB70034BFC4 /* NXDebug.m in Sources */, 536 | 45C5321C13DB4BB70034BFC4 /* NXJsonParser.m in Sources */, 537 | 45C5321D13DB4BB70034BFC4 /* NXJsonSerializer.m in Sources */, 538 | ); 539 | runOnlyForDeploymentPostprocessing = 0; 540 | }; 541 | /* End PBXSourcesBuildPhase section */ 542 | 543 | /* Begin PBXTargetDependency section */ 544 | B24E392D138AD00F00E1D550 /* PBXTargetDependency */ = { 545 | isa = PBXTargetDependency; 546 | name = "YAJLiOS (Device)"; 547 | targetProxy = B24E392C138AD00F00E1D550 /* PBXContainerItemProxy */; 548 | }; 549 | BC2BBBE013A38B2400D69AB5 /* PBXTargetDependency */ = { 550 | isa = PBXTargetDependency; 551 | name = "sbjson-ios"; 552 | targetProxy = BC2BBBDF13A38B2400D69AB5 /* PBXContainerItemProxy */; 553 | }; 554 | /* End PBXTargetDependency section */ 555 | 556 | /* Begin XCBuildConfiguration section */ 557 | 1D6058940D05DD3E006BFB54 /* Debug */ = { 558 | isa = XCBuildConfiguration; 559 | buildSettings = { 560 | ALWAYS_SEARCH_USER_PATHS = NO; 561 | COPY_PHASE_STRIP = NO; 562 | FRAMEWORK_SEARCH_PATHS = ( 563 | "$(inherited)", 564 | "\"$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"", 565 | ); 566 | GCC_DYNAMIC_NO_PIC = NO; 567 | GCC_OPTIMIZATION_LEVEL = 0; 568 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 569 | GCC_PREFIX_HEADER = "Other Sources/JSONBenchmarks_Prefix.pch"; 570 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 571 | HEADER_SEARCH_PATHS = "Classes/Vendor/yajl-objc/**"; 572 | INFOPLIST_FILE = "Resources/JSONBenchmarks-Info.plist"; 573 | IPHONEOS_DEPLOYMENT_TARGET = 4.0; 574 | LIBRARY_SEARCH_PATHS = ( 575 | "$(inherited)", 576 | "\"$(SRCROOT)\"", 577 | ); 578 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS"; 579 | OTHER_LDFLAGS = ( 580 | "-ObjC", 581 | "-all_load", 582 | ); 583 | PRODUCT_NAME = JSONBenchmarks; 584 | SDKROOT = iphoneos; 585 | TARGETED_DEVICE_FAMILY = "1,2"; 586 | }; 587 | name = Debug; 588 | }; 589 | 1D6058950D05DD3E006BFB54 /* Release */ = { 590 | isa = XCBuildConfiguration; 591 | buildSettings = { 592 | ALWAYS_SEARCH_USER_PATHS = NO; 593 | COPY_PHASE_STRIP = YES; 594 | FRAMEWORK_SEARCH_PATHS = ( 595 | "$(inherited)", 596 | "\"$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"", 597 | ); 598 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 599 | GCC_PREFIX_HEADER = "Other Sources/JSONBenchmarks_Prefix.pch"; 600 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 601 | HEADER_SEARCH_PATHS = "Classes/Vendor/yajl-objc/**"; 602 | INFOPLIST_FILE = "Resources/JSONBenchmarks-Info.plist"; 603 | IPHONEOS_DEPLOYMENT_TARGET = 4.0; 604 | LIBRARY_SEARCH_PATHS = ( 605 | "$(inherited)", 606 | "\"$(SRCROOT)\"", 607 | ); 608 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS"; 609 | OTHER_LDFLAGS = ( 610 | "-ObjC", 611 | "-all_load", 612 | ); 613 | PRODUCT_NAME = JSONBenchmarks; 614 | SDKROOT = iphoneos; 615 | TARGETED_DEVICE_FAMILY = "1,2"; 616 | }; 617 | name = Release; 618 | }; 619 | C01FCF4F08A954540054247B /* Debug */ = { 620 | isa = XCBuildConfiguration; 621 | buildSettings = { 622 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 623 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 624 | GCC_C_LANGUAGE_STANDARD = c99; 625 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 626 | GCC_WARN_UNUSED_VARIABLE = YES; 627 | SDKROOT = iphoneos; 628 | }; 629 | name = Debug; 630 | }; 631 | C01FCF5008A954540054247B /* Release */ = { 632 | isa = XCBuildConfiguration; 633 | buildSettings = { 634 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 635 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 636 | GCC_C_LANGUAGE_STANDARD = c99; 637 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 638 | GCC_WARN_UNUSED_VARIABLE = YES; 639 | SDKROOT = iphoneos; 640 | }; 641 | name = Release; 642 | }; 643 | /* End XCBuildConfiguration section */ 644 | 645 | /* Begin XCConfigurationList section */ 646 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "JSONBenchmarks" */ = { 647 | isa = XCConfigurationList; 648 | buildConfigurations = ( 649 | 1D6058940D05DD3E006BFB54 /* Debug */, 650 | 1D6058950D05DD3E006BFB54 /* Release */, 651 | ); 652 | defaultConfigurationIsVisible = 0; 653 | defaultConfigurationName = Release; 654 | }; 655 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "JSONBenchmarks" */ = { 656 | isa = XCConfigurationList; 657 | buildConfigurations = ( 658 | C01FCF4F08A954540054247B /* Debug */, 659 | C01FCF5008A954540054247B /* Release */, 660 | ); 661 | defaultConfigurationIsVisible = 0; 662 | defaultConfigurationName = Release; 663 | }; 664 | /* End XCConfigurationList section */ 665 | }; 666 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 667 | } 668 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Sam Soffes 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Other Sources/JBConstants.h: -------------------------------------------------------------------------------- 1 | // 2 | // JBConstants.h 3 | // JSONBenchmarks 4 | // 5 | // Created by Sam Soffes on 9/12/10. 6 | // Copyright 2010 Sam Soffes. All rights reserved. 7 | // 8 | 9 | #ifndef JBCONSTANTS 10 | #define JBCONSTANTS 11 | 12 | // Notification names 13 | extern NSString *const JBDidFinishBenchmarksNotification; 14 | 15 | // Keys 16 | extern NSString *const JBReadingKey; 17 | extern NSString *const JBWritingKey; 18 | extern NSString *const JBLibraryKey; 19 | extern NSString *const JBAverageTimeKey; 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /Other Sources/JBConstants.m: -------------------------------------------------------------------------------- 1 | // 2 | // JBConstants.m 3 | // JSONBenchmarks 4 | // 5 | // Created by Sam Soffes on 9/12/10. 6 | // Copyright 2010 Sam Soffes. All rights reserved. 7 | // 8 | 9 | #import "JBConstants.h" 10 | 11 | // Notification names 12 | NSString *const JBDidFinishBenchmarksNotification = @"JBDidFinishBenchmarksNotification"; 13 | 14 | // Keys 15 | NSString *const JBReadingKey = @"reading"; 16 | NSString *const JBWritingKey = @"writing"; 17 | NSString *const JBLibraryKey = @"library"; 18 | NSString *const JBAverageTimeKey = @"averageTime"; 19 | 20 | -------------------------------------------------------------------------------- /Other Sources/JSONBenchmarks_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // JSONBenchmarks_Prefix.pch 3 | // JSONBenchmarks 4 | // 5 | // Created by Sam Soffes on 11/4/09. 6 | // Copyright 2009 Sam Soffes. All rights reserved. 7 | // 8 | // Prefix header for all source files of the 'JSONBenchmarks' target in the 'JSONBenchmarks' project 9 | // 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Other Sources/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // JSONBenchmarks 4 | // 5 | // Created by Sam Soffes on 11/4/09. 6 | // Copyright 2009 Sam Soffes. All rights reserved. 7 | // 8 | 9 | int main(int argc, char *argv[]) { 10 | 11 | NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 12 | int retVal = UIApplicationMain(argc, argv, nil, @"JBAppDelegate"); 13 | [pool release]; 14 | return retVal; 15 | } 16 | -------------------------------------------------------------------------------- /Readme.markdown: -------------------------------------------------------------------------------- 1 | # iOS JSON Benchmarks 2 | 3 | This is the code I used to write [my post about JSON benchmarks](http://samsoff.es/post/iphone-json-benchmarks) and [my updated post](http://samsoff.es/posts/updated-iphone-json-benchmarks). 4 | 5 | There is basic UI for this app. Pretty charts might be cool in the future though. View the log for detailed results. 6 | 7 | ## Results Summary 8 | 9 | Last updated 10/15/2010 10 | 11 | The frameworks ranked reading in this order: [JSONKit][], [YAJL][], [Apple JSON][], [JSON Framework][], and [TouchJSON][]. 12 | 13 | Writing ranked in this order: [JSONKit][], [JSON Framework][], [Apple JSON][], [YAJL][], and [TouchJSON][]. 14 | 15 | For detailed time results, run the app on a device. 16 | 17 | ## Building 18 | 19 | You will need iOS 4.0 or greater to build the application since it uses blocks. You will also need to get the submodules with the following command: 20 | 21 | $ git submodule update --init 22 | 23 | Then simply open the project and build normally. 24 | 25 | ## Thanks 26 | 27 | Huge thanks to [Stig Brautaset](http://github.com/stig) for improving benchmarking and keeping [JSON Framework][] up to date. Thanks to [Jonathan Wight](http://github.com/schwa) for keeping [TouchJSON][] up to date. 28 | 29 | [Apple JSON]: http://samsoff.es/posts/parsing-json-with-the-iphones-private-json-framework 30 | [TouchJSON]: http://github.com/schwa/TouchJSON 31 | [JSON Framework]: http://github.com/stig/json-framework 32 | [YAJL]: http://github.com/gabriel/yajl-objc 33 | [JSONKit]: http://github.com/johnezang/JSONKit 34 | -------------------------------------------------------------------------------- /Resources/Default-Landscape~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soffes/json-benchmarks/e92df79c1896f8c9139553b39fea4e6eccc7ff48/Resources/Default-Landscape~ipad.png -------------------------------------------------------------------------------- /Resources/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soffes/json-benchmarks/e92df79c1896f8c9139553b39fea4e6eccc7ff48/Resources/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /Resources/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soffes/json-benchmarks/e92df79c1896f8c9139553b39fea4e6eccc7ff48/Resources/Default.png -------------------------------------------------------------------------------- /Resources/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soffes/json-benchmarks/e92df79c1896f8c9139553b39fea4e6eccc7ff48/Resources/Default@2x.png -------------------------------------------------------------------------------- /Resources/JSONBenchmarks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDisplayName 8 | JSON Bench 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | com.samsoffes.json-benchmarks 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UISupportedInterfaceOrientations 28 | 29 | UIInterfaceOrientationPortrait 30 | UIInterfaceOrientationLandscapeLeft 31 | UIInterfaceOrientationLandscapeRight 32 | 33 | UISupportedInterfaceOrientations~ipad 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | UIInterfaceOrientationPortraitUpsideDown 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Resources/twitter_public_timeline.json: -------------------------------------------------------------------------------- 1 | [{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"web","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"notifications":null,"favourites_count":0,"description":"AdMan / Music Collector","following":null,"statuses_count":617,"profile_text_color":"8c8c8c","geo_enabled":false,"profile_background_image_url":"http://s.twimg.com/a/1257288876/images/themes/theme9/bg.gif","profile_image_url":"http://a3.twimg.com/profile_images/503330459/madmen_icon_normal.jpg","profile_link_color":"2FC2EF","verified":false,"profile_background_tile":false,"url":null,"screen_name":"khaled_itani","created_at":"Thu Jul 23 20:39:21 +0000 2009","profile_background_color":"1A1B1F","profile_sidebar_fill_color":"252429","followers_count":156,"protected":false,"location":"Tempe, Arizona","name":"Khaled Itani","time_zone":"Pacific Time (US & Canada)","friends_count":151,"profile_sidebar_border_color":"050505","id":59581900,"utc_offset":-28800},"id":5414922107,"text":"RT @cakeforthought 24. If you wish hard enough, you will hear your current favourite song on the radio minutes after you get into your car."},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"HootSuite","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"geo_enabled":false,"description":"80\u540e\uff0c\u5904\u5973\u5ea7\uff0c\u65e0\u4e3b\u7684\u808b\u9aa8\uff0c\u5b85+\u5fae\u8150\u3002\u5b8c\u7f8e\u63a7\uff0c\u7ea0\u7ed3\u63a7\u3002\u5728\u76f8\u4eb2\u7684\u6253\u51fb\u4e0e\u88ab\u6253\u51fb\u4e2d\u4e0d\u65ad\u6210\u957fing","following":false,"profile_text_color":"000000","verified":false,"profile_background_image_url":"http://s.twimg.com/a/1257210731/images/themes/theme1/bg.png","profile_image_url":"http://a1.twimg.com/profile_images/326632226/1_normal.jpg","profile_link_color":"0000ff","followers_count":572,"profile_background_tile":false,"url":null,"screen_name":"ivy_shi0905","created_at":"Wed Jul 22 04:15:56 +0000 2009","friends_count":102,"profile_background_color":"9ae4e8","notifications":false,"favourites_count":0,"profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Shanghai","name":"\u827e\u5c0f\u8587","statuses_count":1341,"time_zone":"Beijing","profile_sidebar_border_color":"87bc44","id":59032339,"utc_offset":28800},"id":5414922106,"text":"\u8717\u725b\u6709\u623f\u5b50\uff01RT @zqzx: \u8774\u8776\u4e3a\u4ec0\u4e48\u5ac1\u7ed9\u8717\u725b\uff1f: http://bit.ly/F551P"},{"geo":null,"in_reply_to_user_id":14919730,"in_reply_to_status_id":5407821461,"truncated":false,"source":"Echofon","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":"Nicholas_Chan","user":{"notifications":false,"favourites_count":80,"description":"Jesus is my life. i love my mom/dad & i adore Bruce Marchiano.","following":false,"statuses_count":608,"profile_text_color":"3E4415","geo_enabled":false,"profile_background_image_url":"http://s.twimg.com/a/1256928834/images/themes/theme5/bg.gif","profile_image_url":"http://a3.twimg.com/profile_images/497332429/image_normal.jpg","profile_link_color":"D02B55","verified":false,"profile_background_tile":false,"url":"http://www.brucemarchiano.com/jtc.php","screen_name":"haydeeang","created_at":"Fri Jul 17 18:39:24 +0000 2009","profile_background_color":"352726","profile_sidebar_fill_color":"99CC33","followers_count":53,"protected":false,"location":"GMT+8","name":"haydee","time_zone":"Singapore","friends_count":28,"profile_sidebar_border_color":"829D5E","id":57719744,"utc_offset":28800},"id":5414922097,"text":"@Nicholas_Chan - Oh yea, forgot to tell u abt the mem card. That's the only issue so far. E71 won't let u down (but Nokia svc is bad!)"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"twitterfeed","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"notifications":null,"favourites_count":0,"description":"","following":null,"statuses_count":2018,"profile_text_color":"333333","geo_enabled":false,"profile_background_image_url":"http://s.twimg.com/a/1257191498/images/themes/theme14/bg.gif","profile_image_url":"http://a3.twimg.com/profile_images/456062787/play_normal.jpg","profile_link_color":"009999","verified":false,"profile_background_tile":true,"url":"http://my-free-tv-guide.com","screen_name":"myfreetvguide","created_at":"Tue Oct 06 15:52:50 +0000 2009","profile_background_color":"131516","profile_sidebar_fill_color":"efefef","followers_count":67,"protected":false,"location":"","name":"my-free-tv-guide.com","time_zone":null,"friends_count":0,"profile_sidebar_border_color":"eeeeee","id":80333874,"utc_offset":null},"id":5414922096,"text":"Watch online: The Forgotten 1x07 Railroad Jane http://bit.ly/4fWHSB"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"Echofon","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"friends_count":100,"description":"19, Northwestern State University","following":false,"statuses_count":429,"profile_text_color":"f50f8d","notifications":false,"profile_background_image_url":"http://s.twimg.com/a/1257288876/images/themes/theme3/bg.gif","favourites_count":0,"profile_image_url":"http://a3.twimg.com/profile_images/441940323/Pretty_Me78987_normal.jpg","profile_link_color":"f52469","geo_enabled":false,"profile_background_tile":true,"url":"http://www.facebook.com/profile.php?id=705737124&ref=mf","screen_name":"crobichaux","created_at":"Thu Mar 19 18:51:32 +0000 2009","profile_background_color":"FF6699","verified":false,"profile_sidebar_fill_color":"59e550","protected":false,"location":"New Orleans, La","name":"Christean Robichaux","time_zone":"Central Time (US & Canada)","profile_sidebar_border_color":"CC3366","followers_count":119,"id":25359730,"utc_offset":-21600},"id":5414922091,"text":"got that trigga trey on repeat"},{"geo":null,"in_reply_to_user_id":23052507,"in_reply_to_status_id":5414858387,"truncated":false,"source":"Snaptu","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":"EllieAragon","user":{"notifications":null,"favourites_count":2,"description":"","following":null,"statuses_count":2284,"profile_text_color":"000000","geo_enabled":false,"profile_background_image_url":"http://s.twimg.com/a/1257210731/images/themes/theme1/bg.png","profile_image_url":"http://a1.twimg.com/profile_images/331286164/IMG_1460_normal.jpg","profile_link_color":"0000ff","verified":false,"profile_background_tile":false,"url":null,"screen_name":"ClactonGirl","created_at":"Mon May 18 17:00:38 +0000 2009","profile_background_color":"9ae4e8","profile_sidebar_fill_color":"e0ff92","followers_count":976,"protected":false,"location":"UK","name":"Jillian Martina-Rigo","time_zone":"London","friends_count":1782,"profile_sidebar_border_color":"87bc44","id":40914421,"utc_offset":0},"id":5414922088,"text":"@EllieAragon oh bless . You will get top marks you know so much about them 2 lads. Good luck darling xxxxx"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"twitterfeed","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"notifications":null,"favourites_count":0,"description":null,"following":null,"statuses_count":309,"profile_text_color":"000000","geo_enabled":false,"profile_background_image_url":"http://s.twimg.com/a/1256928834/images/themes/theme1/bg.png","profile_image_url":"http://a3.twimg.com/profile_images/459641537/TH_wide_normal.jpg","profile_link_color":"0000ff","verified":false,"profile_background_tile":false,"url":null,"screen_name":"MJTimesHerald","created_at":"Mon Oct 05 19:46:54 +0000 2009","profile_background_color":"9ae4e8","profile_sidebar_fill_color":"e0ff92","followers_count":27,"protected":false,"location":null,"name":"MJ Times-Herald","time_zone":null,"friends_count":9,"profile_sidebar_border_color":"87bc44","id":80108789,"utc_offset":null},"id":5414922086,"text":"Warriors lose second straight one-goal game to Saskatoon http://bit.ly/2Ni1w0"},{"geo":null,"in_reply_to_user_id":75100083,"in_reply_to_status_id":5414866215,"truncated":false,"source":"web","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":"fckit_followme","user":{"notifications":null,"favourites_count":3,"description":"im 20 yrs old and live life to the fullest","following":null,"statuses_count":2802,"profile_text_color":"943535","geo_enabled":false,"profile_background_image_url":"http://a3.twimg.com/profile_background_images/50617425/7883640.jpg","profile_image_url":"http://a3.twimg.com/profile_images/507345025/20090322123754_normal.jpg","profile_link_color":"eb0e19","verified":false,"profile_background_tile":true,"url":"http://www.facebook.com/home.php?ref=home#/profile.php?id=1646435176&ref=profile","screen_name":"MontreFooo","created_at":"Thu Oct 01 14:38:02 +0000 2009","profile_background_color":"02070a","profile_sidebar_fill_color":"223815","followers_count":178,"protected":false,"location":"Los Angeles,Ca","name":"Demontre Carter","time_zone":"Pacific Time (US & Canada)","friends_count":102,"profile_sidebar_border_color":"6e1010","id":78918586,"utc_offset":-28800},"id":5414922085,"text":"@fckit_followme ay thats how i get down"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"Echofon","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"geo_enabled":false,"description":"","following":false,"profile_text_color":"3C3940","verified":false,"profile_background_image_url":"http://s.twimg.com/a/1257288876/images/themes/theme4/bg.gif","profile_image_url":"http://a1.twimg.com/profile_images/480683868/1__Custom__normal.JPG","profile_link_color":"0099B9","followers_count":71,"profile_background_tile":false,"url":"http://t.sina.com.cn/song4fun","screen_name":"song4fun","created_at":"Fri Feb 13 03:24:55 +0000 2009","friends_count":87,"profile_background_color":"0099B9","notifications":false,"favourites_count":10,"profile_sidebar_fill_color":"95E8EC","protected":false,"location":"Beijing","name":"\u6de1\u5b9a","statuses_count":685,"time_zone":"Beijing","profile_sidebar_border_color":"5ED4DC","id":20744452,"utc_offset":28800},"id":5414922084,"text":"\u51fa\u5565\u72b6\u51b5\u4e86\uff1f RT: @bzcai: \u62bd!!(\uffe3\u03b5(#\uffe3)\u2606\u2570\u256e(\uffe3\u25bd\uffe3///) RT @ksky: @bzcai \u5305\u5b50,\u6211\u5929\u5929\u68a6\u89c1\u4f60..."},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"Echofon","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"notifications":false,"favourites_count":0,"description":"I am a entrepreneur & fashion designer . I feel very blessed on where i am at in my life rightt now and its only getting better and follow me!","following":false,"statuses_count":2019,"profile_text_color":"bfb8bc","geo_enabled":false,"profile_background_image_url":"http://a1.twimg.com/profile_background_images/47835054/12704912ng3.jpg","profile_image_url":"http://a3.twimg.com/profile_images/488353435/Picture_014_normal.jpg","profile_link_color":"FF0000","verified":false,"profile_background_tile":true,"url":"http://www.myspace.com/lakyo","screen_name":"ZoLAKYO","created_at":"Thu Mar 12 02:52:01 +0000 2009","profile_background_color":"BADFCD","profile_sidebar_fill_color":"050505","followers_count":259,"protected":false,"location":"LONG BEACH, CA","name":"Zo A.","time_zone":"Pacific Time (US & Canada)","friends_count":226,"profile_sidebar_border_color":"f70d24","id":23881241,"utc_offset":-28800},"id":5414922081,"text":"The best one ive seen today LOL RT @YgFlash: #losemynumber if i hit and didnt call u 1st...LOL"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"UberTwitter","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"notifications":false,"favourites_count":2,"description":"M/28 (ouch!)/Proud Husband/Funky Dad to be/SoccerHolic/Working Happily for Thai Company","following":false,"statuses_count":684,"profile_text_color":"e51010","geo_enabled":false,"profile_background_image_url":"http://a3.twimg.com/profile_background_images/17575299/vladstudio_fifa_1280x1024.jpg","profile_image_url":"http://a3.twimg.com/profile_images/496139249/Sing_27_normal.jpg","profile_link_color":"050505","verified":false,"profile_background_tile":false,"url":"http://thepradonos.com","screen_name":"andripradono","created_at":"Thu Apr 23 07:28:25 +0000 2009","profile_background_color":"1e2357","profile_sidebar_fill_color":"fcfcfd","followers_count":184,"protected":false,"location":"Jakarta, Indonesia","name":"Andrianto Pradono","time_zone":"Jakarta","friends_count":94,"profile_sidebar_border_color":"1e2357","id":34560834,"utc_offset":25200},"id":5414922080,"text":"On a meeting. Here in this company, I can chat and joking w/ Directors freely, hehe, something that very rare before here :p"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"twitterfeed","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"notifications":null,"favourites_count":0,"description":null,"following":null,"statuses_count":16914,"profile_text_color":"000000","geo_enabled":false,"profile_background_image_url":"http://s.twimg.com/a/1257278527/images/themes/theme1/bg.png","profile_image_url":"http://s.twimg.com/a/1257278527/images/default_profile_6_normal.png","profile_link_color":"0000ff","verified":false,"profile_background_tile":false,"url":null,"screen_name":"chnumberone","created_at":"Thu Sep 24 22:43:27 +0000 2009","profile_background_color":"9ae4e8","profile_sidebar_fill_color":"e0ff92","followers_count":1834,"protected":false,"location":null,"name":"john","time_zone":null,"friends_count":0,"profile_sidebar_border_color":"87bc44","id":77063895,"utc_offset":null},"id":5414922077,"text":"NOTEBOOK LOCK WITH KEY HIGH QUALITY LAPTOP LOCK KEY: NOTEBOOK COMPUTER LOCK MADE WITH HIGH QUALITY ALLOY METERI.. http://bit.ly/2dXSPw"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"Google","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"description":"A family of genuine fireworks enthusiasts.","following":false,"profile_text_color":"ffa70f","profile_background_image_url":"http://a1.twimg.com/profile_background_images/28697432/twitter4.jpg","favourites_count":1,"profile_image_url":"http://a3.twimg.com/profile_images/357298117/twiticon_normal.png","profile_link_color":"ffa812","followers_count":92,"profile_background_tile":false,"url":"http://www.epicfireworks.com/","screen_name":"EpicFireworks","created_at":"Thu May 08 12:11:26 +0000 2008","friends_count":73,"profile_background_color":"000000","geo_enabled":false,"notifications":false,"profile_sidebar_fill_color":"000000","protected":false,"location":"Yorkshire, UK","name":"Epic Fireworks","verified":false,"statuses_count":660,"time_zone":"London","profile_sidebar_border_color":"181A1E","id":14699367,"utc_offset":0},"id":5414922067,"text":"Craigs the man;-) (YouTube http://bit.ly/4cEjx3)"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"twitterfeed","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"description":"The World News Built and maintained by @Spinnyglen","following":false,"profile_text_color":"666666","profile_background_image_url":"http://s.twimg.com/a/1256928834/images/themes/theme9/bg.gif","favourites_count":0,"profile_image_url":"http://a1.twimg.com/profile_images/74530938/earthecocapitolist_normal.jpg","profile_link_color":"2FC2EF","followers_count":1232,"profile_background_tile":false,"url":null,"screen_name":"TheWorldNews","created_at":"Thu Oct 23 08:35:36 +0000 2008","friends_count":40,"profile_background_color":"1A1B1F","geo_enabled":false,"notifications":false,"profile_sidebar_fill_color":"252429","protected":false,"location":"Redding California","name":"The World News","verified":false,"statuses_count":22503,"time_zone":"Alaska","profile_sidebar_border_color":"181A1E","id":16922792,"utc_offset":-32400},"id":5414922065,"text":"Earthquake injures 269 in southern Iran (AP): AP - A moderate earthquake has shaken southern Iran, injuring 269.. http://bit.ly/39CkuV"},{"geo":null,"in_reply_to_user_id":24060334,"in_reply_to_status_id":5414526295,"truncated":false,"source":"UberTwitter","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":"ComCorrec","user":{"description":":o) ","following":false,"profile_text_color":"333333","profile_background_image_url":"http://a1.twimg.com/profile_background_images/26431346/Tranquility_Wallpaper_by_lee25.jpg","favourites_count":0,"profile_image_url":"http://a1.twimg.com/profile_images/395656584/me_vegas_normal.jpg","profile_link_color":"0084B4","followers_count":42,"profile_background_tile":true,"url":null,"screen_name":"sunnyd2122","created_at":"Mon Mar 23 00:24:51 +0000 2009","friends_count":55,"profile_background_color":"e6fc36","geo_enabled":false,"notifications":false,"profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"eugene","name":"stephanie stephens","verified":false,"statuses_count":767,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"BDDCAD","id":25915132,"utc_offset":-28800},"id":5414922061,"text":"@ComCorrec yeah errbody going Mad Hard in this one... Sooooo soooo real I'm excited:)"},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"mobile web","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"description":"meet me once and remember me forever!","following":false,"profile_text_color":"333333","profile_background_image_url":"http://a3.twimg.com/profile_background_images/30492537/113_1303.JPG","favourites_count":6,"profile_image_url":"http://a3.twimg.com/profile_images/438583537/112_1299_normal.JPG","profile_link_color":"0084B4","followers_count":55,"profile_background_tile":true,"url":null,"screen_name":"CoachRock69","created_at":"Sun Aug 10 03:46:18 +0000 2008","friends_count":68,"profile_background_color":"9AE4E8","geo_enabled":false,"notifications":false,"profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"\u00dcT: 36.708699,-121.659728","name":"Corey Rock","verified":false,"statuses_count":880,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"dbadaf","id":15795052,"utc_offset":-28800},"id":5414922056,"text":"Just found a new way to Twitter via my iPod touch"},{"geo":null,"in_reply_to_user_id":47368314,"in_reply_to_status_id":5397561632,"truncated":false,"source":"Twitterrific","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":"fr33lo4d3r","user":{"friends_count":10,"description":"","following":false,"statuses_count":117,"profile_text_color":"333333","notifications":false,"profile_background_image_url":"http://s.twimg.com/a/1257288876/images/themes/theme1/bg.png","favourites_count":0,"profile_image_url":"http://a1.twimg.com/profile_images/231299756/Bild_004_normal.jpg","profile_link_color":"0084B4","geo_enabled":false,"profile_background_tile":false,"url":null,"screen_name":"kumpelblase2","created_at":"Wed Apr 29 17:32:50 +0000 2009","profile_background_color":"022430","verified":false,"profile_sidebar_fill_color":"C0DFEC","protected":false,"location":"","name":"Tim Hagemann","time_zone":"Greenland","profile_sidebar_border_color":"a8c7f7","followers_count":10,"id":36417288,"utc_offset":-10800},"id":5414922055,"text":"@fr33lo4d3r stimmt schadet nicht aber du verpasst ganz sch\u00f6n viel..."},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"web","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"description":"Twitter oficial de Yordi Rosado","following":false,"profile_text_color":"666666","profile_background_image_url":"http://a1.twimg.com/profile_background_images/46252840/bg_twitter.jpg","favourites_count":10,"profile_image_url":"http://a1.twimg.com/profile_images/293230496/P5170225_normal.JPG","profile_link_color":"2FC2EF","followers_count":12750,"profile_background_tile":false,"url":"http://www.yordirosado.com","screen_name":"Yordi_Rosado","created_at":"Thu Jun 11 22:24:45 +0000 2009","friends_count":123,"profile_background_color":"1A1B1F","geo_enabled":false,"notifications":false,"profile_sidebar_fill_color":"252429","protected":false,"location":"Mexico, DF","name":"Yordi Rosado","verified":true,"statuses_count":1897,"time_zone":"Central Time (US & Canada)","profile_sidebar_border_color":"181A1E","id":46508678,"utc_offset":-21600},"id":5414922054,"text":"concierto lo podr\u00e1 disfrutar gracias a la peli. La mala: El ya no pudo ver a ninguno disfrutarlo."},{"geo":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"truncated":false,"source":"twitterfeed","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":null,"user":{"description":"A river of SEO news from Alltop.com.","following":false,"profile_text_color":"000000","profile_background_image_url":"http://a1.twimg.com/profile_background_images/33927920/DSC_1985.jpg","favourites_count":0,"profile_image_url":"http://a1.twimg.com/profile_images/391216966/IloveAlltop_normal.png","profile_link_color":"3a16f0","followers_count":922,"profile_background_tile":false,"url":"http://seo.alltop.com","screen_name":"Alltop_SEO","created_at":"Mon Aug 31 15:26:58 +0000 2009","friends_count":0,"profile_background_color":"9AE4E8","geo_enabled":false,"notifications":false,"profile_sidebar_fill_color":"ffffff","protected":false,"location":"Palo Alto, CA","name":"Alltop","verified":false,"statuses_count":4146,"time_zone":"Hawaii","profile_sidebar_border_color":"BDDCAD","id":70418700,"utc_offset":-36000},"id":5414922053,"text":"MSN Redesign Relies on Structured Data from Bing http://bit.ly/2yZsav\n SEO.alltop.com"},{"geo":null,"in_reply_to_user_id":60430385,"in_reply_to_status_id":null,"truncated":false,"source":"web","favorited":false,"created_at":"Wed Nov 04 07:20:37 +0000 2009","in_reply_to_screen_name":"SilentSnsation","user":{"description":"Its not what I do...., its what DON'T I do?!!!.... ","following":false,"profile_text_color":"0c2a9e","profile_background_image_url":"http://a1.twimg.com/profile_background_images/45389022/untitleblue.bmp","favourites_count":1,"profile_image_url":"http://a3.twimg.com/profile_images/472097945/untit_normal.bmp","profile_link_color":"d47815","followers_count":254,"profile_background_tile":true,"url":"http://www.facebook.com/HeatherBently","screen_name":"HeatherBently","created_at":"Sun Jun 28 04:22:54 +0000 2009","friends_count":574,"profile_background_color":"9AE4E8","geo_enabled":false,"notifications":false,"profile_sidebar_fill_color":"5c5c70","protected":false,"location":"Lexington, Ky","name":"Heather Shannon","verified":false,"statuses_count":1855,"time_zone":"Quito","profile_sidebar_border_color":"060212","id":51649051,"utc_offset":-18000},"id":5414922050,"text":"@silentSnsation girl, please tell me its because u was a cop for halloween... lol"}] --------------------------------------------------------------------------------