Advanced Search
Apple Developer Connection
Member Login Log In | Not a Member? Contact ADC

ADC Home > Reference Library > Technical Notes > Carbon > Tools >

Mac OS X 10.2

This Technote describes software development related changes provided in system software update Mac OS X 10.2.

This Technical Note was created for application developers interested in writing software that is compatible with Mac OS X 10.2. This list includes changes that affect API level programming and product testing, it is not intended to be an exhaustive list of all the changes in software updates.

CONTENTS

[Sep 04 2002]






Apple Help

Apple Help provides system-wide instructional help services for virtually all aspects of Mac OS. The Help Viewer is the main user interface component of the Apple Help technology.

  • A problem where AHLookupAnchor could assume incorrect character encoding for the supplied anchor has been corrected. (r. 2953369).

  • The new AppleScript commands 'go back', 'go forward', and 'go home' have been added to the Help Viewer's scripting dictionary. These commands have the same function as the buttons appearing in the Help Viewer's window.(r. 2654316). .

  • It is now possible to use dynamically generated tables of contents without using frames (r. 2829108). .

  • The Apple Help Dynamic Table of Contents feature no longer garbles Japanese AppleTitles when they are provided in a character encoding other than UTF-8 (r. 2859757). .

  • Additional support for Internet-based help book content has been added (r. 2831085, 2431836, 2431821). .

  • The table of contents template file can now be named either "toctmpl.htm" or "toctmpl.html"(r. 2829094). .

  • AppleURLs can now contain partial URL references (r. 2861478). .

Back to top



AppleEvents

Apple events provide a simple inter-application and intra-application communications facility for Mac OS X applications.

  • The routine AESend was returning the result code -600 (process not found) in cases where the target process died before returning a result from its handler. AESend has been changed to return error code -609 (connectionInvalid) in these cases. This change has the side effect of correcting a problem where AppleScript would attempt to relaunch the crashed application again when AESend returned -600. (r. 2681459).

  • Coercing from a floating point descriptor record to an integer rounded differently depending on the target integer type: typeSInt16 and typeSInt32 used rint-like behavior, rounding to the nearest even integer but typeUInt32 and typeSInt64 always truncated. These coercions all now behave the same as rint. (r. 2635804).

  • A problem where the keyEventSourceAttr attribute was being set to kAELocalProcess instead of kAESameProcess for events that an application targeted to itself have been corrected. Now, the keyEventSourceAttr attribute is set to kAESameProcess. (r. 2410753).

  • The AppleEvent Manager has been rearchitected to take advantage of mach virtual memory APIs. While clients of the AppleEvent manager APIs should not see any functional difference, it is important to note that the new implementation may differ in behavior for undefined use. In particular, while dereferencing the dataHandle of an AEDesc has worked in the past, beginning with 10.2 the opacity of the handle is enforced and you must use AEGetDescData/AEGetDescDataSize to extract the value from an AEDesc. AEGetDescData should not be used on a complex AEDesc like a list, record, or AppleEvent, however. Since the data is opaque, you should use the field accessors (AEGetNthDesc, AEGetParamDesc, etc) to extract data from complex descriptors. If you need to serialize a complex AEDesc, use AEFlattenDesc and AEUnflattenDesc. .

  • Factored lists and records are deprecated and no longer supported in 10.2. The first parameters to AECreateList should be NULL and 0, ie: AECreateList(NULL, 0, false, &myList); AECreateList(NULL, 0, true, &myRecord); .

  • AEGetArray and AEPutArray are unimplemented in 10.2 (r. 3025590) .

  • Sending an AppleEvent from a thread other than the main thread, and specifying kAEWaitReply, requires that the outgoing event specify a reply mach port. For example: mach_port_t port; mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &port); AEPutAttributePtr(&myEvent, keyReplyPortAttr, typeMachPort, &port, sizeof(port)); AESendMessage(&event, &reply, kAEWaitReply, kAEDefaultTimeout); mach_port_destroy(port); See AE/AEMach.h for more information. .

Back to top



AppleScript

AppleScript is a component of the operating system that provides a scripting interface for users to automate actions on system and application data. Even more importantly, it allows users to access functionality of applications which would be difficult or impossible to access by hand.

  • AppleScript was ignoring the text item delimiter when converting a list to a string if the text item delimiter was Unicode text (or, more generally, anything but a string). This problem has been corrected. (r. 2891903).

  • A problem where coercing a list of items to Unicode text does not preserve the encoding of Unicode text items has been corrected. (r. 2883592).

  • Coercions to 'short' such as 'set x to y as short' now work as expected - meaning coerce y to x as a short integer (a 16 bit integer). (r. 2863132).

  • Added plural form of the "item" class name to Cocoa Scripting. (r. 2862538).

  • A problem where disabling startup screen in stay-open applets was not working as expected has been corrected. (r. 2859959).

  • A problem where the 'list folder' command would not accept a string as its parameter has been corrected. Now, both the commands 'list folder (path to scripting additions folder)' and 'list folder (path to scripting additions folder as string)' work as expected (r. 2856926).

  • A problem where coercing a folder object to a POSIX path then back to a folder object could produce unexpected results has been corrected (r. 2856778).

  • A problem where writing an empty string to a file was not being interpreted as a request to set the file position has been corrected (r. 2855993).

  • Cocoa scripting correctly converts booleans it receives from AppleScript to boolean NSNumbers. However, when passing boolean NSNumbers back to AppleScript Cocoa was not converting them into AppleScript Boolean values. Cocoa now provides the correct coercion to AppleScript Boolean values when converting boolean NSNumbers (r. 2848562).

  • The Cocoa equivalent for the AppleScript type 'msng' (missing value) is now NSNull (r. 2848555).

  • NSAppleEventDescriptor now has the designated initializer -initWithAEDescNoCopy method (r. 2842470).

  • An option was added to "do shell script" that allows you to turn off translation of line endings in the command output from LF and CRLF to single CRs (r. 2850410).

  • A problem where files created by "open for access" did not have a type or creator has been corrected. Such files now have their type set to "TEXT' and their creator set to "ttxt" (r. 2839361).

  • Fixed problem where Cocoa Scripting's copy command could copy objects in the wrong order (r. 2838757).

  • Fixed problem in Cocoa scripting where records were not being passed to command handlers correctly. Rather than being passed as a dictionary with keys and values corresponding to those in the record, records were being passed as arrays with interlaced keys and values. Now, records are passed as dictionaries with key value pairs (r. 2837938).

  • A problem where AppleScript's OSASetProperty call could become unstable following a call to OSAExecute has been corrected (rr. 2830152, 2786611). (r. 2827990)

  • A problem where compiled scripts containing typeTargetID address descriptors could not be opened in Mac OS X has been corrected. This problem affected compiled scripts containing statements of the form 'tell app "foo" of machine "eppc://..."' (r. 2811892).

  • The Cocoa scripting requirement that classes in scriptSuite actually exist in Objective-C has been relaxed. Now, if the scriptSuite class serves as a protocol, then there's no need for the corresponding Objective-C class to exist (r. 2807626).

  • Fixed problem where Scriptable Cocoa applications would leak 2-6 NSTerminologyRegistry objects for each open document/close document pair of AppleScript commands (r. 2796255).

  • The 'quoted form' property of strings now returns a valid quoted string suitable for passing to the 'do shell script' command. Previously, the resulting string was not encoded correctly (r. 2793920).

  • A problem that could cause a crash in scriptable Cocoa applications that did not include a keyAEName code ('pnam') element in one of their class descriptions has been corrected. (r. 2785426).

  • Relative specifiers inside of "whose" tests are now evaluated as expected. (r. 2784592).

  • A problem related to the processing of queued events (events received during the execution of an Apple event handler) has been corrected. (r. 2973719).

  • AppleScript enumerators in Cocoa now return the correct value when getting a subclass' property from a superclass object. (r. 2962920).

  • UTF-16 to UTF-8 coercion now works as expected. (r. 2918203).

  • A problem where Cocoa Scripting was mishandling commands of the form "make new <class> at end." has been corrected. (r. 2869492).

  • A problem where "do shell script" could fail when with non-ASCII characters in paths has been corrected. (r. 2848082).

  • A problem where an AppleScript attempting to send a restart command to a remote machine would cause the local machine running the script to restart has been corrected. (r. 2840060).

  • A problem where Cocoa Scripting did not support copying/moving/creating one object on top of another object has been corrected. Now, it is possible to write the following sorts of scripts for Cocoa applications: tell application "TextEdit" to copy first word of text of front document to title of front (r. 2838745).

  • AppleScript now supports typeUTF8Text = 'utf8' for UTF-8 encoded Unicode text. (r. 2835411).

  • NSNumber<TypeCode> and NSData<...> are now valid scripting types in scripting suite command parameters and class property declarations for Cocoa applications. (r. 2776086).

  • In Cocoa scripting, NSDictionarys returned to AppleScript will now be appropriately converted into Apple event records so they can be accessed as records in AppleScripts. (r. 2480527).

  • In Cocoa scripting, your - (void) setX: (NSArray *)someX mutator will now be called when someX is an array. (r. 2470009).

  • Cocoa scripting now has support for implicitly specified AppleScript properties. Now, the following sort of script works as expected: tell front document of application "TextEdit" to first word (r. 2243743).

  • Fixed a problem where osascript would truncate its output if the resulting string returned by the AppleScript it called contained any null characters. Now the entire string is output as expected. (r. 2852985 ).



IMPORTANT:
The Info.plist key, NSAppleScriptEnabled = true, will soon be required before Launch Services will consider an application scriptable. Developers of scriptable applications should start using this Info.plist key now.

Launch Services lets you find out a number of things about an application, including whether or not it's scriptable. However, if you're a bundle application, you need to put NSAppleScriptEnabled = true in your Info.plist for Launch Services to consider you scriptable. AppleScript in Mac OS X 10.2 takes additional steps to determine if an application is scriptable, but in the future, it will rely on Launch Services exclusively. At that point, if your application is scriptable but lacks the NSAppleScriptEnabled key, it will not show up in lists of scriptable applications, such as the list displayed for the Script Editor's "open dictionary" command.



Back to top






Audio

This section discusses changes and new features in Mac OS X 10.1 related to audio input and output.



Audio HAL

