Managed to find the 10a190 seed notes:
Summary
Since our first seed of Snow Leopard at WWDC ‘08 we’ve added much to Snow Leopard. Most notably you’ll see changes in areas like:
- Basic reading and editing support for Microsoft Exchange in Mail, iCal and Address Book.
- Multicore enhancements including changes to queue management in Grand Central, syntax changes, and blocks in C++/GDB.
- The Finder is now partially rewritten in Cocoa.
- A simplified install experience.
In addition to testing your own applications and the updated technologies in Mac OS X, please pay particular attention to the following areas and report any issues such as incompataibilities or usage problems.
Microsoft Exchange Support
Snow Leopard now contains additional support for Microsoft Exchange 2007 via Mail, iCal and Address Book. While there is support for basic browsing, creation and editing of Microsoft Exchange data, much functionality and polish is still forthcoming which may impede full Exchange use in this seed. Please focus on the areas of Microsoft Exchange outlined below:
Setting Up Exchange
Mail includes an autodiscovery feature to streamline the configuration process:
1. Open Mail preferences and click the plus button to add a new account.
2. Enter your Microsoft Exchange email address and password and click “Continue.”
3. Your server settings will be auto populated and you can choose to simultaneously configure Address Book and iCal for use with Microsoft Exchange as well.
4. Verify the settings are correct and click “Create.”
If the your server settings are not automatically configured, after step 2 you can select “Microsoft Exchange 2007″ as a new account type and manually enter your server settings. You will still be able to simultaneously configure Address Book and iCal for use with Microsoft Exchange.
Mail
- Autodiscovery and account configuration with support for simultaneous setup of Address Book and iCal
- Reading & writing Messages, Notes, and To Do’s
iCal
- Scheduling events.
- Checking recipient and room availability.
Address Book
- Adding contacts and groups.
- Verifying data is consistent in Outlook and Address Book.
- Exchange support is available in “Address Book” (version 5.0) not “Address Book (Leopard.)”
Known Limitations in Microsoft Exchange Support:
Mail
- Working offline is not yet supported so actions performed while offline will not be sent to the server when the account goes online.
- Event invitations, delegation authorizations and some other types of messages are not currently displayed.
- Some characters in messages that are moved from another account to a Microsoft Exchange account may be replaced with ‘=’ characters.
- Account information for Microsoft Exchange will be lost if a user’s home directory is shared between Snow Leopard and Leopard.
- Undo / redo is not fully supported.
iCal
- Creating calendars on Microsoft Exchange accounts is not yet supported.
- Calendar and task folders must have the same permissions for delegation.
Address Book
- Syncing a Microsoft Exchange account doesn’t always work as expected.
- Smart groups are not fully supported.
- Some menu and preference items are missing or disabled.
- Undo / redo is not fully supported.
- Adding a search result from the global address list to your local contacts will prevent future searches from returning results until Address Book is restarted.
Multicore - Grand Central
Dispatch queues and event sources are now reference counted via retain/release API. Blocks submitted to a queue for asynchronous execution retain the target queue until they have executed. Dispatch event sources also retain the target queue to which they submit their event handler Blocks.
The dispatch_call() and dispatch_call_wait() API have been removed. Two new interfaces have been introduced: dispatch_async() and dispatch_sync(). Callbacks should now be expressed as nested blocks.
Accessors to three “well-known” global concurrent queues with a priority level (high, default, low) have been added. This allows Blocks to be executed asynchronously without the application needing to create a specific queue for them. Blocks submitted to the high priority queue will be executed before blocks submitted to the default priority queue, and so on. Dispatch queues created by the application may also set their priority level.
Dispatch event sources now report error codes via the the dispatch_event_t argument to event handler Blocks. Applications should check the event for errors using the dispatch_event_get_error() API inside their event handler Blocks. Once a dispatch event source reports an error, it will never deliver any additional event handler Blocks and may be released by the application.
Monitoring the same underlying Grand Central object (i.e. process identifier, signal, file descriptor) from multiple dispatch event sources may have unreliable results.
Running the following two commands in Terminal will provide additional information Grand Central:
headerdoc2html -o ~/Desktop/libdispatch_core /usr/include/dispatch/core.h
headerdoc2html -o ~/Desktop/libdispatch_events /usr/include/dispatch/events.h
Multicore - Blocks
Syntax Changes
The existing syntax of bracketing “by reference” variables between ‘|’ (bar) symbols is deprecated and will be removed. There is a new form of storage available, __block storage, and it is on par with register, auto, and static for local variables. The new syntax is:
void foo() {
__block int i = 0; // “i” lives in block storage
void (^myblock)(void) = ^{ printf(”is is now: %d\n”, ++i); };
myblock(); // i is now: 1
myblock(); // i is now: 2
}
A Block literal (e.g. ^{ … }) is implemented as the address of a stack local data structure that represents the Block. The stack local data structure has scope of the enclosing compound statement. The following, for example, should be avoided:
void bar() {
void (^blockArray[3])(void); // an array of 3 block references
for (int i = 0; i < 3; ++i) {
blockArray
= ^{ printf("hello, %d\n", i); }; // INCORRECT: block literal scope is "for loop"
}
}
It is now possible to use a global Block literal
int GlobalInt = 0;
int (^getGlobalInt)(void) = ^{ return GlobalInt; };
C++ support
- Blocks are now supported in C++ and ObjC++
- Within a member function references to member variables and functions are via an implicitly imported "this" pointer and thus appear mutable. During a Block_copy the literal value of the "this" pointer is copied so memory management of the object must be done carefully.
- A stack based C++ object that is referenced within a block must have a const copy constructor. During a Block_copy a const copy will be made into the heap storage. Two known issues are there is no destructor called on the stack based block const copy and under Garbage Collection the heap based destructor is not invoked.
Debugger support
- It is possible to set breakpoints and single step into Blocks.
- Blocks can now be invoked from within a gdb session:
$ invoke-block myblock 10 20
- Note that C strings need to be passed in the form "\"this string\""
- Block storage starts out on the stack just like Blocks do and is copied to the heap when either a Block_copy (or in ObjC a -copy message) is performed. Thus, the address of a __block variable can change over time.
64-bit Kernel
The early 2008 models of the Mac Pro, 15" and 17" MacBook Pro and Xserve can be used for 64-bit kernel development. Audio and AirPort are now enabled on these on these testing configurations. In SnowLeopard, the 64-bit kernel is is used by default on the Xserve and the Mac Pro and MacBook Pro systems can be booted into the 64-bit kernel in one of two ways:
1) Temporarily boot into the 64-bit kernel by holding down "6" and "4" while powering on the machine
2) Run `sudo nvram boot-args="arch=x86_64" ` to set the 64-bit kernel as your default kernel, and append any other debugging flags you may need, such as "debug=0x144". To revert back to the 32-bit kernel as the default, you can run `sudo nvram -d boot-args`.
This seed contains the necessary support for porting kexts to 64-bit and developers are strongly encouraged to do so.
Known Limitations in the 64-bit kernel:
- Shark does not work on the 64-bit kernel.
- Sleep / wake and power management is not currently supported. It is recommend that you disable sleep in System Preferences.
- Graphics acceleration is not yet supported which may cause programs which require graphics acceleration to run incorrectly.
- Some behavior which was previously unsupported, such as modifying a collection while enumerating it, and attempting to modify a kext's __TEXT segment, now results in diagnostic kernel panics.
Finder
Almost all user facing applications in Mac OS X are written in Cocoa with the exception of a select few. Finder, one of the oldest Carbon applications in the system, is being transitioned to Cocoa for SnowLeopard and much progress has been made in this seed. Please report any issues you find with the new Cocoa pieces of Finder.
Default Gamma Changes
To better meet the needs of digital content producers and consumers, the default display gamma has been changed from 1.8 to 2.2 in Snow Leopard. Applications that override the deftault and assume a gamma 1.8 setting may have different onscreen and printed output than they did in previous releases of Mac OS X. Please report any visual differences that you encounter.
Mac OS X Installer
Details can be found in the "Developer Preview Information" document in the "Instructions" folder.
Additional Changes Since the WWDC Seed
- Split view support has been added to Terminal and tab support has been enhanced with a contextual menu and the ability to create new tabs by double clicking.
- The Basic Security Module (BSM) audit code now uses OpenBSM version 1.1a1http://www.trustedbsd.org/openbsm.html
- Snow Leopard uses Java SE 6 for all Java applications and applets.
System Preferences
The System Preferences application will now run with garbage collection enabled under 64-bit. However, in order to support legacy pref panes, when run under 32-bit garbage collection will be disabled. This means that your preference pane code must support both retain-release and garbage collection modes — similar to a framework that supports garbage collection.
Automator
- Automator can now export Workflows as Services.
- New Find and Filter Actions have been made available.
International Preferences
- Added support for Uighur.
- Added support for calendars in the following languages: Chinese, Coptic, Ethiopic, Ethiopic Amete Alem, Indian National, Persian, Republic of China.
High Level Toolbox
- Added constants for F16-F19 glyphs and a way to specify resolution of images in menus.
- Added API to specify rounded corners in menus (a la contextual menus.)
IPSec/racoon
- The default racoon.conf file will now look for additional include files in /var/run/racoon instead of /private/etc/racoon/remote.
- /private/etc/racoon/remote/anonymous.conf is only to be used as a reference and will no longer be supported.
Pluggable Authentication Modules (PAM)
- Linux-PAM has been replaced by OpenPAM.
- Modules developers may need to adjust to some API changes. In particular, the misc_conv function has been superseded by openpam_ttyconv(3); and pam_std_option has been superseded by openpam_get_option(3).
- It is recommended that modules be recompiled for Snow Leopard and installed with the file name “pam_
OpenSSL
- OpenSSL has been updated to version 0.9.8i. http://www.openssl.org/news/changelog.html
- Previous versions (0.9.7l for Intel and PowerPC; and 0.9.6l for PowerPC only) of the OpenSSL libraries are included for runtime binary compatibility only and cannot be used at link time.
- If a project’s build system references a specific version of OpenSSL, the project may need to be updated. For example, if an Xcode project references “/usr/lib/libcrypto.0.9.7.dylib” or “-lcrypto.0.9.7”, this should be changed to “/usr/lib/libcrypto.dylib” or “-lcrypto” respectively.
Apple HFS+ File Compression
- File compression has been added to the HFS+ file system.
- Compression was designed to be used with Apple System and Application files that are normally read-only/updatable. These files are not normally copied by users, however, if they are, the copies will be expanded to their normal size.
- This is not a new file system format and does not require volumes to be repartitioned.
Developers who write disk utility programs may need to recognize these files exist, and some details about how they are implemented. In the st_flags field of the stat struct of a compressed file, bit SF_COMPRESSED will be set to indicate that the file is compressed. In addition to this bit, the compression information will be stored in invisible extended attributes “com.apple.decmpfs” and possibly the “com.apple.ResourceFork”. On a Tiger or Leopard system, these files will show up as zero length and have the indicated extended attributes. On Snow Leopard, the file’s length will show up as its uncompressed length and these extended attributes will be invisible to your software. Thus, any copy program will see proper information to make an uncompressed copy of the data on Snow Leopard. This is to prevent the creation of unreadable compressed files on other file systems and external disks that may make their way back to previous OSes. As always, it is not advised to copy system files from one OS release to previous ones.
*Additional information for most technologies listed here can be found by selecting “Documentation” in the Xcode Help menu.
Installing Mac OS X
- Some machines may panic during the reboot after installation. The install has still suceeded so please reboot again.
- Some users may hit a crash in the Mac OS X Installer. If you see this please save your installer log for a report to Apple, reboot and then attempt the install again.
- Third-party keyboards are not recommended for use in this seed and may result in an Mac OS X Installer crash.
- To install on a MacBook Air you will need to either use the USB drive or perform a remote install over ethernet. Remote installs over AirPort are not functioning in this seed.
- After installing on a MacBook Air you will need to restart before you can use AirPort.
- This seed is not supported on the Fall 2008 MacBooks and MacBook Pros.
Finder
- Keyboard navigation does not always work as expected.
- Finder sometimes crashing after burning a CD.
- System applications and files may not be correctly copied via Finder. Please use command line tools such as ‘ditto’ or ‘cp’ to workaround this.
- Browsing the system Trash in column view may cause Finder to consume significant amounts of the CPU.
Java
- Applets using Java Advanced Imaging (JAI) crash on launch.
- Java Applets fail to load in Firefox.
- Adobe Version Cue v 3.1 fails to launch as it looks for J2SE 5.0, rather than running under Java SE 6.
iChat
- PDF / Keynote documents are blank in iChat Theater.
- iChat Theater may crash when sharing a movie or a picture.
- iChat may not immediately connect when launched.
- Please ensure that the batteries for any attached Bluetooth are sufficiently charged. The warning dialog about low batteries may log you out of your session.
- Selecting a contact with a stored birth date will leave Address Book in an unusable state. Quit and relaunch Address Book to work around this. If you need to view or edit contacts with stored birth dates use “Address Book (Leopard)”. If the first contact in “Address Book” has a stored birthdate you will need to remove the birth date using using “Address Book (Leopard)” or only browse contacts with “Address Book (Leopard)”.
- Attempting to include the AppKit framework header file NSMenuItem.h (or any header file such as Cocoa.h which imports NSMenuItem.h) in a project which uses gcc 4.0 will result in a compile-time failure. You can work around this by editing /System/Library/Frameworks/AppKit.framework/Headers/NSMenuItem.h, and on line 17, removing “DEPRECATED_IN_MAC_OS_X_VERSION_10_6_AND_LATER”, leaving just “@protocol NSMenuItem;”. If you are using the 10.6 SDK, you will also need to similarly edit /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItem.h.
- Keychain syncing may result in errors and it is reccomended that Keychain Syncing be disabled in this seed.
- Some systems with ATI graphics cards may show pink flashes when using the built in iSight camera.
- Selecting “Paper Feed” or “Cover Page” in the printer options may result in an inability to print.
- Some auto-mounted network shares may become unavailable after a period of time.
- On a 64-bit system QuickTime Pro Registration via the QuickTime Preference Pane is unavailable until relaunch System Preferences in 32-bit.
- Users with ATI Radeon HD 2600 graphics cards may see graphics corruption when dragging windows.
- Atempting to print to a postscript printer may result in errors.
- Mobile accounts (portable home directories) cannot be created with this seed.
- iDisks display an error upon the initial connection attempt, but clicking on the disk again will successfully bring up your iDisk contents.
- Ink is not reccomended for use in this seed.