diff --git a/xcode/hostapp/CICarbonSample.xcodeproj/project.pbxproj b/xcode/hostapp/CICarbonSample.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..61b3747
--- /dev/null
+++ b/xcode/hostapp/CICarbonSample.xcodeproj/project.pbxproj
@@ -0,0 +1,389 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		002884150EFA97F80083E387 /* test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 002884140EFA97F80083E387 /* test.cpp */; };
+		0028845E0EFAB2190083E387 /* SkCreateCGImageRef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0028845D0EFAB2190083E387 /* SkCreateCGImageRef.cpp */; };
+		0028847B0EFAB46A0083E387 /* libcore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 002884510EFAA35C0083E387 /* libcore.a */; };
+		002884BD0EFAB6A30083E387 /* libmaccore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 002884BC0EFAB69F0083E387 /* libmaccore.a */; };
+		002884D90EFABFE60083E387 /* SkFontHost_none.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 002884D80EFABFE60083E387 /* SkFontHost_none.cpp */; };
+		0156F80407C56A3000C6122B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0156F80307C56A3000C6122B /* Foundation.framework */; };
+		01FC44D507BD3BB800D228F4 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01FC44D407BD3BB800D228F4 /* Quartz.framework */; };
+		8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; };
+		8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+		8D0C4E900486CD37000505A6 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 20286C2BFDCF999611CA2CEA /* main.c */; settings = {ATTRIBUTES = (); }; };
+		8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		002884500EFAA35C0083E387 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 002884490EFAA35C0083E387 /* core.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = D2AAC046055464E500DB518D /* libcore.a */;
+			remoteInfo = core;
+		};
+		002884540EFAA3770083E387 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 002884490EFAA35C0083E387 /* core.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = D2AAC045055464E500DB518D /* core */;
+			remoteInfo = core;
+		};
+		002884BB0EFAB69F0083E387 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 002884B40EFAB69F0083E387 /* maccore.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = D2AAC046055464E500DB518D /* libmaccore.a */;
+			remoteInfo = maccore;
+		};
+		002884BE0EFAB6B00083E387 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 002884B40EFAB69F0083E387 /* maccore.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = D2AAC045055464E500DB518D /* maccore */;
+			remoteInfo = maccore;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		002884140EFA97F80083E387 /* test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test.cpp; sourceTree = "<group>"; };
+		002884490EFAA35C0083E387 /* core.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = core.xcodeproj; path = ../core/core.xcodeproj; sourceTree = SOURCE_ROOT; };
+		0028845D0EFAB2190083E387 /* SkCreateCGImageRef.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkCreateCGImageRef.cpp; sourceTree = "<group>"; };
+		002884B40EFAB69F0083E387 /* maccore.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = maccore.xcodeproj; path = ../maccore/maccore.xcodeproj; sourceTree = SOURCE_ROOT; };
+		002884D80EFABFE60083E387 /* SkFontHost_none.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkFontHost_none.cpp; path = ../../src/ports/SkFontHost_none.cpp; sourceTree = SOURCE_ROOT; };
+		0156F80307C56A3000C6122B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+		01FC44D407BD3BB800D228F4 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = /System/Library/Frameworks/Quartz.framework; sourceTree = "<absolute>"; };
+		0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
+		20286C2BFDCF999611CA2CEA /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
+		20286C33FDCF999611CA2CEA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+		32DBCF6D0370B57F00C91783 /* CICarbonSample_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CICarbonSample_Prefix.pch; sourceTree = "<group>"; };
+		4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
+		4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
+		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+		8D0C4E970486CD37000505A6 /* CICarbonSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CICarbonSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8D0C4E910486CD37000505A6 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */,
+				01FC44D507BD3BB800D228F4 /* Quartz.framework in Frameworks */,
+				0156F80407C56A3000C6122B /* Foundation.framework in Frameworks */,
+				0028847B0EFAB46A0083E387 /* libcore.a in Frameworks */,
+				002884BD0EFAB6A30083E387 /* libmaccore.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		0028844A0EFAA35C0083E387 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				002884510EFAA35C0083E387 /* libcore.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		002884B50EFAB69F0083E387 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				002884BC0EFAB69F0083E387 /* libmaccore.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		195DF8CFFE9D517E11CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8D0C4E970486CD37000505A6 /* CICarbonSample.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		20286C29FDCF999611CA2CEA /* CICarbonSample */ = {
+			isa = PBXGroup;
+			children = (
+				002884D80EFABFE60083E387 /* SkFontHost_none.cpp */,
+				20286C2AFDCF999611CA2CEA /* Sources */,
+				20286C2CFDCF999611CA2CEA /* Resources */,
+				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
+				195DF8CFFE9D517E11CA2CBB /* Products */,
+				002884490EFAA35C0083E387 /* core.xcodeproj */,
+				002884B40EFAB69F0083E387 /* maccore.xcodeproj */,
+			);
+			name = CICarbonSample;
+			sourceTree = "<group>";
+		};
+		20286C2AFDCF999611CA2CEA /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				0028845D0EFAB2190083E387 /* SkCreateCGImageRef.cpp */,
+				32DBCF6D0370B57F00C91783 /* CICarbonSample_Prefix.pch */,
+				20286C2BFDCF999611CA2CEA /* main.c */,
+				002884140EFA97F80083E387 /* test.cpp */,
+			);
+			name = Sources;
+			sourceTree = "<group>";
+		};
+		20286C2CFDCF999611CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				8D0C4E960486CD37000505A6 /* Info.plist */,
+				0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */,
+				02345980000FD03B11CA0E72 /* main.nib */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				0156F80307C56A3000C6122B /* Foundation.framework */,
+				01FC44D407BD3BB800D228F4 /* Quartz.framework */,
+				20286C33FDCF999611CA2CEA /* Carbon.framework */,
+				4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */,
+				4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8D0C4E890486CD37000505A6 /* CICarbonSample */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 01E2163909EDAC6600E66AF8 /* Build configuration list for PBXNativeTarget "CICarbonSample" */;
+			buildPhases = (
+				8D0C4E8C0486CD37000505A6 /* Resources */,
+				8D0C4E8F0486CD37000505A6 /* Sources */,
+				8D0C4E910486CD37000505A6 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				002884550EFAA3770083E387 /* PBXTargetDependency */,
+				002884BF0EFAB6B00083E387 /* PBXTargetDependency */,
+			);
+			name = CICarbonSample;
+			productInstallPath = "$(HOME)/Applications";
+			productName = CICarbonSample;
+			productReference = 8D0C4E970486CD37000505A6 /* CICarbonSample.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		20286C28FDCF999611CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = 01E2163D09EDAC6600E66AF8 /* Build configuration list for PBXProject "CICarbonSample" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 20286C29FDCF999611CA2CEA /* CICarbonSample */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = 0028844A0EFAA35C0083E387 /* Products */;
+					ProjectRef = 002884490EFAA35C0083E387 /* core.xcodeproj */;
+				},
+				{
+					ProductGroup = 002884B50EFAB69F0083E387 /* Products */;
+					ProjectRef = 002884B40EFAB69F0083E387 /* maccore.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				8D0C4E890486CD37000505A6 /* CICarbonSample */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		002884510EFAA35C0083E387 /* libcore.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libcore.a;
+			remoteRef = 002884500EFAA35C0083E387 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		002884BC0EFAB69F0083E387 /* libmaccore.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libmaccore.a;
+			remoteRef = 002884BB0EFAB69F0083E387 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D0C4E8C0486CD37000505A6 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */,
+				8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8D0C4E8F0486CD37000505A6 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D0C4E900486CD37000505A6 /* main.c in Sources */,
+				002884150EFA97F80083E387 /* test.cpp in Sources */,
+				0028845E0EFAB2190083E387 /* SkCreateCGImageRef.cpp in Sources */,
+				002884D90EFABFE60083E387 /* SkFontHost_none.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		002884550EFAA3770083E387 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = core;
+			targetProxy = 002884540EFAA3770083E387 /* PBXContainerItemProxy */;
+		};
+		002884BF0EFAB6B00083E387 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = maccore;
+			targetProxy = 002884BE0EFAB6B00083E387 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		02345980000FD03B11CA0E72 /* main.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				1870340FFE93FCAF11CA0CD7 /* English */,
+			);
+			name = main.nib;
+			sourceTree = "<group>";
+		};
+		0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				0867D6ABFE840B52C02AAC07 /* English */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		01E2163A09EDAC6600E66AF8 /* Development */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = CICarbonSample_Prefix.pch;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PREBINDING = NO;
+				PRODUCT_NAME = CICarbonSample;
+				SKIP_INSTALL = YES;
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = YES;
+			};
+			name = Development;
+		};
+		01E2163B09EDAC6600E66AF8 /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = CICarbonSample_Prefix.pch;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PREBINDING = NO;
+				PRODUCT_NAME = CICarbonSample;
+				SKIP_INSTALL = YES;
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Deployment;
+		};
+		01E2163C09EDAC6600E66AF8 /* Default */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = CICarbonSample_Prefix.pch;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PRODUCT_NAME = CICarbonSample;
+				SKIP_INSTALL = YES;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Default;
+		};
+		01E2163E09EDAC6600E66AF8 /* Development */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				USER_HEADER_SEARCH_PATHS = "../../include/**";
+			};
+			name = Development;
+		};
+		01E2163F09EDAC6600E66AF8 /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Deployment;
+		};
+		01E2164009EDAC6600E66AF8 /* Default */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Default;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		01E2163909EDAC6600E66AF8 /* Build configuration list for PBXNativeTarget "CICarbonSample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				01E2163A09EDAC6600E66AF8 /* Development */,
+				01E2163B09EDAC6600E66AF8 /* Deployment */,
+				01E2163C09EDAC6600E66AF8 /* Default */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Default;
+		};
+		01E2163D09EDAC6600E66AF8 /* Build configuration list for PBXProject "CICarbonSample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				01E2163E09EDAC6600E66AF8 /* Development */,
+				01E2163F09EDAC6600E66AF8 /* Deployment */,
+				01E2164009EDAC6600E66AF8 /* Default */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Default;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+}
diff --git a/xcode/hostapp/CICarbonSample_Prefix.pch b/xcode/hostapp/CICarbonSample_Prefix.pch
new file mode 100644
index 0000000..a74776b
--- /dev/null
+++ b/xcode/hostapp/CICarbonSample_Prefix.pch
@@ -0,0 +1,5 @@
+//
+// Prefix header for all source files of the 'CICarbonSample' target in the 'CICarbonSample' project.
+//
+
+#include <Carbon/Carbon.h>
diff --git a/xcode/hostapp/Info.plist b/xcode/hostapp/Info.plist
new file mode 100644
index 0000000..8bc7477
--- /dev/null
+++ b/xcode/hostapp/Info.plist
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>CICarbonSample</string>
+	<key>CFBundleIconFile</key>
+	<string></string>
+	<key>CFBundleIdentifier</key>
+	<string>com.apple.CICarbonSample</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.1</string>
+	<key>CFBundleSignature</key>
+	<string>CICS</string>
+	<key>CFBundleVersion</key>
+	<string>1.1</string>
+	<key>CSResourcesFileMapped</key>
+	<true/>
+</dict>
+</plist>
diff --git a/xcode/hostapp/SkCreateCGImageRef.cpp b/xcode/hostapp/SkCreateCGImageRef.cpp
new file mode 100644
index 0000000..7cea543
--- /dev/null
+++ b/xcode/hostapp/SkCreateCGImageRef.cpp
@@ -0,0 +1,80 @@
+#include <Carbon/Carbon.h>
+#include "SkBitmap.h"
+
+extern CGImageRef SkCreateCGImageRef(const SkBitmap&);
+
+static const void* SkBitmap_GetBytesPointer(void* info) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
+    bitmap->lockPixels();
+    return bitmap->getPixels();
+}
+
+static void SkBitmap_ReleaseBytePointer(void* info, const void* pointer) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
+    bitmap->unlockPixels();
+}
+
+static size_t SkBitmap_GetBytesAtPosition(void* info, void* buffer,
+                                             off_t offset, size_t count) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
+    bitmap->lockPixels();
+    memcpy(buffer, (const char*)bitmap->getPixels() + offset, count);
+    bitmap->unlockPixels();
+    return count;
+}
+
+static void SkBitmap_ReleaseInfo(void* info) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
+    delete bitmap;
+}
+
+static SkBitmap* prepareForImageRef(const SkBitmap& bm,
+                                    size_t* bitsPerComponent,
+                                    CGBitmapInfo* info) {
+    switch (bm.config()) {
+        case SkBitmap::kARGB_8888_Config:
+            *bitsPerComponent = 8;
+            // try to match our argb ordering in SkColorPriv
+            *info = kCGBitmapByteOrder32Big |
+                    kCGImageAlphaPremultipliedLast;
+            break;
+        default:
+            return NULL;
+    }
+
+    return new SkBitmap(bm);
+}
+
+CGImageRef SkCreateCGImageRef(const SkBitmap& bm) {
+    size_t bitsPerComponent;
+    CGBitmapInfo info;
+
+    SkBitmap* bitmap = prepareForImageRef(bm, &bitsPerComponent, &info);
+    if (NULL == bitmap) {
+        return NULL;
+    }
+
+    const int w = bitmap->width();
+    const int h = bitmap->height();
+    const size_t s = bitmap->getSize();
+
+    CGDataProviderDirectCallbacks procs;
+    procs.version = 0;
+    procs.getBytePointer = SkBitmap_GetBytesPointer;
+    procs.releaseBytePointer = SkBitmap_ReleaseBytePointer;
+    procs.getBytesAtPosition = SkBitmap_GetBytesAtPosition;
+    procs.releaseInfo = SkBitmap_ReleaseInfo;
+
+    // our provider "owns" the bitmap*, and will take care of deleting it
+    CGDataProviderRef dataRef = CGDataProviderCreateDirect(bitmap, s, &procs);
+    CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
+    CGImageRef ref = CGImageCreate(w, h, bitsPerComponent,
+                                   bitmap->bytesPerPixel() * 8,
+                                   bitmap->rowBytes(), space, info, dataRef,
+                                   NULL, false, kCGRenderingIntentDefault);
+    CGColorSpaceRelease(space);
+    CGDataProviderRelease(dataRef);
+    return ref;
+}
+
+
diff --git a/xcode/hostapp/main.c b/xcode/hostapp/main.c
new file mode 100644
index 0000000..bed568e
--- /dev/null
+++ b/xcode/hostapp/main.c
@@ -0,0 +1,420 @@
+/*
+
+File: main.c
+
+Abstract:   Main event loop and app handling code is found in here.
+
+Version: 1.0
+
+� Copyright 2005 Apple Computer, Inc. All rights reserved.
+
+IMPORTANT:  This Apple software is supplied to 
+you by Apple Computer, Inc. ("Apple") in 
+consideration of your agreement to the following 
+terms, and your use, installation, modification 
+or redistribution of this Apple software 
+constitutes acceptance of these terms.  If you do 
+not agree with these terms, please do not use, 
+install, modify or redistribute this Apple 
+software.
+
+In consideration of your agreement to abide by 
+the following terms, and subject to these terms, 
+Apple grants you a personal, non-exclusive 
+license, under Apple's copyrights in this 
+original Apple software (the "Apple Software"), 
+to use, reproduce, modify and redistribute the 
+Apple Software, with or without modifications, in 
+source and/or binary forms; provided that if you 
+redistribute the Apple Software in its entirety 
+and without modifications, you must retain this 
+notice and the following text and disclaimers in 
+all such redistributions of the Apple Software. 
+Neither the name, trademarks, service marks or 
+logos of Apple Computer, Inc. may be used to 
+endorse or promote products derived from the 
+Apple Software without specific prior written 
+permission from Apple.  Except as expressly 
+stated in this notice, no other rights or 
+licenses, express or implied, are granted by 
+Apple herein, including but not limited to any 
+patent rights that may be infringed by your 
+derivative works or by other works in which the 
+Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS 
+IS" basis.  APPLE MAKES NO WARRANTIES, EXPRESS OR 
+IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED 
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY 
+AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING 
+THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE 
+OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY 
+SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL 
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+OF USE, DATA, OR PROFITS; OR BUSINESS 
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, 
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF 
+THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER 
+UNDER THEORY OF CONTRACT, TORT (INCLUDING 
+NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN 
+IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF 
+SUCH DAMAGE.
+
+*/ 
+
+
+#include <Carbon/Carbon.h>
+
+/* Constants */
+#define kMyHIViewSignature 'ciHV'
+#define kMyHIViewFieldID    128
+#define kGammaSliderSignature 'gSLD'
+#define kGammaSliderFieldID    128
+#define	kAboutBoxStringKey		CFSTR("AboutString")	// these key the localizable strings
+
+/* Private Prototypes */
+static OSStatus MyDrawEventHandler(EventHandlerCallRef myHandler, EventRef event, void *userData);
+static void MyGammaSliderProc( ControlHandle control, SInt16 part );
+static pascal OSStatus DoAppCommandProcess(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);
+static PMPageFormat CreateDefaultPageFormat(void);
+static OSStatus DoPageSetup(PMPageFormat pageFormat);
+static OSStatus DoPrint(PMPageFormat pageFormat);
+static OSStatus MyDoPrintLoop(PMPrintSession printSession, PMPageFormat pageFormat, PMPrintSettings printSettings);
+static void DoAboutBox();
+
+/* Global Data */
+static HIViewRef    gMyHIView = NULL;
+static HIViewRef    gGammaSliderView = NULL;
+static PMPageFormat gPageFormat = NULL;
+
+int main(int argc, char* argv[])
+{
+    static const HIViewID	kMyViewID = {kMyHIViewSignature,  kMyHIViewFieldID };      
+    static const HIViewID	kGammaSliderID = {kGammaSliderSignature,  kGammaSliderFieldID };      
+
+    IBNibRef			nibRef;
+    WindowRef			window;
+    EventTargetRef		myEventTarget;
+    static const EventTypeSpec 	kMyViewEvents[] = {kEventClassControl, kEventControlDraw };	
+    static const EventTypeSpec 	kMyCommandEvents[] = {kEventClassCommand, kEventCommandProcess };	
+    OSStatus			err = noErr;
+
+    // Create a Nib reference passing the name of the nib file (without the .nib extension)
+    // CreateNibReference only searches into the application bundle.
+    err = CreateNibReference(CFSTR("main"), &nibRef);
+    require_noerr( err, CantGetNibRef );
+    
+    // Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar
+    // object. This name is set in InterfaceBuilder when the nib is created.
+    err = SetMenuBarFromNib(nibRef, CFSTR("MenuBar"));
+    require_noerr( err, CantSetMenuBar );
+    
+    // Then create a window. "MainWindow" is the name of the window object. This name is set in 
+    // InterfaceBuilder when the nib is created.
+    err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &window);
+    require_noerr( err, CantCreateWindow );
+    // Get the HIView associated with the window.
+    HIViewFindByID( HIViewGetRoot( window ), kMyViewID, &gMyHIView );
+    
+    // make the view opaque
+    HIViewChangeFeatures(gMyHIView, kHIViewIsOpaque, 0);
+
+    // Get the event target for the view.
+    myEventTarget = GetControlEventTarget (gMyHIView);
+			     
+    // Install the event handler for the HIView.				
+    err = InstallEventHandler (myEventTarget, 
+						    NewEventHandlerUPP (MyDrawEventHandler), 
+						    GetEventTypeCount(kMyViewEvents), 
+						    kMyViewEvents, 
+						    (void *) gMyHIView, 
+						    NULL); 
+
+
+    HIViewFindByID( HIViewGetRoot( window ), kGammaSliderID, &gGammaSliderView );
+    SetControlAction( gGammaSliderView, NewControlActionUPP(MyGammaSliderProc) );
+
+    // Install the handler for the menu commands.
+    InstallApplicationEventHandler(NewEventHandlerUPP(DoAppCommandProcess), GetEventTypeCount(kMyCommandEvents), 
+						kMyCommandEvents, NULL, NULL);
+
+
+    // We don't need the nib reference anymore.
+    DisposeNibReference(nibRef);
+    
+    // The window was created hidden so show it.
+    ShowWindow( window );
+    
+    // Call the event loop
+    RunApplicationEventLoop();
+
+CantCreateWindow:
+CantSetMenuBar:
+CantGetNibRef:
+	return err;
+}
+
+extern void SkiaDraw(CGContextRef rec, CGRect bounds);
+
+static OSStatus MyDrawEventHandler(EventHandlerCallRef myHandler, EventRef event, void *userData)
+{
+	// NOTE: GState is save/restored by the HIView system doing the callback, so the draw handler doesn't need to do it
+
+	OSStatus status = noErr;
+	CGContextRef context;
+	HIRect		bounds;
+
+	// Get the CGContextRef
+	status = GetEventParameter (event, kEventParamCGContextRef, 
+					typeCGContextRef, NULL, 
+					sizeof (CGContextRef),
+					NULL,
+					&context);
+
+	if(status != noErr){
+		fprintf(stderr, "Got error %d getting the context!\n", status);
+		return status;
+	}		
+						
+	// Get the bounding rectangle
+	HIViewGetBounds ((HIViewRef) userData, &bounds);
+	
+	// Flip the coordinates by translating and scaling. This produces a
+	// coordinate system that matches the Quartz default coordinate system
+	// with the origin in the lower-left corner with the y axis pointing up.
+	
+//	CGContextTranslateCTM (context, 0, bounds.size.height);
+//	CGContextScaleCTM (context, 1.0, -1.0);
+
+    SkiaDraw(context, bounds);
+	return status;
+   
+}
+
+static void MyGammaSliderProc( ControlHandle control, SInt16 part )
+{	
+//	gGammaValue = GetControl32BitValue(control);
+	HIViewSetNeedsDisplay(gMyHIView, true);
+	HIViewRender(gMyHIView);   
+}
+
+
+// Handle command-process events at the application level
+static pascal OSStatus DoAppCommandProcess(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData)
+{
+#pragma unused (nextHandler, userData)
+    HICommand  aCommand;
+    OSStatus   result = eventNotHandledErr;
+
+    GetEventParameter(theEvent, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &aCommand);
+    
+    switch (aCommand.commandID)
+    {
+
+	case kHICommandPageSetup:
+	    if(gPageFormat == NULL)
+		gPageFormat = CreateDefaultPageFormat();
+		
+	    if(gPageFormat)
+		(void)DoPageSetup(gPageFormat);
+		
+	    result = noErr;
+	    break;
+
+	case kHICommandPrint:
+	    if(gPageFormat == NULL)
+		gPageFormat = CreateDefaultPageFormat();
+		
+	    if(gPageFormat)
+		(void)DoPrint(gPageFormat);
+
+	    result = noErr;
+	    break;
+
+	case kHICommandAbout:
+	    DoAboutBox();
+	    result = noErr; 
+	    break;
+
+	default:
+	    break;
+
+	case kHICommandQuit:
+		QuitApplicationEventLoop();
+		result = noErr;
+		break;
+    }
+    HiliteMenu(0);
+    return result;
+}
+
+static void DoAboutBox()
+{	
+    CFStringRef outString = NULL;
+    SInt16      alertItemHit = 0;
+    Str255      stringBuf;
+
+    outString =  CFCopyLocalizedString(kAboutBoxStringKey, NULL);
+    if (outString != NULL)
+    {
+		if (CFStringGetPascalString (outString, stringBuf, sizeof(stringBuf), GetApplicationTextEncoding()))
+		{
+			StandardAlert(kAlertStopAlert, stringBuf, NULL, NULL, &alertItemHit);
+		}
+		CFRelease (outString);                             
+    }
+}
+
+// -----------------------------------------------------------------------
+static PMPageFormat CreateDefaultPageFormat(void)
+{
+    OSStatus err = noErr, tempErr;
+    PMPageFormat pageFormat = NULL;
+    PMPrintSession printSession;
+    err = PMCreateSession(&printSession);
+    if(!err){
+	err = PMCreatePageFormat(&pageFormat);	// we own a reference to this page format
+	if(err == noErr)
+	    err = PMSessionDefaultPageFormat(printSession, pageFormat);
+
+	tempErr = PMRelease(printSession);
+	if(!err)err = tempErr;
+    }
+    if(err){
+	fprintf(stderr, "got an error = %d creating the default page format\n", err);
+    }
+    return pageFormat;
+}
+
+// -----------------------------------------------------------------
+static OSStatus DoPageSetup(PMPageFormat pageFormat)
+{
+    OSStatus		err = noErr;
+    PMPrintSession printSession;
+    err = PMCreateSession(&printSession);
+    if(!err){
+	Boolean accepted;
+	if(!err) 	// validate the page format we're going to pass to the dialog code
+	    err = PMSessionValidatePageFormat(printSession, pageFormat, kPMDontWantBoolean);
+	if(!err){
+	    err = PMSessionPageSetupDialog(printSession, pageFormat, &accepted);
+	}
+       (void)PMRelease(printSession);
+    }
+    
+    if(err && err != kPMCancel)
+	fprintf(stderr, "Got an error %d in Page Setup\n", err);
+
+    return err;
+} // DoPageSetup
+
+// -------------------------------------------------------------------------------
+static OSStatus DoPrint(PMPageFormat pageFormat)
+{
+    OSStatus err = noErr;
+    UInt32 minPage = 1, maxPage = 1;
+    PMPrintSession printSession;
+    err = PMCreateSession(&printSession);
+    if(err == noErr){
+	// validate the page format we're going to use
+	err = PMSessionValidatePageFormat(printSession, 
+			    pageFormat,
+			    kPMDontWantBoolean);
+        if (err == noErr)
+        {
+	    PMPrintSettings printSettings = NULL;
+            err = PMCreatePrintSettings(&printSettings);
+            if(err == noErr)
+                err = PMSessionDefaultPrintSettings(printSession, printSettings);
+
+            if (err == noErr)
+		err = PMSetPageRange(printSettings, minPage, maxPage);
+
+            if (err == noErr)
+            {
+                Boolean accepted;
+		err = PMSessionPrintDialog(printSession, printSettings, 
+				pageFormat,
+				&accepted);
+		if(accepted){
+		    err = MyDoPrintLoop(printSession, pageFormat, printSettings);
+		}
+            }
+	    if(printSettings)
+		(void)PMRelease(printSettings);
+        }
+
+        (void)PMRelease(printSession);   // ignoring error since we already have one 
+    }
+    
+    if(err && err != kPMCancel)
+	fprintf(stderr, "Got an error %d in Print\n", err);
+    return err;
+}
+
+// --------------------------------------------------------------------------------------
+static OSStatus MyDoPrintLoop(PMPrintSession printSession, PMPageFormat pageFormat, PMPrintSettings printSettings)
+{
+    OSStatus err = noErr;
+    OSStatus tempErr = noErr;
+    UInt32 firstPage, lastPage, totalDocPages = 1;
+    
+    if(!err)
+	err = PMGetFirstPage(printSettings, &firstPage);
+	
+    if (!err)
+        err = PMGetLastPage(printSettings, &lastPage);
+
+    if(!err && lastPage > totalDocPages){
+        // don't draw more than the number of pages in our document
+        lastPage = totalDocPages;
+    }
+
+    if (!err)		// tell the printing system the number of pages we are going to print
+        err = PMSetLastPage(printSettings, lastPage, false);
+
+    if (!err)
+    {
+        err = PMSessionBeginCGDocument(printSession, printSettings, pageFormat);
+        if (!err){
+	    UInt32 pageNumber = firstPage;
+	    // need to check errors from our print loop and errors from the session for each
+	    // time around our print loop before calling our BeginPageProc
+            while(pageNumber <= lastPage && err == noErr && PMSessionError(printSession) == noErr)
+            {
+                err = PMSessionBeginPage(printSession, pageFormat, NULL);
+                if (!err){
+                    CGContextRef printingContext = NULL;
+                    err = PMSessionGetCGGraphicsContext(printSession, &printingContext);
+                    if(!err){
+			PMRect       pageRect;
+			
+			PMGetAdjustedPaperRect(pageFormat, &pageRect);
+#if 0
+			DoDraw(printingContext, CGRectMake(pageRect.left, pageRect.top, pageRect.right - pageRect.left, pageRect.bottom - pageRect.top));
+#endif
+                    }
+                    // we must call EndPage if BeginPage returned noErr
+		    tempErr = PMSessionEndPage(printSession);
+                        
+		    if(!err)err = tempErr;
+                }
+		pageNumber++;
+            }	// end while loop
+            
+            // we must call EndDocument if BeginDocument returned noErr
+	    tempErr = PMSessionEndDocument(printSession);
+
+	    if(!err)err = tempErr;
+	    if(!err)
+		err = PMSessionError(printSession);
+        }
+    }
+    return err;
+}
+
+
+
diff --git a/xcode/hostapp/test.cpp b/xcode/hostapp/test.cpp
new file mode 100644
index 0000000..aae344d
--- /dev/null
+++ b/xcode/hostapp/test.cpp
@@ -0,0 +1,48 @@
+#include <Carbon/Carbon.h>
+#include "SkCanvas.h"
+#include "SkPaint.h"
+
+extern CGImageRef SkCreateCGImageRef(const SkBitmap&);
+extern "C" void SkiaDraw(CGContextRef cg, CGRect bounds);
+
+static void sampleDraw(SkCanvas* canvas) {
+    canvas->drawColor(0xFF0000FF);
+    
+    SkPaint paint;
+    paint.setAntiAlias(true);
+
+    canvas->drawCircle(SkIntToScalar(100), SkIntToScalar(100),
+                       SkIntToScalar(90), paint);
+}
+
+static CGImageRef gImage;
+
+void SkiaDraw(CGContextRef cg, CGRect bounds) {
+    if (NULL == gImage) {
+        SkBitmap bitmap;
+        bitmap.setConfig(SkBitmap::kARGB_8888_Config, 640, 480);
+        bitmap.allocPixels();
+        
+        SkCanvas canvas(bitmap);
+        sampleDraw(&canvas);
+        
+        gImage = SkCreateCGImageRef(bitmap);
+    }
+
+    CGColorRef color = CGColorCreateGenericRGB(1, 1, 1, 1);
+    CGContextSetFillColorWithColor(cg, color);
+    CGColorRelease(color);
+    CGContextFillRect(cg, bounds);
+
+    CGRect r = CGRectMake(0, 0, 640, 480);
+    
+    CGContextSaveGState(cg);
+    CGContextTranslateCTM(cg, 0, r.size.height);
+    CGContextScaleCTM(cg, 1, -1);
+    
+    CGContextDrawImage(cg, r, gImage);
+    
+    CGContextRestoreGState(cg);
+}
+
+
diff --git a/xcode/maccore/maccore.xcodeproj/project.pbxproj b/xcode/maccore/maccore.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..218f217
--- /dev/null
+++ b/xcode/maccore/maccore.xcodeproj/project.pbxproj
@@ -0,0 +1,215 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 44;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		002884A50EFAB5DE0083E387 /* SkOSFile_stdio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 002884A20EFAB5DE0083E387 /* SkOSFile_stdio.cpp */; };
+		002884A60EFAB5DE0083E387 /* SkThread_pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 002884A30EFAB5DE0083E387 /* SkThread_pthread.cpp */; };
+		002884A70EFAB5DE0083E387 /* SkTime_Unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 002884A40EFAB5DE0083E387 /* SkTime_Unix.cpp */; };
+		002884E10EFABFFC0083E387 /* SkGlobals_global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 002884E00EFABFFC0083E387 /* SkGlobals_global.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		002884A20EFAB5DE0083E387 /* SkOSFile_stdio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkOSFile_stdio.cpp; path = ../../src/ports/SkOSFile_stdio.cpp; sourceTree = SOURCE_ROOT; };
+		002884A30EFAB5DE0083E387 /* SkThread_pthread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkThread_pthread.cpp; path = ../../src/ports/SkThread_pthread.cpp; sourceTree = SOURCE_ROOT; };
+		002884A40EFAB5DE0083E387 /* SkTime_Unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkTime_Unix.cpp; path = ../../src/ports/SkTime_Unix.cpp; sourceTree = SOURCE_ROOT; };
+		002884E00EFABFFC0083E387 /* SkGlobals_global.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGlobals_global.cpp; path = ../../src/ports/SkGlobals_global.cpp; sourceTree = SOURCE_ROOT; };
+		D2AAC046055464E500DB518D /* libmaccore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libmaccore.a; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		D289987405E68DCB004EDB86 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* maccore */ = {
+			isa = PBXGroup;
+			children = (
+				08FB7795FE84155DC02AAC07 /* Source */,
+				C6A0FF2B0290797F04C91782 /* Documentation */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = maccore;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				002884E00EFABFFC0083E387 /* SkGlobals_global.cpp */,
+				002884A20EFAB5DE0083E387 /* SkOSFile_stdio.cpp */,
+				002884A30EFAB5DE0083E387 /* SkThread_pthread.cpp */,
+				002884A40EFAB5DE0083E387 /* SkTime_Unix.cpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				D2AAC046055464E500DB518D /* libmaccore.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		C6A0FF2B0290797F04C91782 /* Documentation */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Documentation;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		D2AAC043055464E500DB518D /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		D2AAC045055464E500DB518D /* maccore */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB91EB08733DB70010E9CD /* Build configuration list for PBXNativeTarget "maccore" */;
+			buildPhases = (
+				D2AAC043055464E500DB518D /* Headers */,
+				D2AAC044055464E500DB518D /* Sources */,
+				D289987405E68DCB004EDB86 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = maccore;
+			productName = maccore;
+			productReference = D2AAC046055464E500DB518D /* libmaccore.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = 1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "maccore" */;
+			compatibilityVersion = "Xcode 3.0";
+			hasScannedForEncodings = 1;
+			mainGroup = 08FB7794FE84155DC02AAC07 /* maccore */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				D2AAC045055464E500DB518D /* maccore */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		D2AAC044055464E500DB518D /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				002884A50EFAB5DE0083E387 /* SkOSFile_stdio.cpp in Sources */,
+				002884A60EFAB5DE0083E387 /* SkThread_pthread.cpp in Sources */,
+				002884A70EFAB5DE0083E387 /* SkTime_Unix.cpp in Sources */,
+				002884E10EFABFFC0083E387 /* SkGlobals_global.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB91EC08733DB70010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PRODUCT_NAME = maccore;
+				ZERO_LINK = YES;
+			};
+			name = Debug;
+		};
+		1DEB91ED08733DB70010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PRODUCT_NAME = maccore;
+			};
+			name = Release;
+		};
+		1DEB91F008733DB70010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					SK_BUILD_FOR_MAC,
+					SK_DEBUG,
+				);
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PREBINDING = NO;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
+				USER_HEADER_SEARCH_PATHS = "../../include/ports ../../include/core";
+			};
+			name = Debug;
+		};
+		1DEB91F108733DB70010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = (
+					ppc,
+					i386,
+				);
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					SK_BUILD_FOR_MAC,
+					SK_RELEASE,
+				);
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PREBINDING = NO;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
+				USER_HEADER_SEARCH_PATHS = "../../include/ports ../../include/core";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB91EB08733DB70010E9CD /* Build configuration list for PBXNativeTarget "maccore" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB91EC08733DB70010E9CD /* Debug */,
+				1DEB91ED08733DB70010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "maccore" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB91F008733DB70010E9CD /* Debug */,
+				1DEB91F108733DB70010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
