Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev core rewrite #467

Open
wants to merge 1,568 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1568 commits
Select commit Hold shift + click to select a range
4f5f12e
Add some convenience headers and make use of them
djbe Oct 6, 2011
a8d415d
Merge branch 'master' into dev_core_rewrite
djbe Oct 6, 2011
d68e6fd
Merge branch 'master' into dev_core_rewrite
djbe Oct 7, 2011
a25bbd4
Plugin works!
djbe Oct 7, 2011
46067ef
Merge branch 'master' into dev_core_rewrite
djbe Oct 7, 2011
7dbbfcf
Fixed the issue where you couldn't select a pin when draggable was set
rickfillion Oct 7, 2011
5970c34
Fixed the couple warnings that have been bugging me for a long time.
rickfillion Oct 7, 2011
3f3a048
Use external configuration files
djbe Oct 8, 2011
1200677
Remove "sample" from better auth. sample, as it isn't an actual "samp…
djbe Oct 8, 2011
4c2e97c
Move version information to configuration files.
djbe Oct 8, 2011
95398cd
Fixed a no-autorelease-pool leak.
andymatuschak Oct 10, 2011
fc725cc
Background updates would never get scheduled when the net's down.
andymatuschak Oct 10, 2011
5abe63e
Views (WIP)
djbe Oct 13, 2011
d116c42
forgot this
djbe Oct 13, 2011
07b3836
Merge branch 'master' into dev_core_rewrite
djbe Oct 13, 2011
da6b3e9
Fix compiler errors
djbe Oct 13, 2011
3e977bf
Fixed loads of warnings
djbe Oct 13, 2011
2bb0264
Use primitive types for member variables
djbe Oct 14, 2011
e4d7004
Use ARC in Plugins.framework
djbe Oct 14, 2011
a306eed
Use ARC in Core plugin
djbe Oct 14, 2011
199e9a3
Use ARC in CP (only partially, still need to modify the bulk of it)
djbe Oct 14, 2011
098a701
Flesh out the context class a bit
djbe Oct 14, 2011
e0c9291
Implement context functionality
djbe Oct 14, 2011
3934afc
Merge branch 'master' into dev_core_rewrite
djbe Oct 15, 2011
eb0cfe2
Add device identifier of iPhone 4S
DerAndereAndi Oct 15, 2011
6c329f9
Finally converted bluetooth evidence source
djbe Oct 16, 2011
8ca6214
Added help text to rules
djbe Oct 16, 2011
cc397d4
errr, whoops?
djbe Oct 16, 2011
613b759
Fixed issues that led to crashes on Mac OS X 10.7 Lion.
Oct 17, 2011
1e9d8bc
Fix a warning
DerAndereAndi Oct 16, 2011
44a0225
Merge branch 'release/2.0.1'
DerAndereAndi Oct 18, 2011
f9280e9
Update Mac demo Xcode project
DerAndereAndi Oct 19, 2011
a652e95
Fix mac client to detect crashes of versions before the framework was…
DerAndereAndi Oct 19, 2011
afd072d
Merge branch 'master' into dev_core_rewrite
djbe Oct 20, 2011
268ea20
Fixed leaks with NSFileManager
Oct 20, 2011
5dce90e
Merge pull request #28 from wildchocolate/master
andymatuschak Oct 20, 2011
72e68dc
Add willShowSubmitCrashReportAlert delegate
DerAndereAndi Oct 20, 2011
8549454
Update Xcode project
DerAndereAndi Oct 20, 2011
f102f75
Improve delegate return value handling
DerAndereAndi Oct 20, 2011
07b2bd1
Add compatibility to 10.5 as base SDK
DerAndereAndi Oct 24, 2011
5457476
Fixes #109: Error extracting dmg archives
andymatuschak Oct 28, 2011
d092ae9
Resolved merge
andymatuschak Oct 28, 2011
c62d868
Added ARC compilation support
fpillet Oct 30, 2011
b26e148
Proper use of sizeof for memset()
fpillet Oct 30, 2011
5ab9bdc
Updated cert req file
fpillet Oct 30, 2011
1891f2a
Proper icon references
fpillet Oct 30, 2011
455b53f
Official workaround (as per TN2287) for iOS 5 TLS start issue
fpillet Oct 30, 2011
eec58d2
Small fix to our framework install path
djbe Oct 30, 2011
3b423bc
Updated to 1.0
fpillet Oct 30, 2011
3b3509e
Merge branch 'master' into dev_core_rewrite
djbe Oct 30, 2011
00fc0de
Cast to actual class to silence compiler warnings
fpillet Oct 31, 2011
4bf658d
v1.0 date
fpillet Oct 31, 2011
949aa30
Fixed compilation error in non-ARC mode
fpillet Oct 31, 2011
4f98ab2
Updated build version to commit for 1.0
fpillet Oct 31, 2011
2ed4959
Add a QuincyLib project
marcopg Oct 31, 2011
63b383d
Made the helper tool half as redundant as before
djbe Oct 31, 2011
39bbdd9
Display a better message when updating the helper tool
djbe Oct 31, 2011
05dd200
Merge branch 'master' into dev_core_rewrite
djbe Oct 31, 2011
c1432e0
Added NSLogger as a subtree to the repo
djbe Nov 1, 2011
ebf76c2
Ignore xcode workspace files
djbe Nov 2, 2011
c4dc555
Update Growl SDK to 1.3
djbe Nov 2, 2011
d8ffd78
Fix small logic error in release builds
djbe Nov 2, 2011
8b36a47
Separate Core plugin into it's own Xcode project
djbe Nov 2, 2011
b7b0cc0
Mistakenly removed growl from copy phase, re-added it
djbe Nov 2, 2011
55eed9e
Fixes #113: Need to check isReadableFileAtPath: when copying out DMG …
andymatuschak Nov 2, 2011
d820a14
Switch to NSLogger, much more robust than NSLog
djbe Nov 3, 2011
e2fd84e
Update PLCrashReporter to r413
DerAndereAndi Sep 22, 2011
6a274ea
Use PLCrashReportTextFormatter to create the Apple crash log format i…
DerAndereAndi Sep 22, 2011
8a3fdc7
Change releasing the connection
DerAndereAndi Sep 22, 2011
d62a451
Update PLCrashReporter to Version 1.1 Beta 1
DerAndereAndi Sep 24, 2011
b1d1fe5
Update PLCrashReporter
DerAndereAndi Oct 20, 2011
7f19ad3
Remove unnecessary check
DerAndereAndi Oct 20, 2011
1b14f73
Update PLCrashReporter build with armv6
DerAndereAndi Oct 20, 2011
f7642ac
Update PLCrashReporter
DerAndereAndi Oct 20, 2011
3933362
Add simulation of crash with exception
DerAndereAndi Oct 21, 2011
ce2e882
Fix 2nd button triggering the wrong crash method
DerAndereAndi Oct 21, 2011
f3b9632
Merge in latest symbolicatecrash changes from Apple
DerAndereAndi Oct 21, 2011
82662e5
Fix allowing the user to choose auto submit , even if the developer e…
DerAndereAndi Nov 4, 2011
4f269f0
Add a readonly property which tells if the last session crashed.
DerAndereAndi Nov 4, 2011
035562f
Removing no longer needed code to detect iOS version
DerAndereAndi Nov 4, 2011
fe75a17
Merge pull request #63 from marcopg/develop
DerAndereAndi Nov 4, 2011
8a03fc3
Add last exception backtrace to the server grouping
DerAndereAndi Nov 5, 2011
b388c0f
Merge branch 'master' into dev_core_rewrite
djbe Nov 6, 2011
b871b49
Merge branch 'release/2.1'
DerAndereAndi Nov 7, 2011
e3e8ab5
Fix missing variable declaration in symbolicatecrash
DerAndereAndi Nov 8, 2011
b47c96c
Swedish localization for the iOS client bundle
jramer Nov 8, 2011
1429a9b
Merge pull request #68 from jramer/develop
DerAndereAndi Nov 8, 2011
88edf0c
Not adding multiple entries to the crash description field if the des…
pocketpixels Nov 8, 2011
6507d88
Merge pull request #69 from pocketpixels/stripHexAddresses
DerAndereAndi Nov 8, 2011
095d223
Fixes #116: Update error: Can't make a temporary directory
andymatuschak Nov 10, 2011
aeeae26
Critical security patch--re-enabling signature and downgrade checking.
andymatuschak Nov 10, 2011
ec4ebbd
Merging darkshadow2's changes for libcrypto -> CDSA
andymatuschak Nov 10, 2011
e0aaf5d
[FIX] made description and log CDATA save in the report
monkeydom Nov 10, 2011
7313963
Merge pull request #70 from monkeydom/develop
DerAndereAndi Nov 10, 2011
e4117c7
Replace PLCrashReporter build for compatibility with Xcode < 4.2
DerAndereAndi Nov 10, 2011
0f5ab64
Merge branch 'release/2.1.1'
DerAndereAndi Nov 10, 2011
9f2d53a
Improvements to the European Portuguese localization (pt_PT)
sergiomiranda Nov 10, 2011
82e6250
Merge pull request #118 from smiranda/master
andymatuschak Nov 10, 2011
7a48fcb
Merge branch 'master' into dev_core_rewrite
djbe Nov 11, 2011
bb37d98
Rewrite logging macros a bit, now we can choose a logging level to fi…
djbe Nov 11, 2011
3333edb
Forgot to update these files in the last commit
djbe Nov 11, 2011
25040af
Fixes #111: Sparkle won't build due to -Werror with -Wformat=2 and mi…
andymatuschak Nov 12, 2011
f20c121
No longer linking to libcrypto
andymatuschak Nov 12, 2011
3e59faa
fix build dependency when completely cleaned
dustinrue Nov 12, 2011
fa747ef
Renamed PlugIns folder to a more correct name
djbe Nov 12, 2011
3b366e0
Separated Plugins.framework into it's own XCode project, moved files …
djbe Nov 12, 2011
92cb0bd
Merge remote-tracking branch 'QuincyKit/master' into dev_core_rewrite
djbe Nov 12, 2011
1eec759
Added crash reporting using QuincyKit. Still need server side support…
djbe Nov 12, 2011
2547f18
Correct the crash reporting URL
djbe Nov 12, 2011
99b777e
Fix Mac Dialog resize issues
DerAndereAndi Nov 14, 2011
9b91c68
Transport bugfix: PART_KEY_INT16 contents in messages was not being c…
fpillet Nov 16, 2011
449ebc3
add a nightly build script for the rewrite
dustinrue Nov 17, 2011
c494f8d
Surpress "multiple methods named" error
soffes Nov 17, 2011
395ab9a
Changed cast to NSDictionary per John's request
soffes Nov 17, 2011
e3f9017
Merge pull request #58 from samsoffes/master
johnezang Nov 17, 2011
b275cab
Added Romanian Localization
GabrielUlici Nov 18, 2011
7ba0c58
Translated the string and xib files
GabrielUlici Nov 18, 2011
882b5c9
Minor layout adjustments to the Romanian localization
andymatuschak Nov 19, 2011
59caa1f
Re-added Romanian resources with relative paths to the project.
andymatuschak Nov 19, 2011
290f64f
Fixes #121: finish_installation deployment target is 10.6, not 10.5
andymatuschak Nov 19, 2011
d2ebfc0
Correct crash reporting path again.
djbe Nov 21, 2011
4ec9dca
Merge branch 'master' of git://github.com/johnezang/JSONKit into dev_…
djbe Nov 21, 2011
1f7dc8a
Merge branch 'master' of git://github.com/fpillet/NSLogger into dev_c…
djbe Nov 21, 2011
2db332b
Fix a possible crash when building the XML string
DerAndereAndi Nov 29, 2011
338a4cb
Fix another possible crash
DerAndereAndi Nov 29, 2011
49181dd
Small refactor of last commit
DerAndereAndi Nov 29, 2011
fb889c3
Rename old action back to it's original name, should make it easier f…
djbe Nov 29, 2011
c8490ce
Merge branch 'master' into dev_core_rewrite
djbe Nov 29, 2011
7400e16
Merge branch 'master' into dev_core_rewrite
djbe Nov 29, 2011
d18f902
Merge branch 'master' into dev_core_rewrite
djbe Nov 29, 2011
83f3365
Merge branch 'release/2.1.2'
DerAndereAndi Nov 30, 2011
29df795
Fixed type (oversight)
DerAndereAndi Dec 3, 2011
46d216c
add search by contact
jamespanic Oct 26, 2011
03b2b5f
don't need these debug messages
jamespanic Oct 26, 2011
b82e01b
Added missing handling of PART_KEY_INT16 in LoggerLogToConsole(), fix…
fpillet Dec 3, 2011
a02714a
Don't send device udid when in appstore and autoSubmitDeviceUDID is t…
DerAndereAndi Dec 3, 2011
5dbb04e
If quincy.bundle is missing in the app, show a warning via NSLog and …
DerAndereAndi Dec 3, 2011
a6fed33
Added optional logging for debugging help
DerAndereAndi Dec 5, 2011
745ca56
Don't treat empty server responses as success
DerAndereAndi Dec 5, 2011
3b0e94b
Changed indentation to 2 spaces for all filesi (new standard for all …
ashtom Dec 5, 2011
a5ea7a9
Merge branch 'master' into dev_core_rewrite
djbe Dec 6, 2011
3e24cbb
Merge branch 'master' of git://github.com/TheRealKerni/QuincyKit into…
djbe Dec 6, 2011
88f167a
Merge branch 'master' of git://github.com/fpillet/NSLogger into dev_c…
djbe Dec 6, 2011
df38e6d
Update framework version numbers
djbe Dec 6, 2011
4f82e1a
Fix for commit 82662e5b76 being only half complete
DerAndereAndi Dec 7, 2011
0001468
Add new delegate which fires when the user selected "Send Always" in …
DerAndereAndi Dec 7, 2011
555c2d7
Some more 2 space indentation fixes
DerAndereAndi Dec 7, 2011
fd2db64
Added missing AutoreleasePool
lippling Dec 9, 2011
52b8529
Fixed a crash when the Common Name is not set
lippling Dec 9, 2011
e7cf8aa
Merge pull request #52 from lippling/master
fpillet Dec 10, 2011
5ce2882
Initial commit of Android client code.
fpillet Dec 10, 2011
b2e91f4
Updated README formatting for Android instructions
fpillet Dec 10, 2011
b42ec76
Fix formatting of PHP script and fix an invalid method name
DerAndereAndi Dec 10, 2011
db581fd
Merge branch 'master' of git://github.com/fpillet/NSLogger into dev_c…
djbe Dec 10, 2011
4c89f80
Merge branch 'master' into dev_core_rewrite
djbe Dec 10, 2011
03f188f
Fix failing to update the description
DerAndereAndi Dec 10, 2011
788f5ed
Script source&rule
djbe Dec 11, 2011
460561e
Use booleans instead of confidence.
djbe Dec 11, 2011
c53dfc7
Combined rules (all, any, none)
djbe Dec 11, 2011
bb1c176
Fix suggestedValues for a few rules.
djbe Dec 11, 2011
df3d0cd
Simplify things a bit:
djbe Dec 11, 2011
ada48c5
Add workaround lion sandbox support
DerAndereAndi Dec 12, 2011
aa4acec
Update documentation for how to use the Mac client with sandbox and t…
DerAndereAndi Dec 12, 2011
df13f29
Merge branch 'release/2.1.3'
DerAndereAndi Dec 12, 2011
3a5723f
Fix formatting errors
DerAndereAndi Dec 12, 2011
69ed542
Merge branch 'release/2.1.3'
DerAndereAndi Dec 12, 2011
07764c3
Fix compilation + small error in context.addRule
djbe Dec 13, 2011
ad1f620
Merge branch 'master' into dev_core_rewrite
djbe Dec 13, 2011
0597e5f
Merge branch 'master' of git://github.com/TheRealKerni/QuincyKit into…
djbe Dec 13, 2011
af576fa
Again some more 2 space indentation fixes
DerAndereAndi Dec 13, 2011
3bc9d78
And some more missed out
DerAndereAndi Dec 13, 2011
4b8a29f
Same for the header file
DerAndereAndi Dec 13, 2011
f5bc7fd
Missed one last
DerAndereAndi Dec 13, 2011
3cb486e
Now this is the last space indentation fix
DerAndereAndi Dec 13, 2011
d21d0ff
No submodules, we're using subtrees
djbe Dec 15, 2011
40efecd
Merge branch 'master' into dev_core_rewrite
djbe Dec 15, 2011
b657655
Ease merging with master branch
djbe Dec 15, 2011
b15398f
Fix warnings in QuincyKit
djbe Dec 15, 2011
7b271df
Didn't mean to commit those
djbe Dec 15, 2011
adf0264
Fix BTScanner source not stopping
djbe Dec 15, 2011
1e4ca71
Merge fix from master: bluetooth source receiving disconnection notif…
djbe Dec 15, 2011
aa785d9
Merge branch 'master' into dev_core_rewrite
djbe Dec 17, 2011
8f363d2
Merge branch 'master' into dev_core_rewrite
djbe Dec 17, 2011
2388b6f
Updated README.md with benchmark information for NSJSONSerialization.
johnezang Dec 18, 2011
0aff3de
Merge branch 'master' of github.com:johnezang/JSONKit
johnezang Dec 18, 2011
5cd98c5
OpenSSL path should be globally replaced, right?
Dec 18, 2011
7e05e97
Merge pull request #126 from dmdeller/patch-1
andymatuschak Dec 19, 2011
a863145
added support for sending crash reports automatically
Dec 16, 2011
54a9f88
Enable armv6 architecture.
Dec 25, 2011
4bc718b
We can actually get rid of these, we'll use MacMapKit instead.
djbe Dec 25, 2011
decf587
Also get rid of these
djbe Dec 25, 2011
af0fdbf
Merge branch 'master' of git://github.com/johnezang/JSONKit into dev_…
djbe Dec 25, 2011
b2aa5c1
Merge branch 'master' into dev_core_rewrite
djbe Dec 25, 2011
dc4c5cf
Merge remote-tracking branch 'Sparkle/master' into dev_core_rewrite
djbe Dec 25, 2011
e9e2f7e
Remove sparkle binary, we'll compile it ourselves
djbe Dec 25, 2011
228b5f3
Compile sparkle framework
djbe Dec 25, 2011
abdd2cf
Fix crashes for now (we don't have any old ES anymore)
djbe Dec 25, 2011
9466962
Merge pull request #80 from chrisgummer/develop
DerAndereAndi Dec 30, 2011
5ef6c64
Fixes #129: Still need the OpenSSL license?
andymatuschak Jan 6, 2012
cf1b167
Merge branch 'master' of github.com:andymatuschak/Sparkle
andymatuschak Jan 6, 2012
a8392c2
updated Localizable strings
dustinrue Jan 10, 2012
760e32c
Added Slovenian localization courtesy Mojca Miklavec
andymatuschak Jan 11, 2012
be1acd0
Updates to remove warnings when using -Wunused-function
pburleson Jan 12, 2012
daa6800
Fixed bug when sending large messages on Android. Optimized imports, …
fpillet Jan 12, 2012
de1fb9d
Merge branch 'master' of github.com:fpillet/NSLogger
fpillet Jan 12, 2012
b4a219b
Fix to use generic code instead of a utility method coming from the p…
fpillet Jan 12, 2012
1fc6c51
Merge pull request #53 from pburleson/master
fpillet Jan 12, 2012
ca2db3f
fixed a memory leak
Dec 23, 2011
7e4802b
Make sure to honor BufferLogsUntilConnection
tru Jan 17, 2012
73e96cd
Updating project for 4.2.1; changing SDK to 10.7
andymatuschak Jan 18, 2012
1bc3834
Fixing feature that normalizes installed app names and disabling it b…
andymatuschak Jan 18, 2012
fa330c9
Fixed issue that make MKGeocoder and MKReverseGeocoder not work unless
rickfillion Jan 20, 2012
60d5e6d
Fixed issue where you could drag an html file over the mapview and it'd
rickfillion Jan 20, 2012
9c3af9f
Merge pull request #54 from tru/bufferbug
fpillet Jan 21, 2012
aca8cc6
Renamed GC build configuration for clarity per #135
andymatuschak Jan 27, 2012
61cd8bb
Clean crash queue if the HockeyApp server rejected the crash
DerAndereAndi Jan 31, 2012
6885452
Project update: removed some customized BWToolkit settings that may h…
fpillet Jan 31, 2012
209ef2c
More aggressive project settings cleanup, removing very old cruft
fpillet Jan 31, 2012
515511d
Adjusted initial window position of SUUpdateAlert for Romanian/Sloven…
ksuther Feb 1, 2012
8b4cf14
Explicitly set the file encoding of Romanian Sparkle.strings to stop …
ksuther Feb 1, 2012
799b2a3
Merge pull request #136 from ksuther/master
andymatuschak Feb 1, 2012
00fd219
Code formatting updates
DerAndereAndi Feb 5, 2012
28be142
Ignore crash reports that do not match the current app version or hav…
DerAndereAndi Feb 5, 2012
d820ce4
Update iOS demo project to build with armv6 and iOS3 deployment target
DerAndereAndi Feb 5, 2012
f8d80e4
Update PLCrashReporter with UTF bug fix
DerAndereAndi Feb 5, 2012
17ac193
Merge branch 'release/2.1.4'
DerAndereAndi Feb 5, 2012
bf07a94
Pass both host and executable paths to finish_installation
mattstevens Feb 7, 2012
f5d547f
- Added shortcuts to clear logs
Feb 7, 2012
88d4b34
Improved Japanese translations
Feb 8, 2012
4c25737
Merge pull request #142 from mzch/master
andymatuschak Feb 9, 2012
449b00e
Merge pull request #139 from mattstevens/pathToRelaunch
andymatuschak Feb 9, 2012
53d232e
Merge pull request #55 from mapedd/master
fpillet Feb 9, 2012
29b7321
Support a custom user defaults domain
mattstevens Feb 11, 2012
6be5568
Clean up after install on quit updates
mattstevens Feb 13, 2012
44cf0d0
Merge pull request #145 from mattstevens/install-on-quit-cleanup
andymatuschak Feb 14, 2012
e27828d
Merge pull request #144 from mattstevens/custom-defaults-domain
andymatuschak Feb 14, 2012
ba3f3ca
Merge branch 'master' of git://github.com/fpillet/NSLogger into dev_c…
djbe Feb 14, 2012
c7512d8
Merge branch 'master' of git://github.com/TheRealKerni/QuincyKit into…
djbe Feb 14, 2012
f0da271
Merge branch 'master' of git://github.com/andymatuschak/Sparkle into …
djbe Feb 14, 2012
96ecb54
Fix compilation errors due to library updates
djbe Feb 14, 2012
3711030
Forgot to bump lib version number
djbe Feb 14, 2012
ca684f6
Merge branch 'master' and small bit of refactoring in nsstring catego…
djbe Feb 16, 2012
158059c
Massive logging speedup on Android
fpillet Feb 17, 2012
060791d
Fixed improper log bytes generation on Android
fpillet Feb 18, 2012
bdc618f
Merge branch 'master' into dev_core_rewrite
djbe Feb 21, 2012
825ceeb
Merge branch 'master' of git://github.com/fpillet/NSLogger into dev_c…
djbe Feb 21, 2012
78b08fa
Fix some warning/errors with new Xcode
djbe Feb 21, 2012
403508a
Merge branch 'master' into dev_core_rewrite
djbe Feb 21, 2012
d8243c5
Added MacMapKit as subtree
djbe Feb 21, 2012
92bc94c
Add refs to MapKit in CP xcode project
djbe Feb 21, 2012
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
*.perspective
*.perspectivev3
*.pbxuser
*.xcworkspace
xcuserdata
ControlPlane.xcodeproj/xcuserdata/dustin.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist

Expand Down Expand Up @@ -36,4 +37,3 @@ Backup[ ]of[ ]*.pages/
Backup[ ]of[ ]*.key/
Backup[ ]of[ ]*.numbers/


3 changes: 0 additions & 3 deletions .gitmodules

This file was deleted.

1,254 changes: 577 additions & 677 deletions ControlPlane.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

File renamed without changes.
File renamed without changes.
73 changes: 55 additions & 18 deletions Source/JSONKit/JSONKit.m → External Source/JSONKit/JSONKit.m
Original file line number Diff line number Diff line change
Expand Up @@ -692,14 +692,14 @@ + (id)allocWithZone:(NSZone *)zone
static void _JKArrayInsertObjectAtIndex(JKArray *array, id newObject, NSUInteger objectIndex) {
NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count <= array->capacity) && (objectIndex <= array->count) && (newObject != NULL));
if(!((array != NULL) && (array->objects != NULL) && (objectIndex <= array->count) && (newObject != NULL))) { [newObject autorelease]; return; }
array->count++;
if(array->count >= array->capacity) {
array->capacity += 16UL;
if((array->count + 1UL) >= array->capacity) {
id *newObjects = NULL;
if((newObjects = (id *)realloc(array->objects, sizeof(id) * array->capacity)) == NULL) { [NSException raise:NSMallocException format:@"Unable to resize objects array."]; }
if((newObjects = (id *)realloc(array->objects, sizeof(id) * (array->capacity + 16UL))) == NULL) { [NSException raise:NSMallocException format:@"Unable to resize objects array."]; }
array->objects = newObjects;
array->capacity += 16UL;
memset(&array->objects[array->count], 0, sizeof(id) * (array->capacity - array->count));
}
array->count++;
if((objectIndex + 1UL) < array->count) { memmove(&array->objects[objectIndex + 1UL], &array->objects[objectIndex], sizeof(id) * ((array->count - 1UL) - objectIndex)); array->objects[objectIndex] = NULL; }
array->objects[objectIndex] = newObject;
}
Expand All @@ -714,11 +714,11 @@ static void _JKArrayReplaceObjectAtIndexWithObject(JKArray *array, NSUInteger ob
}

static void _JKArrayRemoveObjectAtIndex(JKArray *array, NSUInteger objectIndex) {
NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL));
if(!((array != NULL) && (array->objects != NULL) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL))) { return; }
NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count > 0UL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL));
if(!((array != NULL) && (array->objects != NULL) && (array->count > 0UL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL))) { return; }
CFRelease(array->objects[objectIndex]);
array->objects[objectIndex] = NULL;
if((objectIndex + 1UL) < array->count) { memmove(&array->objects[objectIndex], &array->objects[objectIndex + 1UL], sizeof(id) * ((array->count - 1UL) - objectIndex)); array->objects[array->count] = NULL; }
if((objectIndex + 1UL) < array->count) { memmove(&array->objects[objectIndex], &array->objects[objectIndex + 1UL], sizeof(id) * ((array->count - 1UL) - objectIndex)); array->objects[array->count - 1UL] = NULL; }
array->count--;
}

