Sparkle in Sandbox Mode

If you’re trying to distribute updates for your OSX app, outside the AppStore, still, with the AppSandbox enabled, you’ve come to the right place.

In the official Sparkle repository, you can find this pull request. Since it hasn’t been updated in a while, and the settings were fixed for OSX Lion, i’ve just forked the pull request, and pushed a couple fixes here.

Allright, so, how should you proceed?

  1. Clone the repository!
  2. Open the Build Phases of your target and…
    1. Add Sparkle.framework as a dependency
    2. Link Sparkle.framework library
    3. Copy Sparkle.framework to ‘Frameworks’
  3. If you’ve done things right, your ‘Build Phases’ tab should look something like this:

    OSX Sparkle Sandboxed

  4. Add a ‘Run Script‘ phase with the following snippet:

    [cc]LOCATION=”${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}”
    IDENTITY=”Developer ID Application: [INSERT YOUR IDENTITY NAME HERE]”
    find “$LOCATION” -name ‘*.framework’ -exec codesign –verbose –force –sign “$IDENTITY” {}/Versions/Current \;
    codesign –verbose –force –sign “$IDENTITY” “$LOCATION/../XPCServices/com.andymatuschak.Sparkle.SandboxService.xpc”
    [/cc]

That’s it. After hitting ‘Archive’, your app should be able to auto-update itself.

References:
Codesign in Mavericks and Xcode 5 (Stackoverflow)
Codesign in Mavericks and Xcode 5 (Hockeyapp)
Sparkle (Thanks Andy, for sharing such an awesome project)