GNUstep Base Release Notes $Revision$ $Date$ 2005,2006 Free Software Foundation, Inc. Base Release Notes

The release notes include descriptions of API changes, behaviour changes and other information that might help developers and users migrate to using a newer version of the library.

Version 1.17.0

This is an unstable release.

Highlights: NSArray New OSX method stubs. NSAutoreleasePool Dummy OSX method (-drain). NSBundle New OSX method stubs. NSCoder New OSX10.5 methods for NSInteger implemented. NSConnection New OSX10.5 methods for server connections implemented. NSData New OSX method stubs. NSException Implement stack address reporting. NSIndexSet Add OSX10.5 stub for countOfIndexesInRange NSKeyvalueObserving OSX10.5 additions implemented NSSet Implemented new OSX methods. NSStream Implemented basic SSL/TLS support using gnu-TLS. NSThread Implemented new OSX methods. NSLock, NSRecursiveLock, NSConditionLock Implemented names. GSXML, NSXMLParser Fully support namespace handling and fix bugs. NSKeyValueCoding, NSKeyValueObserving Made fully functional and MacOS-X compatible.

The current emphasis of the base library is MacOS-X compatibility, and the headers in this release mark many non-MacOS-X methods as being scheduled for removal by the next release (from 1.17.0).
These methods will mostly be moved to the 'additions' library, (which can be built stand-alone in conjunction with the Cocoa Foundation framework as libgnustep-baseadd on OSX) and their declarations will be in the headers of that library (<GNUstepBase/...>) rather than in the Foundation directory.
NB. The markup in the headers and documentation should not be assumed to be exhaustive ... it is planned that the next stable release of the base library will enforce MacOS-X compatibility by default, and you will have to explicitly include headers from <GNUstepBase/...> in order to use GNUstep specific additions.
You should track the unstable branch of the base library (subversion trunk) to find out what changes your software actually needs to make.

The TODO list for MacOS-X 10.5 compatibility follows, this is all stuff which would ideally be done by the next stable release of this library.

Remove all non OSX10.5 declarations from standard headers Implement most new method stubs. Implement new OSX10.5 NSCalendar class. Implement new OSX10.5 NSLocale class. Implement new OSX10.5 NSOperation class. Implement new OSX10.5 XML classes. Implement NSInteger coding for NSCoder subclasses. Implement support for now enumerated values in NSComparisonPredicate. Implement new OSX10.5 features of NSDateFormatter. Implement new OSX10.5 features of NSExpression. Implement new OSX10.5 features of NSPredicate. Implement new OSX10.5 features of NSFileManager. Implement new OSX10.5 features of NSProcessInfo. Implement new OSX10.5 NSHashTable class. Implement new OSX10.5 NSMapTable class. Implement new OSX10.5 NSPointerArray class. Implement new OSX10.5 NSLocale additions. Implement new OSX10.5 features of NSNumberFormatter. Implement new OSX10.5 features of NSNumber/NSValue. Update NSDistributedNotificationCenter with new OSX methods.
Version 1.15.3

This is an unstable release.

Highlights: Configuration/NSUserDefaults Syntax within the configuration file extended so that a leading '../' in a path name denotes a relative path in a relocatable installation.
New 'GlobalDefaults.plist' file in the same directory as the main GNUstep config file allows packagers/sysadmins to set up global defaults easily.
NSStream Addition of TLS/SSL support using GNU TLS on both unix-like and mswindows systems. First draft.
Additions of SOCKS proxying support for socket streams. First draft.
NSURLConnection Added support for https using new stream code.
Added support for basic and digest authentication.
Version 1.15.2

This is an unstable release. Bug fixes include improved thread safety and Key-Value observing.

Highlights: NSException New MacOS X methods and improved stack trace. NSThread New methods from Mac OS 10.5 and new ivars NSDecimal and NSDecimalNumber Many improvements
Version 1.15.1

This is an unstable release. There have been many bug fixes, but also a few method additions and changes to some headers. Also the license for this release is now GPLv3 and LGPLv3.

