1. Jason Medeiros
  2. Coruscation


Coruscation / Read Me.txt

Coruscation uses a customized fork of Sparkle available at http://github.com/kolpanic/Sparkle/.

Because Coruscation includes Sparkle as a sub-project reference, and builds the framework as a dependent target, you have to set Xcode's preferences to use a shared build products directory, e.g., ~/Projects/build/. (Xcode's default is to put build products in the project directory.) Do this for both the Sparkle and Coruscation project.

Clone that project to a directory next to coruscation/, and build Coruscation.xcodeproj

Here's a summary of the changes.

• ConfigFramework.xcconfig: Add at the end (to support building GC app via Xcode subproject reference).
GCC_ENABLE_OBJC_GC = supported

• SUAppcastItem.m: After line 132 (NSString *newVersion = [enclosure objectForKey:@"sparkle:version"];), add to support apps that use older versions of Sparkle with different appcast keys.
if (newVersion == nil)
	newVersion = [dict objectForKey:@"version"];

• SUBasicUpdateDriver.m, At the end of the method -appcast:failedToLoadWithError:, so the delegate is notified of errors.
[self didNotFindUpdate];

• SUUpdater.m: Comment out the if block at line 74 that checks for securely-delivered updates. Apps built with older Sparkle will likely fail this test, the alerts are annoying. Also comment out lines 342 & 343 that limit profile sending to weekly.
//if (![[[self feedURL] scheme] isEqualToString:@"https"] && ![host publicDSAKey])
//	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);

//	const NSTimeInterval oneWeek = 60 * 60 * 24 * 7;
//	sendingSystemProfile &= (-[lastSubmitDate timeIntervalSinceNow] >= oneWeek);

SUUpdater.h: make the reference to the delegate weak so the CheckUpdateAppOperation objects can be garbage collected
	IBOutlet id __weak delegate;