Expand Down Expand Up @@ -805,13 +805,13 @@ - (void)replaceObjectAtIndex:(NSUInteger)objectIndex withObject:(id)anObject
- (id)copyWithZone:(NSZone *)zone
{
NSParameterAssert((objects != NULL) && (count <= capacity));
return((mutations == 0UL) ? [self retain] : [[NSArray allocWithZone:zone] initWithObjects:objects count:count]);
return((mutations == 0UL) ? [self retain] : [(NSArray *)[NSArray allocWithZone:zone] initWithObjects:objects count:count]);
}

- (id)mutableCopyWithZone:(NSZone *)zone
{
NSParameterAssert((objects != NULL) && (count <= capacity));
return([[NSMutableArray allocWithZone:zone] initWithObjects:objects count:count]);
return([(NSMutableArray *)[NSMutableArray allocWithZone:zone] initWithObjects:objects count:count]);
}

@end
Expand Down Expand Up @@ -848,7 +848,7 @@ - (void)dealloc
- (NSArray *)allObjects
{
NSParameterAssert(collection != NULL);
NSUInteger count = [collection count], atObject = 0UL;
NSUInteger count = [(NSDictionary *)collection count], atObject = 0UL;
id objects[count];

while((objects[atObject] = [self nextObject]) != NULL) { NSParameterAssert(atObject < count); atObject++; }
Expand Down Expand Up @@ -2004,7 +2004,7 @@ JK_STATIC_INLINE void jk_cache_age(JKParseState *parseState) {
for(x = 0UL; x < JK_CACHE_PROBES; x++) {
if(JK_EXPECT_F(parseState->cache.items[bucket].object == NULL)) { setBucket = 1UL; useableBucket = bucket; break; }

if((JK_EXPECT_T(parseState->cache.items[bucket].hash == parseState->token.value.hash)) && (JK_EXPECT_T(parseState->cache.items[bucket].size == parseState->token.value.ptrRange.length)) && (JK_EXPECT_T(parseState->cache.items[bucket].type == parseState->token.value.type)) && (JK_EXPECT_T(parseState->cache.items[bucket].bytes != NULL)) && (JK_EXPECT_T(strncmp((const char *)parseState->cache.items[bucket].bytes, (const char *)parseState->token.value.ptrRange.ptr, parseState->token.value.ptrRange.length) == 0U))) {
if((JK_EXPECT_T(parseState->cache.items[bucket].hash == parseState->token.value.hash)) && (JK_EXPECT_T(parseState->cache.items[bucket].size == parseState->token.value.ptrRange.length)) && (JK_EXPECT_T(parseState->cache.items[bucket].type == parseState->token.value.type)) && (JK_EXPECT_T(parseState->cache.items[bucket].bytes != NULL)) && (JK_EXPECT_T(memcmp(parseState->cache.items[bucket].bytes, parseState->token.value.ptrRange.ptr, parseState->token.value.ptrRange.length) == 0U))) {
parseState->cache.age[bucket] = (parseState->cache.age[bucket] << 1) | 1U;
parseState->token.value.cacheItem = &parseState->cache.items[bucket];
NSCParameterAssert(parseState->cache.items[bucket].object != NULL);
Expand Down Expand Up @@ -2556,20 +2556,57 @@ static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *object

// When we encounter a class that we do not handle, and we have either a delegate or block that the user supplied to format unsupported classes,
// we "re-run" the object check. However, we re-run the object check exactly ONCE. If the user supplies an object that isn't one of the
// supported classes, we fail the second type (i.e., double fault error).
// supported classes, we fail the second time (i.e., double fault error).
BOOL rerunningAfterClassFormatter = NO;
rerunAfterClassFormatter:
rerunAfterClassFormatter:;

// XXX XXX XXX XXX
//
// We need to work around a bug in 10.7, which breaks ABI compatibility with Objective-C going back not just to 10.0, but OpenStep and even NextStep.
//
// It has long been documented that "the very first thing that a pointer to an Objective-C object "points to" is a pointer to that objects class".
//
// This is euphemistically called "tagged pointers". There are a number of highly technical problems with this, most involving long passages from
// the C standard(s). In short, one can make a strong case, couched from the perspective of the C standard(s), that that 10.7 "tagged pointers" are
// fundamentally Wrong and Broken, and should have never been implemented. Assuming those points are glossed over, because the change is very clearly
// breaking ABI compatibility, this should have resulted in a minimum of a "minimum version required" bump in various shared libraries to prevent
// causes code that used to work just fine to suddenly break without warning.
//
// In fact, the C standard says that the hack below is "undefined behavior"- there is no requirement that the 10.7 tagged pointer hack of setting the
// "lower, unused bits" must be preserved when casting the result to an integer type, but this "works" because for most architectures
// `sizeof(long) == sizeof(void *)` and the compiler uses the same representation for both. (note: this is informal, not meant to be
// normative or pedantically correct).
//
// In other words, while this "works" for now, technically the compiler is not obligated to do "what we want", and a later version of the compiler
// is not required in any way to produce the same results or behavior that earlier versions of the compiler did for the statement below.
//
// Fan-fucking-tastic.
//
// Why not just use `object_getClass()`? Because `object->isa` reduces to (typically) a *single* instruction. Calling `object_getClass()` requires
// that the compiler potentially spill registers, establish a function call frame / environment, and finally execute a "jump subroutine" instruction.
// Then, the called subroutine must spend half a dozen instructions in its prolog, however many instructions doing whatever it does, then half a dozen
// instructions in its prolog. One instruction compared to dozens, maybe a hundred instructions.
//
// Yes, that's one to two orders of magnitude difference. Which is compelling in its own right. When going for performance, you're often happy with
// gains in the two to three percent range.
//
// XXX XXX XXX XXX

BOOL workAroundMacOSXABIBreakingBug = NO;
if(JK_EXPECT_F(((NSUInteger)object) & 0x1)) { workAroundMacOSXABIBreakingBug = YES; goto slowClassLookup; }

if(JK_EXPECT_T(object->isa == encodeState->fastClassLookup.stringClass)) { isClass = JKClassString; }
else if(JK_EXPECT_T(object->isa == encodeState->fastClassLookup.numberClass)) { isClass = JKClassNumber; }
else if(JK_EXPECT_T(object->isa == encodeState->fastClassLookup.dictionaryClass)) { isClass = JKClassDictionary; }
else if(JK_EXPECT_T(object->isa == encodeState->fastClassLookup.arrayClass)) { isClass = JKClassArray; }
else if(JK_EXPECT_T(object->isa == encodeState->fastClassLookup.nullClass)) { isClass = JKClassNull; }
else {
if(JK_EXPECT_T([object isKindOfClass:[NSString class]])) { encodeState->fastClassLookup.stringClass = object->isa; isClass = JKClassString; }
else if(JK_EXPECT_T([object isKindOfClass:[NSNumber class]])) { encodeState->fastClassLookup.numberClass = object->isa; isClass = JKClassNumber; }
else if(JK_EXPECT_T([object isKindOfClass:[NSDictionary class]])) { encodeState->fastClassLookup.dictionaryClass = object->isa; isClass = JKClassDictionary; }
else if(JK_EXPECT_T([object isKindOfClass:[NSArray class]])) { encodeState->fastClassLookup.arrayClass = object->isa; isClass = JKClassArray; }
else if(JK_EXPECT_T([object isKindOfClass:[NSNull class]])) { encodeState->fastClassLookup.nullClass = object->isa; isClass = JKClassNull; }
slowClassLookup:
if(JK_EXPECT_T([object isKindOfClass:[NSString class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.stringClass = object->isa; } isClass = JKClassString; }
else if(JK_EXPECT_T([object isKindOfClass:[NSNumber class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.numberClass = object->isa; } isClass = JKClassNumber; }
else if(JK_EXPECT_T([object isKindOfClass:[NSDictionary class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.dictionaryClass = object->isa; } isClass = JKClassDictionary; }
else if(JK_EXPECT_T([object isKindOfClass:[NSArray class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.arrayClass = object->isa; } isClass = JKClassArray; }
else if(JK_EXPECT_T([object isKindOfClass:[NSNull class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.nullClass = object->isa; } isClass = JKClassNull; }
else {
if((rerunningAfterClassFormatter == NO) && (
#ifdef __BLOCKS__
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ Copyright &copy; 2011, John Engelhart.

### A Very High Performance Objective-C JSON Library

**UPDATE:** (2011/12/18) The benchmarks below were performed before Apples [`NSJSONSerialization`][NSJSONSerialization] was available (as of Mac OS X 10.7 and iOS 5). The obvious question is: Which is faster, [`NSJSONSerialization`][NSJSONSerialization] or JSONKit? According to [this site](http://www.bonto.ch/blog/2011/12/08/json-libraries-for-ios-comparison-updated/), JSONKit is faster than [`NSJSONSerialization`][NSJSONSerialization]. Some quick "back of the envelope" calculations using the numbers reported, JSONKit appears to be approximately 25% to 40% faster than [`NSJSONSerialization`][NSJSONSerialization], which is pretty significant.

Parsing | Serializing
:---------:|:-------------:
<img src="http://chart.googleapis.com/chart?chf=a,s,000000%7Cb0,lg,0,6589C760,0,6589C7B4,1%7Cbg,lg,90,EFEFEF,0,F8F8F8,1&chxl=0:%7CTouchJSON%7CXML+.plist%7Cjson-framework%7CYAJL-ObjC%7Cgzip+JSONKit%7CBinary+.plist%7CJSONKit%7C2:%7CTime+to+Deserialize+in+%C2%B5sec&chxp=2,40&chxr=0,0,5%7C1,0,3250&chxs=0,676767,11.5,1,lt,676767&chxt=y,x,x&chbh=a,5,4&chs=350x185&cht=bhs&chco=6589C783&chds=0,3250&chd=t:410.517,510.262,539.614,1351.257,1683.346,1747.953,2955.881&chg=-1,0,1,3&chm=N+*s*+%C2%B5s,676767,0,0:5,10.5%7CN+*s*+%C2%B5s,3d3d3d,0,6,10.5,,r:-5:1&chem=y;s=text_outline;d=666,10.5,l,fff,_,Decompress+%2b+Parse+is+just;ds=0;dp=2;py=0;of=58,7%7Cy;s=text_outline;d=666,10.5,l,fff,_,5.6%25+slower+than+Binary+.plist%21;ds=0;dp=2;py=0;of=53,-5" width="350" height="185" alt="Deserialize from JSON" /> | <img src="http://chart.googleapis.com/chart?chf=a,s,000000%7Cb0,lg,0,699E7260,0,699E72B4,1%7Cbg,lg,90,EFEFEF,0,F8F8F8,1&chxl=0:%7CTouchJSON%7CYAJL-ObjC%7CXML+.plist%7Cjson-framework%7CBinary+.plist%7Cgzip+JSONKit%7CJSONKit%7C2:%7CTime+to+Serialize+in+%C2%B5sec&chxp=2,40&chxr=0,0,5%7C1,0,3250&chxs=0,676767,11.5,1,lt,676767&chxt=y,x,x&chbh=a,5,4&chs=350x175&cht=bhs&chco=699E7284&chds=0,3250&chd=t:96.387,466.947,626.153,1028.432,1945.511,2156.978,3051.976&chg=-1,0,1,3&chm=N+*s*+%C2%B5s,676767,0,0:5,10.5%7CN+*s*+%C2%B5s,4d4d4d,0,6,10.5,,r:-5:1&chem=y;s=text_outline;d=666,10.5,l,fff,_,Serialize+%2b+Compress+is+34%25;ds=0;dp=1;py=0;of=51,7%7Cy;s=text_outline;d=666,10.5,l,fff,_,faster+than+Binary+.plist%21;ds=0;dp=1;py=0;of=62,-5" width="350" height="185" alt="Serialize to JSON" />
Expand Down Expand Up @@ -305,3 +307,4 @@ Example | Result | Argument
[strtoull]: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/strtoull.3.html
[getrusage]: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/getrusage.2.html
[printf]: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/printf.3.html
[NSJSONSerialization]: http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html
108 changes: 108 additions & 0 deletions External Source/KVOAdditions/KVOAdditions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/*
* KVOAdditions.h
* "THE BEER-WARE LICENSE" (Revision 42):
* <devin at shiftedbits dot org> (Devin Lane) wrote this file.
* As long as you retain this notice you can do whatever you want with this
* stuff. If we meet some day, and you think this stuff is worth it, you can
* buy me a beer in return.
*
* Version 1.2.1:
* - Now runs on iPhone OS 2.0
*
* Version 1.2:
* - Added automatic -KVODealloc invocation
* - The selector is now considered in the uniqueness of an observation
* - New removeObserver:forKeyPath:selector: method
*
* Version 1.1: Two critical bug fixes.
* - Multiple observers for the same key path are now handled correctly.
* - Subclasses that override removeObserver:forKeyPath: are no longer
* swizzled incorrectly.
* Version 1.0: Initial release
*/

#import <Foundation/Foundation.h>

@interface NSObject (KVOAdditions)

/* Register `observer' for changes of the value at `keyPath` relative to the
* receiver. `selector' is invoked on `observer' when the value is modified
* according to the specified options. A single observer can observe a single
* keyPath with multiple selectors. This allows a class and a subclass to
* observe the same key path on an object. Due to this, it is recommended
* that externally available classes that use this observation mechanism
* use _<class>_ as a prefix to their observation selectors to avoid naming
* conflicts.
*
* `selector' should have one of the following signatures:
*
* 1. - (void)valueDidChange;
* Receive nothing about the observed change.
*
* 2. - (void)valueDidChange:(NSDictionary *)change;
* Receive the raw change dictionary.
*
* In addition, if NSKeyValueObservingOptionOld or NSKeyValueObservingOptionNew
* is included in options, the following can be used:
*
* 3. - (void)valueDidChange:(id)oldValue newValue:(id)newValue
* Receive the old and new values, both of which can be nil.
*
* 4. - (void)valueDidChange:(id)oldValue newValue:(id)newValue isPrior:(BOOL)prior
* Receive the old and new values, both of which can be nil. `prior' is true
* if this is a prior notification (if NSKeyValueChangeNotificationIsPriorKey is
* included in the change dictionary.)
*/

- (void)addObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
selector:(SEL)selector;

/* Deregister `observer' of the value at `keyPath', relative to the receiver,
* for which notifications are sent to `selector'. Pass NULL for `selector'
* to remove notifications for all registered selectors. */

- (void)removeObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath
selector:(SEL)selector;

/* Return YES if observations on the receiver by the receiver
* should be automatically removed when the receiver is deallocated
* or finalized. Defaults to YES. */

+ (BOOL)automaticallyRemoveSelfObservations;

/* Sent right before an object will deallocate. When received, the receiver
* should deregister itself as an observer for any properties it is observing
* on itself. This message is not sent under GC. */

- (void)KVODealloc;

@end

@interface NSArray (KVOAdditions)

/* Adds observer `observer' for keyPath `keyPath' with options `options' to
* the objects at indices `indexes' in the receiving array. This is the
* equivalent of adding the observer using the method above for each of the
* objects in `indexes'. Using this method, unlike
* addObserver:toObjectsAtIndexes:forKeyPath:options:context: is not faster
* than individually observing the desired objects. */

- (void)addObserver:(NSObject *)observer
toObjectsAtIndexes:(NSIndexSet *)indexes
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
selector:(SEL)selector;

/* Deregister `observer' of the value at `keyPath', relative to the objects
* in the receiver at `indexes', for which notifications are sent to
* `selector'. Pass NULL for `selector' to remove notifications for all
* registered selectors. */

- (void)removeObserver:(NSObject *)observer
fromObjectsAtIndexes:(NSIndexSet *)indexes
forKeyPath:(NSString *)keyPath
selector:(SEL)selector;
@end