Highlights: NSUserDefaults Stores YES or NO as a string for MacOS X compatibility. NSErrorRecoveryAttempting Added header (and some support in the gui library). NSArray Added some new methods to handle multiple objects. Key-Value Coding More support for key-value coding. NSPredicate Much improved parsing. Ivars have changed in some of the predicate classes.
Version 1.15.0

This is an unstable release from 1.14.0. It is otherwise identical to the 1.14.0 release. Releases in the 1.15 series may not be forward compatible with previous 1.15 releases.

Version 1.14.0

This is a stable release ... all programs linked with earlier versions of the library and wishing to use this latest stable release need to be rebuilt from source.
This release should be used in conjunction with the latest stable release of the other gnustep core components.

This release continues the process of cleanup and restructuring to further improve MacOS-X compatibility, fix bugs, optimise performance, and improve portability between different hardware/operating system platforms.

Highlights: NSAffineTransform Imported from gui library for MacOS-X compatibility. NSBundle Implemented library resource versioning. NSException Support provision of stack trace information in exceptions. NSObject Fixes for lock contention with retain/release, so the performance of massively multi-threaded applications is much better. NSNetServices New MacOS-X class implemented. NSPathUtilities Uses new gnustep-make features to provide native filesystem integration. NSPropertyList XML property list parsing supported even if libxml2 not available. NSSpellServer Imported from gui library for MacOS-X compatibility. NSValueTransformer New MacOS-X class implemented.
Version 1.13.1

This is a bugfix release improving the stability and security of applications using the base library. Programs dynamically linked with the existing stable release will automatically benefit from these changes once this version is installed.

NSBundle Fix for crash when initialising the bundle system in an application linked with many frameworks. NSCalendarDate Fix for buffer overrun problem when initialising date from string. Also fixed to return nil when initialising from some illegal strings. NSConnection Some locking fixes to avoid rare deadlocks in heavily multi-threaded applications. NSDecimalNumber Fix to handle current locale properly when initialising. NSIndexSet Fix bug adding indexes in a range which lies within a range already in the set. NSPropertyList Fix problem writing negative numbers into old-style property list. NSString Fix for problem with keyed archiving of simple strings. NSURL Fix a potential repeated load of the same resource. Also fix to return nil when initialised with a string which does not contain a URL scheme. NSURLHandle Improve handling of persistent connections when the remote host drops the connection unexpectedly. GSXML Fix bug causing removal of newline characters from escaped strings. Fix error setting start end end element for SAX.
Version 1.13.0

Several sets of classes have been added for dealing with urls and predicates. A few minor api changes have occurred as well.

Character sets Character sets were improved with regard to ranges (Chinese characters, etc). Keyed Archiving Better compatibility with MacOSX. In particular, some guesses are made as to how some objects should be encoded. GNUstep configuration file Extra keys are allowed in the configuration file with the definition of the GNUSTEP_EXTRA key. URL Loading Headers and a basic framework for Apple's new URL loading scheme were added, although this is not fully implemented yet. Objective-C++ Most of the code was updated to compile nicely with the new gcc objective-c++ compiler. NSString designated initialiser The GNUstep designated initialiser for the NSString class cluster has changed to -initWithBytesNoCopy:length:encoding:freeWhenDone: from -initWithCharactersNoCopy:length:freeWhenDone: and older code sub classing NSString will need to be updated. NSBundle bundleWithIndentifier: The NSBundle method +bundleWithIdentifier: was added. NSPredicate A basic implementation of the NSPredicate classes (NSPredicate, NSComparisonPredicate, NSCompoundPredicate, NSExpression) was added. Stack traces Support for getting stack traces via bfd was added experimentally. You have to define STACKTRACE when compiling base to get this. Languages Added new language files Esperanto, Korean, and Ukrainian. Run loops Removed the timeout facility for run loop watchers - you should use standard timers instead. The watcher interface is deprecated anyway.
Version 1.12.0