The Audio Hardware Abstraction Layer (HAL) represents the lowest level of access to audio devices, as well as the general characteristics of the device.

  • HAL now provides range information to clients so that they don't have to guess about which sample rates are actually supported by way of the new device property kAudioDevicePropertyAvailableNominalSampleRates. (r. 2832444).

  • HAL now provides the properties kAudioDevicePropertySubVolumeScalar, kAudioDevicePropertySubVolumeDecibels, kAudioDevicePropertySubMute for controlling the level of iSub speakers. (r. 2829906).

  • Added the device property kAudioDevicePropertyDeviceIsRunningSomewhere to AudioHardware.h . This new property can be used to find out whether or not any given device (input and/or output) is in use by some process on the system. (r. 2764738).

  • Fixed an intermittent bug where the HAL could occasionally call a driver's performClientIO with invalid parameters. (r. 2974014).

  • A new API for enabling/disabling streams by way of kAudioDevicePropertyIOProcStreamUsage. Now, if an IOAudioEngine has multiple IOAudioStreams, a client of the Audio HAL can indicate that it only wants to read or write a subset of those streams. (r. 2829849).

  • Fixed a memory leak that could occur each time the physical format of a stream is changed. (r. 2802833).

  • Fixed bug where the volume of the USB audio device was being reset to 0 while speakers are being plugged in. (r. 2779726).

  • Reduced the probability of choppy sound occurring when running the HAL at buffer sizes lower than 48 frames per buffer. (r. 2728301).

  • Added the new device properties kAudioDevicePropertyTransportType and kAudioStreamPropertyTerminalType that can be used to discover what the transport (USB, FireWire, etc) type is for a device and the kinds of functionality that are available for each stream. (r. 2724935).

Back to top





Audio Toolbox

Contains APIs for AUGraph and MusicToolbox. The AUGraph is a high-level representation of a set of AudioUnits, along with the connections between them. You can use these APIs to construct arbitrary signal paths through which audio may be processed, i.e., a modular routing system. The APIs deal with large numbers of AudioUnits and their relationships. The MusicPlayer APIs provide the services of a sequencing toolbox. This toolbox is where events can be collected into tracks, and tracks can be copied, pasted, and looped within a sequence.

  • A problem where AUGraph calls could return the value -1 instead of a more informative result code when reporting error conditions has been corrected. (r. 2886642).

  • Callbacks in audio headers are now defined using typedefs, which improves compatibility with C users (as opposed to C++ users). (r. 2781424).

  • A problem where changing audio formats during audio playback could cause a kernel panic has been fixed. (r. 2762544).

  • Built-in audio drivers are now able to report latency. (r. 2652057).

  • The new /Library/Audio/Plugin directory has been added as a place to put MAS audio processing plugins. (r. 2935066).

  • A number of factory preset properties for audio units were added to the headers in classinfo format. (r. 2934717).

  • A memory leak in MusicSequenceLoadSMF was corrected. (r. 2848166).

  • A problem where calling IOAudioLevelControl::create with a subtype of 0 would return an incorrect subtype has been fixed. (r. 2841871).

  • Fixed FSSpec problems with AudioToolbox.framework function MusicSequenceSaveSMF. Now this function works as expected. (r. 2840253).

  • A new createOutputSelector method has been added to IOAudioSelectorControl.h. (r. 2838912).

  • A problem where software-controlled input gain only affected the right channel on certain machines has been fixed. (r. 2781825).

  • AppleUSBAudio now includes AC-3 support. (r. 2764825).

Back to top





MIDI

This section discusses changes and new features in Mac OS X 10.2 related to MIDI.

  • A problem in MIDIEndpointGetEntity() where it could return a successful status result in cases where it failed has been corrected. (r. 2969576).

  • A number of bugs in the, SampleUSBDriver, shared source MIDI developers often use to build vendor-specific drivers have been corrected. (r. 2953808).

  • kMIDIPropertySingleRealtimeEntity has been added. Some MIDI interfaces cannot route MIDI real time messages to individual outputs; they are broadcast. On such devices the inverse is usually also true -- incoming real time messages cannot be identified as originating from any particular source. When this property is set on a device driver, it specifies the zero-based index of the entity on which incoming real time messages from a device will appear to have originated from. (r. 2941877).

  • In actual use, the second argument passed to the CoreMIDI driver's Monitor function did not match its declaration. The declaration has been updated so it is a pointer to a MIDIEndpointRef rather than the MIDIEndpointRef itself. (r. 2877457).

  • A problem where CoreMIDI's use of CFRunLoop was allowing runloop sources (such as timers, etc.) to fire during an API call, causing re-entrancy issues, has been corrected. (r. 2852701).

  • When using MIDIPacketListAdd() (in CoreMIDI) to construct a MIDIPacketList with one packet. If the MIDIPacketList's size is exactly large enough to contain this packet, MIDIPacketListAdd() adds a packet with length zero (instead of the length requested). This issue has been fixed and MIDIPacketListAdd() now works as expected. (r. 2824218).

  • A problem where MIDISendSysex was leaking about 200 bytes per call has been corrected. (r. 2823042).

  • A problem where calls to MIDISend with zero-length packets could hang the MIDI server task has been corrected. (r. 2812345).

  • MIDIPacketListAdd will produce MIDI packets consisting of a SYS EX message followed by a channel message. The documentation for a MIDIPacket says "In the case of system-exclusive messages, a packet may only contain a single message, or portion of one, with no other MIDI events." This could cause problems for some drivers and/or the MIDIServer itself and cause them to drop data. This problem has been corrected. (r. 2809230).

Back to top





Sound Manager

The Sound Manager is the Carbon API for playing and recording sound.

  • A problem where SysBeep did not work if the system output device did not have any mute controls has been corrected. (r. 2846418).

Back to top





Speech Recognition Manager

This manager provides speech recognition support in applications.

  • A problem where SRGetIndexedItem() could erroneously generate the error kSRHasNoSubItems has been corrected. (r. 2959584).

  • Speech Recognition would occasionally recognize and consume the listen key (ESC by default), even when using kSRNoFeedbackNoListenModes, preventing that key from reaching the application. We no longer respond to or consume the listen key in this situation. (r. 2902460).

Back to top



Text-to-Speech

The Text-to-Speech APIs provide facilities for converting text into audible speech.

  • On occasion, the order of phonemes in a callback (as created using SetSpeechInfo()) would be incorrect after calling SpeakBuffer() (even though the spoken phoneme is in the correct order). We now return the phonemes in the correct order to the callback. (r. 2863646).

  • When creating phonemes to precisely control text-to-speech pronunciation, using a comma (",") would incorrectly stop the speech. We now correctly pause and continue on a comma. (r. 2769766).

  • If a developer calls SpeakBuffer with the controlFlag kPreflightThenPause, and never un-pauses the speech channel, Speech Recognition and Talking Alert would stop working. This no longer occurs. (r. 2940266).

  • A problem where, in rare circumstances, an application with many speech API calls in a row might encounter a race condition that resulted in an application crash has been corrected. (r. 2939995).

Back to top



BSD

