Bug #389869: "Sparkle runs thread-unsafe code on secondary threads" Bug #312995: "Canceling authentication request causes crash on next update" Bug #388793: "Need to notify SUUpdateDriverFinishedNotification on main thread" The unfortunate side-effect of this fix is that all the file-handling code is now CoreServices-based, since NSFileManager is not thread-safe. This is disgusting and will be stricken from all records when installation is performed by relaunch in Next Major, as it should have been in the first place.
… #if'd for 10.4 support; I look forward to removing them. :) Thanks for the patch, August.
I've undone all the UTI nonsense: I don't see any reason to use it if the underlying frameworks are just going to do dumber path extension comparison that what I'm already doing. I've switched back to the tried-and-true method. I also made SUUnarchiver* path-based instead of NSURL-based because I realized that the latter didn't make any sense given that we're only unarchiving local files.
Refactored Sparkle's unarchiving system into SUUnarchiver, a factory for SUPipedUnarchiver and SUDiskImageUnarchiver. I removed that nasty cleanUp call by now copying out the contents of the DMG into the /tmp directory and unmounting. Nice! This changed a fair amount so please test with your build and let me know if it explodes things. Works in my tests, though.