summaryrefslogtreecommitdiff
path: root/Sparkle.framework/Versions
diff options
context:
space:
mode:
Diffstat (limited to 'Sparkle.framework/Versions')
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUAppcast.h30
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUAppcastItem.h40
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h37
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUpdater.h334
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h29
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h25
-rw-r--r--Sparkle.framework/Versions/A/Headers/Sparkle.h22
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist50
-rwxr-xr-xSparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdatebin0 -> 113368 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo1
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icnsbin0 -> 163740 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nibbin0 -> 6583 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.stringsbin0 -> 7338 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.stringsbin0 -> 6692 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.stringsbin0 -> 7258 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.stringsbin0 -> 7298 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.stringsbin0 -> 6600 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.stringsbin0 -> 8372 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.stringsbin0 -> 7008 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.stringsbin0 -> 7450 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.stringsbin0 -> 4744 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.stringsbin0 -> 7188 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.stringsbin0 -> 7146 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.stringsbin0 -> 5136 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.stringsbin0 -> 8266 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.stringsbin0 -> 7816 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.stringsbin0 -> 7582 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.stringsbin0 -> 6380 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.stringsbin0 -> 6702 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.stringsbin0 -> 8680 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.stringsbin0 -> 6714 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.stringsbin0 -> 6532 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.stringsbin0 -> 6830 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.stringsbin0 -> 6652 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.stringsbin0 -> 7386 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.stringsbin0 -> 8442 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.stringsbin0 -> 6696 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.stringsbin0 -> 4948 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.stringsbin0 -> 4694 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/Info.plist40
-rw-r--r--Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist228
-rw-r--r--Sparkle.framework/Versions/A/Resources/SUStatus.nibbin0 -> 6583 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nibbin0 -> 7124 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nibbin0 -> 16060 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nibbin0 -> 12823 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.stringsbin0 -> 8372 bytes
-rwxr-xr-xSparkle.framework/Versions/A/Sparklebin0 -> 398500 bytes
l---------Sparkle.framework/Versions/Current1
48 files changed, 837 insertions, 0 deletions
diff --git a/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/Sparkle.framework/Versions/A/Headers/SUAppcast.h
new file mode 100644
index 0000000..702f549
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUAppcast.h
@@ -0,0 +1,30 @@
+//
+// SUAppcast.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/12/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAPPCAST_H
+#define SUAPPCAST_H
+
+@protocol SUAppcastDelegate;
+
+@class SUAppcastItem;
+@interface SUAppcast : NSObject <NSURLDownloadDelegate>
+
+@property (weak) id<SUAppcastDelegate> delegate;
+@property (copy) NSString *userAgentString;
+
+- (void)fetchAppcastFromURL:(NSURL *)url;
+
+@property (readonly, copy) NSArray *items;
+@end
+
+@protocol SUAppcastDelegate <NSObject>
+- (void)appcastDidFinishLoading:(SUAppcast *)appcast;
+- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h
new file mode 100644
index 0000000..3334a1a
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h
@@ -0,0 +1,40 @@
+//
+// SUAppcastItem.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/12/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAPPCASTITEM_H
+#define SUAPPCASTITEM_H
+
+@interface SUAppcastItem : NSObject
+@property (copy, readonly) NSString *title;
+@property (copy, readonly) NSDate *date;
+@property (copy, readonly) NSString *itemDescription;
+@property (strong, readonly) NSURL *releaseNotesURL;
+@property (copy, readonly) NSString *DSASignature;
+@property (copy, readonly) NSString *minimumSystemVersion;
+@property (copy, readonly) NSString *maximumSystemVersion;
+@property (strong, readonly) NSURL *fileURL;
+@property (copy, readonly) NSString *versionString;
+@property (copy, readonly) NSString *displayVersionString;
+@property (copy, readonly) NSDictionary *deltaUpdates;
+@property (strong, readonly) NSURL *infoURL;
+
+// Initializes with data from a dictionary provided by the RSS class.
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict failureReason:(NSString **)error;
+
+@property (getter=isDeltaUpdate, readonly) BOOL deltaUpdate;
+@property (getter=isCriticalUpdate, readonly) BOOL criticalUpdate;
+
+// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions.
+@property (readonly, copy) NSDictionary *propertiesDictionary;
+
+- (NSURL *)infoURL;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h b/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h
new file mode 100644
index 0000000..f40d571
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h
@@ -0,0 +1,37 @@
+//
+// SUStandardVersionComparator.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUSTANDARDVERSIONCOMPARATOR_H
+#define SUSTANDARDVERSIONCOMPARATOR_H
+
+
+#import "SUVersionComparisonProtocol.h"
+
+/*!
+ Sparkle's default version comparator.
+
+ This comparator is adapted from MacPAD, by Kevin Ballard.
+ It's "dumb" in that it does essentially string comparison,
+ in components split by character type.
+*/
+@interface SUStandardVersionComparator : NSObject <SUVersionComparison>
+
+/*!
+ Returns a singleton instance of the comparator.
+*/
++ (SUStandardVersionComparator *)defaultComparator;
+
+/*!
+ Compares version strings through textual analysis.
+
+ See the implementation for more details.
+*/
+- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/Sparkle.framework/Versions/A/Headers/SUUpdater.h
new file mode 100644
index 0000000..4c83857
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUpdater.h
@@ -0,0 +1,334 @@
+//
+// SUUpdater.h
+// Sparkle
+//
+// Created by Andy Matuschak on 1/4/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATER_H
+#define SUUPDATER_H
+
+#import "SUVersionComparisonProtocol.h"
+#import "SUVersionDisplayProtocol.h"
+
+@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast;
+
+@protocol SUUpdaterDelegate;
+
+/*!
+ The main API in Sparkle for controlling the update mechanism.
+
+ This class is used to configure the update paramters as well as manually
+ and automatically schedule and control checks for updates.
+ */
+@interface SUUpdater : NSObject
+
+@property (weak) IBOutlet id<SUUpdaterDelegate> delegate;
+
++ (SUUpdater *)sharedUpdater;
++ (SUUpdater *)updaterForBundle:(NSBundle *)bundle;
+- (instancetype)initForBundle:(NSBundle *)bundle;
+
+@property (readonly, strong) NSBundle *hostBundle;
+
+@property BOOL automaticallyChecksForUpdates;
+
+@property NSTimeInterval updateCheckInterval;
+
+/*!
+ * The URL of the appcast used to download update information.
+ *
+ * This property must be called on the main thread.
+ */
+@property (copy) NSURL *feedURL;
+
+@property (nonatomic, copy) NSString *userAgentString;
+
+@property BOOL sendsSystemProfile;
+
+@property BOOL automaticallyDownloadsUpdates;
+
+/*!
+ Explicitly checks for updates and displays a progress dialog while doing so.
+
+ This method is meant for a main menu item.
+ Connect any menu item to this action in Interface Builder,
+ and Sparkle will check for updates and report back its findings verbosely
+ when it is invoked.
+ */
+- (IBAction)checkForUpdates:(id)sender;
+
+/*!
+ Checks for updates, but does not display any UI unless an update is found.
+
+ This is meant for programmatically initating a check for updates. That is,
+ it will display no UI unless it actually finds an update, in which case it
+ proceeds as usual.
+
+ If the fully automated updating is turned on, however, this will invoke that
+ behavior, and if an update is found, it will be downloaded and prepped for
+ installation.
+ */
+- (void)checkForUpdatesInBackground;
+
+/*!
+ Returns the date of last update check.
+
+ \returns \c nil if no check has been performed.
+ */
+@property (readonly, copy) NSDate *lastUpdateCheckDate;
+
+/*!
+ Begins a "probing" check for updates which will not actually offer to
+ update to that version.
+
+ However, the delegate methods
+ SUUpdaterDelegate::updater:didFindValidUpdate: and
+ SUUpdaterDelegate::updaterDidNotFindUpdate: will be called,
+ so you can use that information in your UI.
+ */
+- (void)checkForUpdateInformation;
+
+/*!
+ Appropriately schedules or cancels the update checking timer according to
+ the preferences for time interval and automatic checks.
+
+ This call does not change the date of the next check,
+ but only the internal NSTimer.
+ */
+- (void)resetUpdateCycle;
+
+@property (readonly) BOOL updateInProgress;
+
+@end
+
+// -----------------------------------------------------------------------------
+// SUUpdater Notifications for events that might be interesting to more than just the delegate
+// The updater will be the notification object
+// -----------------------------------------------------------------------------
+extern NSString *const SUUpdaterDidFinishLoadingAppCastNotification;
+extern NSString *const SUUpdaterDidFindValidUpdateNotification;
+extern NSString *const SUUpdaterDidNotFindUpdateNotification;
+extern NSString *const SUUpdaterWillRestartNotification;
+#define SUUpdaterWillRelaunchApplicationNotification SUUpdaterWillRestartNotification;
+#define SUUpdaterWillInstallUpdateNotification SUUpdaterWillRestartNotification;
+
+// Key for the SUAppcastItem object in the SUUpdaterDidFindValidUpdateNotification userInfo
+extern NSString *const SUUpdaterAppcastItemNotificationKey;
+// Key for the SUAppcast object in the SUUpdaterDidFinishLoadingAppCastNotification userInfo
+extern NSString *const SUUpdaterAppcastNotificationKey;
+
+// -----------------------------------------------------------------------------
+// SUUpdater Delegate:
+// -----------------------------------------------------------------------------
+
+/*!
+ Provides methods to control the behavior of an SUUpdater object.
+ */
+@protocol SUUpdaterDelegate <NSObject>
+@optional
+
+/*!
+ Returns whether to allow Sparkle to pop up.
+
+ For example, this may be used to prevent Sparkle from interrupting a setup assistant.
+
+ \param updater The SUUpdater instance.
+ */
+- (BOOL)updaterMayCheckForUpdates:(SUUpdater *)updater;
+
+/*!
+ Returns additional parameters to append to the appcast URL's query string.
+
+ This is potentially based on whether or not Sparkle will also be sending along the system profile.
+
+ \param updater The SUUpdater instance.
+ \param sendingProfile Whether the system profile will also be sent.
+
+ \return An array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user.
+ */
+- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile;
+
+/*!
+ Returns a custom appcast URL.
+
+ Override this to dynamically specify the entire URL.
+
+ \param updater The SUUpdater instance.
+ */
+- (NSString *)feedURLStringForUpdater:(SUUpdater *)updater;
+
+/*!
+ Returns whether Sparkle should prompt the user about automatic update checks.
+
+ Use this to override the default behavior.
+
+ \param updater The SUUpdater instance.
+ */
+- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)updater;
+
+/*!
+ Called after Sparkle has downloaded the appcast from the remote server.
+
+ Implement this if you want to do some special handling with the appcast once it finishes loading.
+
+ \param updater The SUUpdater instance.
+ \param appcast The appcast that was downloaded from the remote server.
+ */
+- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast;
+
+/*!
+ Returns the item in the appcast corresponding to the update that should be installed.
+
+ If you're using special logic or extensions in your appcast,
+ implement this to use your own logic for finding a valid update, if any,
+ in the given appcast.
+
+ \param appcast The appcast that was downloaded from the remote server.
+ \param updater The SUUpdater instance.
+ */
+- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)updater;
+
+/*!
+ Called when a valid update is found by the update driver.
+
+ \param updater The SUUpdater instance.
+ \param item The appcast item corresponding to the update that is proposed to be installed.
+ */
+- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)item;
+
+/*!
+ Called when a valid update is not found.
+
+ \param updater The SUUpdater instance.
+ */
+- (void)updaterDidNotFindUpdate:(SUUpdater *)updater;
+
+/*!
+ Called immediately before installing the specified update.
+
+ \param updater The SUUpdater instance.
+ \param item The appcast item corresponding to the update that is proposed to be installed.
+ */
+- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)item;
+
+/*!
+ Returns whether the relaunch should be delayed in order to perform other tasks.
+
+ This is not called if the user didn't relaunch on the previous update,
+ in that case it will immediately restart.
+
+ \param updater The SUUpdater instance.
+ \param item The appcast item corresponding to the update that is proposed to be installed.
+ \param invocation The invocation that must be completed before continuing with the relaunch.
+
+ \return \c YES to delay the relaunch until \p invocation is invoked.
+ */
+- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)item untilInvoking:(NSInvocation *)invocation;
+
+/*!
+ Returns whether the application should be relaunched at all.
+
+ Some apps \b cannot be relaunched under certain circumstances.
+ This method can be used to explicitly prevent a relaunch.
+
+ \param updater The SUUpdater instance.
+ */
+- (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater;
+
+/*!
+ Called immediately before relaunching.
+
+ \param updater The SUUpdater instance.
+ */
+- (void)updaterWillRelaunchApplication:(SUUpdater *)updater;
+
+/*!
+ Returns an object that compares version numbers to determine their arithmetic relation to each other.
+
+ This method allows you to provide a custom version comparator.
+ If you don't implement this method or return \c nil,
+ the standard version comparator will be used.
+
+ \sa SUStandardVersionComparator
+
+ \param updater The SUUpdater instance.
+ */
+- (id<SUVersionComparison>)versionComparatorForUpdater:(SUUpdater *)updater;
+
+/*!
+ Returns an object that formats version numbers for display to the user.
+
+ If you don't implement this method or return \c nil,
+ the standard version formatter will be used.
+
+ \sa SUUpdateAlert
+
+ \param updater The SUUpdater instance.
+ */
+- (id<SUVersionDisplay>)versionDisplayerForUpdater:(SUUpdater *)updater;
+
+/*!
+ Returns the path which is used to relaunch the client after the update is installed.
+
+ The default is the path of the host bundle.
+
+ \param updater The SUUpdater instance.
+ */
+- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater;
+
+/*!
+ Called before an updater shows a modal alert window,
+ to give the host the opportunity to hide attached windows that may get in the way.
+
+ \param updater The SUUpdater instance.
+ */
+- (void)updaterWillShowModalAlert:(SUUpdater *)updater;
+
+/*!
+ Called after an updater shows a modal alert window,
+ to give the host the opportunity to hide attached windows that may get in the way.
+
+ \param updater The SUUpdater instance.
+ */
+- (void)updaterDidShowModalAlert:(SUUpdater *)updater;
+
+/*!
+ Called when an update is scheduled to be silently installed on quit.
+
+ \param updater The SUUpdater instance.
+ \param item The appcast item corresponding to the update that is proposed to be installed.
+ \param invocation Can be used to trigger an immediate silent install and relaunch.
+ */
+- (void)updater:(SUUpdater *)updater willInstallUpdateOnQuit:(SUAppcastItem *)item immediateInstallationInvocation:(NSInvocation *)invocation;
+
+/*!
+ Calls after an update that was scheduled to be silently installed on quit has been canceled.
+
+ \param updater The SUUpdater instance.
+ \param item The appcast item corresponding to the update that was proposed to be installed.
+ */
+- (void)updater:(SUUpdater *)updater didCancelInstallUpdateOnQuit:(SUAppcastItem *)item;
+
+@end
+
+
+// -----------------------------------------------------------------------------
+// Constants:
+// -----------------------------------------------------------------------------
+
+// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds.
+#if defined(DEBUG) && DEBUG && 0
+#define SU_MIN_CHECK_INTERVAL 60
+#else
+#define SU_MIN_CHECK_INTERVAL 60 * 60
+#endif
+
+#if defined(DEBUG) && DEBUG && 0
+#define SU_DEFAULT_CHECK_INTERVAL 60
+#else
+#define SU_DEFAULT_CHECK_INTERVAL 60 * 60 * 24
+#endif
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h b/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h
new file mode 100644
index 0000000..d3fb3d2
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h
@@ -0,0 +1,29 @@
+//
+// SUVersionComparisonProtocol.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUVERSIONCOMPARISONPROTOCOL_H
+#define SUVERSIONCOMPARISONPROTOCOL_H
+
+#import <Cocoa/Cocoa.h>
+
+/*!
+ Provides version comparison facilities for Sparkle.
+*/
+@protocol SUVersionComparison
+
+/*!
+ An abstract method to compare two version strings.
+
+ Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a,
+ and NSOrderedSame if they are equivalent.
+*/
+- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD!
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h b/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h
new file mode 100644
index 0000000..697f1a8
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h
@@ -0,0 +1,25 @@
+//
+// SUVersionDisplayProtocol.h
+// EyeTV
+//
+// Created by Uli Kusterer on 08.12.09.
+// Copyright 2009 Elgato Systems GmbH. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+/*!
+ Applies special display formatting to version numbers.
+*/
+@protocol SUVersionDisplay
+
+/*!
+ Formats two version strings.
+
+ Both versions are provided so that important distinguishing information
+ can be displayed while also leaving out unnecessary/confusing parts.
+*/
+- (void)formatVersion:(NSString **)inOutVersionA andVersion:(NSString **)inOutVersionB;
+
+@end
diff --git a/Sparkle.framework/Versions/A/Headers/Sparkle.h b/Sparkle.framework/Versions/A/Headers/Sparkle.h
new file mode 100644
index 0000000..954ca51
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/Sparkle.h
@@ -0,0 +1,22 @@
+//
+// Sparkle.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07)
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SPARKLE_H
+#define SPARKLE_H
+
+// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless
+// there are name-space collisions) so we can list all of them to start with:
+
+#import <Sparkle/SUUpdater.h>
+
+#import <Sparkle/SUAppcast.h>
+#import <Sparkle/SUAppcastItem.h>
+#import <Sparkle/SUVersionComparisonProtocol.h>
+#import <Sparkle/SUStandardVersionComparator.h>
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist
new file mode 100644
index 0000000..e557818
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist
@@ -0,0 +1,50 @@
+<?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>BuildMachineOSBuild</key>
+ <string>14A298i</string>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>Autoupdate</string>
+ <key>CFBundleIconFile</key>
+ <string>AppIcon</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.sparkle-project.Sparkle.Autoupdate</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.8.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.8.0</string>
+ <key>DTCompiler</key>
+ <string>com.apple.compilers.llvm.clang.1_0</string>
+ <key>DTPlatformBuild</key>
+ <string>6A254o</string>
+ <key>DTPlatformVersion</key>
+ <string>GM</string>
+ <key>DTSDKBuild</key>
+ <string>14A283h</string>
+ <key>DTSDKName</key>
+ <string>macosx10.10</string>
+ <key>DTXcode</key>
+ <string>0600</string>
+ <key>DTXcodeBuild</key>
+ <string>6A254o</string>
+ <key>LSBackgroundOnly</key>
+ <string>1</string>
+ <key>LSMinimumSystemVersion</key>
+ <string>10.7</string>
+ <key>LSUIElement</key>
+ <string>1</string>
+ <key>NSMainNibFile</key>
+ <string>MainMenu</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate
new file mode 100755
index 0000000..a3740cd
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo
new file mode 100644
index 0000000..bd04210
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo
@@ -0,0 +1 @@
+APPL???? \ No newline at end of file
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns
new file mode 100644
index 0000000..b6fa734
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib
new file mode 100644
index 0000000..b16eb22
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings
new file mode 100644
index 0000000..28c2c21
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings
new file mode 100644
index 0000000..a50d6bf
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings
new file mode 100644
index 0000000..8c349bd
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings
new file mode 100644
index 0000000..fe50db5
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings
new file mode 100644
index 0000000..015c213
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings
new file mode 100644
index 0000000..d2e5e5c
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings
new file mode 100644
index 0000000..ee69407
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings
new file mode 100644
index 0000000..c7b221b
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings
new file mode 100644
index 0000000..68ae6e0
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings
new file mode 100644
index 0000000..99955af
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings
new file mode 100644
index 0000000..faa546c
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings
new file mode 100644
index 0000000..d5df79d
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings
new file mode 100644
index 0000000..05a426d
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings
new file mode 100644
index 0000000..95923ee
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings
new file mode 100644
index 0000000..d10801f
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings
new file mode 100644
index 0000000..0f2ef4d
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings
new file mode 100644
index 0000000..69853a3
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings
new file mode 100644
index 0000000..3cd694d
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings
new file mode 100644
index 0000000..349f17f
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings
new file mode 100644
index 0000000..38bb70d
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings
new file mode 100644
index 0000000..889a658
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings
new file mode 100644
index 0000000..fbebf96
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings
new file mode 100644
index 0000000..323bb70
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings
new file mode 100644
index 0000000..ccc268f
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings
new file mode 100644
index 0000000..c3f3d9e
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings
new file mode 100644
index 0000000..49b68ce
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings
new file mode 100644
index 0000000..17fcca0
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/Info.plist b/Sparkle.framework/Versions/A/Resources/Info.plist
new file mode 100644
index 0000000..fd7868b
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Info.plist
@@ -0,0 +1,40 @@
+<?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>BuildMachineOSBuild</key>
+ <string>14A298i</string>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>Sparkle</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.andymatuschak.Sparkle</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Sparkle</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.8.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>0b186dc</string>
+ <key>DTCompiler</key>
+ <string>com.apple.compilers.llvm.clang.1_0</string>
+ <key>DTPlatformBuild</key>
+ <string>6A254o</string>
+ <key>DTPlatformVersion</key>
+ <string>GM</string>
+ <key>DTSDKBuild</key>
+ <string>14A283h</string>
+ <key>DTSDKName</key>
+ <string>macosx10.10</string>
+ <key>DTXcode</key>
+ <string>0600</string>
+ <key>DTXcodeBuild</key>
+ <string>6A254o</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist b/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist
new file mode 100644
index 0000000..74db0ff
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist
@@ -0,0 +1,228 @@
+<?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>ADP2,1</key>
+ <string>Developer Transition Kit</string>
+ <key>iMac1,1</key>
+ <string>iMac G3 (Rev A-D)</string>
+ <key>iMac4,1</key>
+ <string>iMac (Core Duo)</string>
+ <key>iMac4,2</key>
+ <string>iMac for Education (17 inch, Core Duo)</string>
+ <key>iMac5,1</key>
+ <string>iMac (Core 2 Duo, 17 or 20 inch, SuperDrive)</string>
+ <key>iMac5,2</key>
+ <string>iMac (Core 2 Duo, 17 inch, Combo Drive)</string>
+ <key>iMac6,1</key>
+ <string>iMac (Core 2 Duo, 24 inch, SuperDrive)</string>
+ <key>iMac8,1</key>
+ <string>iMac (Core 2 Duo, 20 or 24 inch, Early 2008 )</string>
+ <key>iMac9,1</key>
+ <string>iMac (Core 2 Duo, 20 or 24 inch, Early or Mid 2009 )</string>
+ <key>iMac10,1</key>
+ <string>iMac (Core 2 Duo, 21.5 or 27 inch, Late 2009 )</string>
+ <key>iMac11,1</key>
+ <string>iMac (Core i5 or i7, 27 inch Late 2009)</string>
+ <key>iMac11,2</key>
+ <string>iMac (Core i3 or i5, 27 inch Mid 2010)</string>
+ <key>iMac11,3</key>
+ <string>iMac (Core i5 or i7, 27 inch Mid 2010)</string>
+ <key>iMac12,1</key>
+ <string>iMac (Core i3 or i5 or i7, 21.5 inch Mid 2010 or Late 2011)</string>
+ <key>iMac12,2</key>
+ <string>iMac (Core i5 or i7, 27 inch Mid 2011)</string>
+ <key>iMac13,1</key>
+ <string>iMac (Core i3 or i5 or i7, 21.5 inch Late 2012 or Early 2013)</string>
+ <key>iMac13,2</key>
+ <string>iMac (Core i5 or i7, 27 inch Late 2012)</string>
+ <key>iMac14,1</key>
+ <string>iMac (Core i5, 21.5 inch Late 2013)</string>
+ <key>iMac14,2</key>
+ <string>iMac (Core i5 or i7, 27 inch Late 2013)</string>
+ <key>iMac14,3</key>
+ <string>iMac (Core i5 or i7, 21.5 inch Late 2013)</string>
+ <key>MacBook1,1</key>
+ <string>MacBook (Core Duo)</string>
+ <key>MacBook2,1</key>
+ <string>MacBook (Core 2 Duo)</string>
+ <key>MacBook4,1</key>
+ <string>MacBook (Core 2 Duo Feb 2008)</string>
+ <key>MacBook5,1</key>
+ <string>MacBook (Core 2 Duo, Late 2008, Unibody)</string>
+ <key>MacBook5,2</key>
+ <string>MacBook (Core 2 Duo, Early 2009, White)</string>
+ <key>MacBook6,1</key>
+ <string>MacBook (Core 2 Duo, Late 2009, Unibody)</string>
+ <key>MacBook7,1</key>
+ <string>MacBook (Core 2 Duo, Mid 2010, White)</string>
+ <key>MacBookAir1,1</key>
+ <string>MacBook Air (Core 2 Duo, 13 inch, Early 2008)</string>
+ <key>MacBookAir2,1</key>
+ <string>MacBook Air (Core 2 Duo, 13 inch, Mid 2009)</string>
+ <key>MacBookAir3,1</key>
+ <string>MacBook Air (Core 2 Duo, 11 inch, Late 2010)</string>
+ <key>MacBookAir3,2</key>
+ <string>MacBook Air (Core 2 Duo, 13 inch, Late 2010)</string>
+ <key>MacBookAir4,1</key>
+ <string>MacBook Air (Core i5 or i7, 11 inch, Mid 2011)</string>
+ <key>MacBookAir4,2</key>
+ <string>MacBook Air (Core i5 or i7, 13 inch, Mid 2011)</string>
+ <key>MacBookAir5,1</key>
+ <string>MacBook Air (Core i5 or i7, 11 inch, Mid 2012)</string>
+ <key>MacBookAir5,2</key>
+ <string>MacBook Air (Core i5 or i7, 13 inch, Mid 2012)</string>
+ <key>MacBookAir6,1</key>
+ <string>MacBook Air (Core i5 or i7, 11 inch, Mid 2013 or Early 2014)</string>
+ <key>MacBookAir6,2</key>
+ <string>MacBook Air (Core i5 or i7, 13 inch, Mid 2013 or Early 2014)</string>
+ <key>MacBookPro1,1</key>
+ <string>MacBook Pro Core Duo (15-inch)</string>
+ <key>MacBookPro1,2</key>
+ <string>MacBook Pro Core Duo (17-inch)</string>
+ <key>MacBookPro2,1</key>
+ <string>MacBook Pro Core 2 Duo (17-inch)</string>
+ <key>MacBookPro2,2</key>
+ <string>MacBook Pro Core 2 Duo (15-inch)</string>
+ <key>MacBookPro3,1</key>
+ <string>MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo)</string>
+ <key>MacBookPro3,2</key>
+ <string>MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo)</string>
+ <key>MacBookPro4,1</key>
+ <string>MacBook Pro (Core 2 Duo Feb 2008)</string>
+ <key>Macmini1,1</key>
+ <string>Mac Mini (Core Solo/Duo)</string>
+ <key>MacPro1,1</key>
+ <string>Mac Pro (four-core)</string>
+ <key>MacPro2,1</key>
+ <string>Mac Pro (eight-core)</string>
+ <key>MacPro3,1</key>
+ <string>Mac Pro (January 2008 4- or 8- core &quot;Harpertown&quot;)</string>
+ <key>MacPro4,1</key>
+ <string>Mac Pro (March 2009)</string>
+ <key>MacPro5,1</key>
+ <string>Mac Pro (August 2010)</string>
+ <key>PowerBook1,1</key>
+ <string>PowerBook G3</string>
+ <key>PowerBook2,1</key>
+ <string>iBook G3</string>
+ <key>PowerBook2,2</key>
+ <string>iBook G3 (FireWire)</string>
+ <key>PowerBook2,3</key>
+ <string>iBook G3</string>
+ <key>PowerBook2,4</key>
+ <string>iBook G3</string>
+ <key>PowerBook3,1</key>
+ <string>PowerBook G3 (FireWire)</string>
+ <key>PowerBook3,2</key>
+ <string>PowerBook G4</string>
+ <key>PowerBook3,3</key>
+ <string>PowerBook G4 (Gigabit Ethernet)</string>
+ <key>PowerBook3,4</key>
+ <string>PowerBook G4 (DVI)</string>
+ <key>PowerBook3,5</key>
+ <string>PowerBook G4 (1GHz / 867MHz)</string>
+ <key>PowerBook4,1</key>
+ <string>iBook G3 (Dual USB, Late 2001)</string>
+ <key>PowerBook4,2</key>
+ <string>iBook G3 (16MB VRAM)</string>
+ <key>PowerBook4,3</key>
+ <string>iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003)</string>
+ <key>PowerBook5,1</key>
+ <string>PowerBook G4 (17 inch)</string>
+ <key>PowerBook5,2</key>
+ <string>PowerBook G4 (15 inch FW 800)</string>
+ <key>PowerBook5,3</key>
+ <string>PowerBook G4 (17-inch 1.33GHz)</string>
+ <key>PowerBook5,4</key>
+ <string>PowerBook G4 (15 inch 1.5/1.33GHz)</string>
+ <key>PowerBook5,5</key>
+ <string>PowerBook G4 (17-inch 1.5GHz)</string>
+ <key>PowerBook5,6</key>
+ <string>PowerBook G4 (15 inch 1.67GHz/1.5GHz)</string>
+ <key>PowerBook5,7</key>
+ <string>PowerBook G4 (17-inch 1.67GHz)</string>
+ <key>PowerBook5,8</key>
+ <string>PowerBook G4 (Double layer SD, 15 inch)</string>
+ <key>PowerBook5,9</key>
+ <string>PowerBook G4 (Double layer SD, 17 inch)</string>
+ <key>PowerBook6,1</key>
+ <string>PowerBook G4 (12 inch)</string>
+ <key>PowerBook6,2</key>
+ <string>PowerBook G4 (12 inch, DVI)</string>
+ <key>PowerBook6,3</key>
+ <string>iBook G4</string>
+ <key>PowerBook6,4</key>
+ <string>PowerBook G4 (12 inch 1.33GHz)</string>
+ <key>PowerBook6,5</key>
+ <string>iBook G4 (Early-Late 2004)</string>
+ <key>PowerBook6,7</key>
+ <string>iBook G4 (Mid 2005)</string>
+ <key>PowerBook6,8</key>
+ <string>PowerBook G4 (12 inch 1.5GHz)</string>
+ <key>PowerMac1,1</key>
+ <string>Power Macintosh G3 (Blue &amp; White)</string>
+ <key>PowerMac1,2</key>
+ <string>Power Macintosh G4 (PCI Graphics)</string>
+ <key>PowerMac10,1</key>
+ <string>Mac Mini G4</string>
+ <key>PowerMac10,2</key>
+ <string>Mac Mini (Late 2005)</string>
+ <key>PowerMac11,2</key>
+ <string>Power Macintosh G5 (Late 2005)</string>
+ <key>PowerMac12,1</key>
+ <string>iMac G5 (iSight)</string>
+ <key>PowerMac2,1</key>
+ <string>iMac G3 (Slot-loading CD-ROM)</string>
+ <key>PowerMac2,2</key>
+ <string>iMac G3 (Summer 2000)</string>
+ <key>PowerMac3,1</key>
+ <string>Power Macintosh G4 (AGP Graphics)</string>
+ <key>PowerMac3,2</key>
+ <string>Power Macintosh G4 (AGP Graphics)</string>
+ <key>PowerMac3,3</key>
+ <string>Power Macintosh G4 (Gigabit Ethernet)</string>
+ <key>PowerMac3,4</key>
+ <string>Power Macintosh G4 (Digital Audio)</string>
+ <key>PowerMac3,5</key>
+ <string>Power Macintosh G4 (Quick Silver)</string>
+ <key>PowerMac3,6</key>
+ <string>Power Macintosh G4 (Mirrored Drive Door)</string>
+ <key>PowerMac4,1</key>
+ <string>iMac G3 (Early/Summer 2001)</string>
+ <key>PowerMac4,2</key>
+ <string>iMac G4 (Flat Panel)</string>
+ <key>PowerMac4,4</key>
+ <string>eMac</string>
+ <key>PowerMac4,5</key>
+ <string>iMac G4 (17-inch Flat Panel)</string>
+ <key>PowerMac5,1</key>
+ <string>Power Macintosh G4 Cube</string>
+ <key>PowerMac6,1</key>
+ <string>iMac G4 (USB 2.0)</string>
+ <key>PowerMac6,3</key>
+ <string>iMac G4 (20-inch Flat Panel)</string>
+ <key>PowerMac6,4</key>
+ <string>eMac (USB 2.0, 2005)</string>
+ <key>PowerMac7,2</key>
+ <string>Power Macintosh G5</string>
+ <key>PowerMac7,3</key>
+ <string>Power Macintosh G5</string>
+ <key>PowerMac8,1</key>
+ <string>iMac G5</string>
+ <key>PowerMac8,2</key>
+ <string>iMac G5 (Ambient Light Sensor)</string>
+ <key>PowerMac9,1</key>
+ <string>Power Macintosh G5 (Late 2005)</string>
+ <key>RackMac1,1</key>
+ <string>Xserve G4</string>
+ <key>RackMac1,2</key>
+ <string>Xserve G4 (slot-loading, cluster node)</string>
+ <key>RackMac3,1</key>
+ <string>Xserve G5</string>
+ <key>Xserve1,1</key>
+ <string>Xserve (Intel Xeon)</string>
+ <key>Xserve2,1</key>
+ <string>Xserve (January 2008 quad-core)</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/SUStatus.nib b/Sparkle.framework/Versions/A/Resources/SUStatus.nib
new file mode 100644
index 0000000..b16eb22
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/SUStatus.nib
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib
new file mode 100644
index 0000000..10b3948
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib
new file mode 100644
index 0000000..2f73d6e
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib
new file mode 100644
index 0000000..e962ae2
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings
new file mode 100644
index 0000000..d2e5e5c
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Sparkle b/Sparkle.framework/Versions/A/Sparkle
new file mode 100755
index 0000000..5398212
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Sparkle
Binary files differ
diff --git a/Sparkle.framework/Versions/Current b/Sparkle.framework/Versions/Current
new file mode 120000
index 0000000..8c7e5a6
--- /dev/null
+++ b/Sparkle.framework/Versions/Current
@@ -0,0 +1 @@
+A \ No newline at end of file