Commit 739e452413
Unsigned
Layout: unified · split
DISTRIBUTION.md +24 −28
| @@ -1,26 +1,9 @@ | |||
| 1 | # Distribution | 1 | # Distribution |
| 2 | 2 | ||
| 3 | octosentry ships on two channels with a single codebase and identical | 3 | octosentry ships as a notarized DMG and via Homebrew — no App Store |
| 4 | entitlements (spec §9) — the only divergence is signing method at export | 4 | distribution. Same entitlements either way; there's only one channel. |
| 5 | time and whether the update checker runs. | ||
| 6 | 5 | ||
| 7 | ## App Store | 6 | ## DMG |
| 8 | |||
| 9 | 1. Requires an active Apple Developer Program membership and an **Apple | ||
| 10 | Distribution** certificate (Xcode > Settings > Accounts > Manage | ||
| 11 | Certificates). | ||
| 12 | 2. Create the app record in [App Store Connect](https://appstoreconnect.apple.com) | ||
| 13 | with bundle ID `net.cleberg.octosentry`. | ||
| 14 | 3. Archive: Product > Archive in Xcode (Release configuration). | ||
| 15 | 4. In the Organizer, Distribute App > App Store Connect > Upload. | ||
| 16 | 5. Complete the app listing (screenshots, description, privacy nutrition | ||
| 17 | label — [PrivacyInfo.xcprivacy](octosentry/PrivacyInfo.xcprivacy) already | ||
| 18 | declares no tracking and no collected data) and submit for review. | ||
| 19 | |||
| 20 | The update checker (`UpdateStore`) detects the App Store receipt at | ||
| 21 | runtime and never runs on this build — no code changes needed per release. | ||
| 22 | |||
| 23 | ## DMG (direct distribution) | ||
| 24 | 7 | ||
| 25 | Requires a **Developer ID Application** certificate and notarization | 8 | Requires a **Developer ID Application** certificate and notarization |
| 26 | credentials stored once locally: | 9 | credentials stored once locally: |
| @@ -43,18 +26,31 @@ scripts/build-dmg.sh 1.0.0 | |||
| 43 | 26 | ||
| 44 | This archives, exports with Developer ID signing, notarizes, staples the | 27 | This archives, exports with Developer ID signing, notarizes, staples the |
| 45 | ticket, and produces `build/octosentry-1.0.0.dmg`. Attach that file to | 28 | ticket, and produces `build/octosentry-1.0.0.dmg`. Attach that file to |
| 46 | the corresponding GitHub Release (`gh release create 1.0.0 build/octosentry-1.0.0.dmg`) | 29 | the corresponding GitHub Release: |
| 47 | — the update checker links there. | 30 | |
| 31 | ```bash | ||
| 32 | gh release upload 1.0.0 build/octosentry-1.0.0.dmg | ||
| 33 | ``` | ||
| 34 | |||
| 35 | The update checker (`UpdateStore`) links there. | ||
| 48 | 36 | ||
| 49 | ## Homebrew | 37 | ## Homebrew |
| 50 | 38 | ||
| 51 | Not published yet. [Casks/octosentry.rb](Casks/octosentry.rb) is a | 39 | Published at [zerolabsco/homebrew-tap](https://github.com/zerolabsco/homebrew-tap). |
| 52 | template — to actually publish it: | 40 | Users install via: |
| 41 | |||
| 42 | ```bash | ||
| 43 | brew tap zerolabsco/tap | ||
| 44 | brew install --cask octosentry | ||
| 45 | ``` | ||
| 46 | |||
| 47 | Per release, after uploading the new DMG to its GitHub Release: | ||
| 53 | 48 | ||
| 54 | 1. Create a `zerolabsco/homebrew-tap` repo. | 49 | 1. `shasum -a 256 build/octosentry-<version>.dmg` |
| 55 | 2. Copy the cask there, filling in the real `sha256` of the released DMG | 50 | 2. Update `version` and `sha256` in [Casks/octosentry.rb](Casks/octosentry.rb) |
| 56 | (`shasum -a 256 octosentry-1.0.0.dmg`). | 51 | (kept here for reference — the canonical copy lives in the tap repo). |
| 57 | 3. Users install via `brew tap zerolabsco/tap && brew install --cask octosentry`. | 52 | 3. Copy the updated file into a local clone of `zerolabsco/homebrew-tap`, |
| 53 | commit, and push. | ||
| 58 | 54 | ||
| 59 | ## Version bumps | 55 | ## Version bumps |
| 60 | 56 | ||