Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch 'master' of https://github.com/andymatuschak/Sparkle int…

…o sandboxing

Conflicts:
	.gitignore
	Sparkle.xcodeproj/project.pbxproj
	Sparkle.xcodeproj/xcshareddata/xcschemes/Sparkle.xcscheme
  • Loading branch information...
commit 965d386bff939aa90fe9595abc089bfa6511cb7f 2 parents 4e4012b + 0ed83cf
@samdeane samdeane authored
Showing with 5,199 additions and 3,378 deletions.
  1. +4 −0 .gitignore
  2. +0 −1  Configurations/ConfigUnitTest.xcconfig
  3. +1 −1  SUAppcastItem.m
  4. +26 −15 SUBasicUpdateDriver.m
  5. +19 −0 SUCodeSigningVerifier.h
  6. +86 −0 SUCodeSigningVerifier.m
  7. +0 −1  SUDSAVerifier.h
  8. +1 −0  SUInstaller.h
  9. +23 −8 SUInstaller.m
  10. +2 −1  SUPipedUnarchiver.m
  11. +18 −8 SUPlainInstallerInternals.m
  12. +5 −5 SUStandardVersionComparator.m
  13. +1 −0  SUUpdatePermissionPrompt.h
  14. +6 −1 SUUpdatePermissionPrompt.m
  15. +2 −2 SUUpdater.h
  16. +14 −7 SUUpdater.m
  17. +82 −0 Sparkle.xcodeproj/project.pbxproj
  18. +5 −0 Tests/SUVersionComparisonTest.m
  19. +11 −7 ar.lproj/SUUpdatePermissionPrompt.xib
  20. +248 −161 cs.lproj/SUUpdatePermissionPrompt.xib
  21. +247 −157 da.lproj/SUUpdatePermissionPrompt.xib
  22. +248 −163 de.lproj/SUUpdatePermissionPrompt.xib
  23. BIN  en.lproj/SUAutomaticUpdateAlert.strings
  24. BIN  en.lproj/SUUpdatePermissionPrompt.strings
  25. +308 −201 en.lproj/SUUpdatePermissionPrompt.xib
  26. BIN  en.lproj/Sparkle.strings
  27. +248 −163 es.lproj/SUUpdatePermissionPrompt.xib
  28. +256 −164 fr.lproj/SUUpdatePermissionPrompt.xib
  29. +248 −161 is.lproj/SUUpdatePermissionPrompt.xib
  30. BIN  is.lproj/Sparkle.strings
  31. +248 −163 it.lproj/SUUpdatePermissionPrompt.xib
  32. +160 −38 ja.lproj/SUUpdatePermissionPrompt.xib
  33. +248 −163 ko.lproj/SUUpdatePermissionPrompt.xib
  34. +247 −157 nl.lproj/SUUpdatePermissionPrompt.xib
  35. +248 −161 pl.lproj/SUUpdatePermissionPrompt.xib
  36. +54 −60 pt_BR.lproj/SUUpdateAlert.xib
  37. +67 −37 pt_BR.lproj/SUUpdatePermissionPrompt.xib
  38. +152 −123 pt_PT.lproj/SUUpdatePermissionPrompt.xib
  39. +152 −123 ro.lproj/SUUpdatePermissionPrompt.xib
  40. BIN  ro.lproj/Sparkle.strings
  41. +248 −163 ru.lproj/SUUpdatePermissionPrompt.xib
  42. +248 −159 sk.lproj/SUUpdatePermissionPrompt.xib
  43. +127 −37 sl.lproj/SUUpdatePermissionPrompt.xib
  44. +4 −4 sl.lproj/Sparkle.strings
  45. +152 −166 sv.lproj/SUUpdatePermissionPrompt.xib
  46. +74 −44 th.lproj/SUUpdatePermissionPrompt.xib
  47. BIN  th.lproj/Sparkle.strings
  48. +194 −184 tr.lproj/SUUpdatePermissionPrompt.xib
  49. BIN  tr.lproj/Sparkle.strings
  50. +67 −44 uk.lproj/SUUpdatePermissionPrompt.xib
  51. +248 −163 zh_CN.lproj/SUUpdatePermissionPrompt.xib
  52. +152 −162 zh_TW.lproj/SUUpdatePermissionPrompt.xib
