Skip to content

Latest commit

 

History

History
50 lines (33 loc) · 4.82 KB

File metadata and controls

50 lines (33 loc) · 4.82 KB

Shipping Tripwire

Tripwire is free and MIT-licensed. GitHub Releases plus our own Homebrew tap are the V1 distribution path. An App Store account is not needed for this preview.

Install and update

brew install --cask karnstack/tap/tripwire
open -a Tripwire

Quit/disarm before updating with brew upgrade --cask karnstack/tap/tripwire. Without Homebrew, download the universal ZIP from Releases, unzip, and move Tripwire.app into Applications. Uninstalling the cask preserves local evidence; delete unwanted events yourself from the Events folder.

Preview downloads are ad-hoc signed, not Developer ID signed or notarized. When macOS blocks a download you trust, try opening it and then use Privacy & Security → Open Anyway, following Apple's guidance. Managed Macs may prohibit exceptions. Do not disable Gatekeeper or strip quarantine. Building reviewed source locally is another option, but requires Xcode.

Cut a preview release

  1. Complete automated tests and the attended checks in TESTING.md. State any untested hardware behavior in release notes.
  2. Increment both version fields in Resources/Info.plist, commit, and push. Commit as Karn <mail@karngyan.com> using local repository Git configuration.
  3. From a clean checkout with Tripwire quit:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
swift test
UNIVERSAL=1 bash scripts/build-app.sh
bash scripts/package-release.sh
  1. Tag that exact commit and push the tag. Create a GitHub prerelease with gh release create, --verify-tag, and --prerelease, attaching the versioned ZIP and .sha256 file from dist. Include the unsigned/notarized status accurately. Never replace assets of an already published version; cut a new version.
  2. Update Casks/tripwire.rb in karnstack/homebrew-tap with the exact version and ZIP SHA-256. Its Homebrew name is karnstack/tap. Validate with brew style --cask karnstack/tap/tripwire and brew fetch --cask karnstack/tap/tripwire. Commit and push the tap. No signing credentials or photos belong in either repository.

CI runs unit tests and builds both CPU architectures, including the packaging checks. It does not publish or notarize automatically. The cask has no privileged installer, background helper, analytics, auto-launch, or security-setting changes.

Make downloads smoother later

Open source and Apple signing are independent: the app can remain completely free. For normal trusted direct distribution:

  1. Enroll in the Apple Developer Program. Apple lists US$99/year, with regional pricing. An individual membership uses your legal seller name; an organization needs a qualifying legal entity and normally a D‑U‑N‑S number. A GitHub organization alone does not qualify.
  2. Create/install a Developer ID Application certificate in Xcode's account/certificate settings. Keep its private key secret and backed up.
  3. Build with UNIVERSAL=1 SIGNING_IDENTITY="Developer ID Application: Your Name (TEAMID)" bash scripts/build-app.sh. The script supports hardened runtime and the camera entitlement; Developer ID signing adds a secure timestamp.
  4. Submit a ZIP to Apple's notarization service using Xcode's notarytool. Store credentials in Keychain, not shell history or the repo. Inspect rejection logs; never claim notarization before an Accepted result.
  5. Staple the accepted ticket to dist/Tripwire.app with xcrun stapler staple, validate it, and run the packaging script again. Publish that final archive/checksum and update the cask. Test a fresh quarantined download on another Mac.

No Apple membership, certificates, credentials, purchases, or notarization submissions have been created by this project setup.

What about the Mac App Store?

Not the V1 route. Apple's review guidelines require Mac App Store sandboxing (§2.4.5) and public APIs (§2.5.1). This build is not sandboxed and its experimental SPU protocol is undocumented. Treat compatibility and review approval as unresolved, not as a packaging checkbox.

If you revisit the store: first prototype sensor/input coverage inside App Sandbox and remove unsupported dependencies; then enroll, create the App Store Connect app/bundle ID, archive a store-signed build in Xcode, test with TestFlight, prepare the icon/screenshots/support and privacy pages, complete privacy/age/export questions, and submit with accurate review notes. Recheck current rules then. A future digital-feature paywall would normally use StoreKit in-app purchase (§3.1.1); none is included now.