There have been a number of API changes and several methods have been depreciated in this release. Although current GNUstep programs that use these methods will still work in this version, there are enough changes that a new library version was considered useful.

NSCoder deprecated methods Several methods using the old libObjects style scheme withName: are now deprecated. You can use the new NSKeyedArchiver and NSKeyedUnarchiver functionality to perform the same function in a much more portable way. NSPortCoder, NSPortMessage private methods The private method _components was removed from the public interface. NSString -getCString:maxLength:encoding: The return type of this function was changed to BOOL. NSBundle deprecated and private methods Several deprecated and private methods were removed from the public interface including +gnustepBundle, and +pathForGNUstepResource:ofType:inDirectory:. NSNotificationCenter deprecated method The GNUstep method setLockingDisabled: method was deprecated. NSNotificationQueue private functions Private functions GSNotifyASAP, GSNotifyIdle, and GSNotifyMore were removed from public interface. NSRunLoop watcher API updates and other changes We are starting to integrate the Cocoa NSStream classes into GNUstep, which allow you to do much the same things as the GNUstep-specific run loop watcher API was intended. At some point the watcher API will be deprecated as it will be redundant with NSStream functionality. Also the deprecated win32 specific methods for NSRunLoop were removed. NSAttribtedString deprecated method The non-standard attributedSubstringWithRange: method (just a synonym for the real method) was deprecated. NSConnection, NSDistantObject method removal Several legacy methods from the original GNU Connection class were removed or moved to the additions category of the library. NSAutoreleasePool private methods The private method _endThread: was removed from the public interface. NSPortNameServer private methods Several private methods were removed from the public interface. NSStream, NSIndexPath New classes added to the library. NSUserDefaults improvements User defaults were restructured to create the defaults lazily and can be set to not write to an external file at all, for developers who wish to use the library as a stand-alone library or in other situations where using external resources is not desired.
Version 1.11.2 GNUstep.conf and relocation Support for GNUstep.conf and relocation of the filesystem is much improved in this release. Windows platform The WM_QUIT message is now intercepted to allow an application to terminate cleanly. NSMessagePort - Windows platform NSMessagePort was implemented on Windows platforms. NSOpenStepRootDirectory This function has been un-deprecated, and the documentation clarified so it is easier to understand what it does and does not do. GNUsteprc Deprecated support for system-wide GNUsteprc files has been removed.
Version 1.11.1 NSSortDescriptor New class. NSStringFromPoint, NSStringFromRect, NSStringFromSize Functions now output strings that can be read by old OpenStep implementations (but can also still be read by GNUstep and MacOSX). Debugging support More support for debugging on mingw, including writing logs to debugger and event viewer.
Version 1.11.0

