This was required when we linked each framework as its own thing, which we do not do anymore, and if we do go back to this system, we can simply have symbols public by default.
The advantage seems to be that we can delay asking for user permission until we actually have to post a notification, where the old API would immediately prompt the user, as we setup the NSUserNotificationCenter delegate in applicationDidFinishLaunching: (required to handle user clicking notifications).
Since observers of NSUserDefaultsDidChangeNotification will be called from the thread that triggered the change, we should only update user defaults from the main thread.
Inconveniencing all users with the “TextMate wants to access your contacts” dialog is not worth having the ability to contact users about their crash reports.
Some targets were including headers from frameworks not specified in their link dependencies. For a clean build this could cause an issue because the header was not available at the time of building the target.
The updated link dependencies are also based on what a target’s tests require. Ideally tests would have separate link dependencies, but as we don’t want to maintain this manually, this will have to wait until the build system automatically handles link dependencies.
Currently the commit command uses constants from the CommitWindow framework but should actually not be linked with it. However, the optimizer will strip dead code, so it should not result in much if any difference in the resulting binary and does solve a build dependency issue.
Instead we access it when either we need to submit a crash report, when the preferences window open (where the contact address is shown), or when creating a new bundle (where email is also used for the bundle’s contact).
This is to avoid cyclic dependencies since it was previously in a somewhat high-level framework, so everything that framework depended on, could not augment crash reports.
Use APP_VERSION instead of APP_REVISION in various target names.
Indicate a few build commands are generators, so that their output is not removed on ‘ninja -t clean’.
Move generated dummy files (for tagging, uploading, deploying, etc.) to sub-directories to reduce noise in build directory.
This is both to remind the user that crash reports are automatically submitted and to make it easy for them to point us to a specific crash, as notification center will now work as a list of recent crashes; click on one of them to see the online version.
According to the documentation, sharedAddressBook should return nil when user hasn’t granted access, but one user is reporting random crashes related to this code.
We now explicitly disable it for targets that hasn’t yet been upgraded to ARC. This way, it’s easier to get an overview of which targets hasn’t yet been upgraded and ensures new targets has ARC enabled.