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.
Text CFPreferences CFStream CFString CFXMLParser Core Foundation (general) Core OS CUPS CVS Disk Arbitration Dock File Systems Multilingual Text Editor Text Encoding Converter Text Services Manager TextEdit Unicode Utilities References Downloadables AFP AFP Server HFS MS-DOS NFS SMB UDF UFS WebDAV FS [Aug 30 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.
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.
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).
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.
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).
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.
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.
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 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).
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).
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.
"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).
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 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.
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.
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).
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.
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.
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).
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).
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.
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. 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.
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).
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).
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). .
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.
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). .
(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().
NCWNewLinkProfile no longer returns error -50 when used with big (>100kb) profiles. (r. 2897811). Fixed bug where no error is returned for attempts to register a profile for a device at a scope outside the user's domain. (r. 2890764). Fixed a bug where callback proc of CMIterateColorDevices was not being called for registered devices of different scopes. (r. 2858107).
Added new device notification kCMPrefsChangeDeviceNotification for changes in ColorSync Prefs panel. (r. 2853393). A problem where the resulting image would be drawn incorrectly when CMMatchImage was used with very wide JPEG files (over 4100 pixels wide) has been corrected. (r. 2838201). Fixed crash in CMIterateColorSyncFolder for profiles with Unicode text tag of 'mluc' but not having a language field of 'en'. (r. 2836866). A memory leak in CMGetDefaultDevice has been corrected. (r. 2802812).
A new API, PMPrinterGetState, that allows callers to check the state of a printer queue has been added. (r. 2866758). New API, PMSessionEnablePrinterPresets, has been added that allows callers to enable printing presets in the Print dialog. (r. 2849635). Problems where PICTs containing fractionally rotated text or graphics did not print as expected have been corrected. (r. 2843826). PMPrinterGetResolution now returns min/max range independent of the current printer module settings. (r. 2843176).
Corrected a problem that could cause a crash when printing images whose color elements are stored in planar (not in mesh) style. (r. 2853653). Back to top Quartz 2D Quartz 2D is a feature-rich, two-dimensional drawing engine that is accessible from all Mac OS X application environments outside of the kernel. The Quartz 2D application programming interface (API) is easy to use and gives you access to powerful features such as Bezier curves, path-based drawing, transparency, and advanced color management.
QuickDraw QuickDraw is a part of the Mac OS used for drawing and displaying graphical information on the screen and other raster devices. Fixed problem where calling DrawPicture to draw a picture to a GWorld could result in some parts of the image being clipped incorrectly for some bit depth combinations. (r. 2896796). Routines have been added to QuickDraw.h that allow callers to temporarily disable region and polygon recording. (r. 2873386).
A problem where calls to HasDepth for the main device were returning false for all bit depths after the main device's depth was switched to 8-bit has been corrected. (r. 2799168). A number of problems in the drawing produced by calls to CopyMask have been corrected. These included clipping issues (r. 2779309), mask width calculations (r. 2585796), the appearance of diagonal lines (r. 2637002) (r. 2637002). Large cursor support, for cursors up to 64 by 64 pixels, has been added to the QuickDraw APIs. (r.
Fixed a problem with isoch reception on PCI-Lynx machines (i.e. B&W G3, original G4). (r. 2851043). The timout period for AVC devices to respond after a bus reset has been increased to accommodate slower devices. (r. 2842540). Add support in FireWire DV for DVCPRO CIP headers. (r. 2709090). Improved compatibility with a number of third party FireWire cards. (r. 2923203).
Added the ability to describe a parent object in a matching dictionary. (r. 2845592). Fixed a problem with interruptible IOCommandGate::commandSleep() that could corrupt the driver's work loop. (r. 2789143). A mechanism was added to track the number of OSContainers an object is in. If the retain count goes less than the container count the system will panic. This is to track cases where drivers are releasing too many object references thus corrupting the I/O Registry. (r. 2781013).
The synchronize cache command is now sent to devices which have a write cache. The write cache is enabled at startup and then disabled at shutdown. (r. 2957580). Added kIOMessageTrayStateHasChanged and kIOMessageMediaAccessChange notifications to SCSITask User Client. (r. 2928061). A memory leak in SCSITaskUserClient has been corrected. (r. 2767519). SAM commands now have reasonable timeouts to prevent ill-behaved devices from hanging the system indefinitely. (r. 2760367).
Fixed conditions where USB requests to read and write on stalled pipes get queued on the endpoint. USB requests now return immediate errors in this condition. (r. 2905718). Fixed to USB Mass Storage driver to address a panic condition which occurred with a number of USB Mass Storage devices when they were hot unplugged. (r. 2826979). Fixed bug where the IOUSBHIDGetReport call in IOUSBHIDDriver could return invalid information. (r. 2588665).
OpenGL glyphvector drawing is now implemented. We also now correctly determine visual boundaries of primitives we draw using fall backs, so that they no longer get clipped when blit back to the screen. (r. 2805509). With OpenGL acceleration on, the Mix.BezierScroller demo in Java2Demo had a bad frame, this has been fixed. (r. 2804556). A problem where a JavaApplications would hang if it tried to activate multiple JDialogs has been corrected (r. 2804122).
MRJ DataTransfer (com.apple.mrj.datatransfer) is deprecated in Jaguar. (r. 2905002). MRJ console (com.apple.mrj.console) has been deprecated in Jaguar. (r. 2905006). Back to top Java VM Java Virtual Machine used in Mac OS X. HotSpot used to ignore the ThreadStackSize=n JVM setting, now it handles it properly. (r. 2913774). JVM used to truncate an invoking thread's stack size to 512K, it now leaves the invoking stack size alone. (r. 2941848). The Java SDK now contains all Sun changes for 1.3.1_03. (r.
binary. Arbitrary levels of aliasing through codeless kexts are supported. (NOTE: This only works for run-time kext loading. The boot-time loader does not yet support this feature.) (r. 2894843). (r. 2894843). If kextd or kextload is launched in safe boot mode (shift key down), it will not use the info dictionary cache and will instead re-scan the kexts themselves. (r. 2887998). dyld now correctly handles unknown load commands with the LC_REQ_DYLD bit set. (r. 2882932).
Incompatibilities between the headers and that prevented them from being included in the same kext source file have been corrected. (r. 2578701). Kernel panics are now displayed in a dialog box. It is possible for developers to turn on the older display when it is needed (see 2653104 above). (r. 2512985). A problem where a kernel hang could occur when mapping files has been corrected. (r. 2477145).
Back to top MultiProcessing Facilities for symetric multiprocessing built in to Mac OS X. pthread_exit() from main() wasn't waiting for other threads to finish. This has been fixed. (r. 2888517). pthread_setcancelstate, pthread_setcanceltype returned wrong flags. This has been fixed. (r. 2653228). The pthread_setcancelstate and pthread_setcanceltype API's would crash if the second paramater was NULL. This has been fixed. (r. 2458277).
Fixed the Ethernet demultiplexor to handle incoming SAP and SNAP packets with the size field set for 1500. This problem only affected raw Ethernet sockets. (r. 2952858). Implemented support for an application to send and receive ICMP echo packets for a normal user with no administrative privileges. Instead of opening a raw IP socket like this: socket(PF_INET, SOCK_RAW, IPPROTO_ICMP), you can now open a non-privileged datagram oriented socket: socket(PF_INET, SOCK_DGRAM, IPPROTO_ICMP). (r. 2655317).
DHCP now correctly sets the "secs" field of request packets to the number of seconds since DHCP was started. Previously that field was erroneously always set to 0, which caused problems for some DHCP servers. (r. 2857975). The DHCP client now asks for the LDAP configuration option (95). (r. 2823022). Changes to support single-link multihoming (multiple network configurations using the same network card). (r. 2821104).
The Service Discovery plug-ins in Open Directory (Rendezvous, SLP, AppleTalk, SMB) are initialized on demand. This can cause a delay seeing the Neighborhoods (Scopes, Workgroups, Zones) the first time Connect To Server is invoked after a restart. . NSL now has a concept of a "Simple Network". If the set of neighborhoods found is equal to the set of "default" neighborhoods, NSL will return 0 neighborhoods.
Back to top SNMP Simple Network Management Protocol (SNMP) for Mac OS X. SNMP support has been added to Mac OS X 10.2. (r. 2561896). Back to top URL Access The URL Access Manager provides application support for downloading data from or uploading data to a Universal Resource Locator (URL), with support for automatic decompression of compressed files. URL Access now deletes partially uploaded files when the transfer fails. (r. 2891692).
These methods are supported with either Password Server or the legacy Authentication Manager ("tim"). (r. 2861932). Added a new BSD Configuration File Open Directory plug-in. (r. 2852585). A problem where the dsAddAttributeValue routine would not accept a NULL tDataNodePtr parameter has been corrected. Now, a NULL tDataNodePtr means 'add an attribute without an initial value'. (This works on NetInfo, but may not be supported on some directory systems, such as LDAP.) (r. 2852078).
A problem where the kinit tool did not do any error checking on the format of the renew parameter has been corrected. (r. 2816142). Back to top Security Framework The security framework exports a security APIs for use with Mac OS X. Add a function to the TP module to enable developers and sysadmins to generate Cert Signing Requests. (r. 2909233). CSP, TP, CL modules are now thread safe. (r. 2897036). Added SSLSetCertificate() for server side SSL support. (r. 2886598).
If the default keychain has been deleted but other keychains exist, the create/select keychain dialog is now presented instead of the create keychain dialog so the user can choose an alternate keychain. (r. 2853839). The Carbon SecurityHI framework now uses the Cocoa SecurityHICocoa framework. This takes advantage of the ability to mix Carbon and Cocoa UI in Jaguar. (r. 2851842). Fixed a problem where retrieving a 'cusi' (has custom icon) attribute would return the wrong value. (r. 2748773).
Unicode). The Eject Symbol is now mapped to 0x8C as the char code in the MacKeyboard encoding and to the Corporate-Use-Area Unicode code point U+F804. (r. 2781691). Improvements to Text Encoding Conversion between Macintosh Korean and Unicode 2.1 or 3.0. (r. 2765765). TECGetMailTextEncodings and TECCountMailTextEncodings now supports Tier 3 languages. (r. 2969270).
UCGetCollationKey() are not guaranteed to be compatible accross system versions. (r. 2843266).