diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp
index dc9b257..eb8c4ed 100644
--- a/bench/benchmain.cpp
+++ b/bench/benchmain.cpp
@@ -397,7 +397,8 @@
     SkDebugf("    -h|--help : Show this help message.\n");
 }
 
-int main (int argc, char * const argv[]) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
 #ifdef SK_ENABLE_INST_COUNT
     gPrintInstCount = true;
 #endif
@@ -907,3 +908,10 @@
 
     return 0;
 }
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
+
diff --git a/experimental/SimpleiOSApp/SimpleApp.mm b/experimental/SimpleiOSApp/SimpleApp.mm
index 12dff34..dba8bcc 100644
--- a/experimental/SimpleiOSApp/SimpleApp.mm
+++ b/experimental/SimpleiOSApp/SimpleApp.mm
@@ -3,6 +3,10 @@
 #import "SkWindow.h"
 #include "SkGraphics.h"
 #include "SkCGUtils.h"
+
+extern void tool_main(int argc, char *argv[]);
+void save_args(int argc, char *argv[]);
+
 class SkSampleView : public SkView {
 public:
     SkSampleView() {
@@ -15,7 +19,7 @@
         SkPaint p;
         p.setTextSize(20);
         p.setAntiAlias(true);
-        canvas->drawText("Hello World!", 13, 50, 30, p);
+        canvas->drawText("finished", 13, 50, 30, p);
         SkRect r = {50, 50, 80, 80};
         p.setColor(0xAA11EEAA);
         canvas->drawRect(r, p);
@@ -34,6 +38,14 @@
     SkEvent::Term();
 }
 
+int saved_argc;
+char** saved_argv;
+
+void save_args(int argc, char *argv[]) {
+    saved_argc = argc;
+    saved_argv = argv;
+}
+
 class FillLayout : public SkView::Layout {
 protected:
     virtual void onLayoutChildren(SkView* parent) {
@@ -46,6 +58,7 @@
 @implementation SimpleApp
 
 - (id)initWithDefaults {
+    (void) tool_main(saved_argc, saved_argv);
     if (self = [super initWithDefaults]) {
         fWind = new SkOSWindow(self);
         fWind->setLayout(new FillLayout, false);
diff --git a/experimental/SimpleiOSApp/tool-Info.plist b/experimental/SimpleiOSApp/tool-Info.plist
new file mode 100644
index 0000000..6f8c6d8
--- /dev/null
+++ b/experimental/SimpleiOSApp/tool-Info.plist
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//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>CFBundleDisplayName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIconFile</key>
+	<string></string>
+	<key>CFBundleIdentifier</key>
+	<string>com.google.${EXECUTABLE_NAME}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>NSMainNibFile</key>
+	<string>MainWindow_iPhone</string>
+	<key>NSMainNibFile~ipad</key>
+	<string>MainWindow_iPad</string>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>
diff --git a/experimental/iOSSampleApp/Shared/skia_ios.mm b/experimental/iOSSampleApp/Shared/skia_ios.mm
index 4e49786..65b3e8a 100644
--- a/experimental/iOSSampleApp/Shared/skia_ios.mm
+++ b/experimental/iOSSampleApp/Shared/skia_ios.mm
@@ -1,9 +1,13 @@
 #import <UIKit/UIKit.h>
 #include "SkApplication.h"
+
+extern void save_args(int argc, char *argv[]);
+
 int main(int argc, char *argv[]) {
     signal(SIGPIPE, SIG_IGN);
     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
     application_init();
+    save_args(argc, argv);
     int retVal = UIApplicationMain(argc, argv, nil, nil);
     application_term();
     [pool release];
diff --git a/experimental/iOSSampleApp/SkSampleUIView.mm b/experimental/iOSSampleApp/SkSampleUIView.mm
index b716402..b08414e 100644
--- a/experimental/iOSSampleApp/SkSampleUIView.mm
+++ b/experimental/iOSSampleApp/SkSampleUIView.mm
@@ -7,15 +7,18 @@
 
 #define FORCE_REDRAW
 
+#include "SkCanvas.h"
+#include "SkCGUtils.h"
+#include "SampleApp.h"
+
+#if SK_SUPPORT_GPU
 //#define USE_GL_1
 #define USE_GL_2
 
-#include "SkCanvas.h"
-#include "GrContext.h"
 #include "gl/GrGLInterface.h"
+#include "GrContext.h"
 #include "SkGpuDevice.h"
-#include "SkCGUtils.h"
-#include "SampleApp.h"
+#endif
 
 class SkiOSDeviceManager : public SampleWindow::DeviceManager {
 public:
@@ -151,9 +154,11 @@
     virtual void publishCanvas(SampleWindow::DeviceType dType,
                                SkCanvas* canvas,
                                SampleWindow* win) SK_OVERRIDE {
+#if SK_SUPPORT_GPU
         if (NULL != fCurContext) {
             fCurContext->flush();
         }
+#endif
         win->present();
     }
     
@@ -219,18 +224,12 @@
 #include "SkEvent.h"
 #include "SkWindow.h"
 
-#define kREDRAW_UIVIEW_GL "sk_redraw_uiview_gl_iOS"
-
-extern bool gDoTraceDraw;
-#define DO_TRACE_DRAW_MAX   100
-
 struct FPSState {
     static const int FRAME_COUNT = 60;
     
     CFTimeInterval fNow0, fNow1;
     CFTimeInterval fTime0, fTime1, fTotalTime;
     int fFrameCounter;
-    int fDrawCounter;
     SkString str;
     FPSState() {
         fTime0 = fTime1 = fTotalTime = 0;
@@ -239,22 +238,10 @@
     
     void startDraw() {
         fNow0 = CACurrentMediaTime();
-        
-        if (0 == fDrawCounter && false) {
-            gDoTraceDraw = true;
-            SkDebugf("\n");
-        }
     }
     
     void endDraw() {
         fNow1 = CACurrentMediaTime();
-        
-        if (0 == fDrawCounter) {
-            gDoTraceDraw = true;
-        }
-        if (DO_TRACE_DRAW_MAX == ++fDrawCounter) {
-            fDrawCounter = 0;
-        }
     }
     
     void flush(SkOSWindow* hwnd) {
@@ -335,7 +322,7 @@
         fRasterLayer.opaque = TRUE;
         [self.layer addSublayer:fRasterLayer];
         
-        NSMutableDictionary *newActions = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"onOrderIn",
+        NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"onOrderIn",
                                            [NSNull null], @"onOrderOut",
                                            [NSNull null], @"sublayers",
                                            [NSNull null], @"contents",
@@ -346,7 +333,7 @@
         [newActions release];
         
         fDevManager = new SkiOSDeviceManager(fGL.fFramebuffer);
-        static char* kDummyArgv = "dummyExecutableName";
+        static char* kDummyArgv = const_cast<char*>("dummyExecutableName");
         fWind = new SampleWindow(self, 1, &kDummyArgv, fDevManager);
 
         fWind->resize(self.frame.size.width, self.frame.size.height, SKWIND_CONFIG);
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 1b56bf1..f0de5bd 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -862,7 +862,8 @@
 #endif
 }
 
-int main(int argc, char * const argv[]) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
 
 #ifdef SK_ENABLE_INST_COUNT
     gPrintInstCount = true;
@@ -1172,3 +1173,10 @@
 
     return (0 == testsFailed) ? 0 : -1;
 }
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
+
diff --git a/gyp/apptype_console.gypi b/gyp/apptype_console.gypi
index 229db0d..9e28061 100644
--- a/gyp/apptype_console.gypi
+++ b/gyp/apptype_console.gypi
@@ -17,6 +17,55 @@
           'android_deps.gyp:Android_EntryPoint',
         ],
       }],
+      ['skia_os == "ios"', {
+        'target_conditions': [
+          ['_type == "executable"', {
+            'mac_bundle' : 1,
+          }],
+        ],
+        'include_dirs' : [
+          '../experimental/iOSSampleApp/Shared',
+          '../include/views',
+          '../include/xml',
+          '../include/utils/mac',
+        ],
+        'sources': [
+          '../src/views/ios/SkOSWindow_iOS.mm',
+          '../src/views/mac/SkEventNotifier.h',
+          '../src/views/mac/SkEventNotifier.mm',
+          '../experimental/iOSSampleApp/iPad/AppDelegate_iPad.h',
+          '../experimental/iOSSampleApp/iPad/AppDelegate_iPad.mm',
+          '../experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.h',
+          '../experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.mm',
+          '../experimental/iOSSampleApp/Shared/SkUIView.h',
+          '../experimental/iOSSampleApp/Shared/SkUIView.mm',
+          '../experimental/iOSSampleApp/Shared/skia_ios.mm',
+          '../experimental/SimpleiOSApp/SimpleApp.h',
+          '../experimental/SimpleiOSApp/SimpleApp.mm',
+        ],
+        'dependencies': [
+          'views.gyp:views',
+          'xml.gyp:xml',
+        ],
+        'link_settings': {
+          'libraries': [
+            '<(ios_sdk_dir)<(ios_sdk_version).sdk/System/Library/Frameworks/CoreGraphics.framework',
+            '<(ios_sdk_dir)<(ios_sdk_version).sdk/System/Library/Frameworks/CoreText.framework',
+            '<(ios_sdk_dir)<(ios_sdk_version).sdk/System/Library/Frameworks/Foundation.framework',
+            '<(ios_sdk_dir)<(ios_sdk_version).sdk/System/Library/Frameworks/ImageIO.framework',
+            '<(ios_sdk_dir)<(ios_sdk_version).sdk/System/Library/Frameworks/MobileCoreServices.framework',
+            '<(ios_sdk_dir)<(ios_sdk_version).sdk/System/Library/Frameworks/UIKit.framework',
+          ],
+        },
+        'xcode_config_file': '../experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig',
+        'mac_bundle_resources' : [
+          '../experimental/SimpleiOSApp/iPad/MainWindow_iPad.xib',
+          '../experimental/SimpleiOSApp/iPhone/MainWindow_iPhone.xib',
+        ],
+        'xcode_settings' : {
+          'INFOPLIST_FILE' : '../experimental/SimpleiOSApp/tool-Info.plist',
+        },
+      }],
     ],
   },
 }
diff --git a/gyp/common_variables.gypi b/gyp/common_variables.gypi
index b59bd11..6a0fc6b 100644
--- a/gyp/common_variables.gypi
+++ b/gyp/common_variables.gypi
@@ -69,11 +69,6 @@
         }, {
           'skia_static_initializers%': 1,
         }],
