Google Toolbox for Mac Release Notes Project site: http://code.google.com/p/google-toolbox-for-mac/ Discussion group: http://groups.google.com/group/google-toolbox-for-mac Release ?.?.? Changes since 1.5.1 - Added GTMNSArray+Merge for merging one array into another with or without a custom merging function, returning a new array with the merged contents. - Added GTMSignalHandler for simple signal handling (via kqueue/runloop). This has gotten an api tweak, so some code that started using it will need updating. - Fixed up GTMIPhoneUnitTestDelegate to be pickier about which tests it runs - Added GTMNSString+URLArguments to GTMiPhone - Added GTMHTTPFetcher and GTMHTTPServer to GTMiPhone - Made sure that build would work with iPhone device attached, and that all tests run directly on the phone. - Added GTMValidatingContainers which are a set of mutable container classes that allow you to have a selector on a target that is called to verify that the objects being put into the container are valid. This can be controlled at compile time so that you don't take the performance hit in a release build. - Added GTMPath, which represents an existing absolute path on the file system. It also makes it very easy to contruct new paths in the file system as well as whole directory hierarchies. - Added GTMNSString+Replace for a common replacement need. - Added NSString+FindFolder for two commen helpers for building paths to common locations. - Added GTMLargeTypeWindow for doing display windows similar to Address Book Large Type display for phone numbers. - Removed GTMNSWorkspace+ScreenSaver as it has always been a little dodgy due to it's dependencies on undocumented frameworks, and the ScreenSaver framework doesn't play nicely in GC mode. - Added property methods to GTMHTTPFetcher. These are convenient alternatives to storing an NSDictionary in the userData. - Renamed GTMDevLog.m to GTMDevLogUnitTestingBridge.m and added some more comments where it comes into play to hopefully make it more clear that it isn't needed in most cases. - Fixed a potential GTMHTTPFetcher crash on failed authentication. - Added a obj-c logging package, GTMLogger, for applications that want an application level logging system. See GTMLogger.h, GTMLogger+ASL.h, and GTMLoggerRingBufferWriter.h for what the basic system and two optional additions can do. - Added GTMNSMakeUncollectable for forcing objects to survive in a GC world. - Added GTMCFAutorelease to make the [GTMNSMakeCollectable(cfFoo) autorelease] simpler and clearer, it's now just GTMCFAutorelease(cfFoo), and works in both GC and non-GC world. - Added GTMIsGarbageCollectionEnabled to GTMGarbageCollection.h. See the note there for it's usage. - Disabled the unittests for things on top of NSAppleScript in a GC world since Apple has bugs and it can crash. See the unittest for a note about it. - GTMStackTrace now can figure out ObjC symbols. Downside it is now ObjC only. - GTMFourCharCode can now be used with NSAppleEventDescriptors easily. typeType, typeKeyword, typeApplSignature, and typeEnumerated all get turned into GTMFourCharCodes. - Fixed up crash in GTMLoggerRingBufferWriter when used with GC on. - Significant updates to GTMNSAppleScript+Handler allowing you to list all handlers and properties (including inherited) and cleans up several errors in how scripting was being handled. - Added GTMGetURLHandler class that gives you a very easy way of supporting Get URL events just by adding a key to your plists, and adding a single method to your class. See GTMGetURLHandler.m for more details. - Added XcodeProject, AppleScript, and InterfaceBuilder Spotlight Plugins. Allows you to index .xcodeproj, .scpt, .scptd, .xib, .nib, and .aib files. See Readmes beside individual projects in SpotlightPlugins. - Added GTMExceptionalInlines for dealing with cases where you get warning: variable 'r' might be clobbered by 'longjmp' or 'vfork' when using certain Apple inlined functions in @synchronized/@try blocks. - Updated to Xcode 3.1 so the GTM and iPhone project have the same baseline. The code should work in other version of xcode, but the projects and xcconfig files now use 3.1 features. - Added GTMABAddressBook which is a cocoa wrapper for the 'C' AddressBook APIs on the iPhone. - Added several set environment variable statements to RunIPhoneUnitTest.sh to encourage bugs to come out of the woodwork. - Added GTMTestTimer.h for doing high fidelity timings. - Added ability to control using zombies to iPhone unit test script. It can be controlled by the GTM_DISABLE_ZOMBIES environment variable - Added ability to control termination to iPhone unit test script. It can be controlled by the GTM_DISABLE_TERMINATION environment variable - Fixed several leaks found with leak checking enabled. - Updated the iPhone xcconfigs to support the different OS versions. - GTM_INLINE will make sure a function gets inlined, and provides a consistent way for all GTM code to do it. - Added GTMDebugThreadValidation to allow you to enforce the fact that your code must run in the main thread in DEBUG builds. - Updated some internals of the iPhone unittesting so it doesn't double print the test descriptions, file names, or lines numbers of a test failure line. Also includes the test names in the error output. - Changed the xcconfigs so that know it's easier to set different settings at the different levels and not accidentally overwrite settings set at lower levels in the "settings collapse". Also tightened up warnings significantly. - Changed how gtm_unitTestExposedBindingsTestValues works. If you have an implementation of gtm_unitTestExposedBindingsTestValues in your own code you will need to update to the new way of calling. See implementations in GTMNSObject+BindingUnitTesting.m for details. - Added support for grabbing the build number for a particular OS in GTMSystemVersion and easily comparing it to known build numbers, and switched some types from in GTMSystemVersion from "int" to SInt32 to make 64 bit work better. - Added support for SnowLeopard (10A96). We build cleanly with the 10.6 SDKs and all radar checks were updated accordingly. Build All script was also updated to build on SnowLeopard if you have the SDK available. - Turned off building ppc64 GTM because the SnowLeopard SDK currently doesn't have ppc64 support, so SenTestCase isn't defined. This makes it impossible to build the ppc64 10.5 config on SnowLeopard. We have left the setting in the xcconfig for those of you who need it, but have disabled it in the GTM project settings. - Turned on stack smashing protection on the debug builds for all Leopard and above. - Added ability to easily do leak checking by defining the GTM_ENABLE_LEAKS environment variable. It isn't on by default because several of Apple's frameworks leak. You can work around these false positives by using the GTM_LEAKS_SYMBOLS_TO_IGNORE environment variable. Also if you turn on leaks make sure to turn off zombies by defining the GTM_DISABLE_ZOMBIES variable, otherwise every memory allocation you do will look like a leak. - Added has ability to check if a script has an open handler to GTMNSAppleScript+Handler. - GTMStackTrace support for building a trace from the call stack in an NSException (for 10.5+ and iPhone). - GTMStackTrace works on 10.5+ (and iPhone) using NSThread to build the call stack. - GTMLightweightProxy for breaking retain cycles. - Added GTM_EXTERN that makes it easier to mix and match objc and objc++ code. - Added GTMHotKeysTextField for display and editing of hot key settings. - Added GTMCarbonEvent for dealing with Carbon Events and HotKeys in a ObjC like way. - Backported the Atomic Barrier Swap functions for Objective C back to Tiger. - Added a variety of new functions to GTMUnitTestingUtilities for checking if the screensaver is in the way, waiting on user events, and generating keystrokes. - If you are using any Carbon routines that log (DebugStr, AssertMacros.h) and use GTMUnitTestDevLog, the log routines now go through _GTMDevLog so that they can be caught in GTMUnitTestDevLog and verified like any _GTMDevLog calls you may make. For an example of this in action see GTMCarbonEventTest.m. - Added GTMFileSystemKQueue. It provides a simple wrapper for kqueuing something in the file system and tracking changes to it. - RunIPhoneUnitTest.sh now cleans up the user home directory and creates a documents directory within it, used when requesting a NSDocumentDirectory. - Added GTMNSFileManager+Carbon which contains routines for path <-> Alias conversion and path <-> FSRef conversion. Release 1.5.1 Changes since 1.5.0 16-June-2008 - Fixed building tiger gcov w/ a directory path that contains a space. Release 1.5.0 Changes since 1.0.0 13-June-2008 - Updated the project to Xcode 3. This is the only supported Xcode version for the project. The code can build against the Tiger or Leopard SDKs, and developers can pull individual files into a Xcode 2.x project and things should work just fine. - Fixed up the prefix header of the project and prefix handing in the Unittest Xcode Config. (thanks schafdog) - Fixed error in handling default compression for NSData+zlib - Changed name on API in NSString+XML and added another api to make this a litte more clear. (thanks Kent) - GTMRegex - Found and fixed a bug in the enumerators that was causing them to incorrectly walk a string when using '^' in an expression. - Added helpers for substring tests and unittests for the new apis. - Added initializer that takes an outError to allow the collection of any pattern parsing error message (in case the pattern came from a user and complete error information is needed to message the user). - Added GTMScriptRunner for spawning scripts. - Added GTMNSFileManager+Path for two small helpers. - Added GTMNSWorkspace+ScreenSaver - Added GTMNSString+Data - added a common header (GTMDefines) for any common defines so the conditionals are all in one place - Support for things compiling against the iPhone SDK - Everything in the GTMiPhone project works in the iPhone - Added iPhone xcconfig files - Added iPhone unittests (See below) - More work on the UI unittests - support pretty much any part of a UI - support for CALayers - full support for the iPhone - the iPhone uses the same macro set at OCUnit, but has its own runtime for running tests. - extended capabilities of UIUnitTesting to be more flexible and give better error reporting for states. - Renamed the actual framework to "GoogleToolboxForMac.framework" (it should have matched the project on code.google.com from the start) - added a Debug-gcov target that will product debug bits w/ code coverage support to check unittests, etc. - GTMDebugSelectorValidation to provide something to include in class impls to get validation of object/selector pair(s) being implemented so you don't have to wait for a runtime invocation failures. (especially useful for things that take a success and failure selector so one doesn't always get called) - added _GTMDevLog (really in GTMDefines) that are a set of macros that can be used for logging. This allows any project to redefine them to direct logging into its runtime needs. - Moved GTMGeometryUtils into Foundation from AppKit - Removed several HI* calls from GTMGeometryUtils as Carbon UI in general is deprecated. - Xcode configs - changed the layout to make it a little easier to tell how to use them. - added Leopard or later configs - Unittest coverage greatly increased - Added RunMacOSUnitTests shell script. We run this script for starting up our unittests because it turns on a variety of "enhancements" (such as zombies, scribbling etc) to encourage our unittests to fail for us. It also will run the unittests using the _debug frameworks if you have them. https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=19915 - Remove NSColor+Theme and NSWorkspace+Theme as they are no longer needed for testing things for unittests, instead GTMUnitTestingUtilities.m(Lines 64-79) force the user settable things to ensure tests are consistent. - Added GTMBase64. - Added GTMHTTPFetcher and GTMProgressMonitorInputStream. - Moved the data files for unittests into subdirectories call TestData to help make it a little easier to find files w/in the main directories. - GTMDelegatingTableColumn get an overhaul to match the 10.5 sdk so it's closer to a dropin for previous sdks. - Added a lot of functionality to NSAppleEventDescriptor and NSAppleScript allowing you to easily call labeled and positional handlers in an AppleScript, get/set properties and get NSAppleEventDescriptors for most basic datatypes. - Added GTMFourCharCode for wrapping FourCharCodes in an ObjC object. Mainly for use by the NSAppleEventDescriptor code, and also useful for storing them in ObjC collection classes. - Added GTMStackTrace. - Added NSString+URLArguments and NSDictionary+URLArguments - Added GTMHTTPServer as a simple server but mainly for use in unittesting. - Added _GTMCompileAssert for doing compile time assertions to GTMDefines.h - Added GTMUnitTestDevLog and GTMTestCase for logging and tracking logs while running unittests to verify what is being logged is what you expect. All unittests should now inherit from GTMTestCase instead of SenTestCase to take advantage of the new log tracking. See GTMUnitTestDevLog.h for details. - Extracted GTMIPhoneUnitTestDelegate from GTMIPhoneUnitTestMain.m to its own file. Tests can now be run from another application. Release 1.0.0 14-January-2008 - Initial public release. Includes some simple utils, xcode configs, and some support for doing unit tests of graphical things.