This section describes changes and enhancements the BSD APIs provided in Mac OS X.

  • The performance and stability of the tcpdump program has been improved to reduce the likelihood of crashing while monitoring network traffic. (r. 2936063).

  • The ulimit routine for controlling process limits is now supported. (r. 2933221).

  • The BSD lockf() routine has been added. (r. 2926584).

  • Flat File host searches now read all the way through /etc/hosts. Now, if a host has multiple addresses (say, an IPv4 and IPv6 address or it has multiple interfaces), there will be multiple lines in the file for that host, and the search won't stop at the first hit. (r. 2922759).

  • A problem where shmat would fail with a permission denied error when it was attempted by root has been corrected. (r. 2910913).

  • The bzip2 command has been added to the BSD user commands. This tool handles .bz2 compression files. (r. 2903204).

  • fs_usage was updated to allow reporting of physical disk I/O. There are 3 main categories of disk I/O that can be reported using fs_usage: Data, MetaData and Paging operations each of which is either synchronous (implied) or asynchronous (called out). These physical operations will not show up when tracing a single process (since they can't be attributed to any particular process). Using the -e option works around this. (r. 2891010).

  • Fixed a bug that could cause getpwuid to return the wrong user when a NetInfo user and a local user had the same UID. This correction only applies to cases where the user logged in with the "short" login name (r. 2890314).

  • Added the APIs getgrnam_r(), getgrgid_r(), getpwnam_r(), and getpwuid_r(). (r. 2885989).

  • A declaration for the type 'struct timespec' has been added to the header file /usr/include/time.h. (r. 2883165).

  • declarations and implementation has been provided for the Libc time functions timelocal, asctime, difftime, localtime, strftime, and strptime. (r. 2882786).

  • the ld tool has been updated to produce an error message when an attempt to produce an object file with more than 255 sections is made. There is a limit of 255 sections in an object file. However, ld(1) can create object files with more than 255 sections, which creates unusable object files. We now generate an error message indicating "too many sections used, maximum is 255". (r. 2882553).

  • fs_usage has been updated to report the following calls: mkfifo, chhdir, fchdir, utimes, futimes, chroot, undelete, delete, revoke, fsctl, load_shared_file, and copyfile (NOTE: Several of these commands do not have man pages at this time (r. 3035842)). (r. 2881912).

  • The routines pread(), pwrite(), getsid(), and getpgid() are now exported from Libc. (r. 2880097).

  • the BSD call new_system_shared_regions() is now exported from Libc. (r. 2870742).

  • The routine posix_madvise() is now exported from Libc. (r. 2869420).

  • Added support for the BSD calls: sigrelse() and sighold(). (r. 2867958).

  • Updated printf so that it now supports C99 printf format modifiers. (r. 2867110).

  • The a64l() routine is now exported from Libc. (r. 2866840).

  • The thread safe implementation of strtok(), strtok_r(), is now exported from Libc. (r. 2866805).

  • The thread safe implementation of rand(), rand _r(), is now exported from Libc. (r. 2866795).

  • MAXLOGNAM is now set to MAXNAMLEN instead of the number 12. This change increases the maximum user name length. (r. 2863236).

  • The routines strtoll() and strtoull() are now exported from Libc. (r. 2859956).

  • The BSD 4.0 routine fflagstostr() is now exported from Libc. (r. 2857680).

  • The BSD routines strlcat() and strlcpy() are now exported from Libc. (r. 2847856).

  • The routine mkdtemp() is now exported from Libc. (r. 2846729).

  • The routines basname() and dirname() are now exported from Libc. (r. 2843401).

  • Cron jobs now use the new BSD program "periodic" for scheduling. (r. 2842289).

  • Python 2.1.1 is now installed with Mac OS X. (r. 2839813).

  • inetd is being replaced with xinetd. xinetd offers a much easier way of adding, deleting or modifying entries in the inetd daemon list. Rather than editing a single file, /etc/inetd.conf, a directory can have xinetd 'modules' dropped into it or removed in order to change the configuration, making it much easier to modify system behavior. In Mac OS X 10.2, inetd is still running for compatibility reasons (r. 2961142) with xinetd alongside it. This is a potential problem if people are trying to understand why services are running and they are looking in one place for a service being served when it is actually being served in the other place. Developers should move to using xinetd rather than inetd as inetd may not be supported in future releases. (r. 2838772).

  • Added Pluggable Authentication Modules (PAM) to system. PAM is a mechanism for Unix utilities to do authentication in a flexible and extensible manner. As new authentication methods are adopted, it is simple to write a new PAM module for that method and have applications automatically become capable of dealing with it, all without recompilation or change to the applications themselves. (r. 2838768).

  • The quotaoff is now installed among the BSD tools installed with Mac OS X. (r. 2836259).

  • A prototype for getnameinfo() has been added to /usr/include/netdb.h. It was already exported from Libc, only the declaration was missing. (r. 2833476).

  • Fixed a bug that could cause sscanf with %n to return strange values. (r. 2832277).

  • Fixed a memory leak in printf that could occur when floating point values were provided as parameters. (r. 2831667).

  • A problem where the routine sigpending() was not returning the pending signals in the sigset_t pointed to by its parameter has been corrected. (r. 2831405).

  • The bash command shell is now installed with Mac OS X, and has replace zsh as the default /bin/sh (r. 2809843).

  • Fixed a bug that would cause inet_aton() to return true if passed in a string starting with a space (a poorly formatted address string). (r. 2809345).

  • The libedit library has been added to the system. (r. 2807693).

  • Previously using tcpdump without arguments it didn't always find the default interface (sometimes found none). Updated default settings so default interface is always discovered. (r. 2797667).

  • The routine scanf() now supports the "ll" (ell-ell) length modifier. (r. 2789072).

  • Fixed getservbyname() and getservbyport so that they behave as the man page specifies. Previously, both of these calls returned the last matching protocol available. (r. 2785437).

  • The command "chmod +/-t" now works as expected. (r. 2785169).

  • A problem where the routine gethostbyname() would fail with an IP address if a reverse DNS entry could not be found has been corrected. Now, it returns the IP address. (r. 2771613).

  • Fixed sscanf() now works as expected for reading long doubles. (r. 2757634).

  • The routine remove() has been corrected so it can delete directories. Previously, remove would fail if asked to delete a directory. (r. 2757437).

  • The routine pthread_kill() is now exported from Libc. (r. 2753869).

  • The routine nanosleep() is now exported from Libc. (r. 2753843).

  • A problem in setlocale() causing it to return incorrect results has been corrected. (r. 2752682).

  • A problem where the command line tool m4 could hang under certain circumstances has been corrected. (r. 2749605).

  • The routine asprintf is now exported from Libc. (r. 2727904).

  • The Rand48() family of functions are now a part of stdlib. These routines include: drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, and lcong48. (r. 2718058).

  • The fcntl() options F_PREALLOCATE, F_SETSIZE, F_READBOOTSTRAP, F_WRITEBOOTSTRAP, F_LOG2PHYS now check for locking errors. (r. 2679948).

  • The routine mkdtemp() is now exported from Libc. (r. 2613958).

  • The gethostbyname() family of functions have been updated so they are now thread-safe. (r. 2238779).

  • Removed libcurses from libSystem and replaced it with ncurses. Programs that uses curses functionality will need to be relinked with the new shared library (r. 2219086).

  • The tool "automake" is now installed with Mac OS X. (r. 2942208).

  • Fixed a bug that would cause mktemp() to underrun the template buffer and return an improperly formatted file name. (r. 2937492).

  • readdir_r The thread safe version of the routine readdir(), readdir_r(), is now available. (r. 2930202).

  • When working with .a files, ld(1) does not respect the -no_arch_warnings flag (as it does with .o files). We now correctly pay attention to this flag with .o files. (r. 2918296).

  • The Terminal text encoding mode can now be changed to UTF-8 to better support international languages. (r. 2911610).

  • The routine printf() now supports vector format specifiers. (r. 2911015).

  • uudecode now will set execute bits on its output file if they are present in its uuencoded input. It will still not set sticky bits nor set-id bits. (r. 2910030).

  • The Ruby scripting language is now installed with Mac OS X. (r. 2809964).

  • ntpd v4.1.71 is now installed with Mac OS X. (r. 2809093).

  • The routines inet_pton() and inet_ntop() have been added to Libc. (r. 2372291).

  • The curses library has been updated to the newer ANSI compliant ncurses library, which supports color and other advanced text attributes as well as offering greatly increased compatibility with applications which rely on having a standards-compliant curses library. One side effect of this change is that ALL APPLICATIONS WHICH USE CURSES MUST BE RELINKED since ncurses is not backwards-compatible with the older version of curses that was shipped in 10.1. The libncurses library is also now available separately from libSystem in order to minimize the memory footprint of other applications which do not use curses, so applications using curses must explicitly link with -lncurses. .

  • The default aliases and tab-expansion settings for tcsh have reverted to their factory defaults due to various complaints with the previous highly-customized set of defaults shipped with 10.1 which made using tcsh different under Mac OS X than on any other Unix platform. Users wishing to have some or all of these defaults back again are urged to investigate /usr/share/tcsh/examples/README.

Back to top






Carbon

Carbon is a set of programming interfaces for use in Mac OS applications, especially those being ported from Mac OS 9 to Mac OS X. Carbon includes about 70 percent of the legacy Mac OS APIs and a number of new APIs for Mac OS X.



Alias Manager

The Alias Manager is the part of the operating system that communicates with the file system to maintain alias records that are used to keep track of file and folder locations. The Alias Manager does not create Finder alias files; the Finder creates these files and stores alias records created by the Alias Manager in them.

  • Aliases to mounted disk image volumes now reference the .img file. As a result, the disk image will be mounted when the alias is resolved with appropriate mount flags. (r. 2783427).

  • Alias resolution now does a more thorough job of matching aliases, especially in cases where similar files can be found on different volumes with the same name. (r. 2776704).

  • Two new APIs, FSMatchAlias and FSMatchAliasNoUI, have been introduced that provide FSRef based functionality similar in function to the older MatchAlias routine. (r. 2744821).

  • A problem where ResolveAlias was incorrectly resolving minimal aliases on volumes that do not natively support FileIDs has been corrected. (r. 2988555).

  • A new API, FSCopyAliasInfo, has been added that allows callers to retrieve detailed information from alias records. (r. 2714855).

  • Alias resolution now begins with attempting to resolve the file path name first before attempting to resolve the alias using the file id. This is a fundamental change in the way aliases are resolved and it corrects a problem that would prevent aliases from working as expected on volumes restored from a back up copy. New flags have been added to specify the previous behavior (where the file id would be tried first). Pass kARMTryFileIDFirst to calls which accept a rulesMask or kResolveAliasTryFileIDFirst to calls which accept mountFlags to specify the file id first behavior. (r. 2683228).

Back to top





Appearance Manager

The Appearance Manager extends the facilities provided by the Control Manager, the Dialog Manager, the Menu Manager, and the Window Manager to provide a consistent look and feel for all on screen user interface elements in the Mac OS environment.

  • The new constants kThemeSystemFontDetail, kThemeSystemFontDetailEmphazid, kThemeTextColorSystemDetail have been added in Apperance.h. (r. 2818428).

  • The themeNoAppropriateBrushErr (-30568) is now defined in MacErrors.h and can be return by SetThemeTextColorForWindow (see comments in Appearance.h for more details). (r. 2808256).

  • The new constants kThemeBrushPrimaryHighlightColor and kThemeBrushSecondaryHighlightColor are now available in Appearance.h and should be used as seen in the column view of the Finder. (r. 2763475).

  • Performance of Unicode text drawing in items displaying text has been improved. (r. 2704870).

  • A new constant, kThemeToolbarFont, has been added to the ThemeFontIDs to support the new Toolbar object. (r. 2822282).

  • A problem in Mac OS X 10.1 where drawing with a pattern selected by calling ApplyThemeBackground( kThemeBackgroundWindowHeader ... ) did not produce the same results as the call DrawThemeWindowHeader() has been corrected. (r. 2760583).

Back to top





Component Manager

The Component Manager provides facilities for tracking and calling code modules that provide a defined set of services to one or more clients (components).

  • In Mac OS X 10.1, the component manager would sometimes crash if a component call was made on an invalid component (such as a component that had been closed). This bug has been fixed. (r. 2772868).

Back to top





Control Manager

The Control Manager provides facilities for drawing and processing user interaction with on screen items inside of windows.

  • A problem where the Mach-O implementation of IsAutomaticControlDragTrackingEnabledForWindow was returning an incorrect value has been corrected. This problem could cause unexpected results in drag and drop operations after calls to SetAutomaticControlDragTrackingEnabledForWindow (r. 2447465). (r. 2764233).

  • A problem where the minimum width in specified for a list view column could be ignored, or modified to a larger value, during a live resize operation has been corrected. (r. 2761051).

  • A new constant, kControlEditTextSingleLineTag, has been added to ControlDefinitions.h for use with the Unicode Text Control. This control data tag allows you to turn on or off single line editing. (r. 2733779).

  • GetControlData(..kControlStaticTextTextTag..) will now works correctly even if the text was set using SetControlData(..kControlStaticTextCFStringTag..). (r. 2700210).

  • Static Text Controls now truncate text properly when the kControlStaticTextTruncTag is used. (r. 2661131).

  • A problem where, under certain conditions, calling SetDataBrowserTableViewColumnPosition could swap the column widths of the columns being moved has been corrected. (r. 2658667).

  • A problem where moving the column containing the disclosure triangles could cause the data browser to crash has been corrected. (r. 2655765).

  • A problem where calling SetDataBrowserListViewDisclosureColumn could change the column width has been corrected. (r. 2652930).

  • A problem where calling ExecuteDataBrowserEditCommand(macControl, kDataBrowserEditMsgCopy) command would not copy the text of the selected items to the scrap has been corrected. (r. 2511863).

  • Problems in the Control Manager's handling if IconRefs have been corrected. This was a retain/release problem with icon references that could cause the inadvertent disappearance of icons. (r. 2979503).

  • Disposing a control that is the default or cancel button in a window now clears properly and the window no longer attempts to use it. (r. 2954785).

  • A problem in the data browser related to column widths of non-resizable columns used to display an hierarchical lists has been corrected. Here, disclosing hierarchical items would not widen columns while collapsing them would make the same columns smaller. (r. 2814835).

  • A problem where moving an EditUnicodeText control between windows with EmbedControl would crash has been corrected. Here, the control was keeping some internal fields pointing to the original window. This has been fixed. (r. 2795838).

  • FindControlUnderMouse now accepts a NULL value for the outPart parameter. This is useful for cases where your program is only interested in finding the control under the mouse, but not the part code describing the part of the control under the mouse. (r. 2879400).

Back to top





Date & Time Utilities

The Date & Time Utilities provide facilities for accessing the clock chip and APIs for converting dates between various formats.

  • Fixed an obscure conversion problem with StringToDate() where it could fail on the date of January 1 of any year where (year mod 400) equals 101. (r. 2860198).

  • Added support for time zone support for cities in Portugal, Croatia, and Slovenia. (r.2946953) (r. 2928698).

Back to top





Dialog Manager

The Dialog Manager manages user interactions with windows containing controls arranged and positioned using dialog layout templates.

  • RunStandardAlert disposes of the dialog before returning. More comments have been added in Dialogs.h for RunStandardAlert and CreateStandardAlert to clarify the allocation/deallocation issues. (r. 2828656).

  • Problems where the DITL accessor routines could crash if passed NULL dialog item list handles have been corrected. (r. 2603639).

  • Memory leaks that could occur when using GetNewDialog or DisposeDialog with sheets have been corrected. (r. 2967411).

  • A problem where GetDialogItem could alter the font information in the active window port, rather than the explicit dialog port, has been corrected. (r. 2938978).

Back to top



Display Manager

The Display Manager allows users to dynamically change the arrangement and display modes of the monitors attached to their computers.

  • Problems with calling DMRegisterExtendedNotifyProc with kFullDependencyNotify have been corrected. (r. 2788058).

  • Added new Display Manager notifications for display sleep and wake. Check gestaltDisplayMgrSleepNotifies to make sure it is available and see Displays.h for kDMNotifyDisplayWillSleep and kDMNotifyDisplayDidWake. (r. 2806290).

Back to top





Drag Manager

The Drag Manager supports drag-and-drop operations between windows and applications.

  • A new constant, kDragStandardDropLocationTrash, has been added in Drag.h. When used with the new API, SetStandardDropLocation, an alias to the Trash will be set as the drop location (r. 2916609). (r. 2829056).

  • Calling SetDragImage() can be called multiple times during a Drag to update the drag image. Unfortunately, there was a problem where the image flags parameter was being ignored after the first call to SetDragImage(). Now, the flags parameter is observed on subsequent calls to SetDragImage. This allows callers to turn on and off the drag region during a drag by changing the kDragRegionAndImage flag. (r. 2641813).

  • A problem where the region offset of the masking region was being ignored by SetDragImage has been corrected. (r. 2640917).

  • A new API, SetDragImageWithCGImage, has been added to Drag.h to enable callers to specify a CGImage as a drag image. (r. 2916609).

Back to top





Event Manager

The Event Manager manages the delivery of information about system operations and user interaction to applications.

  • A problem where an activate events were not being generated properly between calls to BeginFullScreen() and EndFullScreen() has been corrected. (r. 2873868).

  • A new constant, kMouseTrackingMouseMoved, has been defined as one of the possible result codes returned by TrackMouseLocation/TrackMouseRegion. Previously, calling TrackMouseLocation/TrackMouseRegion while the mouse button did not work. Now, if your application calls TrackMouseLocation/TrackMouseRegion while the mouse button is up, kMouseTrackingMouseMoved will be called when the mouse is moved. (r. 2792773).

  • New Mouse Tracking Region APIs are now available (see Carbon/CarbonEvents.h). (r. 2716688).

  • Mouse delta values provided in mouse moved events are now calculated correctly. (r. 2673343).

  • A problem where an application using the classic event model would not receive an osEvt (mouse-moved) event when it was switched into the foreground has been fixed. (r. 2671602).

  • SendEventToEventTarget now returns paramErr for an invalid target. (r. 2976195).

  • Floating utility windows can now receive kEventMouseWheelMoved events. (r. 2751193).

  • Events for 'application hidden' and 'application shown' have been added to Carbon Events. (r. 2693184).

Back to top





File Manager

The File Manager provides APIs for storing and retrieving disk-based information.

  • A problem where the containerChanged parameter to FSGetCatalogInfoBulk was being ignored (and not set to any value) has been corrected. In Mac OS X 10.2, it is always set to false. (r. 2874842).

  • In Mac OS X 10.1, attempts to iterate through the list of mounted volumes before the first call to the event loop would return a list of local volumes and the volume on which the application is running would be returned - remote volumes would not be included in the list of volumes returned. This problem has been corrected. (r. 2895905). (r. 2759485).

  • With Mac OS X 10.2, when one process opens a file with write access, it will have exclusive write access. If another application tries to open the same file with write access it will fail. See Technical Note TN2037 for further information. (r. 2663613).

  • New volume signature word has been added for FTP servers mounted as volumes. Here's a list of common volume sigwords currently in use: 0x4B47 = FTP, 0x4341 = webDAV, kHFSPlusSigWord = HFS+, kHFSSigWord = HFS, 0xd2d7 = MFS, 0x4B48 = UFS, and 0x4E4A = NFS. (r. 2865998).

  • A new set of APIs for mounting, un-mounting and ejecting volumes has been added to the File Manager. The routines allow for both synchronous and asynchronous operations. The routines are FSMountServerVolumeSync, FSMountLocalVolumeSync, FSUnmountVolumeSync and FSEjectVolumeSync (replace Sync with Async for the synchronous variants). (r. 2788787).

  • Hard link support in has been added to the File Manager. The new kFSNodeHardLinkBit bit has been added to Files.h that allows callers to determine if a file system reference is actually a hard link. If this bit is set, then callers can use stat(2) to find out more information about the file. (r. 2719873).

Back to top





Folder Manager

The Folder Manager provides facilities for locating "special" folders (for example, the Extensions folder) without relying on the names of those folders. This aids developers in application localization.

  • Added the new FindFolder selector constant kManagedItemsFolderType defined that allows callers to locate the user's "Managed Items" folder. (r. 2871449).

  • A problem where calls to FindFolder with create flag set was not setting the correct permissions on the Temporary Items folder has been corrected. Now, the folder is created with "world privileges" with the sticky bit set. (r. 2847142).

  • A new FindFolder selector constant, kKeyboardLayoutsFolderType, was added in Folders.h to allow callers to locate the user-installible keyboard layouts folder. (r. 2842566).

  • A new FindFolder selector constant, kFindByContentIndexesFolderType, was added that allows callers to find the find by content folder. (r. 2826947).

  • A problem where calls to asking it to create the kInstallerLogsFolderType folder (/Library/Receipts/) would always fail with a error of type -43 has been corrected. Now, when this folder is not present, it will be created as expected. (r. 2656007).

Back to top



Gestalt Manager

The Gestalt Manager provides a simple, efficient way for your application to determine the user's hardware and software configuration at runtime so that you can fully exploit the available features or inform the user if a necessary feature is missing.

  • The Gestalt selector gestaltCarbonVersion returns version 1.6 when called in Mac OS X 10.2. (r. 2870430).

Back to top





Help Tags

Help Tags are the primary method for providing context sensitive help in Mac OS X. They are the Mac OS X replacement for the older Balloon Help technology.

  • The help tag code for menu titles used to check whether the point was inside the absHotRect before displaying the help tag. Now, when checking for a menu title help tag, the absHotRect is now ignored; the menu title's actual bounds is always used. This allows a menu title content callback to return an empty absHotRect. Also, after calling a content callback for a control, window, or menu item, the code now checks for an empty absHotRect and normalize the hot rect to the current global position of the object. This allows content callbacks for these objects to return empty absHotRects. Previously, they had to determine the actual current global coordinates of the object and put that into the absHotRect for the help tag to display. Finally, another minor change to the code now checks whether the mouse is inside the absHotRect before displaying a menu item help tag. This generally will have no effect, but it's meant to allow a custom MDEF that only wants to display help tags over a subset of its content area to customize the hot rect. (r. 2833495).

  • In Help, a HelpContentRec content type was added to support a localized string. Newly added is kHMCFStringLocalizedContent, which uses the tagCFString field of the HMHelpContentRec. The CFString is interpreted as the name of a localized string in the application's bundle. CFCopyLocalizedString is used to load the string, and it's released when the system is done with it. Also fixed was a long-standing bug where the content callback was not being called with a kHMDisposeContent request when the content type was CFStringRef. This could lead to memory leaks of CFStringRefs. (r. 2806155).

  • It is now possible to break the text displayed in help tags into multiple lines of text by including line feed characters in the text. (r. 2696185).

  • It is now possible to create help tags for utility windows. (r. 2526126).

Back to top





Icon Services

Icon Services provides fast and efficient facilities for retrieval of appropriate icon information used to represent files, directories, or other commonly used icons (for example, the caution alert icon, the note alert icon, and the help icon).

  • GetIconRefFromFile now badges icons returned for alias files as expected. (r. 2663503).

  • A problem where SetIconFamilyData could fails with memFullErr (-108) when given valid parameters has been corrected. (r. 2952322).

  • GetIconRefFromFile now supports custom badge resources. .

  • GetIconRef now supports creator/types that have been registered with LaunchServices. .

  • Some IconServices APIs are now thread safe (see APIs comments in Icons.h). .

  • IconServices supports custom media icons via IOMediaIcon property. See Mass Storage release notes for details. .

Back to top





List Manager

The List Manager provides a standard user interface for drawing and managing user interaction with lists of items.

  • References to the type ListRef have been removed from Lists.h. All of these references have been replaced with ListHandle (r. 2837663). .

Back to top





Menu Manager

The Menu Manager is the part of the operating system responsible for both drawing the menu bar, and drawing menus and pop-up menus on the screen while the mouse is being held down.

  • The Menu Manager now invalidates the command key cache whenever hierarchical menus are inserted or removed. This change clears out any stale command key/menu associations left in the cache after the active menu set is changed. (r. 2866303).

  • The new constants kMenuAttrHidden and kMenuItemAttrIncludeInCmdKeyMatching have been added to the added as possible Menu Item attributes. (r. 2835332).

  • Implemented support for a MenuContext parameter in menu-originated command events so that the handler can determine from where the command came from. (r. 2790403).

  • Removed the limit of 5 hierarchical menus on-screen at once. (r. 2456159).

Back to top





Navigation Services

Navigation Services provides new Open and Save dialogs, allowing users to locate and select files and other resources.

  • NavCustomControl/kNavCtlSelectCustomType now works correctly instead of returning error -5697 (kNavCustomControlMessageFailedErr). (r. 2763191).

  • You can now pre-select the default location in Navigation Services in the same way it used to work on Mac OS 9. (r. 2759311).

Back to top



PLStringFuncs

PLStringFuncs provides a number of Pascal-string APIs that are similar to the standard C library string routines.

  • The routine PLstrcat(a,b) in CarbonCore was broken if length of a + b > 255 characters. It now does proper range checking. (r. 2865047).

Back to top





Process Manager

The Process Manager provides a set of APIs allowing processes to find out information about other processes registered with the Process Manager.

  • Calling GetNextProcess or GetProcessInformation with an invalid ProcessSerialNumber now properly returns procNotFound instead of noErr. (r. 2971688).

Back to top





Resource Manager

The Resource Manager provides a data file format for storing and retrieving information used during application and operating system run time.

  • The CSResourcesFileMapped info.plist key is now respected for single binary applications. (r. 2704627).

  • FSCreateResourceFork API was added to create a resource fork given an FSRef. (r. 2650255).

Back to top





Window Manager

The Window Manager provides facilities for drawing and maintaining windows on the screen.

  • When using GetWindowIdealUserState() or ZoomWindowIdeal() on an un-initialized window, we incorrectly returned an empty rect (0,0,0,0). We now return the window's global port bounds instead. (r. 2804328).

  • In some circumstances, clicking on a window with an active sheet brought the window to the front, but didn't activate it (clicking on the sheet would activate the window). We now activate the window regardless of where the window was clicked. (r. 2799575).

  • On floating utility windows with no title-bar widgets (i.e. with window attributes set to kWindowNoAttributes), long titles would create a rectangle off the edge of the window (instead of truncating the title). We now correctly truncate titles to the width of the title-bar. (r. 2781092).

  • Using SetCursor() from a background application with a utility window had no effect. SetCursor() now works for both foreground and background applications over utility windows. (r. 2779450).

  • Previously, adding windows to the standard Window menu required creating the menu before creating any windows. We now automatically add existing windows that have the InWindowMenu attribute to the Window menu when that menu is created. (r. 2754926).

  • In some situations involving floating windows, system-generated modal dialogs might appear in incorrect locations (centered on a floating window, generally). We now correctly position modal dialog boxes on the front-most, non-floating window. (r. 2676193).

  • If an application is hidden, it was still possible to show a window (using ShowWindow(), e.g.) for that application. We now correctly prevent a window from being shown if an application is hidden. (r. 2494500).

Back to top



Classic Runtime

The Mac OS X Classic Runtime environment provides a Mac OS 9 compatibility runtime environment for legacy applications and software.

  • A problem where launching classic could trash the contents of the clipboard has been corrected. Affects Mac OS X 10.1.2 and later. (r. 2835692).

  • A number of issues related to transferring the contents of the clipboard to and from the classic environment have been corrected. related to 2763740, 2395383. (r. 2773083).

  • Fixed a problem whereby if a KEXT did a programmatic setting of ClassicMustSeize on a USB device in the IORegistry, it could crash the Classic Environment. (r. 2911540).

  • Enhancements were made for Classic's recognition of NFS volumes. (r. 2897832).

  • GetProcessInformation will now return correct type and creator information for Classic Desk Accessories. (r. 2893023).

  • The Classic File Manager now calls through the Carbon File Manager. One of the benefits of this is to allow Classic applications access to WebDAV, DOS FAT, SMB, UFS, etc. volume formats supported by the Carbon File Manager. (r. 2842657) (r. 2884689).

  • Classic can now handle DebugStr being called from an MP task. (r. 2866846).

  • A problem where AltiVec registers would be trashed by calls to WaitNextEvent has been corrected. (r. 2768550).

  • Fixed a problem where a USB composite device - a headset with HID controls - would keep Classic from starting. Besides fixing the specific problem, which was an internal bug in Classic, a change was made to Classic USB policy for MacOS X 10.2 and later. The new policy is that if a USB device has multiple interfaces, some of which are of the class that they might have been opened by Classic to be visible to the emulated MacOS 9 environment, yet others of which are not and thus might successfully match to a Mac OS X driver, then the entire device is not opened by Classic and thus will only function in the Mac OS X environment. In other words, "split cases" where a USB device has some interfaces in use by Classic and some by "X" drivers, will no longer be allowed. For additional information on which devices are seized by Classic, search for the document "Classic USB Device Arbitration" on developer.apple.com and in the USB SDK; it has been updated for Jaguar. (r. 2761572).

  • Calling LMGetBootDrive() from classic now returns the correct volume reference number. (r. 2756118).

  • It is now possible for classic applications to extract the process serial number from an Apple event they received from a Mac OS X application, save that process serial number, and later use it to send an Apple event to that application. (r. 2392561).

  • A problem where Application Died events were not being sent for Classic applications that had unexpectedly quit has been corrected. (r. 2922254).

  • When called from a Classic application, PBHGetDirAccess was failing with a paramErr (-50). This has been corrected. (r. 2908703).

  • A problem where Gestalt() was returning the wrong system version - 9.2 rather than 9.2.1 - when called in a classic application running in the Classic environment in Mac OS X 10.1 has been corrected. (r. 2771448).

  • Better Apple Event error checking and handling has been added to Classic Support's Apple Event handlers. This helps prevent possible crashes inside Classic if an error occurred while an Apple Event was being processed. (r. 2749114).

  • A problem where applications in the Classic environment could not connect to localhost tcp servers running in Mac OS X has been fixed. (r. 2831535).

  • A problem where PAP spoolers running in the Classic environment could not be seen over AppleTalk by PrintCenter has been fixed. (r. 2720750).

Back to top






Cocoa

A set of object-oriented frameworks that support rapid development and high productivity, using a dynamic runtime and rich object hierarchy. Please refer to file:///Developer/Documentation/ReleaseNotes/AppKit.html on your 10.2 system for detailed information on changes in Cocoa in 10.2.



AppKit

AppKit is a framework that provides graphical objects with default behaviors for rapid application development, including windows, panels, buttons, menus, scrollers, text fields, and more.

  • The declaration of NSCopyBitmapFromGState() listed in NSGraphics.h was removed. (r. 2781664).

  • NSColor's +colorWithPatternImage method now returns an auto-released object, where before it did not (r.2797049) .

Back to top





AppKitJava

AppKitJava refers to the Java-language-specific portion of AppKit.

  • -outlineView:itemForPersistentObject: now has a Java based counterpart named outlineViewItemForPersistentObject. As well, -outlineView:persistentObjectForItem: now has the Java based counterpart outlineViewPersistentObjectForItem. (r. 2837824).

  • Cocoa-Java's NSSavePanel didn't have a way to set wether or not the extension is shown. Now, the following APIs can be used to control extension hiding: setCanSelectHiddenExtension, isExtensionHidden, and setExtensionHidden. (r. 2830102).

Back to top





Data Management

Data Management involves the various object classes, including strings, dates and times, collections, numbers, and the undo architecture that Foundation provides.

  • NSString's -stringWithContentsOfURL: no longer leaks memory. (r. 2916292).

  • NSMutableString's -deleteCharactersInRange: now throws an exception if the range is invalid for the calling string. (r. 2877676).

  • NSMutableString's -setString: method now raises an exception when passed nil. (r. 2860954).

  • NSString's -stringByAppendingString method now raises an exception if you pass a nil pointer. (r. 2838156).

  • NSString's -hasPrefix: and -hasSuffix: methods now raise exceptions in cases where they would crash before when passed nil. (r. 2835658).

  • Out-of -bounds accesses in NSString's -characterAtIndex: and -getCharacters:range: will now cause exceptions (r. 2789384).

  • NSMutableString now has a method, -replaceOccurrencesOfString:withString:options:range: to replace all occurrences of a target string with another. It does this in a way that is potentially a lot more efficient than multiple calls to find and replace.

Back to top





Drawing and Imaging

The portion of AppKit devoted to graphics, views, printing, and OpenGL.

  • A problem where some black and white GIF's didn't render correctly has been corrected. (r. 2973862).

  • Asking for a cached image representation deeper than the screen now returns the requested depth. (r. 2972400).

  • Three new alternate selection colors have been made available in Interface Builder. (r. 2956191).

  • NSView's -inLiveResize method now always returns the correct value, instead of getting "stuck" at YES. (r. 2950733).

  • In a Cocoa window, springs now work correctly when you have a control that you want to maintain a constant width and distance from the right-hand side of the window. (r. 2948689).

  • New methods for alternate selection colors are publicly available. (r. 2939444).

  • NSEPSImageRep now claims all EPS file types including 'TEXT', EPS, EPI, epsf, epsi, EPSF, and EPSI. (r. 2889834).

  • A problem where using [NSPatternColor isEqual] against objects of the same type could throw an exception has been fixed. (r. 2838383).

  • Cocoa's NSSplitView now returns proper values from -isSubviewCollapsed: instead of returning false positives under some circumstances. (r. 2620918).

  • Cocoa views and controls now move properly in response to springs and struts when their superview is resized, without round off errors creeping in. (r. 2173955).

Back to top





Events and Other Input

The portion of AppKit relating to event handling and user event processing.

  • Cocoa applications with dock menu items now pass back the correct sender. (r. 2751274).

Back to top





File, Resource, and Process Management

AppKit classes involved in working with the variety of components needed during program execution, including file management, images, code, and system information.

  • The NSFileManager APIs now provide access to file creation dates. (r. 2814464).

  • The NSFileManager APIs are now able to report additional file properties based on flags returned by the BSD stat call. For example, the IMMUTABLE bit (uchg), which maps to Finder's "islocked" bit was not available through the NSFileManager APIs prior to this change. (r. 2750685).

Back to top



Foundation

The Foundation framework defines a base layer of Objective-C classes. In addition to providing a set of useful primitive object classes, it provides support for Unicode strings, object persistence, file system functions, scripting, and more.

  • The Documents directory was added to the list of NSSearchPathDirectories for use in NSSearchPathForDirectoriesInDomains. (r. 2925120).

  • +[NSHost currentHost] no longer crashes if configd isn't running. (r. 2913313).

  • NSTasks launched from a non-main thread no longer hangs in -waitUntilExit. (r. 2910194).

  • NSHost's +hostWithName: now treats the empty string the same as nil. (r. 2903003).

  • If the server dies while the client is waiting for a Distributed Objects reply, the client now gets an exception almost immediately, instead of waiting for a timeout, etc. (r. 2902227).

  • A number of problems related to using pthreads (as opposed to threads created with NSThread) have been resolved in AppKit. (r. 2895833).

  • For applications compiled against Mac OS X version 10.2, NSCalendarDate's -classForCoder now returns -[self class] instead of +[NSCalendarDate class] so that subclasses don't have to override this method. (r. 2867607).

  • NSString's -writeToFile:atomically: no longer fails when using a relative path based in /tmp. (r. 2856590).

  • Sending NSData with Distributed Objects no longer leaks for lengths greater than 4095 bytes. (r. 2803364).

  • NSRunLoop now implements -description. (r. 2803315).

  • NSClassFromString() and NSStringFromClass() no longer crash when passed nil; they now return nil instead. (r. 2802590).

  • -[NSMutableArray removeObjectsFromIndices:numIndices:] no longer raises spurious exceptions. (r. 2800991).

  • [[NSHost currentHost] addresses] now returns a complete list of IP addresses when connected through DHCP, instead of only 127.0.0.1 - localhost. (r. 2665193).

  • NSInvocation no longer coerces negative values for char or short arguments to unsigned (positive) values. (r. 2545453).

  • [[NSProcessInfo processInfo] arguments] no longer fails when one of the argument strings contains high-ASCII characters. (r. 2474167).

  • [NSThread description] now returns useful information about the thread in question, not the currently running thread. (r. 2309712).

  • NSTask now generates a more complete error message if it cannot exec its task. (r. 2205786).

  • -[NSSocketPort scheduleInRunLoop:forMode:] could exit a critical region without unlocking its lock under some conditions. This has been fixed. (r. 2983123).

  • NSMethodInvocation no longer gets confused in Distributed Objects calls to methods that have long long int arguments. (r. 2940584).

  • NSHost's +currentHost method no longer initiates a dialup connection. (r. 2914589).

  • -[NSNumberFormatter initWithCoder:] no longer leaks two NSDecimalNumbers. (r. 2884200).

  • +[NSCalendarDate dateWithString:] now correctly returns an NSCalendarDate object. (r. 2874746).

  • -[NSDate isEqualToDate:] now raises an exception if you compare your date with nil. (r. 2873711).

  • A memory leak in NSCountedSet has been corrected. (r. 2853676).

  • Applications no longer crash when mapping more than 4GB of data into memory using NSData. (r. 2810307).

  • -[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:] now works even if the other array is equal to the receiver. (r. 2803598).

  • -[NSDictionary description] will no longer raise an exception if the dictionary's keys are of different classes, as it would in some cases before. (r. 2699692).

  • NSNumber/CFNumber now work better together when doing comparisons and equality tests. (r. 2546052).

Back to top



FoundationJava

The Java-language-specific portion of the Foundation Cocoa framework.

  • None of the NSFile* constants, like NSFileHFSCreatorCode, NSFileHFSTypeCode, NSFileExtensionHidden, etc. existed on the Java side in Cocoa-Java AppKit; they have now been added. (r. 2830098).

  • NSScriptObjectSpecifier had a Misspelled field with the name InvlaidIndexSpecifierError. This field has been renamed as InvalidIndexSpecifierError. (r. 2647563).

Back to top





Interapplication Communication

The portion of Cocoa providing functionality in the areas of distributed objects, system services, OS services, networking, and rendezvous technologies.

  • A problem where dragging images to the NSPasteboard could leak some data into a private system memory area has been corrected. (r. 2921843).

  • A problem in _NSLookupPBS() where spurious NSPortTimeoutException exceptions could be generated when it was called from an application running as part of the login sequence has been corrected. (r. 2863180).

  • Moving a file to the trash with NSWorkspace now updates the Finder and succeeds even if a file with the same name is already in the trash. (r. 2853822).

  • NSWorkspaceDidTerminateApplicationNotification is now sent even if the app that is terminating was already running when you started to observe the notification. (r. 2841095).

  • Carbon 'url ' drag flavor is now mapped to a NSURLPboardType. When both a 'furl' and 'url ' are present in a drag (which are both convertible to NSURLPboardType) AppKit will now choose to convert the 'furl' first. (r. 2794628).

  • NSWorkspace now returns correct application names in notifications when the application names contain "." or other special characters. (r. 2671677).

  • A problem where large cut and paste operations of formatted text from Cocoa applications could lose style information has been corrected. (r. 2630845).

  • A problem where NSWindow's dragImage was sometimes being drawn in the wrong location has been corrected. (r. 2796124).

  • A problem where private drags initiated from Cocoa applications were being passed through to carbon applications has been corrected. (r. 2627542).

Back to top





Multimedia

The portion of AppKit providing sound and video support.

  • An application with an NSMovieView with autoresizing turned on would sometimes display garbage or black bars over the controller during window resizing. We now correctly redraw the region during live resize. (r. 2784602).

Back to top





Services (AppKit)

Services give applications an open-ended way to extend each other's functionality by allowing applications to provide services to other applications, and access functionality provided by other applications.

  • Third-party spell checkers now launch automatically (r. 2766130).

  • Non-packaged Carbon applications can now provide Services. (r. 2761555).

Back to top



Text Handling

One of the portions of AppKit dealing with text.

  • Support for bi-directional layout added to support those languages that require it (Arabic and Hebrew). (r. 2822201).

  • Implementation of NSRightTabStopType, NSCenterTabStopType, and NSDecimalTabStopType have been provided for the declarations of these routines in AppKit/NSParagraphStyle.h. (r. 2116892).

  • A problem where NSAttributedString's -size method would fail to take into account the height of fonts occurring later in the string has been corrected. (r. 2824091).

  • Fixed a bug where NSString sizeWithAttributes could return imprecise values when used with NSCenterTextAlignment. (r. 2727150).

  • Cocoa text now uses the same line layout engine used by ATSUI, leading to greater consistency between Cocoa and Carbon, as well as support for complex writing systems. (r. 2570275).

Back to top





Threading Support (AppKit)

Threading support in AppKit.

  • NSWindows can now be created in threads other than the main thread. (r. 2887016).

Back to top





User Interface Elements

AppKit provides a rich selection of controls and user interface elements, and the classes used to control them.

  • NSTextViews that can't import graphics are now able to export them (for copy/paste, etc.), i.e. if they contain attachments added programmatically. (r. 2979744).

  • NSProgressIndicator's -sizeToFit method now respects the NSControlSize setting for the control. (r. 2963039).

  • setImage: is now declared in NSBrowserCell.h. (r. 2918420).

  • NSTableView's -setIndicatorImage: now retains the image passed to it, so that if it's given an autoreleased image (with a retain count of 1), a crash won't occur. (r. 2891170).

  • In some situations, NSTableView's -selectedRow method used to return 0 instead of -1 when there were no rows in the table. This has been fixed. (r. 2889283).

  • Cocoa-Java's NSTableView class now has methods for setting and getting the indicator image for a table column, as well as highlighting a given table column. (r. 2885558).

  • Drawing problems associated with drawers and deferred windows have been corrected. Drawers were not being displayed as expected. The work around for this problem, that is no longer needed, was to tell the drawer to close and open again after the deferred window is visible. (r. 2884722).

  • Users can now use cmd-shift-` to send keyboard focus to a drawer. Previously, it was only possible to do so by clicking on a drawer. (r. 2872115).

  • Carbon windows (from Java or QuickTime) in a Cocoa app now get events properly. (r. 2865112).

  • NSDrawers now attach properly to NSWindows created from Carbon windows (via -initWithWindowRef:). (r. 2860068).

  • an empty NSTableView's -selectedRowEnumerator used to return an enumerator with 1 element. This has been fixed. It now correctly returns an 'empty' enumerator object. (r. 2854415).

  • NSTextView's -selectionRangeForProposedRange:granularity: now returns the last word instead of raising an exception when the granularity is NSSelectByWord and the range's location is equal to the length of the underlying string and the length is 0 (i.e., an insertion point at the end). (r. 2845418).

  • A bug in Cocoa applications where the parent window did not always become key when its sheet was dismissed has been fixed. (r. 2800050).

  • Carbon WindowRefs for Cocoa NSWindows (created using -initWithWindowRef:) now have their regions maintained correctly as the Cocoa window resizes and moves on the screen. (r. 2769632).

  • NSOutlineView has had its row limit of 32767 children in an item removed. (r. 2761925).

  • A problem where a drawer associated with a utility window overlapping another utility window could be displayed with the wrong window has been corrected (r. 2659187).

  • Tooltip rects are now clipped to the visible frame of their view's parent scroll view. (r. 2565501).

  • Calling NSButton setKeyEquivalent will now cause the default button to be displayed in the "default" key manner. (r. 2450365).

  • In some situations, NSTableView used to incorrectly call the willDisplayCell: delegate method before setting the cells object value with setObjectValue:. This has been fixed. NSTableView should now always set the object value of the cell first before sending it's delegate the willDisplayCell: delegate message. (r. 2362114).

  • In some cases, AppKit did not send a mouseExited event the first time the mouse was moved outside a tracking rect. This problem has been corrected. (r. 2480290).

Back to top






Core Foundation

Core Foundation is a set of APIs used as a common data and service abstraction layer for other high level software facilities in Mac OS X. Please refer to CoreFoundation release notes (file:///Developer/Documentation/ReleaseNotes/CoreFoundation.html on your 10.2 system) for more details.



CFPreferences

Preference Services allows you to store values that are associated with a key that can later be used to look up the preference value when you need it. Key/value pairs are assigned a scope using a combination of user name, application ID, and host (computer) name.

  • In order to better support operation in a managed environment, a new API has been added to CFPreferences: Boolean CFPreferencesAppValueIsForced(CFStringRef key, CFStringRef applicationID); Developers may call this to determine the user's ability to change the value for a given preference key. If a key is "forced" then developers should disable UI appropriate to changing the value. Previously, there was no mechanism to determine if a value was forced for a particular key. (r. 2889315).

Back to top





CFStream

CFReadStream and CFWriteStream are abstractions of one-way byte streams that are used much as file descriptors are used in POSIX. They can be created to or from files, sockets, or memory; CFNetwork defines other useful kinds of streams.

  • Async notification of dynamic store changes has been added, meaning that an event-based socket stream that has a link go dead will receive an error event indicating a dead connection. All socket streams by default are opted into the auto-erroring. (r. 2705758).

  • Property names and values have been added to CFNetwork/CFSocketStream.h for manipulating SOCKS proxies. These include support for SOCKS4 and SOCKS5. (r. 2705566).

  • CFReadStreams and CFWriteStreams created to/from a host no longer block in open looking up the host's IP address; instead, the lookup is done asynchronously, and the call to CFReadStreamOpen (or CFWriteStreamOpen) returns immediately. (r. 2683774).

  • Socket reading I/O performance has been improved. (r. 2938957).

Back to top





CFString

String Services is an API that provides a suite of efficient string-manipulation and string-conversion routines.

  • A problem where CFStringGetBytes would ignore its range parameter when asked to retrieve a range of bytes from a Unicode (kCFStringEncodingUnicode ) string has been corrected. (r. 2812392).

  • CFStringCreateWithCString now does better error checking and will return NULL if passed an improperly encoded UTF-8 C string. For example, if you provide a C style string and indicate that the format of the string is kCFStringEncodingUTF8 but the string contains non-UTF-8 characters, then CFStringCreateWithCString will return NULL. (r. 2980386).

Back to top





CFXMLParser

Core Foundation's XML parser for reading XML documents.

  • CFXMLParser now handles UTF-8 documents with a byte order mark (BOM). (r. 2826988).

  • CFXMLTreeCreateXMLData would sometimes put extra spaces in the data when using CFXMLTreeCreateFromData and/or CFXMLTreeCreateXMLData. This problem was fixed. (r. 2453608).

  • The XML parser didn't properly handle real numbers +Inf, -Inf and NaN in plists. We now correctly handle such numbers. (r. 2740510).

Back to top





Core Foundation (general)

Core Foundation is a set of APIs used as a common data and service abstraction layer for other high level software facilities in Mac OS X.

  • Files.h is no longer included in CoreFoundation.h or CFURL.h. Now, if you were including CoreFoundation.h and you used any of the declarations in Files.h, you will need to explicitly #include <Files.h>. (r. 2868727).

  • There are several changes to CFNumbers handling of NaN and infinities: (a) CFEqual() would return false on two different NaN CFNumbers as the parameters, but return true with the same NaN CFNumber as both parameters.: NaNs might be logically equal, but not mathematically equal. To eliminate this inconsistency, we make CFNumbers with NaNs equal to each other. This change will only affect applications linked on Jaguar or later. (b)Added detail to the debug description of CFNumbers. We now include more precision; distinguish zero from negative zero; always include sign on values; and more). This change will affect all applications. (c) Changed the formatting description produced by CFNumber to: include more precision on doubles and floats; report special values as "nan", "+infinity", and "-infinity"; remove trailing zeros on the value; and report small values (under 1.0x10^-3) in scientific notation. This change will only affect applications linked on Jaguar or later. (d) The value of CFNumberCreate() with float and double values is checked against NaN and the infinities, and the global value is returned if the value matches. This change will affect all applications. (e) CFNumberCompare() has been corrected to match the documentation in the header comment regarding NaN, infinities and zeros. This change will only affect applications linked on Jaguar or later. (r. 2867452).

  • Using CFPropertyListCreateXML to generate XML from a CFDictionaryRef would cause a crash if any dictionary key was something other than a CFString. We no longer crash in this situation. (r. 2830305).

  • Using CFStringFindWithOptions() to check for "Ends With" would sometimes return false positives. We now return correct data in all cases. (r. 2813801).

  • In some Carbon applications, a slash ("/") in a path name would crash when loading a nib file. This on longer occurs. (r. 2787552).

  • In rare cases where an XML file size was exactly a multiple of a page size, calling CFPropertyListCreateFromXMLData with that XML file would cause an application to crash. We no longer crash in this situation. (r. 2765819).

  • The error messages returned by CFPropertyListCreateFromXMLData have been improved. (r. 2722422).

  • Removing a CFTree created using CFTreeInsertSibling would inadvertently release more memory than was necessary, possibly leading to an application crash. We now correctly release memory in this situation.(r.2747173). (r. 2387606).

  • CFLog messages are now time stamped. (r. 2956225).

  • The new Core Foundation data type CFNull has been added for symmetry with the Cocoa NSNull data type. Now NULL (nonexistant) values can be represented in CFDictionaries. (r. 2828586).

  • The CFPropertyList parser has been updated to properly treat "&quot;" as a double quote. (r. 2738226).

  • CFMutableDataRef data pointers are now 16 byte aligned. (r. 2701601).

  • CFTreeSetContext appeared in the headers but was not implemented. We now implement this call. (r. 2570830). .

  • Please refer to CoreFoundation release notes (file:///Developer/Documentation/ReleaseNotes/CoreFoundation.html on your 10.2 system) for a lot more information.

  • Under Mac OS X 10.2, the function CFReadStreamCreateForStreamedHTTPRequest will not work if the requestBody argument is non-NULL; instead, it ignores the requestBody provided and always sends a zero-length request.

Back to top



Core OS

The Core OS incorporates essential services that are generally devoid of a user interface. These facilities range from memory management to process management.

  • Kernel panic information is now recorded in NVRAM and at the next system startup that information is written to the /Library/Logs/panic.log. This allows panics to be reported without the inconvenience of having to write down the information or copy the information from the screen by some other means. (r. 2795225).

  • Panic Text now displays the HW and IP Addr. (r. 2774419).

  • The CALL_EXTERN_AGAIN macro grew the stack by 56 bytes, which was not 16 byte aligned. This has been fixed. (r. 2226272).

  • Multiple TRUE/FALSE definitions no longer invalidate precompiled headers. (r. 2219860).

  • All storage support (SCSI) is now being done through the IOSCSIArchitectureModelFamily and relevant pieces. Thus the IOSCSIDrive.kext and other similar kexts were removed from the system. (r. 2824289).

  • CGSGetNextEventRecord would at times return a garbage event type. That was the event type values returned by this API does not match the actual event. This problem was resolved. (r. 2782314).

Back to top



CUPS

The Common Unix Printing System.

  • CUPS has been integrated into Mac OS X. (r. 2849589).

Back to top



CVS

The Concurrent Versions System.

  • The CVS command line tool now supports the -R option, which allows you to check out from a read-only repository (such as a CD-ROM). (r. 2919717).

  • CVS's unwrap facility now updates the modification time of untar'd files. (r. 2938582).

Back to top



Disk Arbitration

The DiskArbitration Server tracks and provides notification services announcing new disks.

  • The Disk Arbitration routine DiskArb_EjectKeyPressed has now been deprecated. The framework still exports the function, but it does nothing. This function is in an Apple-private framework and third party developers should not be calling it. (r. 2880342).

  • Supplemented the "disktool" command line tool (which was always intended as a test tool) with a more user-oriented "diskutil" command line tool. (r. 2817377).

  • The "disktool" command line utility no longer remounts all partitions on a drive when you request a particular partition (for example, "disktool -m disk1s12"). (r. 2817376).

  • Disk Arbitration now wakes up the monitor when the user inserts a disk. (r. 2788175).

  • The disktool command line utility now quits after mounting volumes with the "-m" option. (r. 2780308).

  • Disk Arbitration now respects information in "/etc/fstab". See the man page, autodiskmount(8), for details. (r. 2383037).

Back to top





Dock

The Dock provides a convenient graphical interface for launching applications and organizing frequently used items.

  • A problem where an application's dock tile image was not being set to its original image when the application quit (after it was set to a custom image by a call to SetApplicationDockTileImage) has been corrected. Now, the image is restored to its original image as expected. (r. 2738381).

Back to top






File Systems

This section discusses changes and improvements in the file systems installed with Mac OS X 10.2.



AFP

Apple's implementation of AFP (AppleTalk Filing Protocol) over TCP server that allows AppleShare clients to connect and access files.

  • Improved the security of the password changing mechanism. (r. 2818447).

  • Previously, if you connected to the server using the admistrator's long name, you would not see the user's home directory. This has been fixed. (r. 2800012).

  • Revised the AFP protocol to support more than 16 bits worth of items in a folder. (r. 2757392).

  • Due to problems displaying UTF-8 messages (such as disconnect messages) on the client, the server now only sends messages in old-style script encodings. (r. 2971846).

  • Personal File Sharing now supports the ability to turn off guest access via NetInfo--there is no user interface for this. (r. 2949059).

  • Fixed problem where the AFP client was always using the ByteRangeLock call instead of ByteRangeLockExt even on AFP 3.0 or newer servers. (r. 2936968).

  • Copying a file from a Mac OS X AFP server to a Mac OS 9.x AFP server while the current time zone is observing Daylight Saving Time could cause the destination copy to have its modification time set off by one hour. This could happen if the file being copied had a modification time when DST was not in effect. This problem has now been fixed. (r. 2892452).

  • mount_afp no longer requires a password embedded on the command line. Instead, it accepts an afp:// URL and prompts separately for the password. (r. 2886847).

  • Fixed a problem where PBGetCatInfo could return the wrong number of files in the root directory of an AFP volume. (r. 2883190).

  • The modification time of a file on an AFP server was reported relative to the clock on the client system. This has been changed to use the time reported on the server. This prevents the modification time from changing simply because of clock skew between the client and server. (r. 2877917).

  • Fixed a problem where certain folders could not be copied from a Mac OS 9 AFP server to a client Mac OS X system with the primary language set to Simplified Chinese. (r. 2872906).

  • The API function AFPSortSharedVolumes was not being properly exported, causing link errors if that function was referenced. (r. 2858101).

  • The AFP client now logs various events to the system log file in addition to providing user notification of the events. These events are: umount failures, idle disconnects, reconnect attempts, and whether session will show true vs. mapped permissions. (r. 2848604).

  • Fixed a problem where FSGetCatalogInfoBulk would return incorrect permissions on mounted AppleShare volumes while FSGetCatalogInfo and lstat would return the correct values. (r. 2832434).

  • The AFP server now handles non-ASCII characters in file names better. (r. 2803650).

  • The AFP server now correctly handles UFS boot volumes with traditional Mac OS clients. (r. 2797781).

  • Fixed a problem where directory enumeration using FSGetCatalogInfoBulk could return extra non-existent files when called to enumerate files on an AFP volume. (r. 2795825).

  • Doing a CatSearch on the AFP server no longer blocks other clients from doing work for long periods of time. (r. 2691585).

  • The AFP 3.0 protocol was extended to require a UTF-8 server name in addition to the local encoded server name be sent in the serverinfo packet. (r. 2675317).

Back to top





AFP Server

Implements an AFP (AppleTalk Filing Protocol) over TCP server that allows AppleShare clients to connect and access files.

  • The AFP server now handles file EOF better, working around another bug (r. 2905716). The upshot is that you can now use "vi" to edit files on an AFP volume. (r. 2903677).

  • In the AFP server, we now correctly recognize certain AFP commands as user activity. This prevents an idle timeout when copying large files up to the server. (r. 2898895).

  • The AFP server now handles large (greater than the old AppleTalk maximum of approximately 576 bytes) command packets. Previously the only large command packets that were handled correctly were writes. (r. 2897405).

  • The AFP server now correctly handles the SIGTERM signal sent to the parent (all of its children terminate and then it terminates) and the SIGHUP signal sent to the child (the child re-reads its preferences). (r. 2885293).

  • Searching for files by date on the AFP server now works correctly. Previously it would return seemingly random results. (r. 2878165).

  • You can no longer share two different share points (AFP volumes) whose names differ only in case. (r. 2870015).

  • The AFP server now has the ability to deny guest access to a share point, even if the contents of the share point would otherwise be accessible by guest users. (r. 2865398).

  • The server now supports the AFP 3.1 protocol extension that allows UNIX-to-UNIX implementations of AFP to not translate user and group IDs. See the discussion of kNoNetworkUserIDs in the AFP 3.1 protocol specification for more details. (r. 2848567).

  • By default the server no longer allows clients logged in as an admin user to access files that are only readable by root. (r. 2838703).

  • Previously a bug in the server caused it to disconnect sleeping clients. This has been rectified. (r. 2835079).

  • Changed the server to allow clients to create symlinks properly. (r. 2827876).

  • If the AFP server is on and you insert an audio CD, the CD now appears in the server's list of share points. (r. 2796852).

  • By default the AFP server now allows the client to reconnect if they were disconnected on idle or server shut down. (r. 2793339).

  • The AFP server now behaves better if the user unmounts a volume that is in use by one of its clients. (r. 2768585).

  • The AFP server now respects the Max Reply Size field of the FPEnumerateExt request. (r. 2739396).

  • The AFP server's protocol version string is now "AFP3.1". (r. 2651749).

  • The AFP server now works as expected when booted from UFS. (r. 2625961).

  • The AFP server now correctly handles disk quotas on the volumes it is serving. Operations exceeding the disk quota will be fail with kFPDiskQuotaExceeded (-5047). (r. 2976212).

  • The AFP server no longer lets you set the EOF of a file if growing the file would exceed the free disk space. (r. 2969704).

  • When operating in its default permissions model, the AFP server no longer allows non-root clients to set the ownership of items to root. (r. 2967478).

  • The AFP server now implements the DHX2 UAM. (r. 2933358).

  • The AFP server now correctly handles range locks beyond the EOF. (r. 2922663).

  • The server now works correctly with paths longer than 128 characters. Previously a sign extension bug made it impossible to access files buried deep on the server. (r. 2895343).

  • The owner of a file on an AFP server previously could call chown on a file and change the file's owner without first gaining root privileges. This is no longer allowed. (r. 2866129).

  • The AFP server now correctly sets the ownership of resource fork files when it's serving from UFS. Previously these files were owned by root, which made it impossible for the user to access them when logged into the server directly. (r. 2820795).

  • The AFP server now supports Kerberos authentication.(r. 2850300). .

  • The AFP server now supports byte range locking by calling through to the underlying BSD byte range lock support. Along with other changes in Mac OS X 10.2, this significantly improves support for exclusive file access. .

  • Changes to the AFP server to support empty passwords better. (r. 2960930).

Back to top



HFS

The Hierarchical File System.

  • A problem where certain erroneous calls to getattrlist could cause a kernel panic has been corrected. (r. 2823972).

  • FSGetCatalogInfo was returning inconsistent results. Some files that were not locked were showing up as locked. The list of locked files would also vary between runs. This problem was fixed. (r. 2797739).

  • A problem where PBCatSearch could fail to find some newly created file system items if called immediately after their creation has been corrected. (r. 2941532).

  • A problem where dates were not being adjusted correctly for daylight savings time on HFS standard formatted volumes has been corrected. (r. 2884313).

  • Previously if any space is allocated to a file on an HFS/HFS+ volume but no data is written to the newly allocated space, this space is not reclaimed as it ordinarily would be at the time of the close() call. This problem was fixed and now there is no space leakage if a file is allocated and then closed without adding any data. (r. 2760998).

Back to top





MS-DOS

Volume format used by MS-DOS and Microsoft Windows.

  • Fixed a bug where ejecting a MS-DOS volume without unmounting it first could hang the system. (r. 2894402).

  • Corrected problems preventing Mac OS X from recognizing some FAT32 FireWire hard drives. (r. 2893955).

  • A problem where fsck_msdos did not properly handle devices with sector sizes greater than 512 bytes has been corrected. (r. 2883078).

  • Fixed a problem with certain invalid long names on MS-DOS disks. The problem happened when long names were a multiple of 13 characters and contained an extra (invalid) entry with only a NULL terminator and padding. (r. 2865792).

  • A problem where FSpMakeFSRef() would fail for some Japanese file names on MS-DOS formatted volumes has been corrected. (r. 2765643).

  • A problem where FSCreateFileUnicode() could fail when asked to create a file with a nine character file name on a MS-DOS formatted volume has been corrected. (r. 2754174).

  • Problems preventing FSpSetFLock from working as expected on MS-DOS formatted volumes have been corrected. In the past, FSpSetFLock would return noErr without actually locking the file. (r. 2759105).

Back to top





NFS

Network Filesystem, originally developed by Sun Microsystems, used in UNIX environments for sharing volumes over TCP/IP networks.

  • A number of performance and stability enhancements have been incorporated into the implementation of NFS provided with Mac OS X 10.2 (r. 2465832) (r. 2827760).

  • Problems preventing the use of mmap() for memory mapped files over NFS have been corrected. (r. 2472566).

Back to top



SMB

Server Message Block, Microsoft's file sharing protocol for Windows.

  • Socket read size was reduced from the full packet size to improve performance with remote clients (such as Windows, Linux and BSD). (r. 2917352).

  • SMB now ignores windows shares ending in a dollar sign (e.g. c$) as these are administrative shares not intended for ordinary use. This is also windows client behavior for non-administrators. (r. 2899088).

  • Problems that could occur when reading more than 128K at a time from a file on a SMB share have been corrected. (r. 2797032).

  • A problem where the NSL browser could fail with SMB servers having names with no corresponding DNS host name has been corrected. (r. 2787668).

  • SMB browsing is only supported on the local subnet. .

Back to top





UDF

UDF is a file system plug-in that allows access to Universal Disk Format volumes. This format is used for consumer DVD media and can also be used as a multi-platform disk format.

  • Corrected a problem with UDF's conversion of on-disk ISO Latin-1 names to Unicode. The symptom was that a file with ISO Latin-1 characters in its name would not show up properly (or at all). (r. 2835582).

  • UDF now supports read/write access to UDF formatted DVD-RAM disks (r. 2477531).

  • The UDF file system is now capable of handling files larger than 2 GB. (r. 2944397).

  • UDF not returns the VOL_CAP_FMT_PERSISTENTOBJECTIDS flag from getattrlist appropriately, depending on the UDF volume format. UDF formats prior to 2.0 didn't support persistent object IDs. This problem was causing aliases to UDF volumes to not work correctly. (r. 2762832).

Back to top





UFS

The Unix File System.

  • A problem where the disk cache for UFS volumes was not being flushed before shutdown or restart has been corrected. (r. 2908945).

Back to top





WebDAV FS

WebDAV stands for "Web-based Distributed Authoring and Versioning". It is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers.

  • Problems using WebDAV FS to mount a volume on a port other than the default http port (port = 80) have been corrected. (r. 2777825). .

  • Problems with DNS lookups via Airport have been corrected (r. 2780350). .

  • Interoperability with non-iDisk WebDAV servers has been improved. HTTP header lines up to 4096 characters (1024 characters in 10.1.5) are now accepted (rr. 2788583, 2944883). Chunked Transfer Coding is now handled correctly in all known cases (r. 2868057, 2872308). Digest challenges with zero-length domain directives are now accepted (r. 2804676). Connection headers with the close token are now handled (2921033). DAV headers with extend text are now correctly parsed (r. 2891691). All Informational 1xx HTTP status codes are now handled (r. 2951626). .

  • Performance has been improved. WebDAV FS sends fewer requests to the server (r. 2858454, 2919924). Latency of the first read or write after opening a file has been reduced (r. 2864082, 2879261). WebDAV FS's use of sockets has been optimized (r. 2929972, 2919564). WebDAV FS now asks the server for only the properties it needs which reduces the amount of data the server has to return (r. 2937458). WebDAV FS uses the buffer cache more effeciently (r. 2895257, 2853856). The use of temporary files for most requests has been eliminated (r. 2944883). .

  • Memory leaks have been eliminated and crashing bugs have been fixed (rr. 2874995, 2879528, 2806688, 2958029, 2963540, 2771229, 2989544, 3000493, 3002584). .

  • WebDAV FS's version is now included in its User-Agent request-header field so servers can identify specific versions of WebDAV FS (rr. 2797472, 2891668, 2881656). .

  • The directory link count of directories on WebDAV volumes is now set to 1 indicating that WebDAV FS does not support link counts. This allows the find command (and other FTS(3) based software) to work on WebDAV volumes (r. 2546611). .

  • Access to URLs longer than 255 characters, and up to 1024 characters beyond the mount URL, are now supported (r. 2755598). .

  • The same URL cannot be used to mount multiple copies of a WebDAV volume (r. 2884337). .

  • The WebDAV authentication dialog now shows both the URL and the realm string making it easier for the user to know why they are being asked for authentication information (r. 2788480). .

  • WebDAV FS now warns the user if a server asking for authentication only supports the non-secure Basic authentication scheme (r. 2904390). .

  • When a WebDAV server cannot be reached, the timeout before an error is returned has been reduced from up to 10 minutes to 2 minutes maximum (r. 2517387). .

  • The source code for the webdavfs project has been cleaned up. All warnings from gcc3 and kextload validation failures have been eliminated (r. 2911492, 2917367, 2796114, 2919408). .

Back to top






Graphics

Routines for drawing and displaying graphical information on the screen are discussed in this section.



ATS (Apple Type Services)

ATS provides APIs that make it possible for Mac OS applications to manage and access fonts, and draw glyphs to the screen.

  • The new routine GetFSRefForFileToken can be used to retrieve a FSRef from a fileToken. (r. 2894186).

  • Fixed a problem that could cause FontMetrics to crash when used with some older Mac OS 9 suitcase fonts. (r. 2871889).

  • A problem where the Kotoeri character palette could not represent Gaiji characters (SJIS: over 0xF040, Unicode: over u+E000) has been corrected. (r. 2831210).

  • True Type font files with the extension '.ttf' are now recognized in Mac OS X. (r. 2823850).

  • Problems where the routines ATSGlyphGetIdealMetrics and ATSGlyphGetScreenMetrics would return incorrect error codes have been corrected. (r. 2791182).

  • Already created instances of Multiple Master fonts are now supported. The creation of new instances is not supported and requires the use of products from Adobe under Classic.(r. 2618745) (r. 2739365).

  • Fixed a crash when the invalid value NULL was passed as the text encoding parameter to FMGetFontFamilyTextEncoding. (r. 2677209).

  • Added hooks for 3rd party font activation. See "Font query message hooks" in ATSFont.h for more information. (r. 2667733).

  • Calling ATSFontFamilyGetName with the name parameter set to NULL now returns paramErr instead of crashing. (r. 2621484).

  • ATSFontGetFileSpecification now returns paramErr if the oFile parameter is NULL. (r. 2610513).

  • System-critical fonts can no longer be deactivated by non-system Font Manager clients. (r. 2599690).

  • Finding all the fonts within a particular domain (using FMCreateFontFamilyIterator or FMCreateFontIterator, e.g.) would fail if fonts were in nested directories. We now properly iterate though all subdirectories by default. (r. 2897297).

  • In some instances, the directory returned from FMGetFontTableDirectory was an incorrect font table for LWFN fonts. We now indicate there are no entries in the directory in these cases. (r. 2848718).

  • Creating or using an OTF(CID) format font which contains more than 32676 glyphs would sometimes crash an application. We now allow over 32676 glyphs. (r. 2821918).

  • In rare cases, ATSFontFindFromName() returns no matches, even when using the CFStringRef returned by ATSFontGetName(). We now correctly return all fonts. (r. 2764305).

Back to top





ATSUI (Apple Type Services for Unicode Imaging)

ATSUI is core technology for Unicode text drawing and editing on OS X. It is fully multilingual and provides basic services as well as high-end typographical control. It can be used with Quartz or Quickdraw based applications.

  • kATSLineDisableAllBidirectionalReordering has been removed and kATSLineDisableAllCharacterMorphing has been renamed to kATSLineDisableAllGlyphMorphing. (r. 2925657).

  • The original API ATSUMeasureText will still function fine though each process that calls it will get a single syslog stating that it is deprecated and that they should use ATSUGetUnjustifiedBounds instead. (r. 2918417).

  • ATSUI will now display the specified glyph when kATSUGlyphInfoTag attribute exists and if the font is not consistent with the glyph attribute, it will ignore the glyph attribute. (r. 2883308).

  • Developers now have direct access to the ATSUI glyph rec array and are able to manage the steps of line layout directly, altering bidi, glyph metamorphosis, and justification as needed. (r. 2853741).

  • Multi-run ATSUTextLayout objects now transfer styles into the ATSUGlyphInfoArray correctly. (r. 2850959).

  • A new API ATSUHighlightInactiveText is now available. This API allows callers to have better control over the appearance of selected text as it is drawn when the window containing the text is inactive. (r. 2842617).

  • ATSUStyles can now have their ascent and descent values changed using the kATSUAscentTag, kATSUDescentTag, and additionally the leading can also be set using the kATSULeadingTag. (r. 2804497).

  • ATSUI now has layout control facilities to override user anti-aliasing preference. To control the anti-aliasing for an entire layout or line you can use one of the Layout options: kATSLineApplyAntiAliasing or kATSLineNoAntiAliasing. (r. 2754392).

  • The style's leading is now retrieved from the ATSUStyle using the ATSUGetAttribute with the kATSULeadingTag. If the ATSUI client did not set the leading (which can now be specified using this tag), the ATSUGetAttribute will return kATSUNotSetErr and the font's leading value. (r. 2621797).

  • Added support for RGB-Alpha using the CGColorSpaceRef in ATSUStyle records. (r. 2951269).

  • A problem where ATSUClearLayoutControls was not returning the error code kATSUInvalidAttributeTagErr in cases where it should have has been corrected. (r. 2927064).

  • The new kATSLineUseDeviceMetrics option has been added to allow layout and line breaking in device space. (r. 2917413).

  • The kATSU