-        [ 'skia_arch_type == "x86"', {
-            'ios_sdk_dir%': '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator',
-        }, {
-            'ios_sdk_dir%': '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS',
-        }],
       ],
 
       'skia_scalar%': 'float',
@@ -84,7 +79,8 @@
       'android_make_apk%': 1,
       'skia_nacl%': 0,
       'skia_gpu%': 1,
-      'ios_sdk_version%': '5.1',
+      'ios_sdk_dir%': '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS',
+      'ios_sdk_version%': '6.0',
       'skia_osx_sdkroot%': 'macosx10.6',
     },
 
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index c55a5c0..6c81041 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -2456,6 +2456,11 @@
     *height = 480;
 }
 
+#ifdef SK_BUILD_FOR_IOS
+void save_args(int argc, char *argv[]) {
+}
+#endif
+
 // FIXME: this should be in a header
 void application_init();
 void application_init() {
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index 506db0e..7088a94 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -1718,8 +1718,9 @@
     SkAutoMutexAcquire ama(gMaskGammaCacheMutex);
 
     SkSafeUnref(gLinearMaskGamma);
-
+    gLinearMaskGamma = NULL;
     SkSafeUnref(gMaskGamma);
+    gMaskGamma = NULL;
     SkDEBUGCODE(gContrast = SK_ScalarMin;)
     SkDEBUGCODE(gPaintGamma = SK_ScalarMin;)
     SkDEBUGCODE(gDeviceGamma = SK_ScalarMin;)
diff --git a/tests/skia_test.cpp b/tests/skia_test.cpp
index 5c80a01..f884a64 100644
--- a/tests/skia_test.cpp
+++ b/tests/skia_test.cpp
@@ -106,7 +106,8 @@
     bool fAndroidMode;
 };
 
