krz/octosentry
macOS menu bar app to monitor GitHub security alerts
clone: git clone https://gitbay.org/krz/octosentry.git
0.7.0: DISTRIBUTION.md · raw
1# Distribution
2
3octosentry ships on two channels with a single codebase and identical
4entitlements (spec §9) — the only divergence is signing method at export
5time and whether the update checker runs.
6
7## App Store
8
91. Requires an active Apple Developer Program membership and an **Apple
10 Distribution** certificate (Xcode > Settings > Accounts > Manage
11 Certificates).
122. Create the app record in [App Store Connect](https://appstoreconnect.apple.com)
13 with bundle ID `net.cleberg.octosentry`.
143. Archive: Product > Archive in Xcode (Release configuration).
154. In the Organizer, Distribute App > App Store Connect > Upload.
165. 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
20The update checker (`UpdateStore`) detects the App Store receipt at
21runtime and never runs on this build — no code changes needed per release.
22
23## DMG (direct distribution)
24
25Requires a **Developer ID Application** certificate and notarization
26credentials stored once locally:
27
28```bash
29xcrun notarytool store-credentials "octosentry-notary" \
30 --apple-id "you@example.com" \
31 --team-id "YOUR_TEAM_ID" \
32 --password "an-app-specific-password"
33```
34
35(App-specific password from [appleid.apple.com](https://appleid.apple.com),
36not your main Apple ID password.)
37
38Then, per release:
39
40```bash
41scripts/build-dmg.sh 1.0.0
42```
43
44This archives, exports with Developer ID signing, notarizes, staples the
45ticket, and produces `build/octosentry-1.0.0.dmg`. Attach that file to
46the corresponding GitHub Release (`gh release create 1.0.0 build/octosentry-1.0.0.dmg`)
47— the update checker links there.
48
49## Homebrew
50
51Not published yet. [Casks/octosentry.rb](Casks/octosentry.rb) is a
52template — to actually publish it:
53
541. Create a `zerolabsco/homebrew-tap` repo.
552. Copy the cask there, filling in the real `sha256` of the released DMG
56 (`shasum -a 256 octosentry-1.0.0.dmg`).
573. Users install via `brew tap zerolabsco/tap && brew install --cask octosentry`.
58
59## Version bumps
60
61`MARKETING_VERSION` in the Xcode project must match the git tag for each
62release — the update checker compares `CFBundleShortVersionString`
63against the latest GitHub Release's tag name.