…sing the "Install on Quit" functionality.
for quit, updates and relaunches the app, so updates don't happen while app is still running. NSBundle gets royally confused and points to the old path (loading new NIBs into the old app in the worst case) when you move a running app. - Temp folder is now user's desktop, as NSTemporaryDirectory() doesn't stay the same between two separate apps, and may be emptied on quit. - Relaunch gets created in App Support now, for same reasons as above. - Less dependency on prefix headers, that only leads to lazy, un-reusable code.
…ppcast that describes the delta updates that are available for a given version. The appcast would look a little something like the following: <enclosure url="http://you.com/app/Your Great App 2.0.zip" sparkle:version="2.0" length="1623481" type="application/octet-stream" sparkle:dsaSignature="BAFJW4B6B1K1JyW30nbkBwainOzrN6EQuAh" /> <sparkle:deltas> <enclosure url="http://you.com/app/Your Great App 1.5 to 2.0.delta" sparkle:version="2.0" sparkle:deltaFrom="1.5" length="642381" type="application/octet-stream" sparkle:dsaSignature="MCa1JyW30nbkBwaC0CFBfeinOzrN6EQuAh=" /> <enclosure url="http://you.com/app/Your Great App 1.4 to 2.0.delta" sparkle:version="2.0" sparkle:deltaFrom="1.4" length="928231" type="application/octet-stream" sparkle:dsaSignature="B6B1K1JyW30nbkBDBfeinOAszrN6Ea1JyW3" /> </sparkle:deltas>
…nsmitted over SSL but is from a malicious server. Now the download has to be transmitted over SSL *and* the download's host has to be the same as the appcast's.
Fixes from Matt Stevens: "For background applications (menu bar, completely UI-less, etc) there are a couple of issues with Sparkle notifications: - When prompts such as the initial prompt to enable update checking are displayed they can be hidden behind other windows since the background app is not in focus. This can cause problems, as these prompts run modally and can stop the application from functioning without the user knowing why. - If the update notification window is displayed and the user clicks away to another application, the window disappears and there is no way to get it back since there is no other UI to cause the app to activate. In this case the update should probably operate as a standard window since it is effectively operating as the application's UI."
…Sparkle. More super-unstable refactorings to come...
…archiver no longer an IV.
…elaunch tool out of the host before installing the update; that way, we can use the old version's tool. This insures us against future changes in the relaunch method.
…actoring. Please read: - Broke out SUUpdater functionality into update drivers. There's a basic one from which everything else inherits, then a user-initiated one, an automatic one, and a scheduled one. It's super-clean-and-shiny. - Destroyed the abomination that was SUStatusChecker. In its place is SUProbingUpdateDriver, which is like 10 lines long. - Made automatic installation less stupid. It used to install, THEN offer to relaunch. That's dumb, beacuse if the user says no, the app is running from the trash. Now it offers to install and relaunch or to install on quit. - Renamed like every method and symbol. I hope you didn't branch anything. - Reorganized the project hierarchy to be much clearer and easier to navigate. - Reworked the error system to no use NSError instead of exceptions; extra technical information is now logged to the console so that we can find problems. - A bunch of other small bugfixes in things I noticed along the way but no longer remember. - Probably a ton of other stuff. Read over the code and see what I've done. Then PLEASE test this with your app internally and let me know how it goes. This revision is hereby NOT YET DECLARED SAFE FOR PUBLIC RELEASE. But because I'm still using SVN, this is how things have to be.