The interface version of the base library has changed in this release. Applications, libraries and tools that wish to use this new version must be recompiled (otherwise, they'll use the older version of the library).

Window's changes A lot of the behavior of path handling in the base library has changed with respect to Window's machines. Windows native paths are used throughout. The fileSystemRepresentation methods now use utf-16 as the external c-string representation on windows. The local to openstep and openstep to local methods are now deprecated and do nothing. Other changes to classes and class variables have also occurred (detailed below). Path/Startup configuration At the startup of any application or tool, GNUstep used to look at various environment variables in order to find the location of various data directories and other things. GNUstep still does this, but the environment variables are no longer required to find these files. In addition the configuration files used to override certain path behavior has been changed and expanded. See the base library documentation on GNUstep Configuration Files for more information. NSCharacterSets Character sets are included in the library itself instead of being loaded from a data file. Also, the NSBitmapCharSet API has been removed. NSPathUtilities Depreciated functions GSSystemRootDirectory and GSStandardPathPrefixes. In addition, beware of using the function NSOpenStepRoot, which may not necessarily return the information you need (see the documentation for this function for more info). Enumeration values for NSSearchPathDirectory have changed. NSRunLoop NSRunLoop and related classes now use native win32 event handling on Window's machines. See also GSFileHandle, NSSocketPort and NSMessagePort. GSFileHandle This GNUstep specific class has a new ivar on Windows. NSSocketPort, NSMessagePort This class has a new ivar on Windows. NSPortNameServer A one-time warning is printed concerning a future change in which nsconnections will only work between processes owned by the same account on the same machine, for MacOSX compatibility and security. If inter-host/user communication is desired, the developer will need to set this explicitly. Keyed Encoding Work was done in many classes to support keyed encoding. It may not be fully implemented in every class, however.
Version 1.10.3

This release includes a few minor bug fixes.

Version 1.10.2

This release is most likely the last release in this series, aside from possible bug fixes. It was was branched from CVS on Feb 22, 2005.

NSContainsRect behavior change The definition of NSContainsRect has changed to correspond with the current Mac OS X/Cocoa definition. The sides of the bRect can touch aRect. Unichar file paths Windows supports unichar file paths, but there isn't really an API for handling this. GNUstep-specific methods for dealing with this have been added, NSFileManager's -localFromOpenStepPath and openStepPathFromLocal and equivalent methods for NSString. In most cases the Base library should handle this problem internally, but it's possible that there are cases where the developer wants to handle the file name explicitly with system-specific functions. NSDictionaryErnumerator Some ivars in NSDictionaryEnumerator have changed types, but the total storage space has not changed. This may cause problems if you access ivars directly, perhaps through a subclass. NSNotification -setImmutablePost This GNUstep extension method was removed. NSPort extension methods Unimplemented GNUstep extension methods -close, -outPackedClass, and +outPackedClass were removed. NSTimeZone -abbreviationDictionary NSTimeZone's abbreviation dictionary is now a proper one-to-one dictionary.
Version 1.10.1

Runtime version discovery of library A developer can discover the version of the base library that is loaded using the NSBundle methods [[NSBundle bundleForLibrary: @"gnustep-base"] infoDictionary] and retrieving the GSBundleVersion key. NSXMLParser class added This is a Cocoa class that has been added for compatibility. The class is still alpha state. NSArray makeObjectsPerformSelector: The order of iteration through objects was changed to match Cocoa. Designated initializer changes The designated initializer for NSArray, NSDictionary, NSSet, and NSString for MacOS X compatibility. Like MacOS X, you can call [super init] to initialize the class from a subclass, although it is prefered that you use the designated initializer, with it's richer set of initializers.
Version 1.10.0

Interface version change The interface version of the base library has changed in this release, as it will in all future releases with a new minor number (that's the second number in the release number). Applications, libraries and tools that wish to use this new version must be recompiled (otherwise, they'll use the older version of the library). There is no single reason for this change. Arguably, it should have been done long ago. NSString clarification The NSString documentation contains some clarification on the lifetime of returned NSString objects. URL classes support persistant connections The NSURLHandle and other classes have support for persistant connections. NSMethodSignature clarification Recent compiler releases have exposed a flaw in the way GNUstep gathers signature information. The documentation explains how the information for offset and registers may not be reliable. Mac OS X compatibility There have been many fixes in various classes for Mac OS X compatibility, particularly relating to XML encoding.
Version 1.9.2

GSMime parsing ignores extraneous data When extraneous data is encountered in the input, it is ignored (and a warning logged) rather than adding it to the message body. Not sure this is right though, perhaps we should raise an exception or extend the api to return the extra data. Anyway, it's better than the previous behavior of adding the bad data to the parsed body. New log functions GSOnceFlag and GSOnceMLog Log messages the first time the code is executed. Typical usage is to log warnings about deprecated features. NSError New MacOSX compatibility class GSObjCRuntime Multiple new runtime functions that work with both GNU and Apple runtimes. These functions allow you to look at method lists, add and remove methods (for instance, if you want to make sure your method in a category overrides another method in a category). NSProtocolChecker rewritten Was previously almost non-functional. autogsdoc Support added for building frames structured documentation. Add the flag -MakeFrames YES to the autogsdoc command line. Binary incompatibilities NSUnarchiver, GSIMapTable have new ivars added to them. Tools and applications that use these classes may need to be recompiled after the new library is installed.