Initial commit
diff --git a/osx/Info.plist b/osx/Info.plist
new file mode 100644
index 0000000..24e72d7
--- /dev/null
+++ b/osx/Info.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+    <key>CFBundleExecutable</key>
+    <string>NDNx Control Center</string>
+    <key>CFBundleGetInfoString</key>
+    <string>Created by Waf</string>
+    <key>CFBundleIconFile</key>
+    <string>ndnx-main.icns</string>
+    <key>CFBundleIdentifier</key>
+    <string>net.named-data.control-center</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleSignature</key>
+    <string>????</string>
+    <key>NOTE</key>
+    <string>THIS IS A GENERATED FILE, DO NOT MODIFY</string>
+    <key>NSPrincipalClass</key>
+    <string>NSApplication</string>
+    <!-- <key>LSUIElement</key> -->
+    <!-- <string>1</string> -->
+</dict>
+</plist>
diff --git a/osx/main.mm b/osx/main.mm
new file mode 100644
index 0000000..edc5186
--- /dev/null
+++ b/osx/main.mm
@@ -0,0 +1,13 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * @copyright See LICENCE for copyright and license information.
+ *
+ * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#import <Cocoa/Cocoa.h>
+
+int main(int argc, char *argv[])
+{
+    return NSApplicationMain(argc, (const char **)argv);
+}
diff --git a/osx/ndnx-main.icns b/osx/ndnx-main.icns
new file mode 100644
index 0000000..ececc16
--- /dev/null
+++ b/osx/ndnx-main.icns
Binary files differ
diff --git a/osx/ndnx-tray.icns b/osx/ndnx-tray.icns
new file mode 100644
index 0000000..f347dd7
--- /dev/null
+++ b/osx/ndnx-tray.icns
Binary files differ
diff --git a/osx/sparkle-auto-update.h b/osx/sparkle-auto-update.h
new file mode 100644
index 0000000..88f8c66
--- /dev/null
+++ b/osx/sparkle-auto-update.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * @copyright See LICENCE for copyright and license information.
+ *
+ * @author Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef SPARKLE_AUTO_UPDATE_H
+#define SPARKLE_AUTO_UPDATE_H
+
+/**
+ * @brief Class implementing interface for automatic updates for OSX using Sparkle framework
+ */
+class SparkleAutoUpdate
+{
+public:
+  /**
+   * @brief Constructor
+   * @param updateUrl URL to Sparkle update definition file
+   */
+  SparkleAutoUpdate (const char *updateUrl);
+  ~SparkleAutoUpdate ();
+
+  /**
+   * @brief Check for updates once
+   */
+  void
+  checkForUpdates ();
+
+private:
+  class Private;
+  Private *d;
+};
+
+#endif // SPARKLE_AUTO_UPDATE_H
diff --git a/osx/sparkle-auto-update.mm b/osx/sparkle-auto-update.mm
new file mode 100644
index 0000000..a1dc5c0
--- /dev/null
+++ b/osx/sparkle-auto-update.mm
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * @copyright See LICENCE for copyright and license information.
+ *
+ * @author Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "sparkle-auto-update.h"
+
+#import <Foundation/Foundation.h>
+#import <AppKit/AppKit.h>
+#import <Sparkle/Sparkle.h>
+
+class SparkleAutoUpdate::Private
+{
+public:
+  SUUpdater *updater;
+};
+
+SparkleAutoUpdate::SparkleAutoUpdate(const char *updateUrl)
+{
+  d = new Private;
+  d->updater = [[SUUpdater sharedUpdater] retain];
+  NSURL *url = [NSURL URLWithString: [NSString stringWithCString:updateUrl encoding:NSASCIIStringEncoding]];
+  [d->updater setFeedURL: url];
+  [d->updater setAutomaticallyChecksForUpdates: YES];
+  [d->updater setUpdateCheckInterval: 86400];
+}
+
+SparkleAutoUpdate::~SparkleAutoUpdate()
+{
+  [d->updater release];
+  delete d;
+  // presummably SUUpdater handles garbage collection
+}
+
+void SparkleAutoUpdate::checkForUpdates()
+{
+  //[d->updater checkForUpdatesInBackground];
+  [d->updater checkForUpdates : nil];
+}