-int main (int argc, char * const argv[]) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
 #ifdef SK_ENABLE_INST_COUNT
     gPrintInstCount = true;
 #endif
@@ -188,3 +189,10 @@
 
     return (failCount == 0) ? 0 : 1;
 }
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
+
diff --git a/tools/bench_pictures_main.cpp b/tools/bench_pictures_main.cpp
index 7c313cf..76d5ad3 100644
--- a/tools/bench_pictures_main.cpp
+++ b/tools/bench_pictures_main.cpp
@@ -443,7 +443,8 @@
     return failures;
 }
 
-int main(int argc, char* const argv[]) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
 #ifdef SK_ENABLE_INST_COUNT
     gPrintInstCount = true;
 #endif
@@ -466,3 +467,9 @@
         return 1;
     }
 }
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
diff --git a/tools/pinspect.cpp b/tools/pinspect.cpp
index 975eda5..b82bd33 100644
--- a/tools/pinspect.cpp
+++ b/tools/pinspect.cpp
@@ -44,7 +44,8 @@
     canvas.drawPicture(*pic);
 }
 
-int main(int argc, char* const argv[]) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
     if (argc < 2) {
         printf("Usage: pinspect [--dump-ops] filename [filename ...]\n");
         return 1;
@@ -69,3 +70,9 @@
     }
     return 0;
 }
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
diff --git a/tools/render_pictures_main.cpp b/tools/render_pictures_main.cpp
index 764bea0..55ecf38 100644
--- a/tools/render_pictures_main.cpp
+++ b/tools/render_pictures_main.cpp
@@ -287,7 +287,8 @@
     renderer->setDeviceType(deviceType);
 }
 
