aboutsummaryrefslogtreecommitdiffstats
path: root/Sparkle.framework
diff options
context:
space:
mode:
authormattlangtree <matt@northofthree.com>2008-08-30 16:29:57 +0000
committermattlangtree <matt@northofthree.com>2008-08-30 16:29:57 +0000
commit3346039f0a92087d9c45cc8b20ff99fb95f85c38 (patch)
treecddb09046c01f9be2422039fc1d9fcbc508311d0 /Sparkle.framework
parent7991997ee4ec10eb4fced5fe054b4af9b11f3b3f (diff)
downloadsequelpro-3346039f0a92087d9c45cc8b20ff99fb95f85c38.tar.gz
sequelpro-3346039f0a92087d9c45cc8b20ff99fb95f85c38.tar.bz2
sequelpro-3346039f0a92087d9c45cc8b20ff99fb95f85c38.zip
#1 - Add Software Update checking
- Added Sparkle.Framework to Project. - Added SUFeedURL key in Info.plist (set to http://sequelpro.com/appcast/app-releases.xml) - Updated "Check for Updates..." menu item in MainMenu.xib to now point to SparkleFramework updater
Diffstat (limited to 'Sparkle.framework')
l---------Sparkle.framework/Headers1
l---------Sparkle.framework/Resources1
l---------Sparkle.framework/Sparkle1
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSBundle+SUAdditions.h57
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSFileManager+Aliases.h18
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h16
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSFileManager+ExtendedAttributes.h53
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h17
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSString+extras.h66
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSURL+Parameters.h18
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSWorkspace+SystemVersion.h18
-rw-r--r--Sparkle.framework/Versions/A/Headers/NSWorkspace_RBAdditions.h41
-rw-r--r--Sparkle.framework/Versions/A/Headers/NTSynchronousTask.h29
-rw-r--r--Sparkle.framework/Versions/A/Headers/RSS.h77
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUAppcast.h32
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUAppcastItem.h48
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h39
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateDriver.h23
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUBasicUpdateDriver.h59
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUConstants.h72
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUInstaller.h24
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUPackageInstaller.h19
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUPlainInstaller.h18
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUProbingUpdateDriver.h24
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUScheduledUpdateDriver.h21
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h36
-rwxr-xr-xSparkle.framework/Versions/A/Headers/SUStatusChecker.h30
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUStatusController.h42
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUSystemProfiler.h17
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUIBasedUpdateDriver.h23
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUnarchiver.h29
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h46
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUpdateDriver.h27
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUpdatePermissionPrompt.h36
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUpdater.h80
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUserDefaults.h41
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUUserInitiatedUpdateDriver.h21
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h27
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUVersionComparisonTest.h16
-rw-r--r--Sparkle.framework/Versions/A/Headers/SUWindowController.h19
-rw-r--r--Sparkle.framework/Versions/A/Headers/Sparkle.h63
-rw-r--r--Sparkle.framework/Versions/A/Resources/Info.plist24
-rw-r--r--Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist174
-rw-r--r--Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib48
-rw-r--r--Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib20
-rw-r--r--Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nibbin0 -> 7168 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib50
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib20
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nibbin0 -> 7148 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib67
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib20
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nibbin0 -> 10282 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib59
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib21
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nibbin0 -> 12679 bytes
-rw-r--r--Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.stringsbin0 -> 7580 bytes
-rwxr-xr-xSparkle.framework/Versions/A/Resources/relaunchbin0 -> 75404 bytes
-rwxr-xr-xSparkle.framework/Versions/A/Sparklebin0 -> 762824 bytes
-rw-r--r--Sparkle.framework/Versions/A/relaunch.app/Contents/Info.plist24
-rwxr-xr-xSparkle.framework/Versions/A/relaunch.app/Contents/MacOS/relaunchbin0 -> 71208 bytes
-rw-r--r--Sparkle.framework/Versions/A/relaunch.app/Contents/PkgInfo1
l---------Sparkle.framework/Versions/Current1
l---------Sparkle.framework/relaunch.app1
63 files changed, 1875 insertions, 0 deletions
diff --git a/Sparkle.framework/Headers b/Sparkle.framework/Headers
new file mode 120000
index 00000000..a177d2a6
--- /dev/null
+++ b/Sparkle.framework/Headers
@@ -0,0 +1 @@
+Versions/Current/Headers \ No newline at end of file
diff --git a/Sparkle.framework/Resources b/Sparkle.framework/Resources
new file mode 120000
index 00000000..953ee36f
--- /dev/null
+++ b/Sparkle.framework/Resources
@@ -0,0 +1 @@
+Versions/Current/Resources \ No newline at end of file
diff --git a/Sparkle.framework/Sparkle b/Sparkle.framework/Sparkle
new file mode 120000
index 00000000..b2c52731
--- /dev/null
+++ b/Sparkle.framework/Sparkle
@@ -0,0 +1 @@
+Versions/Current/Sparkle \ No newline at end of file
diff --git a/Sparkle.framework/Versions/A/Headers/NSBundle+SUAdditions.h b/Sparkle.framework/Versions/A/Headers/NSBundle+SUAdditions.h
new file mode 100644
index 00000000..38fc9238
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSBundle+SUAdditions.h
@@ -0,0 +1,57 @@
+//
+// NSBundle+SUAdditions.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSBUNDLE_PLUS_ADDITIONS_H
+#define NSBUNDLE_PLUS_ADDITIONS_H
+
+@interface NSBundle (SUAdditions)
+/*!
+ @method
+ @abstract Returns a name for the bundle suitable for display to the user.
+ @discussion This is performed by asking NSFileManager for the display name of the bundle.
+*/
+- (NSString *)name;
+
+/*!
+ @method
+ @abstract Returns the current internal version of the bundle.
+ @discussion This uses the CFBundleVersion info value. This string is not appropriate for display to users: use -displayVersion instead.
+*/
+- (NSString *)version;
+
+/*!
+ @method
+ @abstract Returns the bundle's version, suitable for display to the user.
+ @discussion If the CFBundleShortVersionString is available and different from the CFBundleVersion, this looks like CFBundleShortVersionString (CFBundleVersion). If the version strings are the same or CFBundleShortVersionString is not defined, this is equivalent to -version.
+*/
+- (NSString *)displayVersion;
+
+/*!
+ @method
+ @abstract Returns a suitable icon for this bundle.
+ @discussion Uses the CFBundleIconFile icon if defined; otherwise, uses the default application icon.
+*/
+- (NSImage *)icon;
+
+/*!
+ @method
+ @abstract Returns whether the application is running from a disk image.
+*/
+- (BOOL)isRunningFromDiskImage;
+
+/*!
+ @method
+ @abstract Returns a profile of the users system useful for statistical purposes.
+ @discussion Returns an array of dictionaries; each dictionary represents a piece of data and has keys "key", "visibleKey", "value", and "visibleValue".
+*/
+- (NSArray *)systemProfile;
+
+- (NSString *)publicDSAKey;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NSFileManager+Aliases.h b/Sparkle.framework/Versions/A/Headers/NSFileManager+Aliases.h
new file mode 100644
index 00000000..76b2b501
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSFileManager+Aliases.h
@@ -0,0 +1,18 @@
+//
+// NSFileManager+Aliases.h
+// Sparkle
+//
+// Created by Andy Matuschak on 2/4/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSFILEMANAGER_PLUS_ALIASES_H
+#define NSFILEMANAGER_PLUS_ALIASES_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface NSFileManager (Aliases)
+- (BOOL)isAliasFolderAtPath:(NSString *)path;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h b/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h
new file mode 100644
index 00000000..80b91a9b
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h
@@ -0,0 +1,16 @@
+//
+// NSFileManager+Authentication.m
+// Sparkle
+//
+// Created by Andy Matuschak on 3/9/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSFILEMANAGER_PLUS_AUTHENTICATION_H
+#define NSFILEMANAGER_PLUS_AUTHENTICATION_H
+
+@interface NSFileManager (SUAuthenticationAdditions)
+- (BOOL)copyPathWithAuthentication:(NSString *)src overPath:(NSString *)dst error:(NSError **)error;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NSFileManager+ExtendedAttributes.h b/Sparkle.framework/Versions/A/Headers/NSFileManager+ExtendedAttributes.h
new file mode 100644
index 00000000..e541c300
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSFileManager+ExtendedAttributes.h
@@ -0,0 +1,53 @@
+//
+// NSFileManager+ExtendedAttributes.h
+// Sparkle
+//
+// Created by Mark Mentovai on 2008-01-22.
+// Copyright 2008 Mark Mentovai. All rights reserved.
+//
+
+#ifndef NSFILEMANAGER_PLUS_EXTENDEDATTRIBUTES
+#define NSFILEMANAGER_PLUS_EXTENDEDATTRIBUTES
+
+#import <Cocoa/Cocoa.h>
+
+@interface NSFileManager (ExtendedAttributes)
+
+// Wraps the removexattr system call, allowing an AppKit-style NSString* to
+// be used for the pathname argument. Note that the order of the arguments
+// has changed from what removexattr accepts, so that code reads more
+// naturally.
+//
+// removexattr is only available on Mac OS X 10.4 ("Tiger") and later. If
+// built with an SDK that includes removexattr, this method will link against
+// removexattr directly. When using earlier SDKs, this method will dynamically
+// look up the removexattr symbol at runtime. If the symbol is not present,
+// as will be the case when running on 10.3, this method returns -1 and sets
+// errno to ENOSYS.
+- (int)removeXAttr:(const char*)name
+ fromFile:(NSString*)file
+ options:(int)options;
+
+// Removes the directory tree rooted at |root| from the file quarantine.
+// The quarantine was introduced on Mac OS X 10.5 and is described at:
+//
+// http://developer.apple.com/releasenotes/Carbon/RN-LaunchServices/index.html
+//#apple_ref/doc/uid/TP40001369-DontLinkElementID_2
+//
+// If |root| is not a directory, then it alone is removed from the quarantine.
+// Symbolic links, including |root| if it is a symbolic link, will not be
+// traversed.
+//
+// Ordinarily, the quarantine is managed by calling LSSetItemAttribute
+// to set the kLSItemQuarantineProperties attribute to a dictionary specifying
+// the quarantine properties to be applied. However, it does not appear to be
+// possible to remove an item from the quarantine directly through any public
+// Launch Services calls. Instead, this method takes advantage of the fact
+// that the quarantine is implemented in part by setting an extended attribute,
+// "com.apple.quarantine", on affected files. Removing this attribute is
+// sufficient to remove files from the quarantine.
+- (void)releaseFromQuarantine:(NSString*)root;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h b/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h
new file mode 100644
index 00000000..9a97eacd
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h
@@ -0,0 +1,17 @@
+//
+// NSFileManager+Verification.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/16/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSFILEMANAGER_PLUS_VERIFICATION_H
+#define NSFILEMANAGER_PLUS_VERIFICATION_H
+
+// For the paranoid folks!
+@interface NSFileManager (SUVerification)
+- (BOOL)validatePath:(NSString *)path withEncodedDSASignature:(NSString *)encodedSignature withPublicDSAKey:(NSString *)pkeyString;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NSString+extras.h b/Sparkle.framework/Versions/A/Headers/NSString+extras.h
new file mode 100644
index 00000000..7d84b688
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSString+extras.h
@@ -0,0 +1,66 @@
+/*
+
+BSD License
+
+Copyright (c) 2002, Brent Simmons
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+* Neither the name of ranchero.com or Brent Simmons nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+*/
+
+#ifndef NSSTRING_PLUS_EXTRAS_H
+#define NSSTRING_PLUS_EXTRAS_H
+
+
+/*
+ NSString+extras.h
+ NetNewsWire
+
+ Created by Brent Simmons on Fri Jun 14 2002.
+ Copyright (c) 2002 Brent Simmons. All rights reserved.
+*/
+
+
+#import <Foundation/Foundation.h>
+#import <CoreFoundation/CoreFoundation.h>
+#import "SUConstants.h" // for NSInteger
+
+@interface NSString (extras)
+
+- (NSString *)stringWithSubstitute:(NSString *)subs forCharactersFromSet:(NSCharacterSet *)set;
+
+- (NSString *) trimWhiteSpace;
+
+- (NSString *) stripHTML;
+
+- (NSString *) ellipsizeAfterNWords: (NSInteger) n;
+
++ (BOOL) stringIsEmpty: (NSString *) s;
+
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NSURL+Parameters.h b/Sparkle.framework/Versions/A/Headers/NSURL+Parameters.h
new file mode 100644
index 00000000..40b2f9e8
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSURL+Parameters.h
@@ -0,0 +1,18 @@
+//
+// NSURL+Parameters.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/6/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSURL_PLUS_PARAMETERS_H
+#define NSURL_PLUS_PARAMETERS_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface NSURL (SUParameterAdditions)
+- (NSURL *)URLWithParameters:(NSArray *)parameters;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NSWorkspace+SystemVersion.h b/Sparkle.framework/Versions/A/Headers/NSWorkspace+SystemVersion.h
new file mode 100644
index 00000000..11194125
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSWorkspace+SystemVersion.h
@@ -0,0 +1,18 @@
+//
+// NSWorkspace+SystemVersion.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/7/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSWORKSPACE_PLUS_SYSTEMVERSION_H
+#define NSWORKSPACE_PLUS_SYSTEMVERSION_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface NSWorkspace (SystemVersion)
++ (NSString *)systemVersionString;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NSWorkspace_RBAdditions.h b/Sparkle.framework/Versions/A/Headers/NSWorkspace_RBAdditions.h
new file mode 100644
index 00000000..bd50fb13
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NSWorkspace_RBAdditions.h
@@ -0,0 +1,41 @@
+//
+// NSWorkspace_RBAdditions.h
+// PathProps
+//
+// Created by Rainer Brockerhoff on 10/04/2007.
+// Copyright 2007 Rainer Brockerhoff. All rights reserved.
+//
+
+#ifndef NSWORKSPACE_RBADDITIONS_H
+#define NSWORKSPACE_RBADDITIONS_H
+
+
+extern NSString* NSWorkspace_RBfstypename;
+extern NSString* NSWorkspace_RBmntonname;
+extern NSString* NSWorkspace_RBmntfromname;
+extern NSString* NSWorkspace_RBdeviceinfo;
+extern NSString* NSWorkspace_RBimagefilepath;
+extern NSString* NSWorkspace_RBconnectiontype;
+extern NSString* NSWorkspace_RBpartitionscheme;
+extern NSString* NSWorkspace_RBserverURL;
+
+@interface NSWorkspace (NSWorkspace_RBAdditions)
+
+// This method will return nil if the input path is invalid. Otherwise, the returned NSDictionary may contain
+// the following keys:
+//- NSWorkspace_RBfstypename: will always be present.Shows the filesystem type (usually "hfs"), from statfs.
+//- NSWorkspace_RBmntonname: will always be present. Shows the volume mount point.
+//- NSWorkspace_RBmntfromname: will always be present. Shows the BSD device path for local volumes; info for
+// remote volumes depends on the filesystem type.
+//- NSWorkspace_RBconnectiontype: should always be present for local volumes. Shows the connection type ("SATA", "USB", etc.).
+//- NSWorkspace_RBpartitionscheme: should always be present for local volumes. Shows the partition scheme.
+//- NSWorkspace_RBdeviceinfo: should always be present for local volumes. Shows some information about the
+// physical device; varies widely.
+//- NSWorkspace_RBimagefilepath: should be present for disk images only. Shows the path of the disk image file.
+//- NSWorkspace_RBserverURL: should be present for remote volumes only. Shows the server URL.
+
+- (NSDictionary*)propertiesForPath:(NSString*)path;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/NTSynchronousTask.h b/Sparkle.framework/Versions/A/Headers/NTSynchronousTask.h
new file mode 100644
index 00000000..1cf5c04e
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/NTSynchronousTask.h
@@ -0,0 +1,29 @@
+//
+// NTSynchronousTask.h
+// CocoatechCore
+//
+// Created by Steve Gehrman on 9/29/05.
+// Copyright 2005 Steve Gehrman. All rights reserved.
+//
+
+#ifndef NTSYNCHRONOUSTASK_H
+#define NTSYNCHRONOUSTASK_H
+
+@interface NTSynchronousTask : NSObject
+{
+ NSTask *mv_task;
+ NSPipe *mv_outputPipe;
+ NSPipe *mv_inputPipe;
+
+ NSData* mv_output;
+ BOOL mv_done;
+ int mv_result;
+}
+
+// pass nil for directory if not needed
+// returns the result
++ (NSData*)task:(NSString*)toolPath directory:(NSString*)currentDirectory withArgs:(NSArray*)args input:(NSData*)input;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/RSS.h b/Sparkle.framework/Versions/A/Headers/RSS.h
new file mode 100644
index 00000000..38978b2b
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/RSS.h
@@ -0,0 +1,77 @@
+/*
+
+BSD License
+
+Copyright (c) 2002, Brent Simmons
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+* Neither the name of ranchero.com or Brent Simmons nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+*/
+
+#ifndef RSS_H
+#define RSS_H
+
+
+/*
+ RSS.h
+ A class for reading RSS feeds.
+
+ Created by Brent Simmons on Wed Apr 17 2002.
+ Copyright (c) 2002 Brent Simmons. All rights reserved.
+*/
+
+
+#import <Cocoa/Cocoa.h>
+#import <CoreFoundation/CoreFoundation.h>
+#import "NSString+extras.h"
+
+
+@interface RSS : NSObject {
+ NSMutableData *incrementalData;
+ id delegate;
+
+ NSDictionary *headerItems;
+ NSMutableArray *newsItems;
+ NSString *version;
+
+ BOOL flRdf;
+ BOOL normalize;
+ }
+
+- (RSS *)initWithURL:(NSURL *) url userAgent:(NSString*)userAgent delegate:delegate;
+- (BOOL)loadData:(NSData *)rssData normalize:(BOOL)fl;
+
+- (NSMutableArray *)newsItems;
+- (NSDictionary *)newestItem;
+
+@end
+
+@interface NSObject (RSSDelegateProtocol)
+- (void)feedDidFinishLoading:(RSS *)feed;
+- (void)feed:(RSS *)feed didFailWithError:(NSError *)error;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/Sparkle.framework/Versions/A/Headers/SUAppcast.h
new file mode 100644
index 00000000..624f3f21
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUAppcast.h
@@ -0,0 +1,32 @@
+//
+// SUAppcast.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/12/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAPPCAST_H
+#define SUAPPCAST_H
+
+@class RSS, SUAppcastItem;
+@interface SUAppcast : NSObject {
+ NSArray *items;
+ NSString *userAgentString;
+ id delegate;
+}
+
+- (void)fetchAppcastFromURL:(NSURL *)url;
+- (void)setDelegate:delegate;
+- (void)setUserAgentString:(NSString *)userAgentString;
+
+- (NSArray *)items;
+
+@end
+
+@interface NSObject (SUAppcastDelegate)
+- (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 00000000..d0c0523e
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h
@@ -0,0 +1,48 @@
+//
+// 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 {
+ NSString *title;
+ NSDate *date;
+ NSString *description;
+
+ NSURL *releaseNotesURL;
+
+ NSString *DSASignature;
+ NSString *minimumSystemVersion;
+
+ NSURL *fileURL;
+ NSString *versionString;
+ NSString *displayVersionString;
+
+ NSDictionary *propertiesDictionary;
+}
+
+// Initializes with data from a dictionary provided by the RSS class.
+- initWithDictionary:(NSDictionary *)dict;
+
+- (NSString *)title;
+- (NSString *)versionString;
+- (NSString *)displayVersionString;
+- (NSDate *)date;
+- (NSString *)description;
+- (NSURL *)releaseNotesURL;
+- (NSURL *)fileURL;
+- (NSString *)DSASignature;
+- (NSString *)minimumSystemVersion;
+
+// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions.
+- (NSDictionary *)propertiesDictionary;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h b/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h
new file mode 100644
index 00000000..76fb35f4
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h
@@ -0,0 +1,39 @@
+//
+// SUAutomaticUpdateAlert.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/18/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAUTOMATICUPDATEALERT_H
+#define SUAUTOMATICUPDATEALERT_H
+
+#import "SUWindowController.h"
+
+typedef enum
+{
+ SUInstallNowChoice,
+ SUInstallLaterChoice,
+ SUDoNotInstallChoice
+} SUAutomaticInstallationChoice;
+
+@class SUAppcastItem;
+@interface SUAutomaticUpdateAlert : SUWindowController {
+ SUAppcastItem *updateItem;
+ id delegate;
+ NSBundle *hostBundle;
+}
+
+- (id)initWithAppcastItem:(SUAppcastItem *)item hostBundle:(NSBundle *)hostBundle delegate:delegate;
+- (IBAction)installNow:sender;
+- (IBAction)installLater:sender;
+- (IBAction)doNotInstall:sender;
+
+@end
+
+@interface NSObject (SUAutomaticUpdateAlertDelegateProtocol)
+- (void)automaticUpdateAlert:(SUAutomaticUpdateAlert *)aua finishedWithChoice:(SUAutomaticInstallationChoice)choice;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateDriver.h b/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateDriver.h
new file mode 100644
index 00000000..f63c194e
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateDriver.h
@@ -0,0 +1,23 @@
+//
+// SUAutomaticUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/6/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAUTOMATICUPDATEDRIVER_H
+#define SUAUTOMATICUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUBasicUpdateDriver.h"
+
+@class SUAutomaticUpdateAlert;
+@interface SUAutomaticUpdateDriver : SUBasicUpdateDriver {
+ BOOL postponingInstallation, showErrors;
+ SUAutomaticUpdateAlert *alert;
+}
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUBasicUpdateDriver.h b/Sparkle.framework/Versions/A/Headers/SUBasicUpdateDriver.h
new file mode 100644
index 00000000..bd0297c5
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUBasicUpdateDriver.h
@@ -0,0 +1,59 @@
+//
+// SUBasicUpdateDriver.h
+// Sparkle,
+//
+// Created by Andy Matuschak on 4/23/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUBASICUPDATEDRIVER_H
+#define SUBASICUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUUpdateDriver.h"
+
+@class SUAppcastItem, SUUnarchiver, SUAppcast, SUUnarchiver;
+@interface SUBasicUpdateDriver : SUUpdateDriver {
+ NSBundle *hostBundle;
+ SUAppcastItem *updateItem;
+
+ NSURLDownload *download;
+ NSString *downloadPath;
+
+ SUUnarchiver *unarchiver;
+
+ NSString *relaunchPath;
+}
+
+- (void)checkForUpdatesAtURL:(NSURL *)appcastURL hostBundle:(NSBundle *)hb;
+
+- (void)appcastDidFinishLoading:(SUAppcast *)ac;
+- (void)appcast:(SUAppcast *)ac failedToLoadWithError:(NSError *)error;
+
+- (BOOL)isItemNewer:(SUAppcastItem *)ui;
+- (BOOL)hostSupportsItem:(SUAppcastItem *)ui;
+- (BOOL)itemContainsSkippedVersion:(SUAppcastItem *)ui;
+- (BOOL)itemContainsValidUpdate:(SUAppcastItem *)ui;
+- (void)didFindValidUpdate;
+- (void)didNotFindUpdate;
+
+- (void)downloadUpdate;
+- (void)download:(NSURLDownload *)d decideDestinationWithSuggestedFilename:(NSString *)name;
+- (void)downloadDidFinish:(NSURLDownload *)d;
+- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error;
+
+- (void)extractUpdate;
+- (void)unarchiverDidFinish:(SUUnarchiver *)ua;
+- (void)unarchiverDidFail:(SUUnarchiver *)ua;
+
+- (void)installUpdate;
+- (void)installerFinishedForHostBundle:(NSBundle *)hb;
+- (void)installerForHostBundle:(NSBundle *)hb failedWithError:(NSError *)error;
+- (void)relaunchHostApp;
+
+- (void)abortUpdate;
+- (void)abortUpdateWithError:(NSError *)error;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUConstants.h b/Sparkle.framework/Versions/A/Headers/SUConstants.h
new file mode 100644
index 00000000..c0c427af
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUConstants.h
@@ -0,0 +1,72 @@
+//
+// SUConstants.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/16/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+
+#ifndef SUCONSTANTS_H
+#define SUCONSTANTS_H
+
+
+extern NSString *SUUpdaterWillRestartNotification;
+extern NSString *SUTechnicalErrorInformationKey;
+
+extern NSString *SUFeedURLKey;
+extern NSString *SUHasLaunchedBeforeKey;
+extern NSString *SUShowReleaseNotesKey;
+extern NSString *SUSkippedVersionKey;
+extern NSString *SUScheduledCheckIntervalKey;
+extern NSString *SULastCheckTimeKey;
+extern NSString *SUExpectsDSASignatureKey;
+extern NSString *SUPublicDSAKeyKey;
+extern NSString *SUPublicDSAKeyFileKey;
+extern NSString *SUAutomaticallyUpdateKey;
+extern NSString *SUAllowsAutomaticUpdatesKey;
+extern NSString *SUEnableAutomaticChecksKey;
+extern NSString *SUEnableAutomaticChecksKeyOld;
+extern NSString *SUEnableSystemProfilingKey;
+extern NSString *SUSendProfileInfoKey;
+
+extern NSString *SUSparkleErrorDomain;
+// Appcast phase errors.
+extern OSStatus SUAppcastParseError;
+extern OSStatus SUNoUpdateError;
+extern OSStatus SUAppcastError;
+extern OSStatus SURunningFromDiskImageError;
+
+// Downlaod phase errors.
+extern OSStatus SUTemporaryDirectoryError;
+
+// Extraction phase errors.
+extern OSStatus SUUnarchivingError;
+extern OSStatus SUSignatureError;
+
+// Installation phase errors.
+extern OSStatus SUFileCopyFailure;
+extern OSStatus SUAuthenticationFailure;
+extern OSStatus SUMissingUpdateError;
+extern OSStatus SUMissingInstallerToolError;
+extern OSStatus SURelaunchError;
+extern OSStatus SUInstallationError;
+
+// NSInteger is a type that was added to Leopard.
+// Here is some glue to ensure that NSInteger will work with pre-10.5 SDKs:
+#ifndef NSINTEGER_DEFINED
+ #ifdef NS_BUILD_32_LIKE_64
+ typedef long NSInteger;
+ typedef unsigned long NSUInteger;
+ #else
+ typedef int NSInteger;
+ typedef unsigned int NSUInteger;
+ #endif
+ #define NSIntegerMax LONG_MAX
+ #define NSIntegerMin LONG_MIN
+ #define NSUIntegerMax ULONG_MAX
+ #define NSINTEGER_DEFINED 1
+#endif
+
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUInstaller.h b/Sparkle.framework/Versions/A/Headers/SUInstaller.h
new file mode 100644
index 00000000..08bfc974
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUInstaller.h
@@ -0,0 +1,24 @@
+//
+// SUInstaller.h
+// Sparkle
+//
+// Created by Andy Matuschak on 4/10/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUINSTALLER_H
+#define SUINSTALLER_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface SUInstaller : NSObject { }
++ (void)installFromUpdateFolder:(NSString *)updateFolder overHostBundle:(NSBundle *)hostBundle delegate:delegate synchronously:(BOOL)synchronously;
++ (void)_finishInstallationWithResult:(BOOL)result hostBundle:(NSBundle *)hostBundle error:(NSError *)error delegate:delegate;
+@end
+
+@interface NSObject (SUInstallerDelegateInformalProtocol)
+- (void)installerFinishedForHostBundle:(NSBundle *)hostBundle;
+- (void)installerForHostBundle:(NSBundle *)hostBundle failedWithError:(NSError *)error;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUPackageInstaller.h b/Sparkle.framework/Versions/A/Headers/SUPackageInstaller.h
new file mode 100644
index 00000000..94bb3ad0
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUPackageInstaller.h
@@ -0,0 +1,19 @@
+//
+// SUPackageInstaller.h
+// Sparkle
+//
+// Created by Andy Matuschak on 4/10/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUPACKAGEINSTALLER_H
+#define SUPACKAGEINSTALLER_H
+
+#import "Sparkle.h"
+#import "SUPlainInstaller.h"
+
+@interface SUPackageInstaller : SUPlainInstaller { }
++ (void)installPath:(NSString *)path overHostBundle:(NSBundle *)bundle delegate:delegate;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUPlainInstaller.h b/Sparkle.framework/Versions/A/Headers/SUPlainInstaller.h
new file mode 100644
index 00000000..075ffe66
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUPlainInstaller.h
@@ -0,0 +1,18 @@
+//
+// SUPlainInstaller.h
+// Sparkle
+//
+// Created by Andy Matuschak on 4/10/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUPLAININSTALLER_H
+#define SUPLAININSTALLER_H
+
+#import "Sparkle.h"
+
+@interface SUPlainInstaller : SUInstaller { }
++ (void)performInstallationWithPath:(NSString *)path hostBundle:(NSBundle *)hostBundle delegate:delegate synchronously:(BOOL)synchronously;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUProbingUpdateDriver.h b/Sparkle.framework/Versions/A/Headers/SUProbingUpdateDriver.h
new file mode 100644
index 00000000..c91c6a32
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUProbingUpdateDriver.h
@@ -0,0 +1,24 @@
+//
+// SUProbingUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/7/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUPROBINGUPDATEDRIVER_H
+#define SUPROBINGUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUBasicUpdateDriver.h"
+
+// This replaces the old SUStatusChecker.
+@interface SUProbingUpdateDriver : SUBasicUpdateDriver { }
+@end
+
+@interface NSObject (SUProbeDriverDelegateProtocol)
+- (void)didFindValidUpdate:(SUAppcastItem *)item toHostBundle:(NSBundle *)hb;
+- (void)didNotFindUpdateToHostBundle:(NSBundle *)hb;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUScheduledUpdateDriver.h b/Sparkle.framework/Versions/A/Headers/SUScheduledUpdateDriver.h
new file mode 100644
index 00000000..892a6a74
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUScheduledUpdateDriver.h
@@ -0,0 +1,21 @@
+//
+// SUScheduledUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/6/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUSCHEDULEDUPDATEDRIVER_H
+#define SUSCHEDULEDUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUUIBasedUpdateDriver.h"
+
+@interface SUScheduledUpdateDriver : SUUIBasedUpdateDriver {
+ BOOL showErrors;
+}
+
+@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 00000000..0bc15706
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h
@@ -0,0 +1,36 @@
+//
+// 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"
+
+/*!
+ @class
+ @abstract Sparkle's default version comparator.
+ @discussion 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> { }
+
+/*!
+ @method
+ @abstract Returns a singleton instance of the comparator.
+*/
++ (SUStandardVersionComparator *)defaultComparator;
+
+/*!
+ @method
+ @abstract Compares version strings through textual analysis.
+ @discussion See the implementation for more details.
+*/
+- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h b/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h
new file mode 100755
index 00000000..a1fca913
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h
@@ -0,0 +1,30 @@
+//
+// SUStatusChecker.h
+// Sparkle
+//
+// Created by Evan Schoenberg on 7/6/06.
+//
+
+#ifndef SUSTATUSCHECKER_H
+#define SUSTATUSCHECKER_H
+
+#import "SUUpdater.h"
+
+@class SUStatusChecker;
+
+@protocol SUStatusCheckerDelegate <NSObject>
+//versionString will be nil and isNewVersion will be NO if version checking fails.
+- (void)statusChecker:(SUStatusChecker *)statusChecker foundVersion:(NSString *)versionString isNewVersion:(BOOL)isNewVersion;
+@end
+
+@interface SUStatusChecker : SUUpdater {
+ id<SUStatusCheckerDelegate> scDelegate;
+}
+
+// Create a status checker which will notifiy delegate once the appcast version is determined.
+// Notification occurs via the method defined in the SUStatusCheckerDelegate informal protocol.
++ (SUStatusChecker *)statusCheckerForDelegate:(id<SUStatusCheckerDelegate>)delegate;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUStatusController.h b/Sparkle.framework/Versions/A/Headers/SUStatusController.h
new file mode 100644
index 00000000..dc0c197f
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUStatusController.h
@@ -0,0 +1,42 @@
+//
+// SUStatusController.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/14/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUSTATUSCONTROLLER_H
+#define SUSTATUSCONTROLLER_H
+
+#import "SUWindowController.h"
+
+@interface SUStatusController : SUWindowController {
+ double progressValue, maxProgressValue;
+ NSString *title, *statusText, *buttonTitle;
+ IBOutlet NSButton *actionButton;
+ IBOutlet NSProgressIndicator* progressBar;
+ NSBundle *hostBundle;
+}
+
+- (id)initWithHostBundle:(NSBundle *)hostBundle;
+
+// Pass 0 for the max progress value to get an indeterminate progress bar.
+// Pass nil for the status text to not show it.
+- (void)beginActionWithTitle:(NSString *)title maxProgressValue:(double)maxProgressValue statusText:(NSString *)statusText;
+
+// If isDefault is YES, the button's key equivalent will be \r.
+- (void)setButtonTitle:(NSString *)buttonTitle target:target action:(SEL)action isDefault:(BOOL)isDefault;
+- (void)setButtonEnabled:(BOOL)enabled;
+- (void)setButtonHidden:(BOOL)hidden;
+
+- (double)progressValue;
+- (void)setProgressValue:(double)value;
+- (double)maxProgressValue;
+- (void)setMaxProgressValue:(double)value;
+
+- (void)setStatusText:(NSString *)statusText;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUSystemProfiler.h b/Sparkle.framework/Versions/A/Headers/SUSystemProfiler.h
new file mode 100644
index 00000000..8ce9f545
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUSystemProfiler.h
@@ -0,0 +1,17 @@
+//
+// SUSystemProfiler.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/22/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUSYSTEMPROFILER_H
+#define SUSYSTEMPROFILER_H
+
+@interface SUSystemProfiler : NSObject {}
++ (SUSystemProfiler *)sharedSystemProfiler;
+- (NSMutableArray *)systemProfileArrayForHostBundle:(NSBundle *)hostBundle;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUUIBasedUpdateDriver.h b/Sparkle.framework/Versions/A/Headers/SUUIBasedUpdateDriver.h
new file mode 100644
index 00000000..d3459801
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUIBasedUpdateDriver.h
@@ -0,0 +1,23 @@
+//
+// SUUIBasedUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/5/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUIBASEDUPDATEDRIVER_H
+#define SUUIBASEDUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUBasicUpdateDriver.h"
+
+@class SUStatusController, SUUpdateAlert;
+@interface SUUIBasedUpdateDriver : SUBasicUpdateDriver {
+ SUStatusController *statusController;
+ SUUpdateAlert *updateAlert;
+}
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h b/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h
new file mode 100644
index 00000000..337bf500
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h
@@ -0,0 +1,29 @@
+//
+// SUUnarchiver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/16/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUNARCHIVER_H
+#define SUUNARCHIVER_H
+
+@interface SUUnarchiver : NSObject {
+ id delegate;
+ NSString *archivePath;
+}
+
+- (void)unarchivePath:(NSString *)path;
+- (void)setDelegate:delegate;
+- (void)cleanUp;
+
+@end
+
+@interface NSObject (SUUnarchiverDelegate)
+- (void)unarchiver:(SUUnarchiver *)unarchiver extractedLength:(long)length;
+- (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver;
+- (void)unarchiverDidFail:(SUUnarchiver *)unarchiver;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h b/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h
new file mode 100644
index 00000000..a0288aba
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h
@@ -0,0 +1,46 @@
+//
+// SUUpdateAlert.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/12/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATEALERT_H
+#define SUUPDATEALERT_H
+
+#import "SUWindowController.h"
+
+typedef enum
+{
+ SUInstallUpdateChoice,
+ SURemindMeLaterChoice,
+ SUSkipThisVersionChoice
+} SUUpdateAlertChoice;
+
+@class WebView, SUAppcastItem;
+@interface SUUpdateAlert : SUWindowController {
+ SUAppcastItem *updateItem;
+ NSBundle *hostBundle;
+ id delegate;
+
+ IBOutlet WebView *releaseNotesView;
+ IBOutlet NSTextField *description;
+ NSProgressIndicator *releaseNotesSpinner;
+ BOOL webViewFinishedLoading;
+}
+
+- (id)initWithAppcastItem:(SUAppcastItem *)item hostBundle:(NSBundle *)hostBundle;
+- (void)setDelegate:delegate;
+
+- (IBAction)installUpdate:sender;
+- (IBAction)skipThisVersion:sender;
+- (IBAction)remindMeLater:sender;
+
+@end
+
+@interface NSObject (SUUpdateAlertDelegate)
+- (void)updateAlert:(SUUpdateAlert *)updateAlert finishedWithChoice:(SUUpdateAlertChoice)updateChoice;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUUpdateDriver.h b/Sparkle.framework/Versions/A/Headers/SUUpdateDriver.h
new file mode 100644
index 00000000..f0c4413d
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUpdateDriver.h
@@ -0,0 +1,27 @@
+//
+// SUUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/7/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATEDRIVER_H
+#define SUUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface SUUpdateDriver : NSObject
+{
+ BOOL finished;
+ id delegate;
+}
+- (void)checkForUpdatesAtURL:(NSURL *)appcastURL hostBundle:(NSBundle *)hb;
+- (void)abortUpdate;
+- (BOOL)finished;
+
+- delegate;
+- (void)setDelegate:delegate;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUUpdatePermissionPrompt.h b/Sparkle.framework/Versions/A/Headers/SUUpdatePermissionPrompt.h
new file mode 100644
index 00000000..24959da7
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUpdatePermissionPrompt.h
@@ -0,0 +1,36 @@
+//
+// SUUpdatePermissionPrompt.h
+// Sparkle
+//
+// Created by Andy Matuschak on 1/24/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATEPERMISSIONPROMPT_H
+#define SUUPDATEPERMISSIONPROMPT_H
+
+#import "Sparkle.h"
+
+typedef enum {
+ SUAutomaticallyCheck,
+ SUDoNotAutomaticallyCheck
+} SUPermissionPromptResult;
+
+@interface SUUpdatePermissionPrompt : SUWindowController {
+ NSBundle *hostBundle;
+ id delegate;
+ IBOutlet NSTextField *descriptionTextField;
+ IBOutlet NSView *moreInfoView;
+ IBOutlet NSButton *moreInfoButton;
+ BOOL isShowingMoreInfo, shouldSendProfile;
+}
++ (void)promptWithHostBundle:(NSBundle *)hb delegate:(id)d;
+- (IBAction)toggleMoreInfo:(id)sender;
+- (IBAction)finishPrompt:(id)sender;
+@end
+
+@interface NSObject (SUUpdatePermissionPromptDelegateInformalProtocol)
+- (void)updatePermissionPromptFinishedWithResult:(SUPermissionPromptResult)result;
+@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 00000000..80788728
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUpdater.h
@@ -0,0 +1,80 @@
+//
+// SUUpdater.h
+// Sparkle
+//
+// Created by Andy Matuschak on 1/4/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATER_H
+#define SUUPDATER_H
+
+@class SUUpdateDriver;
+@interface SUUpdater : NSObject {
+ NSTimer *checkTimer;
+ SUUpdateDriver *driver;
+
+ NSBundle *hostBundle;
+ id delegate;
+}
+
+- (void)setHostBundle:(NSBundle *)hostBundle;
+- (void)setDelegate:(id)delegate;
+
+// This IBAction is meant for a main menu item. Hook up any menu item to this action,
+// and Sparkle will check for updates and report back its findings verbosely.
+- (IBAction)checkForUpdates:sender;
+
+// This forces an update to begin with a particular driver (see SU*UpdateDriver.h)
+- (void)checkForUpdatesWithDriver:(SUUpdateDriver *)driver;
+
+- (BOOL)updateInProgress;
+
+@end
+
+@interface NSObject (SUUpdaterDelegateInformalProtocol)
+// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not
+// Sparkle will also be sending along the system profile. This method should return an array of dictionaries with the following keys:
+- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile;
+
+// Use this to override the default behavior for Sparkle prompting the user about automatic update checks.
+- (BOOL)shouldPromptForPermissionToCheckForUpdates;
+
+// Implement this if you want to do some special handling with the appcast once it finishes loading.
+- (void)appcastDidFinishLoading:(SUAppcast *)appcast;
+
+// 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.
+- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast;
+
+// Sent when a valid update is found by the update driver.
+- (void)didFindValidUpdate:(SUAppcastItem *)update;
+
+// Sent when the user makes a choice in the update alert dialog (install now / remind me later / skip this version).
+- (void)userChoseAction:(SUUpdateAlertChoice)action forUpdate:(SUAppcastItem *)update;
+
+// Sent immediately before installing the specified update.
+- (void)updateWillInstall:(SUAppcastItem *)update;
+
+// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue.
+- (BOOL)shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation;
+
+// Called immediately before relaunching.
+- (void)updaterWillRelaunchApplication;
+
+@end
+
+// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds.
+#ifdef DEBUG
+#define SU_MIN_CHECK_INTERVAL 60
+#else
+#define SU_MIN_CHECK_INTERVAL 60*60
+#endif
+
+#ifdef DEBUG
+#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/SUUserDefaults.h b/Sparkle.framework/Versions/A/Headers/SUUserDefaults.h
new file mode 100644
index 00000000..ba2eedb2
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUserDefaults.h
@@ -0,0 +1,41 @@
+//
+// SUUserDefaults.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUSERDEFAULTS_H
+#define SUUSERDEFAULTS_H
+
+/*!
+ @class
+ @abstract A substitute for NSUserDefaults that will work with arbitrary bundle identifiers.
+ @discussion Make sure you call -setIdentifier: before using SUUserDefaults. The other methods in this class work just like those in NSUserDefaults.
+*/
+
+@interface SUUserDefaults : NSObject {
+ NSString *identifier;
+}
+
+/*!
+ @method
+ @abstract Returns a singleton instance of the user defaults class.
+*/
++ (SUUserDefaults *)standardUserDefaults;
+
+/*!
+ @method
+ @abstract Sets which bundle identifier to use when setting and retrieving defaults.
+ @discussion It is imperative that you set the identifier through this method before trying to set or retrieve defaults.
+*/
+- (void)setIdentifier:(NSString *)identifier;
+
+- (id)objectForKey:(NSString *)defaultName;
+- (void)setObject:(id)value forKey:(NSString *)defaultName;
+- (BOOL)boolForKey:(NSString *)defaultName;
+- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUUserInitiatedUpdateDriver.h b/Sparkle.framework/Versions/A/Headers/SUUserInitiatedUpdateDriver.h
new file mode 100644
index 00000000..6849c91d
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUUserInitiatedUpdateDriver.h
@@ -0,0 +1,21 @@
+//
+// SUUserInitiatedUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/30/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUSERINITIATEDUPDATEDRIVER_H
+#define SUUSERINITIATEDUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUUIBasedUpdateDriver.h"
+
+@interface SUUserInitiatedUpdateDriver : SUUIBasedUpdateDriver {
+ SUStatusController *checkingController;
+}
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h b/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h
new file mode 100644
index 00000000..3d11ae87
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h
@@ -0,0 +1,27 @@
+//
+// SUVersionComparisonProtocol.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUVERSIONCOMPARISONPROTOCOL_H
+#define SUVERSIONCOMPARISONPROTOCOL_H
+
+/*!
+ @protocol
+ @abstract Implement this protocol to provide version comparison facilities for Sparkle.
+*/
+@protocol SUVersionComparison
+
+/*!
+ @method
+ @abstract An abstract method to compare two version strings.
+ @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent.
+*/
+- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB;
+
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/SUVersionComparisonTest.h b/Sparkle.framework/Versions/A/Headers/SUVersionComparisonTest.h
new file mode 100644
index 00000000..b263a8d4
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUVersionComparisonTest.h
@@ -0,0 +1,16 @@
+//
+// SUVersionComparisonTest.h
+// Sparkle
+//
+// Created by Andy Matuschak on 4/15/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#import <SenTestingKit/SenTestingKit.h>
+
+
+@interface SUVersionComparisonTest : SenTestCase {
+
+}
+
+@end
diff --git a/Sparkle.framework/Versions/A/Headers/SUWindowController.h b/Sparkle.framework/Versions/A/Headers/SUWindowController.h
new file mode 100644
index 00000000..8b50a64c
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/SUWindowController.h
@@ -0,0 +1,19 @@
+//
+// SUWindowController.h
+// Sparkle
+//
+// Created by Andy Matuschak on 2/13/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUWINDOWCONTROLLER_H
+#define SUWINDOWCONTROLLER_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface SUWindowController : NSWindowController { }
+// We use this instead of plain old NSWindowController initWithWindowNibName so that we'll be able to find the right path when running in a bundle loaded from another app.
+- (id)initWithHostBundle:(NSBundle *)hb windowNibName:(NSString *)nibName;
+@end
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Headers/Sparkle.h b/Sparkle.framework/Versions/A/Headers/Sparkle.h
new file mode 100644
index 00000000..924ce289
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Headers/Sparkle.h
@@ -0,0 +1,63 @@
+//
+// 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.
+//
+
+//
+// Prefix header for all source files of the 'Sparkle' target in the 'Sparkle' project.
+//
+
+#ifndef SPARKLE_H
+#define SPARKLE_H
+
+#define SULocalizedString(key,comment) NSLocalizedStringFromTableInBundle(key, @"Sparkle", [NSBundle bundleForClass:[self class]], comment)
+
+#ifdef __OBJC__
+#import <Cocoa/Cocoa.h>
+#import "SUConstants.h"
+#endif
+
+
+// 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 "NSBundle+SUAdditions.h"
+#import "NSFileManager+Aliases.h"
+#import "NSFileManager+Authentication.h"
+#import "NSFileManager+Verification.h"
+#import "NSString+extras.h"
+#import "NSURL+Parameters.h"
+#import "NSWorkspace_RBAdditions.h"
+#import "NSWorkspace+SystemVersion.h"
+
+#import "NTSynchronousTask.h"
+
+#import "RSS.h"
+
+#import "SUAppcast.h"
+#import "SUAppcastItem.h"
+#import "SUAutomaticUpdateAlert.h"
+#import "SUAutomaticUpdateDriver.h"
+#import "SUBasicUpdateDriver.h"
+#import "SUConstants.h"
+#import "SUInstaller.h"
+#import "SUProbingUpdateDriver.h"
+#import "SUScheduledUpdateDriver.h"
+#import "SUStandardVersionComparator.h"
+#import "SUStatusController.h"
+#import "SUSystemProfiler.h"
+#import "SUUIBasedUpdateDriver.h"
+#import "SUUnarchiver.h"
+#import "SUUpdateAlert.h"
+#import "SUUpdateDriver.h"
+#import "SUUpdater.h"
+#import "SUUpdatePermissionPrompt.h"
+#import "SUUserInitiatedUpdateDriver.h"
+#import "SUUserDefaults.h"
+#import "SUVersionComparisonProtocol.h"
+#import "SUWindowController.h"
+
+#endif
diff --git a/Sparkle.framework/Versions/A/Resources/Info.plist b/Sparkle.framework/Versions/A/Resources/Info.plist
new file mode 100644
index 00000000..2eb30510
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/Info.plist
@@ -0,0 +1,24 @@
+<?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>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.5 Beta 1</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.5</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 00000000..92ef9471
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist
@@ -0,0 +1,174 @@
+<?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>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>MacBookAir1,1</key>
+ <string>MacBook Air (January 2008)</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>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 "Harpertown")</string>
+ <key>Macmini1,1</key>
+ <string>Mac Mini (Core Solo/Duo)</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>
+ <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 (April 2008)</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib b/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib
new file mode 100644
index 00000000..3c6ae83f
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib
@@ -0,0 +1,48 @@
+<?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>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>NSApplication</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSResponder</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSObject</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>SUStatusController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>OUTLETS</key>
+ <dict>
+ <key>actionButton</key>
+ <string>NSButton</string>
+ <key>progressBar</key>
+ <string>NSProgressIndicator</string>
+ </dict>
+ <key>SUPERCLASS</key>
+ <string>NSWindowController</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib b/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib
new file mode 100644
index 00000000..4318cb1b
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib
@@ -0,0 +1,20 @@
+<?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>IBFramework Version</key>
+ <string>629</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../Sparkle.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>6</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C31</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib b/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib
new file mode 100644
index 00000000..4bdc9d67
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib
new file mode 100644
index 00000000..4b1ab30e
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib
@@ -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>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>SUWindowController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSWindowController</string>
+ </dict>
+ <dict>
+ <key>ACTIONS</key>
+ <dict>
+ <key>doNotInstall</key>
+ <string>id</string>
+ <key>installLater</key>
+ <string>id</string>
+ <key>installNow</key>
+ <string>id</string>
+ </dict>
+ <key>CLASS</key>
+ <string>SUAutomaticUpdateAlert</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>SUWindowController</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSObject</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib
new file mode 100644
index 00000000..ab36d310
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib
@@ -0,0 +1,20 @@
+<?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>IBFramework Version</key>
+ <string>658</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../Sparkle.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>6</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C7010</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib
new file mode 100644
index 00000000..7630390c
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib
new file mode 100644
index 00000000..994d4c36
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib
@@ -0,0 +1,67 @@
+<?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>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>SUWindowController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSWindowController</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSApplication</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSResponder</string>
+ </dict>
+ <dict>
+ <key>ACTIONS</key>
+ <dict>
+ <key>installUpdate</key>
+ <string>id</string>
+ <key>remindMeLater</key>
+ <string>id</string>
+ <key>skipThisVersion</key>
+ <string>id</string>
+ </dict>
+ <key>CLASS</key>
+ <string>SUUpdateAlert</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>OUTLETS</key>
+ <dict>
+ <key>delegate</key>
+ <string>id</string>
+ <key>description</key>
+ <string>NSTextField</string>
+ <key>releaseNotesView</key>
+ <string>WebView</string>
+ </dict>
+ <key>SUPERCLASS</key>
+ <string>SUWindowController</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSObject</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib
new file mode 100644
index 00000000..d9b82f55
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib
@@ -0,0 +1,20 @@
+<?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>IBFramework Version</key>
+ <string>649</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../Sparkle.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>6</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C7010</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib
new file mode 100644
index 00000000..b3a80995
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib
new file mode 100644
index 00000000..5220a221
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib
@@ -0,0 +1,59 @@
+<?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>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>SUWindowController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSWindowController</string>
+ </dict>
+ <dict>
+ <key>ACTIONS</key>
+ <dict>
+ <key>finishPrompt</key>
+ <string>id</string>
+ <key>toggleMoreInfo</key>
+ <string>id</string>
+ </dict>
+ <key>CLASS</key>
+ <string>SUUpdatePermissionPrompt</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>OUTLETS</key>
+ <dict>
+ <key>delegate</key>
+ <string>id</string>
+ <key>descriptionTextField</key>
+ <string>NSTextField</string>
+ <key>moreInfoButton</key>
+ <string>NSButton</string>
+ <key>moreInfoView</key>
+ <string>NSView</string>
+ </dict>
+ <key>SUPERCLASS</key>
+ <string>SUWindowController</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSObject</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib
new file mode 100644
index 00000000..cee1fbcc
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib
@@ -0,0 +1,21 @@
+<?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>IBFramework Version</key>
+ <string>644</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../../Sparkle.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>6</integer>
+ <integer>42</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C7010</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib
new file mode 100644
index 00000000..6df9ce74
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.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 00000000..34cf8170
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Resources/relaunch b/Sparkle.framework/Versions/A/Resources/relaunch
new file mode 100755
index 00000000..91525fe6
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Resources/relaunch
Binary files differ
diff --git a/Sparkle.framework/Versions/A/Sparkle b/Sparkle.framework/Versions/A/Sparkle
new file mode 100755
index 00000000..05c8dab2
--- /dev/null
+++ b/Sparkle.framework/Versions/A/Sparkle
Binary files differ
diff --git a/Sparkle.framework/Versions/A/relaunch.app/Contents/Info.plist b/Sparkle.framework/Versions/A/relaunch.app/Contents/Info.plist
new file mode 100644
index 00000000..150493ef
--- /dev/null
+++ b/Sparkle.framework/Versions/A/relaunch.app/Contents/Info.plist
@@ -0,0 +1,24 @@
+<?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>CFBundleExecutable</key>
+ <string>relaunch</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.andymatuschak.Sparkle.relaunch</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.5</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+ <key>NSUIElement</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Sparkle.framework/Versions/A/relaunch.app/Contents/MacOS/relaunch b/Sparkle.framework/Versions/A/relaunch.app/Contents/MacOS/relaunch
new file mode 100755
index 00000000..45b57f0d
--- /dev/null
+++ b/Sparkle.framework/Versions/A/relaunch.app/Contents/MacOS/relaunch
Binary files differ
diff --git a/Sparkle.framework/Versions/A/relaunch.app/Contents/PkgInfo b/Sparkle.framework/Versions/A/relaunch.app/Contents/PkgInfo
new file mode 100644
index 00000000..bd04210f
--- /dev/null
+++ b/Sparkle.framework/Versions/A/relaunch.app/Contents/PkgInfo
@@ -0,0 +1 @@
+APPL???? \ No newline at end of file
diff --git a/Sparkle.framework/Versions/Current b/Sparkle.framework/Versions/Current
new file mode 120000
index 00000000..8c7e5a66
--- /dev/null
+++ b/Sparkle.framework/Versions/Current
@@ -0,0 +1 @@
+A \ No newline at end of file
diff --git a/Sparkle.framework/relaunch.app b/Sparkle.framework/relaunch.app
new file mode 120000
index 00000000..d2b01a5e
--- /dev/null
+++ b/Sparkle.framework/relaunch.app
@@ -0,0 +1 @@
+Versions/Current/relaunch.app \ No newline at end of file