View
4 .gitignore
@@ -1,3 +1,4 @@
+# Xcode
build/*
*.pbxuser
!default.pbxuser
@@ -11,5 +12,8 @@ build/*
!default.xcworkspace
xcuserdata
profile
+*.moved-aside
+
+## Ignore incredibly annoying .DS_Store files
.DS_Store
External/*/build/*
View
1  Configurations/ConfigUnitTest.xcconfig
@@ -7,5 +7,4 @@ WRAPPER_EXTENSION = octest
FRAMEWORK_SEARCH_PATHS = $(DEVELOPER_LIBRARY_DIR)/Frameworks
GCC_PREFIX_HEADER = $(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h
GCC_PRECOMPILE_PREFIX_HEADER = YES
-SDKROOT = macosx10.6
MACOSX_DEPLOYMENT_TARGET = 10.6
View
2  SUAppcastItem.m
@@ -232,7 +232,7 @@ - (BOOL)isDeltaUpdate
// Find the appropriate release notes URL.
if ([dict objectForKey:@"sparkle:releaseNotesLink"])
[self setReleaseNotesURL:[NSURL URLWithString:[dict objectForKey:@"sparkle:releaseNotesLink"]]];
- else if ([[self itemDescription] hasPrefix:@"http://"]) // if the description starts with http://, use that.
+ else if ([[self itemDescription] hasPrefix:@"http://"] || [[self itemDescription] hasPrefix:@"https://"]) // if the description starts with http:// or https:// use that.
[self setReleaseNotesURL:[NSURL URLWithString:[self itemDescription]]];
else
[self setReleaseNotesURL:nil];
View
41 SUBasicUpdateDriver.m
@@ -18,6 +18,7 @@
#import "SUPlainInstaller.h"
#import "SUPlainInstallerInternals.h"
#import "SUBinaryDeltaCommon.h"
+#import "SUCodeSigningVerifier.h"
#import "SUUpdater_Private.h"
#import "SUXPC.h"
@@ -204,22 +205,24 @@ - (void)download:(NSURLDownload *)d decideDestinationWithSuggestedFilename:(NSSt
[download setDestination:downloadPath allowOverwrite:YES];
}
-- (void)downloadDidFinish:(NSURLDownload *)d
+- (BOOL)validateUpdateDownloadedToPath:(NSString *)downloadedPath extractedToPath:(NSString *)extractedPath DSASignature:(NSString *)DSASignature publicDSAKey:(NSString *)publicDSAKey
{
- #if !ENDANGER_USERS_WITH_INSECURE_UPDATES
- // New in Sparkle 1.5: we're now checking signatures on all non-secure downloads, where "secure" is defined as both the appcast and the download being transmitted over SSL.
- NSURL *downloadURL = [[d request] URL];
- if (!(([[downloadURL scheme] isEqualToString:@"https"] && [[appcastURL scheme] isEqualToString:@"https"]) ||
- ([downloadURL isFileURL] && [appcastURL isFileURL])))
- {
- if (![host publicDSAKey] || ![SUDSAVerifier validatePath:downloadPath withEncodedDSASignature:[updateItem DSASignature] withPublicDSAKey:[host publicDSAKey]])
- {
- [self abortUpdateWithError:[NSError errorWithDomain:SUSparkleErrorDomain code:SUSignatureError userInfo:[NSDictionary dictionaryWithObjectsAndKeys:SULocalizedString(@"An error occurred while extracting the archive. Please try again later.", nil), NSLocalizedDescriptionKey, @"The update is improperly signed.", NSLocalizedFailureReasonErrorKey, nil]]];
- return;
- }
- }
- #endif
-
+ NSString *newBundlePath = [SUInstaller appPathInUpdateFolder:extractedPath forHost:host];
+ if (newBundlePath)
+ {
+ NSError *error = nil;
+ if ([SUCodeSigningVerifier codeSignatureIsValidAtPath:newBundlePath error:&error]) {
+ return YES;
+ } else {
+ SULog(@"Code signature check on update failed: %@", error);
+ }
+ }
+
+ return [SUDSAVerifier validatePath:downloadedPath withEncodedDSASignature:DSASignature withPublicDSAKey:publicDSAKey];
+}
+
+- (void)downloadDidFinish:(NSURLDownload *)d
+{
[self extractUpdate];
}
@@ -281,6 +284,14 @@ - (BOOL)shouldInstallSynchronously { return NO; }
- (void)installWithToolAndRelaunch:(BOOL)relaunch
{
+#if !ENDANGER_USERS_WITH_INSECURE_UPDATES
+ if (![self validateUpdateDownloadedToPath:downloadPath extractedToPath:tempDir DSASignature:[updateItem DSASignature] publicDSAKey:[host publicDSAKey]])
+ {
+ [self abortUpdateWithError:[NSError errorWithDomain:SUSparkleErrorDomain code:SUSignatureError userInfo:[NSDictionary dictionaryWithObjectsAndKeys:SULocalizedString(@"An error occurred while extracting the archive. Please try again later.", nil), NSLocalizedDescriptionKey, @"The update is improperly signed.", NSLocalizedFailureReasonErrorKey, nil]]];
+ return;
+ }
+#endif
+
if (![updater mayUpdateAndRestart])
{
[self abortUpdate];
View
19 SUCodeSigningVerifier.h
@@ -0,0 +1,19 @@
+//
+// SUCodeSigningVerifier.h
+// Sparkle
+//
+// Created by Andy Matuschak on 7/5/12.
+//
+//
+
+#ifndef SUCODESIGNINGVERIFIER_H
+#define SUCODESIGNINGVERIFIER_H
+
+#import <Foundation/Foundation.h>
+
+@interface SUCodeSigningVerifier : NSObject
++ (BOOL)codeSignatureIsValidAtPath:(NSString *)destinationPath error:(NSError **)error;
++ (BOOL)hostApplicationIsCodeSigned;
+@end
+
+#endif
View
86 SUCodeSigningVerifier.m
@@ -0,0 +1,86 @@
+//
+// SUCodeSigningVerifier.m
+// Sparkle
+//
+// Created by Andy Matuschak on 7/5/12.
+//
+//
+
+#import <Security/CodeSigning.h>
+#import "SUCodeSigningVerifier.h"
+#import "SULog.h"
+
+@implementation SUCodeSigningVerifier
+
+extern OSStatus SecCodeCopySelf(SecCSFlags flags, SecCodeRef *self) __attribute__((weak_import));
+
+extern OSStatus SecCodeCopyDesignatedRequirement(SecStaticCodeRef code, SecCSFlags flags, SecRequirementRef *requirement) __attribute__((weak_import));
+
+extern OSStatus SecStaticCodeCreateWithPath(CFURLRef path, SecCSFlags flags, SecStaticCodeRef *staticCode) __attribute__((weak_import));
+
+extern OSStatus SecStaticCodeCheckValidityWithErrors(SecStaticCodeRef staticCode, SecCSFlags flags, SecRequirementRef requirement, CFErrorRef *errors) __attribute__((weak_import));
+
+
++ (BOOL)codeSignatureIsValidAtPath:(NSString *)destinationPath error:(NSError **)error
+{
+ // This API didn't exist prior to 10.6.
+ if (SecCodeCopySelf == NULL) return NO;
+
+ OSStatus result;
+ SecRequirementRef requirement = NULL;
+ SecStaticCodeRef staticCode = NULL;
+ SecCodeRef hostCode = NULL;
+
+ result = SecCodeCopySelf(kSecCSDefaultFlags, &hostCode);
+ if (result != 0) {
+ SULog(@"Failed to copy host code %d", result);
+ goto finally;
+ }
+
+ result = SecCodeCopyDesignatedRequirement(hostCode, kSecCSDefaultFlags, &requirement);
+ if (result != 0) {
+ SULog(@"Failed to copy designated requirement %d", result);
+ goto finally;
+ }
+
+ NSBundle *newBundle = [NSBundle bundleWithPath:destinationPath];
+ if (!newBundle) {
+ SULog(@"Failed to load NSBundle for update");
+ result = -1;
+ goto finally;
+ }
+
+ result = SecStaticCodeCreateWithPath((CFURLRef)[newBundle executableURL], kSecCSDefaultFlags, &staticCode);
+ if (result != 0) {
+ SULog(@"Failed to get static code %d", result);
+ goto finally;
+ }
+
+ result = SecStaticCodeCheckValidityWithErrors(staticCode, kSecCSDefaultFlags | kSecCSCheckAllArchitectures, requirement, (CFErrorRef *)error);
+ if (result != 0 && error) [*error autorelease];
+
+finally:
+ if (hostCode) CFRelease(hostCode);
+ if (staticCode) CFRelease(staticCode);
+ if (requirement) CFRelease(requirement);
+ return (result == 0);
+}
+
++ (BOOL)hostApplicationIsCodeSigned
+{
+ // This API didn't exist prior to 10.6.
+ if (SecCodeCopySelf == NULL) return NO;
+
+ OSStatus result;
+ SecCodeRef hostCode = NULL;
+ result = SecCodeCopySelf(kSecCSDefaultFlags, &hostCode);
+ if (result != 0) return NO;
+
+ SecRequirementRef requirement = NULL;
+ result = SecCodeCopyDesignatedRequirement(hostCode, kSecCSDefaultFlags, &requirement);
+ if (hostCode) CFRelease(hostCode);
+ if (requirement) CFRelease(requirement);
+ return (result == 0);
+}
+
+@end
View
1  SUDSAVerifier.h
@@ -11,7 +11,6 @@
#import <Cocoa/Cocoa.h>
-// For the paranoid folks!
@interface SUDSAVerifier : NSObject {}
+ (BOOL)validatePath:(NSString *)path withEncodedDSASignature:(NSString *)encodedSignature withPublicDSAKey:(NSString *)pkeyString;
@end
View
1  SUInstaller.h
@@ -14,6 +14,7 @@
@class SUHost;
@interface SUInstaller : NSObject { }
++ (NSString *) appPathInUpdateFolder:(NSString *)updateFolder forHost:(SUHost *)host;
+ (void) installFromUpdateFolder:(NSString *)updateFolder overHost:(SUHost *)host installationPath:(NSString *)installationPath delegate:delegate synchronously:(BOOL)synchronously versionComparator:(id <SUVersionComparison>)comparator;
+ (void) finishInstallationToPath:(NSString *)installationPath withResult:(BOOL)result host:(SUHost *)host error:(NSError *)error delegate:delegate;
+ (NSString*) updateFolder;
View
31 SUInstaller.m
@@ -42,14 +42,13 @@ + (BOOL)isAliasFolderAtPath:(NSString *)path
return NO;
}
-
-+ (void)installFromUpdateFolder:(NSString *)inUpdateFolder overHost:(SUHost *)host installationPath:(NSString *)installationPath delegate:delegate synchronously:(BOOL)synchronously versionComparator:(id <SUVersionComparison>)comparator
++ (NSString *)installSourcePathInUpdateFolder:(NSString *)inUpdateFolder forHost:(SUHost *)host isPackage:(BOOL *)isPackagePtr
{
- // Search subdirectories for the application
+ // Search subdirectories for the application
NSString *currentFile,
- *newAppDownloadPath = nil,
- *bundleFileName = [[host bundlePath] lastPathComponent],
- *alternateBundleFileName = [[host name] stringByAppendingPathExtension:[[host bundlePath] pathExtension]];
+ *newAppDownloadPath = nil,
+ *bundleFileName = [[host bundlePath] lastPathComponent],
+ *alternateBundleFileName = [[host name] stringByAppendingPathExtension:[[host bundlePath] pathExtension]];
BOOL isPackage = NO;
NSString *fallbackPackagePath = nil;
NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath: inUpdateFolder];
@@ -100,13 +99,29 @@ + (void)installFromUpdateFolder:(NSString *)inUpdateFolder overHost:(SUHost *)ho
}
// We don't have a valid path. Try to use the fallback package.
-
+
if (newAppDownloadPath == nil && fallbackPackagePath != nil)
{
isPackage = YES;
newAppDownloadPath = fallbackPackagePath;
}
-
+
+ if (isPackagePtr) *isPackagePtr = isPackage;
+ return newAppDownloadPath;
+}
+
++ (NSString *)appPathInUpdateFolder:(NSString *)updateFolder forHost:(SUHost *)host
+{
+ BOOL isPackage = NO;
+ NSString *path = [self installSourcePathInUpdateFolder:updateFolder forHost:host isPackage:&isPackage];
+ return isPackage ? nil : path;
+}
+
++ (void)installFromUpdateFolder:(NSString *)inUpdateFolder overHost:(SUHost *)host installationPath:(NSString *)installationPath delegate:delegate synchronously:(BOOL)synchronously versionComparator:(id <SUVersionComparison>)comparator
+{
+ BOOL isPackage = NO;
+ NSString *newAppDownloadPath = [self installSourcePathInUpdateFolder:inUpdateFolder forHost:host isPackage:&isPackage];
+
if (newAppDownloadPath == nil)
{
[self finishInstallationToPath:installationPath withResult:NO host:host error:[NSError errorWithDomain:SUSparkleErrorDomain code:SUMissingUpdateError userInfo:[NSDictionary dictionaryWithObject:@"Couldn't find an appropriate update in the downloaded package." forKey:NSLocalizedDescriptionKey]] delegate:delegate];
View
3  SUPipedUnarchiver.m
@@ -51,6 +51,7 @@ - (void)extractArchivePipingDataToCommand:(NSString *)command
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
FILE *fp = NULL, *cmdFP = NULL;
+ char *oldDestinationString = NULL;
SULog(@"Extracting %@ using '%@'",archivePath,command);
@@ -67,7 +68,7 @@ - (void)extractArchivePipingDataToCommand:(NSString *)command
fp = fopen([archivePath fileSystemRepresentation], "r");
if (!fp) goto reportError;
- char *oldDestinationString = getenv("DESTINATION");
+ oldDestinationString = getenv("DESTINATION");
setenv("DESTINATION", [[archivePath stringByDeletingLastPathComponent] fileSystemRepresentation], 1);
cmdFP = popen([command fileSystemRepresentation], "w");
size_t written;
View
26 SUPlainInstallerInternals.m
@@ -198,17 +198,12 @@ + (BOOL)_copyPathWithForcedAuthentication:(NSString *)src toPath:(NSString *)dst
// quarantine to avoid a delay at launch, and to avoid
// presenting the user with a confusing trust dialog.
//
- // This needs to be done after the application is moved to its
- // new home with "mv" in case it's moved across filesystems: if
- // that happens, "mv" actually performs a copy and may result
- // in the application being quarantined. It also needs to be
- // done before "chown" changes ownership, because the ownership
- // change will almost certainly make it impossible to change
- // attributes to release the files from the quarantine.
+ // This needs to be done before "chown" changes ownership,
+ // because the ownership change will fail if the file is quarantined.
if (res)
{
SULog(@"releaseFromQuarantine");
- [self performSelectorOnMainThread:@selector(releaseFromQuarantine:) withObject:dst waitUntilDone:YES];
+ [self performSelectorOnMainThread:@selector(releaseFromQuarantine:) withObject:src waitUntilDone:YES];
}
if( res ) // Set permissions while it's still in source, so we have it with working and correct perms when it arrives at destination.
@@ -252,6 +247,21 @@ + (BOOL)_copyPathWithForcedAuthentication:(NSString *)src toPath:(NSString *)dst
AuthorizationFree(auth, 0);
+ // If the currently-running application is trusted, the new
+ // version should be trusted as well. Remove it from the
+ // quarantine to avoid a delay at launch, and to avoid
+ // presenting the user with a confusing trust dialog.
+ //
+ // This needs to be done after the application is moved to its
+ // new home with "mv" in case it's moved across filesystems: if
+ // that happens, "mv" actually performs a copy and may result
+ // in the application being quarantined.
+ if (res)
+ {
+ SULog(@"releaseFromQuarantine after installing");
+ [self performSelectorOnMainThread:@selector(releaseFromQuarantine:) withObject:dst waitUntilDone:YES];
+ }
+
if (!res)
{
// Something went wrong somewhere along the way, but we're not sure exactly where.
View
10 SUStandardVersionComparator.m
@@ -85,7 +85,7 @@ - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)
NSString *partA, *partB;
NSUInteger i, n;
- int intA, intB;
+ long long valueA, valueB;
SUCharacterType typeA, typeB;
n = MIN([partsA count], [partsB count]);
@@ -100,11 +100,11 @@ - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)
if (typeA == typeB) {
// Same type; we can compare
if (typeA == kNumberType) {
- intA = [partA intValue];
- intB = [partB intValue];
- if (intA > intB) {
+ valueA = [partA longLongValue];
+ valueB = [partB longLongValue];
+ if (valueA > valueB) {
return NSOrderedDescending;
- } else if (intA < intB) {
+ } else if (valueA < valueB) {
return NSOrderedAscending;
}
} else if (typeA == kStringType) {
View
1  SUUpdatePermissionPrompt.h
@@ -24,6 +24,7 @@ typedef enum {
IBOutlet NSTextField *descriptionTextField;
IBOutlet NSView *moreInfoView;
IBOutlet NSButton *moreInfoButton;
+ IBOutlet NSTableView *profileTableView;
BOOL isShowingMoreInfo, shouldSendProfile;
}
+ (void)promptWithHost:(SUHost *)aHost systemProfile:(NSArray *)profile delegate:(id)d;
View
7 SUUpdatePermissionPrompt.m
@@ -53,9 +53,14 @@ - (void)awakeFromNib
NSRect frame = [[self window] frame];
frame.size.height -= [moreInfoButton frame].size.height;
[[self window] setFrame:frame display:YES];
- }
+ } else {
+ // Set the table view's delegate so we can disable row selection.
+ [profileTableView setDelegate:(id)self];
+ }
}
+- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row { return NO; }
+
- (void)dealloc
{
[host release];
View
4 SUUpdater.h
@@ -27,12 +27,12 @@
+ (SUUpdater *)sharedUpdater;
+ (SUUpdater *)updaterForBundle:(NSBundle *)bundle;
-- initForBundle:(NSBundle *)bundle;
+- (id)initForBundle:(NSBundle *)bundle;
- (NSBundle *)hostBundle;
- (void)setDelegate:(id)delegate;
-- delegate;
+- (id)delegate;
- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks;
- (BOOL)automaticallyChecksForUpdates;
View
21 SUUpdater.m
@@ -17,6 +17,7 @@
#import "SUScheduledUpdateDriver.h"
#import "SUConstants.h"
#import "SULog.h"
+#import "SUCodeSigningVerifier.h"
#include <SystemConfiguration/SystemConfiguration.h>
@@ -83,12 +84,18 @@ - (id)initForBundle:(NSBundle *)bundle
#if !ENDANGER_USERS_WITH_INSECURE_UPDATES
// Saving-the-developer-from-a-stupid-mistake-check:
- if (![[[self feedURL] scheme] isEqualToString:@"https"] && ![host publicDSAKey])
- {
- [self notifyWillShowModalAlert];
- NSRunAlertPanel(@"Insecure update error!", @"For security reasons, you need to distribute your appcast over SSL or sign your updates. See Sparkle's documentation for more information.", @"OK", nil, nil);
- [self notifyDidShowModalAlert];
- }
+ BOOL hasPublicDSAKey = [host publicDSAKey] != nil;
+ BOOL isMainBundle = [bundle isEqualTo:[NSBundle mainBundle]];
+ BOOL hostIsCodeSigned = [SUCodeSigningVerifier hostApplicationIsCodeSigned];
+ if (!isMainBundle && !hasPublicDSAKey) {
+ [self notifyWillShowModalAlert];
+ NSRunAlertPanel(@"Insecure update error!", @"For security reasons, you need to sign your updates with a DSA key. See Sparkle's documentation for more information.", @"OK", nil, nil);
+ [self notifyDidShowModalAlert];
+ } else if (isMainBundle && !(hasPublicDSAKey || hostIsCodeSigned)) {
+ [self notifyWillShowModalAlert];
+ NSRunAlertPanel(@"Insecure update error!", @"For security reasons, you need to code sign your application or sign your updates with a DSA key. See Sparkle's documentation for more information.", @"OK", nil, nil);
+ [self notifyDidShowModalAlert];
+ }
#endif
// This runs the permission prompt if needed, but never before the app has finished launching because the runloop won't run before that
[self performSelector:@selector(startUpdateCycle) withObject:nil afterDelay:0];
@@ -544,7 +551,7 @@ - (BOOL)updateInProgress
return driver && ([driver finished] == NO);
}
-- delegate { return delegate; }
+- (id)delegate { return delegate; }
- (NSBundle *)hostBundle { return [host bundle]; }
@end
View
82 Sparkle.xcodeproj/project.pbxproj
@@ -10,7 +10,13 @@
3772FEA913DE0B6B00F79537 /* SUVersionDisplayProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 3772FEA813DE0B6B00F79537 /* SUVersionDisplayProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
525A2790133D6AE900FD8D70 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 525A278F133D6AE900FD8D70 /* Cocoa.framework */; };
525A27A0133D6B9700FD8D70 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 525A278F133D6AE900FD8D70 /* Cocoa.framework */; };
+ 550347011370023A00AE7681 /* Sparkle.icns in Resources */ = {isa = PBXBuildFile; fileRef = 550347001370023A00AE7681 /* Sparkle.icns */; };
55C14BD4136EEFCE00649790 /* finish_installation.m in Sources */ = {isa = PBXBuildFile; fileRef = 55C14BD3136EEFCE00649790 /* finish_installation.m */; };
+ 55C14BD9136EF00C00649790 /* SUStatus.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55C14BD8136EF00C00649790 /* SUStatus.xib */; };
+ 55C14BEE136EF20D00649790 /* SUAutomaticUpdateAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55C14BDA136EF20D00649790 /* SUAutomaticUpdateAlert.xib */; };
+ 55C14BEF136EF21700649790 /* SUStatus.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55C14BD8136EF00C00649790 /* SUStatus.xib */; };
+ 55C14C04136EF26100649790 /* SUUpdateAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55C14BF0136EF26100649790 /* SUUpdateAlert.xib */; };
+ 55C14C19136EF2C700649790 /* SUUpdatePermissionPrompt.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55C14C05136EF2C700649790 /* SUUpdatePermissionPrompt.xib */; };
55C14EE8136EF61D00649790 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 525A278F133D6AE900FD8D70 /* Cocoa.framework */; };
55C14F00136EF6B700649790 /* SUConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 61299A5F09CA6EB100B7442F /* SUConstants.m */; };
55C14F06136EF6DB00649790 /* SULog.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C14F04136EF6DB00649790 /* SULog.h */; };
@@ -26,8 +32,10 @@
55C14F24136EF86F00649790 /* SUPackageInstaller.m in Sources */ = {isa = PBXBuildFile; fileRef = 618FA5210DAE8E8A0026945C /* SUPackageInstaller.m */; };
55C14F2A136EF9A900649790 /* SUWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 61180BC90D64138900B4E0D1 /* SUWindowController.m */; };
55C14F32136EFC2400649790 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55C14F31136EFC2400649790 /* SystemConfiguration.framework */; };
+ 55C14F3B136EFCB300649790 /* finish_installation.app in Resources */ = {isa = PBXBuildFile; fileRef = 55C14BB7136EEF1500649790 /* finish_installation.app */; };
55C14F7E136F005000649790 /* SUPlainInstallerInternals.m in Sources */ = {isa = PBXBuildFile; fileRef = 61B5F8E509C4CE3C00B25A18 /* SUPlainInstallerInternals.m */; };
55C14F9A136F045400649790 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61B5F8F609C4CEB300B25A18 /* Security.framework */; };
+ 55C14FC7136F05E100649790 /* Sparkle.strings in Resources */ = {isa = PBXBuildFile; fileRef = 61AAE8220A321A7F00D8810D /* Sparkle.strings */; };
5D06E8D80FD68C8E005AE3F6 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Sparkle.framework */; };
5D06E8E90FD68CDB005AE3F6 /* bsdiff.c in Sources */ = {isa = PBXBuildFile; fileRef = 5D06E8DB0FD68CB9005AE3F6 /* bsdiff.c */; settings = {COMPILER_FLAGS = "-Wno-shorten-64-to-32"; }; };
5D06E8EA0FD68CDB005AE3F6 /* SUBinaryDeltaTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D06E8E30FD68CC7005AE3F6 /* SUBinaryDeltaTool.m */; };
@@ -73,6 +81,7 @@
612DCBB00D488BC60015DBEA /* SUUpdatePermissionPrompt.m in Sources */ = {isa = PBXBuildFile; fileRef = 612DCBAE0D488BC60015DBEA /* SUUpdatePermissionPrompt.m */; };
61407C390A4099050009F71F /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Sparkle.framework */; };
6158A1C5137904B300487EC1 /* SUUpdater_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6158A1C4137904B300487EC1 /* SUUpdater_Private.h */; };
+ 615AE3D00D64DC40001CA7BD /* SUModelTranslation.plist in Resources */ = {isa = PBXBuildFile; fileRef = 615AE3CF0D64DC40001CA7BD /* SUModelTranslation.plist */; };
6160E7E10D3B4A8800E9CD71 /* NTSynchronousTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 610EC1C00CF3914D00AE239E /* NTSynchronousTask.h */; settings = {ATTRIBUTES = (); }; };
61699BCC0DDB92BD005878A4 /* SUVersionComparisonTest.h in Headers */ = {isa = PBXBuildFile; fileRef = 61227A140DB548B800AB99EA /* SUVersionComparisonTest.h */; settings = {ATTRIBUTES = (); }; };
618E9CFD0E7328F1004646D8 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 618E9CFC0E7328F1004646D8 /* dsa_pub.pem */; };
@@ -91,6 +100,9 @@
61A2279D0D1CEE7600430CCD /* SUSystemProfiler.m in Sources */ = {isa = PBXBuildFile; fileRef = 61A2279B0D1CEE7600430CCD /* SUSystemProfiler.m */; };
61A354550DF113C70076ECB1 /* SUUserInitiatedUpdateDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 61A354530DF113C70076ECB1 /* SUUserInitiatedUpdateDriver.h */; settings = {ATTRIBUTES = (); }; };
61A354560DF113C70076ECB1 /* SUUserInitiatedUpdateDriver.m in Sources */ = {isa = PBXBuildFile; fileRef = 61A354540DF113C70076ECB1 /* SUUserInitiatedUpdateDriver.m */; };
+ 61AAE8280A321A7F00D8810D /* Sparkle.strings in Resources */ = {isa = PBXBuildFile; fileRef = 61AAE8220A321A7F00D8810D /* Sparkle.strings */; };
+ 61B078CE15A5FB6100600039 /* SUCodeSigningVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 61B078CC15A5FB6100600039 /* SUCodeSigningVerifier.h */; };
+ 61B078CF15A5FB6100600039 /* SUCodeSigningVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 61B078CD15A5FB6100600039 /* SUCodeSigningVerifier.m */; };
61B5F8ED09C4CE3C00B25A18 /* SUUpdater.h in Headers */ = {isa = PBXBuildFile; fileRef = 61B5F8E309C4CE3C00B25A18 /* SUUpdater.h */; settings = {ATTRIBUTES = (Public, ); }; };
61B5F8EE09C4CE3C00B25A18 /* SUUpdater.m in Sources */ = {isa = PBXBuildFile; fileRef = 61B5F8E409C4CE3C00B25A18 /* SUUpdater.m */; };
61B5F8EF09C4CE3C00B25A18 /* SUPlainInstallerInternals.m in Sources */ = {isa = PBXBuildFile; fileRef = 61B5F8E509C4CE3C00B25A18 /* SUPlainInstallerInternals.m */; };
@@ -113,6 +125,7 @@
61B93C090DD112FF00DCD2F8 /* SUScheduledUpdateDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 61B93C070DD112FF00DCD2F8 /* SUScheduledUpdateDriver.h */; settings = {ATTRIBUTES = (); }; };
61B93C0A0DD112FF00DCD2F8 /* SUScheduledUpdateDriver.m in Sources */ = {isa = PBXBuildFile; fileRef = 61B93C080DD112FF00DCD2F8 /* SUScheduledUpdateDriver.m */; };
61BBDF820A49220C00378739 /* Sparkle.icns in Resources */ = {isa = PBXBuildFile; fileRef = 61BBDF810A49220C00378739 /* Sparkle.icns */; };
+ 61C2680A0E2DB5D000175E6C /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 61C268090E2DB5D000175E6C /* License.txt */; };
61CFB3290E385186007A1735 /* Sparkle.pch in Headers */ = {isa = PBXBuildFile; fileRef = 61CFB3280E385186007A1735 /* Sparkle.pch */; };
61D85D6D0E10B2ED00F9B4A9 /* SUPipedUnarchiver.m in Sources */ = {isa = PBXBuildFile; fileRef = 6129C0B90E0B79810062CE76 /* SUPipedUnarchiver.m */; };
61EF67560E25B58D00F754E0 /* SUHost.m in Sources */ = {isa = PBXBuildFile; fileRef = 61EF67550E25B58D00F754E0 /* SUHost.m */; };
@@ -202,6 +215,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 0263187214FEBB31005EBF43 /* uk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Sparkle.strings; sourceTree = "<group>"; };
0263187514FEBB42005EBF43 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = uk.lproj/SUAutomaticUpdateAlert.xib; sourceTree = "<group>"; };
0263187614FEBB42005EBF43 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = uk.lproj/SUUpdateAlert.xib; sourceTree = "<group>"; };
0263187714FEBB42005EBF43 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = uk.lproj/SUUpdatePermissionPrompt.xib; sourceTree = "<group>"; };
@@ -302,10 +316,15 @@
610EC1BF0CF3914D00AE239E /* NTSynchronousTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTSynchronousTask.m; sourceTree = "<group>"; };
610EC1C00CF3914D00AE239E /* NTSynchronousTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTSynchronousTask.h; sourceTree = "<group>"; };
611142E810FB1BE5009810AA /* bspatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bspatch.h; sourceTree = "<group>"; };
+ 61131A050F846CE600E97AF6 /* da */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 61131A090F846D0A00E97AF6 /* zh_CN */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = zh_CN; path = zh_CN.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 61131A0A0F846D1100E97AF6 /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/Sparkle.strings; sourceTree = "<group>"; };
6113C9D315BE1D3600C303E7 /* pt_BR */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_BR; path = pt_BR.lproj/SUPasswordPrompt.xib; sourceTree = "<group>"; };
6117796E0D1112E000749C97 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
61180BC80D64138900B4E0D1 /* SUWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUWindowController.h; sourceTree = "<group>"; };
61180BC90D64138900B4E0D1 /* SUWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUWindowController.m; sourceTree = "<group>"; };
+ 611A904210240DD300CC659E /* pl */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 611A904610240DF700CC659E /* ja */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Sparkle.strings; sourceTree = "<group>"; };
6120721009CC5C4B007FE0F6 /* SUAutomaticUpdateAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUAutomaticUpdateAlert.h; sourceTree = "<group>"; };
6120721109CC5C4B007FE0F6 /* SUAutomaticUpdateAlert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUAutomaticUpdateAlert.m; sourceTree = "<group>"; };
612279D90DB5470200AB99EA /* Sparkle Unit Tests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Sparkle Unit Tests.octest"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -323,11 +342,14 @@
6129C0B90E0B79810062CE76 /* SUPipedUnarchiver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUPipedUnarchiver.m; sourceTree = "<group>"; };
612DCBAD0D488BC60015DBEA /* SUUpdatePermissionPrompt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUUpdatePermissionPrompt.h; sourceTree = "<group>"; };
612DCBAE0D488BC60015DBEA /* SUUpdatePermissionPrompt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUUpdatePermissionPrompt.m; sourceTree = "<group>"; };
+ 613151B20FB4946A000DCD59 /* is */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = is; path = is.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 6149E6EA1601ABAC008A351E /* ar */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Sparkle.strings; sourceTree = "<group>"; };
6149E6ED1601ABAC008A351E /* ar */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ar; path = ar.lproj/SUAutomaticUpdateAlert.xib; sourceTree = "<group>"; };
6149E6EE1601ABAC008A351E /* ar */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ar; path = ar.lproj/SUPasswordPrompt.xib; sourceTree = "<group>"; };
6149E6EF1601ABAC008A351E /* ar */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ar; path = ar.lproj/SUUpdateAlert.xib; sourceTree = "<group>"; };
6149E6F01601ABAC008A351E /* ar */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ar; path = ar.lproj/SUUpdatePermissionPrompt.xib; sourceTree = "<group>"; };
615409A8103BA09100125AF1 /* ConfigTestAppReleaseGCSupport.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ConfigTestAppReleaseGCSupport.xcconfig; sourceTree = "<group>"; };
+ 615409C4103BBC4000125AF1 /* cs */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Sparkle.strings; sourceTree = "<group>"; };
6158A1B81378F64700487EC1 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_PT; path = pt_PT.lproj/SUUpdatePermissionPrompt.xib; sourceTree = "<group>"; };
6158A1BA1378F68100487EC1 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_PT; path = pt_PT.lproj/SUAutomaticUpdateAlert.xib; sourceTree = "<group>"; };
6158A1BB1378F68100487EC1 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_PT; path = pt_PT.lproj/SUUpdateAlert.xib; sourceTree = "<group>"; };
@@ -336,6 +358,9 @@
6158A1C01378F8BB00487EC1 /* tr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = tr; path = tr.lproj/SUUpdatePermissionPrompt.xib; sourceTree = "<group>"; };
6158A1C4137904B300487EC1 /* SUUpdater_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUUpdater_Private.h; sourceTree = "<group>"; };
615AE3CF0D64DC40001CA7BD /* SUModelTranslation.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = SUModelTranslation.plist; sourceTree = "<group>"; };
+ 6160FD85134ABCD5007FFC5F /* tr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 6186554310D7484E00B1E074 /* pt_PT */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = pt_PT; path = pt_PT.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 618915730E35937600B5E981 /* sv */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Sparkle.strings; sourceTree = "<group>"; };
618E9CFC0E7328F1004646D8 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dsa_pub.pem; path = "Test Application/dsa_pub.pem"; sourceTree = "<group>"; };
618FA4FF0DAE88B40026945C /* SUInstaller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUInstaller.h; sourceTree = "<group>"; };
618FA5000DAE88B40026945C /* SUInstaller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUInstaller.m; sourceTree = "<group>"; };
@@ -343,8 +368,10 @@
618FA5040DAE8AB80026945C /* SUPlainInstaller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUPlainInstaller.m; sourceTree = "<group>"; };
618FA5200DAE8E8A0026945C /* SUPackageInstaller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUPackageInstaller.h; sourceTree = "<group>"; };
618FA5210DAE8E8A0026945C /* SUPackageInstaller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUPackageInstaller.m; sourceTree = "<group>"; };
+ 6195D4920E404AD700D41A50 /* ru */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Sparkle.strings; sourceTree = "<group>"; };
6196CFE309C71ADE000DC222 /* SUStatusController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUStatusController.h; sourceTree = "<group>"; };
6196CFE409C71ADE000DC222 /* SUStatusController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUStatusController.m; sourceTree = "<group>"; };
+ 619B17200E1E9D0800E72754 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Sparkle.strings; sourceTree = "<group>"; };
61A2259C0D1C495D00430CCD /* SUVersionComparisonProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUVersionComparisonProtocol.h; sourceTree = "<group>"; };
61A225A20D1C4AC000430CCD /* SUStandardVersionComparator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUStandardVersionComparator.h; sourceTree = "<group>"; };
61A225A30D1C4AC000430CCD /* SUStandardVersionComparator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUStandardVersionComparator.m; sourceTree = "<group>"; };
@@ -352,6 +379,12 @@
61A2279B0D1CEE7600430CCD /* SUSystemProfiler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUSystemProfiler.m; sourceTree = "<group>"; };
61A354530DF113C70076ECB1 /* SUUserInitiatedUpdateDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUUserInitiatedUpdateDriver.h; sourceTree = "<group>"; };
61A354540DF113C70076ECB1 /* SUUserInitiatedUpdateDriver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUUserInitiatedUpdateDriver.m; sourceTree = "<group>"; };
+ 61AAE8230A321A7F00D8810D /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 61AAE84F0A321AF700D8810D /* es */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 61AAE8590A321B0400D8810D /* fr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 61AAE8710A321F7700D8810D /* nl */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Sparkle.strings; sourceTree = "<group>"; };
+ 61B078CC15A5FB6100600039 /* SUCodeSigningVerifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUCodeSigningVerifier.h; sourceTree = "<group>"; };
+ 61B078CD15A5FB6100600039 /* SUCodeSigningVerifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUCodeSigningVerifier.m; sourceTree = "<group>"; };
61B5F8E309C4CE3C00B25A18 /* SUUpdater.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SUUpdater.h; sourceTree = "<group>"; };
61B5F8E409C4CE3C00B25A18 /* SUUpdater.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SUUpdater.m; sourceTree = "<group>"; };
61B5F8E509C4CE3C00B25A18 /* SUPlainInstallerInternals.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SUPlainInstallerInternals.m; sourceTree = "<group>"; };
@@ -374,21 +407,26 @@
61B93B260DD0FDD300DCD2F8 /* SUAutomaticUpdateDriver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUAutomaticUpdateDriver.m; sourceTree = "<group>"; };
61B93C070DD112FF00DCD2F8 /* SUScheduledUpdateDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUScheduledUpdateDriver.h; sourceTree = "<group>"; };
61B93C080DD112FF00DCD2F8 /* SUScheduledUpdateDriver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUScheduledUpdateDriver.m; sourceTree = "<group>"; };
+ 61BA66CC14BDFA0400D02D86 /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/Sparkle.strings; sourceTree = "<group>"; };
61BA66DA14BDFC5500D02D86 /* sl */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = sl; path = sl.lproj/SUAutomaticUpdateAlert.xib; sourceTree = "<group>"; };
61BA66DB14BDFC5500D02D86 /* sl */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = sl; path = sl.lproj/SUUpdateAlert.xib; sourceTree = "<group>"; };
61BA66DC14BDFC5500D02D86 /* sl */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = sl; path = sl.lproj/SUUpdatePermissionPrompt.xib; sourceTree = "<group>"; };
61BBDF810A49220C00378739 /* Sparkle.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Sparkle.icns; sourceTree = "<group>"; };
61C268090E2DB5D000175E6C /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License.txt; sourceTree = "<group>"; };
61CFB3280E385186007A1735 /* Sparkle.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sparkle.pch; sourceTree = "<group>"; };
+ 61DEC1161477565C00931268 /* ro */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Sparkle.strings; sourceTree = "<group>"; };
61DEC1181477566800931268 /* ro */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ro; path = ro.lproj/SUUpdatePermissionPrompt.xib; sourceTree = "<group>"; };
61DEC11A1477567800931268 /* ro */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ro; path = ro.lproj/SUUpdateAlert.xib; sourceTree = "<group>"; };
61DEC11C1477568300931268 /* ro */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ro; path = ro.lproj/SUAutomaticUpdateAlert.xib; sourceTree = "<group>"; };
+ 61E31A80103299500051D188 /* pt_BR */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = pt_BR; path = pt_BR.lproj/Sparkle.strings; sourceTree = "<group>"; };
61EF67550E25B58D00F754E0 /* SUHost.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUHost.m; sourceTree = "<group>"; };
61EF67580E25C5B400F754E0 /* SUHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUHost.h; sourceTree = "<group>"; };
+ 61F3AC1215C22D4A00260CA2 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Sparkle.strings; sourceTree = "<group>"; };
61F3AC1415C22D5900260CA2 /* th */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = th; path = th.lproj/SUAutomaticUpdateAlert.xib; sourceTree = "<group>"; };
61F3AC1515C22D5900260CA2 /* th */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = th; path = th.lproj/SUPasswordPrompt.xib; sourceTree = "<group>"; };
61F3AC1615C22D5900260CA2 /* th */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = th; path = th.lproj/SUUpdateAlert.xib; sourceTree = "<group>"; };
61F3AC1715C22D5900260CA2 /* th */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = th; path = th.lproj/SUUpdatePermissionPrompt.xib; sourceTree = "<group>"; };
+ 61F614540E24A12D009F47E7 /* it */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Sparkle.strings; sourceTree = "<group>"; };
61F83F6F0DBFE137006FDD30 /* SUBasicUpdateDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUBasicUpdateDriver.h; sourceTree = "<group>"; };
61F83F700DBFE137006FDD30 /* SUBasicUpdateDriver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUBasicUpdateDriver.m; sourceTree = "<group>"; };
8B887B5E1517F3AB000BB292 /* com.andymatuschak.Sparkle.SandboxService.xpc */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = com.andymatuschak.Sparkle.SandboxService.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -736,6 +774,8 @@
children = (
61299A2D09CA2DAB00B7442F /* SUDSAVerifier.h */,
61299A2E09CA2DAB00B7442F /* SUDSAVerifier.m */,
+ 61B078CC15A5FB6100600039 /* SUCodeSigningVerifier.h */,
+ 61B078CD15A5FB6100600039 /* SUCodeSigningVerifier.m */,
);
name = Support;
sourceTree = "<group>";
@@ -888,6 +928,7 @@
6158A1C5137904B300487EC1 /* SUUpdater_Private.h in Headers */,
8B887B7E1517F888000BB292 /* SUXPC.h in Headers */,
93FB277A156BD80D001937C7 /* SUPasswordPrompt.h in Headers */,
+ 61B078CE15A5FB6100600039 /* SUCodeSigningVerifier.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1081,6 +1122,16 @@
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
+ 55C14BB3136EEF1500649790 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 55C14BD9136EF00C00649790 /* SUStatus.xib in Resources */,
+ 55C14FC7136F05E100649790 /* Sparkle.strings in Resources */,
+ 550347011370023A00AE7681 /* Sparkle.icns in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
612279D40DB5470200AB99EA /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -1308,6 +1359,7 @@
55C14F07136EF6DB00649790 /* SULog.m in Sources */,
8B887B7F1517F888000BB292 /* SUXPC.m in Sources */,
93FB277B156BD80D001937C7 /* SUPasswordPrompt.m in Sources */,
+ 61B078CF15A5FB6100600039 /* SUCodeSigningVerifier.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1438,6 +1490,36 @@
name = SUUpdatePermissionPrompt.xib;
sourceTree = "<group>";
};
+ 61AAE8220A321A7F00D8810D /* Sparkle.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 61AAE8230A321A7F00D8810D /* en */,
+ 61AAE84F0A321AF700D8810D /* es */,
+ 61AAE8590A321B0400D8810D /* fr */,
+ 61AAE8710A321F7700D8810D /* nl */,
+ 619B17200E1E9D0800E72754 /* de */,
+ 61F614540E24A12D009F47E7 /* it */,
+ 618915730E35937600B5E981 /* sv */,
+ 6195D4920E404AD700D41A50 /* ru */,
+ 61131A050F846CE600E97AF6 /* da */,
+ 61131A090F846D0A00E97AF6 /* zh_CN */,
+ 61131A0A0F846D1100E97AF6 /* zh_TW */,
+ 613151B20FB4946A000DCD59 /* is */,
+ 611A904210240DD300CC659E /* pl */,
+ 611A904610240DF700CC659E /* ja */,
+ 61E31A80103299500051D188 /* pt_BR */,
+ 615409C4103BBC4000125AF1 /* cs */,
+ 6186554310D7484E00B1E074 /* pt_PT */,
+ 6160FD85134ABCD5007FFC5F /* tr */,
+ 61DEC1161477565C00931268 /* ro */,
+ 61BA66CC14BDFA0400D02D86 /* sl */,
+ 0263187214FEBB31005EBF43 /* uk */,
+ 61F3AC1215C22D4A00260CA2 /* th */,
+ 6149E6EA1601ABAC008A351E /* ar */,
+ );
+ name = Sparkle.strings;
+ sourceTree = "<group>";
+ };
61B5F92A09C4CFD800B25A18 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
View
5 Tests/SUVersionComparisonTest.m
@@ -59,4 +59,9 @@ - (void)testWordsWithSpaceInFront
// SUAssertEqual(@"1.0 - beta", @"1.0 beta");
}
+- (void)testVersionsWithReverseDateBasedNumbers
+{
+ SUAssertAscending(@"201210251627", @"201211051041");
+}
+
@end
View
18 ar.lproj/SUUpdatePermissionPrompt.xib
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
- <int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">12B19</string>
- <string key="IBDocument.InterfaceBuilderVersion">2549</string>
- <string key="IBDocument.AppKitVersion">1187</string>
- <string key="IBDocument.HIToolboxVersion">624.00</string>
+ <int key="IBDocument.SystemTarget">1070</int>
+ <string key="IBDocument.SystemVersion">12C60</string>
+ <string key="IBDocument.InterfaceBuilderVersion">2843</string>
+ <string key="IBDocument.AppKitVersion">1187.34</string>
+ <string key="IBDocument.HIToolboxVersion">625.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">2549</string>
+ <string key="NS.object.0">2843</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -1151,7 +1151,11 @@ IHNlbnQ6A</string>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
- <integer value="1050" key="NS.object.0"/>
+ <real value="1070" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <real value="1070" key="NS.object.0"/>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
View
409 cs.lproj/SUUpdatePermissionPrompt.xib
@@ -2,43 +2,40 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">11A453</string>
- <string key="IBDocument.InterfaceBuilderVersion">1553</string>
- <string key="IBDocument.AppKitVersion">1120</string>
- <string key="IBDocument.HIToolboxVersion">556.00</string>
+ <string key="IBDocument.SystemVersion">12B19</string>
+ <string key="IBDocument.InterfaceBuilderVersion">2549</string>
+ <string key="IBDocument.AppKitVersion">1187</string>
+ <string key="IBDocument.HIToolboxVersion">624.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">1553</string>
+ <string key="NS.object.0">2549</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSUserDefaultsController</string>
- <string>NSScroller</string>
<string>NSArrayController</string>
<string>NSButton</string>
- <string>NSScrollView</string>
- <string>NSImageView</string>
- <string>NSTextFieldCell</string>
<string>NSButtonCell</string>
+ <string>NSCustomObject</string>
+ <string>NSCustomView</string>
<string>NSImageCell</string>
+ <string>NSImageView</string>
+ <string>NSScrollView</string>
+ <string>NSScroller</string>
+ <string>NSTableColumn</string>
<string>NSTableView</string>
- <string>NSCustomView</string>
- <string>NSCustomObject</string>
+ <string>NSTextField</string>
+ <string>NSTextFieldCell</string>
+ <string>NSUserDefaultsController</string>
<string>NSView</string>
<string>NSWindowTemplate</string>
- <string>NSTextField</string>
- <string>NSTableColumn</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys" id="0">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <reference key="dict.values" ref="0"/>
+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+ <integer value="1" key="NS.object.0"/>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="844525087">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -75,10 +72,11 @@
<int key="NSvFlags">257</int>
<string key="NSFrame">{{255, 12}, {174, 32}}</string>
<reference key="NSSuperview" ref="634509955"/>
+ <reference key="NSWindow"/>
<int key="NSTag">1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="375345792">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Ověřovat automaticky</string>
<object class="NSFont" key="NSSupport" id="153976638">
@@ -88,7 +86,7 @@
</object>
<reference key="NSControlView" ref="59920098"/>
<int key="NSTag">1</int>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="153976638"/>
<string key="NSAlternateContents"/>
@@ -96,20 +94,22 @@
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="604564528">
<reference key="NSNextResponder" ref="634509955"/>
<int key="NSvFlags">257</int>
<string key="NSFrame">{{138, 12}, {117, 32}}</string>
<reference key="NSSuperview" ref="634509955"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="1030096284">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Neověřovat</string>
<reference key="NSSupport" ref="153976638"/>
<reference key="NSControlView" ref="604564528"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="153976638"/>
<string key="NSAlternateContents"/>
@@ -117,15 +117,17 @@
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="424428818">
<reference key="NSNextResponder" ref="634509955"/>
<int key="NSvFlags">264</int>
<string key="NSFrame">{{104, 114}, {289, 34}}</string>
<reference key="NSSuperview" ref="634509955"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="509483215">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Ověřovat aktualizace automaticky?</string>
<object class="NSFont" key="NSSupport">
@@ -153,15 +155,17 @@
</object>
</object>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="682946549">
<reference key="NSNextResponder" ref="634509955"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{104, 81}, {315, 42}}</string>
<reference key="NSSuperview" ref="634509955"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="273717838">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">DO NOT LOCALIZE</string>
<object class="NSFont" key="NSSupport" id="26">
@@ -173,20 +177,22 @@
<reference key="NSBackgroundColor" ref="972113870"/>
<reference key="NSTextColor" ref="22894637"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="1016693130">
<reference key="NSNextResponder" ref="634509955"/>
<int key="NSvFlags">264</int>
<string key="NSFrame">{{104, 53}, {278, 18}}</string>
<reference key="NSSuperview" ref="634509955"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="1052989921">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">163840</int>
<string key="NSContents">Odeslat anonymní systémový profil</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="1016693130"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<object class="NSCustomResource" key="NSNormalImage">
<string key="NSClassName">NSImage</string>
@@ -200,6 +206,7 @@
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSImageView" id="210018129">
<reference key="NSNextResponder" ref="634509955"/>
@@ -218,9 +225,10 @@
</object>
<string key="NSFrame">{{23, 84}, {64, 64}}</string>
<reference key="NSSuperview" ref="634509955"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="452432523">
- <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags">134217728</int>
<int key="NSCellFlags2">33554432</int>
<object class="NSCustomResource" key="NSContents">
<string key="NSClassName">NSImage</string>
@@ -231,6 +239,7 @@
<int key="NSStyle">0</int>
<bool key="NSAnimates">YES</bool>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSEditable">YES</bool>
</object>
<object class="NSButton" id="1038986702">
@@ -238,26 +247,29 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{80, 50}, {27, 26}}</string>
<reference key="NSSuperview" ref="634509955"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="238960717">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134250496</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="153976638"/>
<reference key="NSControlView" ref="1038986702"/>
- <int key="NSButtonFlags">-1194573569</int>
+ <int key="NSButtonFlags">-1194573824</int>
<int key="NSButtonFlags2">133</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrameSize">{438, 168}</string>
<reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
</object>
- <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+ <string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
<string key="NSMinSize">{213, 129}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
@@ -271,9 +283,6 @@
<string>displayKey</string>
</object>
<object class="_NSManagedProxy" key="_NSManagedProxy"/>
- <bool key="NSAvoidsEmptySelection">YES</bool>
- <bool key="NSPreservesSelection">YES</bool>
- <bool key="NSSelectsInsertedObjects">YES</bool>
<bool key="NSFilterRestrictsInsertion">YES</bool>
<bool key="NSClearsFilterPredicateOnInsertion">YES</bool>
</object>
@@ -298,6 +307,8 @@
<string key="NSFrameSize">{353, 113}</string>
<reference key="NSSuperview" ref="471134904"/>
<bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSControlAllowsExpansionToolTips">YES</bool>
<object class="_NSCornerView" key="NSCornerView">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
@@ -310,7 +321,7 @@
<double key="NSMinWidth">40</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
@@ -326,7 +337,7 @@
</object>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="164397246">
- <int key="NSCellFlags">69336577</int>
+ <int key="NSCellFlags">69206017</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Text Cell</string>
<reference key="NSSupport" ref="26"/>
@@ -351,7 +362,7 @@
<double key="NSMinWidth">40</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
@@ -359,7 +370,7 @@
<reference key="NSTextColor" ref="524644483"/>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="896442049">
- <int key="NSCellFlags">69336577</int>
+ <int key="NSCellFlags">69206017</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Text Cell</string>
<reference key="NSSupport" ref="26"/>
@@ -413,6 +424,7 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-22, 1}, {11, 125}}</string>
<reference key="NSSuperview" ref="421101861"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">256</int>
<reference key="NSTarget" ref="421101861"/>
<string key="NSAction">_doScroller:</string>
@@ -423,6 +435,7 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {345, 11}}</string>
<reference key="NSSuperview" ref="421101861"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">257</int>
<reference key="NSTarget" ref="421101861"/>
<string key="NSAction">_doScroller:</string>
@@ -437,6 +450,9 @@
<reference key="NSHScroller" ref="791636049"/>
<reference key="NSContentView" ref="471134904"/>
<bytes key="NSScrollAmts">AAAAAAAAAABBgAAAQYAAAA</bytes>
+ <double key="NSMinMagnification">0.25</double>
+ <double key="NSMaxMagnification">4</double>
+ <double key="NSMagnification">1</double>
</object>
<object class="NSTextField" id="320348499">
<reference key="NSNextResponder" ref="444010526"/>
@@ -445,7 +461,7 @@
<reference key="NSSuperview" ref="444010526"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="660061579">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string type="base64-UTF8" key="NSContents">SW5mb3JtYWNlIHogYW5vbnltbsOtaG8gc3lzdMOpbW92w6lobyBwcm9maWx1IHBvbcOhaGFqw60gdsO9
dm9qw6HFmcWvbSBsw6lwZSBwbMOhbm92YXQgYnVkb3Vjw60gdsO9dm9qIGFwbGlrYWNlCk9icmHFpXRl
@@ -456,6 +472,7 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<reference key="NSBackgroundColor" ref="972113870"/>
<reference key="NSTextColor" ref="22894637"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrameSize">{362, 205}</string>
@@ -475,22 +492,6 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
- <object class="IBBindingConnection" key="connection">
- <string key="label">contentArray: systemProfileInformationArray</string>
- <reference key="source" ref="770529889"/>
- <reference key="destination" ref="252154485"/>
- <object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="770529889"/>
- <reference key="NSDestination" ref="252154485"/>
- <string key="NSLabel">contentArray: systemProfileInformationArray</string>
- <string key="NSBinding">contentArray</string>
- <string key="NSKeyPath">systemProfileInformationArray</string>
- <int key="NSNibBindingConnectorVersion">2</int>
- </object>
- </object>
- <int key="connectionID">25</int>
- </object>
- <object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="252154485"/>
@@ -507,22 +508,6 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<int key="connectionID">127</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBBindingConnection" key="connection">
- <string key="label">value: icon</string>
- <reference key="source" ref="210018129"/>
- <reference key="destination" ref="252154485"/>
- <object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="210018129"/>
- <reference key="NSDestination" ref="252154485"/>
- <string key="NSLabel">value: icon</string>
- <string key="NSBinding">value</string>
- <string key="NSKeyPath">icon</string>
- <int key="NSNibBindingConnectorVersion">2</int>
- </object>
- </object>
- <int key="connectionID">130</int>
- </object>
- <object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleMoreInfo:</string>
<reference key="source" ref="252154485"/>
@@ -547,24 +532,60 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<int key="connectionID">133</int>
</object>
<object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">finishPrompt:</string>
+ <reference key="source" ref="252154485"/>
+ <reference key="destination" ref="59920098"/>
+ </object>
+ <int key="connectionID">144</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">finishPrompt:</string>
+ <reference key="source" ref="252154485"/>
+ <reference key="destination" ref="604564528"/>
+ </object>
+ <int key="connectionID">145</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">profileTableView</string>
+ <reference key="source" ref="252154485"/>
+ <reference key="destination" ref="445491357"/>
+ </object>
+ <int key="connectionID">186</int>
+ </object>
+ <object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">hidden: shouldAskAboutProfile</string>
- <reference key="source" ref="1038986702"/>
+ <string key="label">contentArray: systemProfileInformationArray</string>
+ <reference key="source" ref="770529889"/>
<reference key="destination" ref="252154485"/>
<object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="1038986702"/>
+ <reference key="NSSource" ref="770529889"/>
<reference key="NSDestination" ref="252154485"/>
- <string key="NSLabel">hidden: shouldAskAboutProfile</string>
- <string key="NSBinding">hidden</string>
- <string key="NSKeyPath">shouldAskAboutProfile</string>
- <object class="NSDictionary" key="NSOptions">
- <string key="NS.key.0">NSValueTransformerName</string>
- <string key="NS.object.0">NSNegateBoolean</string>
- </object>
+ <string key="NSLabel">contentArray: systemProfileInformationArray</string>
+ <string key="NSBinding">contentArray</string>
+ <string key="NSKeyPath">systemProfileInformationArray</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">139</int>
+ <int key="connectionID">25</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: promptDescription</string>
+ <reference key="source" ref="682946549"/>
+ <reference key="destination" ref="252154485"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="682946549"/>
+ <reference key="NSDestination" ref="252154485"/>
+ <string key="NSLabel">value: promptDescription</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">promptDescription</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">161</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
@@ -587,22 +608,6 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<int key="connectionID">143</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">finishPrompt:</string>
- <reference key="source" ref="252154485"/>
- <reference key="destination" ref="59920098"/>
- </object>
- <int key="connectionID">144</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">finishPrompt:</string>
- <reference key="source" ref="252154485"/>
- <reference key="destination" ref="604564528"/>
- </object>
- <int key="connectionID">145</int>
- </object>
- <object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">value: shouldSendProfile</string>
<reference key="source" ref="1016693130"/>
@@ -620,7 +625,7 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<string>NSNullPlaceholder</string>
<string>NSValidatesImmediately</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1"/>
<boolean value="YES"/>
@@ -633,19 +638,35 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">value: promptDescription</string>
- <reference key="source" ref="682946549"/>
+ <string key="label">value: icon</string>
+ <reference key="source" ref="210018129"/>
<reference key="destination" ref="252154485"/>
<object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="682946549"/>
+ <reference key="NSSource" ref="210018129"/>
<reference key="NSDestination" ref="252154485"/>
- <string key="NSLabel">value: promptDescription</string>
+ <string key="NSLabel">value: icon</string>
<string key="NSBinding">value</string>
- <string key="NSKeyPath">promptDescription</string>
+ <string key="NSKeyPath">icon</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">161</int>
+ <int key="connectionID">130</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: arrangedObjects.displayKey</string>
+ <reference key="source" ref="746304851"/>
+ <reference key="destination" ref="770529889"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="746304851"/>
+ <reference key="NSDestination" ref="770529889"/>
+ <string key="NSLabel">value: arrangedObjects.displayKey</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">arrangedObjects.displayKey</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">174</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
@@ -665,19 +686,23 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">value: arrangedObjects.displayKey</string>
- <reference key="source" ref="746304851"/>
- <reference key="destination" ref="770529889"/>
+ <string key="label">hidden: shouldAskAboutProfile</string>
+ <reference key="source" ref="1038986702"/>
+ <reference key="destination" ref="252154485"/>
<object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="746304851"/>
- <reference key="NSDestination" ref="770529889"/>
- <string key="NSLabel">value: arrangedObjects.displayKey</string>
- <string key="NSBinding">value</string>
- <string key="NSKeyPath">arrangedObjects.displayKey</string>
+ <reference key="NSSource" ref="1038986702"/>
+ <reference key="NSDestination" ref="252154485"/>
+ <string key="NSLabel">hidden: shouldAskAboutProfile</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">shouldAskAboutProfile</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSValueTransformerName</string>
+ <string key="NS.object.0">NSNegateBoolean</string>
+ </object>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">174</int>
+ <int key="connectionID">139</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
@@ -685,7 +710,9 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
- <reference key="object" ref="0"/>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
<reference key="children" ref="844525087"/>
<nil key="parent"/>
</object>
@@ -935,11 +962,8 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<string>-1.IBPluginDependency</string>
<string>-2.IBPluginDependency</string>
<string>-3.IBPluginDependency</string>
- <string>-3.ImportedFromIB2</string>
<string>13.IBPluginDependency</string>
- <string>13.ImportedFromIB2</string>
<string>14.IBPluginDependency</string>
- <string>14.ImportedFromIB2</string>
<string>176.IBPluginDependency</string>
<string>177.IBPluginDependency</string>
<string>178.IBPluginDependency</string>
@@ -953,52 +977,31 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<string>185.IBPluginDependency</string>
<string>185.IBShouldRemoveOnLegacySave</string>
<string>24.IBPluginDependency</string>
- <string>24.ImportedFromIB2</string>
<string>32.IBPluginDependency</string>
- <string>32.ImportedFromIB2</string>
<string>33.IBPluginDependency</string>
- <string>33.ImportedFromIB2</string>
<string>34.IBPluginDependency</string>
- <string>34.ImportedFromIB2</string>
<string>37.IBPluginDependency</string>
- <string>37.ImportedFromIB2</string>
<string>39.IBPluginDependency</string>
- <string>39.ImportedFromIB2</string>
<string>40.IBPluginDependency</string>
- <string>40.ImportedFromIB2</string>
<string>41.IBPluginDependency</string>
- <string>41.ImportedFromIB2</string>
<string>42.IBPluginDependency</string>
- <string>42.ImportedFromIB2</string>
<string>43.IBPluginDependency</string>
- <string>43.ImportedFromIB2</string>
<string>44.IBPluginDependency</string>
- <string>44.ImportedFromIB2</string>
<string>45.IBPluginDependency</string>
- <string>45.ImportedFromIB2</string>
<string>46.IBPluginDependency</string>
- <string>46.ImportedFromIB2</string>
<string>49.IBPluginDependency</string>
- <string>49.ImportedFromIB2</string>
- <string>5.IBEditorWindowLastContentRect</string>
<string>5.IBPluginDependency</string>
<string>5.IBWindowTemplateEditedContentRect</string>
- <string>5.ImportedFromIB2</string>
<string>6.IBPluginDependency</string>
- <string>6.ImportedFromIB2</string>
<string>71.IBPluginDependency</string>
- <string>71.ImportedFromIB2</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1012,41 +1015,23 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
- <string>{{312, 908}, {438, 168}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{312, 908}, {438, 168}}</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <boolean value="YES"/>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
@@ -1061,15 +1046,117 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
- <int key="maxID">185</int>
+ <int key="maxID">186</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">SUUpdatePermissionPrompt</string>
+ <string key="superclassName">SUWindowController</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>finishPrompt:</string>
+ <string>toggleMoreInfo:</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>finishPrompt:</string>
+ <string>toggleMoreInfo:</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">finishPrompt:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">toggleMoreInfo:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>descriptionTextField</string>
+ <string>moreInfoButton</string>
+ <string>moreInfoView</string>
+ <string>profileTableView</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSView</string>
+ <string>NSTableView</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>descriptionTextField</string>
+ <string>moreInfoButton</string>
+ <string>moreInfoView</string>
+ <string>profileTableView</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">descriptionTextField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">moreInfoButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">moreInfoView</string>
+ <string key="candidateClassName">NSView</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">profileTableView</string>
+ <string key="candidateClassName">NSTableView</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/SUUpdatePermissionPrompt.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">SUWindowController</string>
+ <string key="superclassName">NSWindowController</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/SUWindowController.h</string>
+ </object>
+ </object>
+ </object>
</object>
- <object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1050" key="NS.object.0"/>
</object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <real value="1070" key="NS.object.0"/>
+ </object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
<integer value="3100" key="NS.object.0"/>
@@ -1083,7 +1170,7 @@ b3Rhei4KClR5dG8gaW5mb3JtYWNlIGJ5IG3Em2xpIGLDvXQgb2Rlc2zDoW55Og</string>
<string>NSApplicationIcon</string>
<string>NSSwitch</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>{128, 128}</string>
<string>{15, 15}</string>
View
404 da.lproj/SUUpdatePermissionPrompt.xib
@@ -2,32 +2,32 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">11A453</string>
- <string key="IBDocument.InterfaceBuilderVersion">1553</string>
- <string key="IBDocument.AppKitVersion">1120</string>
- <string key="IBDocument.HIToolboxVersion">556.00</string>
+ <string key="IBDocument.SystemVersion">12B19</string>
+ <string key="IBDocument.InterfaceBuilderVersion">2549</string>
+ <string key="IBDocument.AppKitVersion">1187</string>
+ <string key="IBDocument.HIToolboxVersion">624.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">1553</string>
+ <string key="NS.object.0">2549</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSUserDefaultsController</string>
- <string>NSScroller</string>
<string>NSArrayController</string>
<string>NSButton</string>
- <string>NSScrollView</string>
- <string>NSImageView</string>
- <string>NSTextFieldCell</string>
<string>NSButtonCell</string>
+ <string>NSCustomObject</string>
+ <string>NSCustomView</string>
<string>NSImageCell</string>
+ <string>NSImageView</string>
+ <string>NSScrollView</string>
+ <string>NSScroller</string>
+ <string>NSTableColumn</string>
<string>NSTableView</string>
- <string>NSCustomView</string>
- <string>NSCustomObject</string>
+ <string>NSTextField</string>
+ <string>NSTextFieldCell</string>
+ <string>NSUserDefaultsController</string>
<string>NSView</string>
<string>NSWindowTemplate</string>
- <string>NSTextField</string>
- <string>NSTableColumn</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -72,10 +72,11 @@
<int key="NSvFlags">257</int>
<string key="NSFrame">{{286, 12}, {138, 32}}</string>
<reference key="NSSuperview" ref="19909334"/>
+ <reference key="NSWindow"/>
<int key="NSTag">1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="180510974">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Søg automatisk</string>
<object class="NSFont" key="NSSupport" id="300829717">
@@ -85,7 +86,7 @@
</object>
<reference key="NSControlView" ref="420538904"/>
<int key="NSTag">1</int>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="300829717"/>
<string key="NSAlternateContents"/>
@@ -93,20 +94,22 @@
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="255538383">
<reference key="NSNextResponder" ref="19909334"/>
<int key="NSvFlags">257</int>
<string key="NSFrame">{{192, 12}, {94, 32}}</string>
<reference key="NSSuperview" ref="19909334"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="480556731">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Søg ikke</string>
<reference key="NSSupport" ref="300829717"/>
<reference key="NSControlView" ref="255538383"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="300829717"/>
<string key="NSAlternateContents"/>
@@ -114,15 +117,17 @@
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="158215833">
<reference key="NSNextResponder" ref="19909334"/>
<int key="NSvFlags">264</int>
<string key="NSFrame">{{104, 114}, {289, 34}}</string>
<reference key="NSSuperview" ref="19909334"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1061731650">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Søg automatisk efter opdateringer?</string>
<object class="NSFont" key="NSSupport">
@@ -150,15 +155,17 @@
</object>
</object>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="747062516">
<reference key="NSNextResponder" ref="19909334"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{104, 81}, {315, 42}}</string>
<reference key="NSSuperview" ref="19909334"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="198855815">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">DO NOT LOCALIZE</string>
<object class="NSFont" key="NSSupport" id="26">
@@ -170,20 +177,22 @@
<reference key="NSBackgroundColor" ref="164399822"/>
<reference key="NSTextColor" ref="980236278"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="674115502">
<reference key="NSNextResponder" ref="19909334"/>
<int key="NSvFlags">264</int>
<string key="NSFrame">{{104, 53}, {278, 18}}</string>
<reference key="NSSuperview" ref="19909334"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="104979655">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">163840</int>
<string key="NSContents">Inkluder anonym systemprofil</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="674115502"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<object class="NSCustomResource" key="NSNormalImage">
<string key="NSClassName">NSImage</string>
@@ -197,6 +206,7 @@
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSImageView" id="834319590">
<reference key="NSNextResponder" ref="19909334"/>
@@ -215,9 +225,10 @@
</object>
<string key="NSFrame">{{23, 84}, {64, 64}}</string>
<reference key="NSSuperview" ref="19909334"/>
+ <reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="363272652">
- <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags">134217728</int>
<int key="NSCellFlags2">33554432</int>
<object class="NSCustomResource" key="NSContents">
<string key="NSClassName">NSImage</string>
@@ -228,6 +239,7 @@
<int key="NSStyle">0</int>
<bool key="NSAnimates">YES</bool>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSEditable">YES</bool>
</object>
<object class=