-int main(int argc, char* const argv[]) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
     SkAutoGraphics ag;
     SkTArray<SkString> inputs;
     sk_tools::PictureRenderer* renderer = NULL;
@@ -316,3 +317,9 @@
 
     SkDELETE(renderer);
 }
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
diff --git a/tools/skdiff_main.cpp b/tools/skdiff_main.cpp
index 5fbf3ff..46d4f00 100644
--- a/tools/skdiff_main.cpp
+++ b/tools/skdiff_main.cpp
@@ -1270,7 +1270,8 @@
 const int kNoError = 0;
 const int kGenericError = -1;
 
-int main (int argc, char ** argv) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
     DiffMetricProc diffProc = compute_diff_pmcolor;
     int (*sortProc)(const void*, const void*) = compare<CompareDiffMetrics>;
 
@@ -1446,3 +1447,9 @@
     // make sure that we only return 0 when there were no failures.
     return (num_failing_results > 255) ? 255 : num_failing_results;
 }
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
diff --git a/tools/skhello.cpp b/tools/skhello.cpp
index 82abf80..465806f 100644
--- a/tools/skhello.cpp
+++ b/tools/skhello.cpp
@@ -14,7 +14,8 @@
     SkDebugf("usage: skhello [-o out-dir] [-t 'hello']\n  default output: skhello.png\n");
 }
 
-int main(int argc, char* const argv[]) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
     SkAutoGraphics ag;
     SkString path("skhello.png");
     SkString text("Hello");
@@ -68,3 +69,9 @@
     }
     return !success;
 }
+
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
diff --git a/tools/skimage_main.cpp b/tools/skimage_main.cpp
index 504bc30..83f115c 100644
--- a/tools/skimage_main.cpp
+++ b/tools/skimage_main.cpp
@@ -54,7 +54,8 @@
     dst->append(".png");
 }
 
-int main (int argc, char * const argv[]) {
+int tool_main(int argc, char** argv);
+int tool_main(int argc, char** argv) {
     SkAutoGraphics ag;
     int i, outDirIndex = 0;
     SkString outDir;
@@ -102,3 +103,9 @@
     return 0;
 }
 
+#if !defined SK_BUILD_FOR_IOS
+int main(int argc, char * const argv[]) {
+    return tool_main(argc, (char**) argv);
+}
+#endif
+
