|
| 1 | +# TurtleTerm macOS Packaging |
| 2 | + |
| 3 | +## Purpose |
| 4 | + |
| 5 | +TurtleTerm should present as TurtleTerm on macOS, not as a runtime clone. |
| 6 | + |
| 7 | +This document defines the staged macOS application identity and the remaining production hardening work. |
| 8 | + |
| 9 | +## Current staged app identity |
| 10 | + |
| 11 | +The staged app bundle is generated by: |
| 12 | + |
| 13 | +```bash |
| 14 | +packaging/scripts/stage-macos-app.sh <version> <output-dir> |
| 15 | +``` |
| 16 | + |
| 17 | +It creates: |
| 18 | + |
| 19 | +```text |
| 20 | +TurtleTerm.app/ |
| 21 | + Contents/ |
| 22 | + Info.plist |
| 23 | + MacOS/turtleterm |
| 24 | + Resources/turtleterm-icon.svg |
| 25 | + libexec/turtle-term/ |
| 26 | + etc/turtle-term/turtleterm.lua |
| 27 | + share/turtle-term/ |
| 28 | +``` |
| 29 | + |
| 30 | +The bundle metadata uses: |
| 31 | + |
| 32 | +```text |
| 33 | +CFBundleName=TurtleTerm |
| 34 | +CFBundleDisplayName=TurtleTerm |
| 35 | +CFBundleIdentifier=ai.sourceos.TurtleTerm |
| 36 | +CFBundleExecutable=turtleterm |
| 37 | +``` |
| 38 | + |
| 39 | +## Runtime boundary |
| 40 | + |
| 41 | +The app launches TurtleTerm through `Contents/MacOS/turtleterm` and keeps private terminal runtime files under: |
| 42 | + |
| 43 | +```text |
| 44 | +Contents/libexec/turtle-term/ |
| 45 | +``` |
| 46 | + |
| 47 | +The public product executable remains: |
| 48 | + |
| 49 | +```text |
| 50 | +turtleterm |
| 51 | +``` |
| 52 | + |
| 53 | +## Production hardening still required |
| 54 | + |
| 55 | +The staged app is not yet a complete production macOS distribution. Remaining work: |
| 56 | + |
| 57 | +1. Generate a proper `.icns` icon from TurtleTerm brand assets. |
| 58 | +2. Replace or patch runtime app/window metadata where deeper internals expose non-product names. |
| 59 | +3. Add codesigning. |
| 60 | +4. Add notarization. |
| 61 | +5. Add DMG or PKG packaging lane. |
| 62 | +6. Add Gatekeeper validation workflow. |
| 63 | +7. Add update/rollback story. |
| 64 | + |
| 65 | +## Acceptance criteria |
| 66 | + |
| 67 | +macOS packaging is product-ready when: |
| 68 | + |
| 69 | +1. `TurtleTerm.app` opens as TurtleTerm. |
| 70 | +2. Activity Monitor, Dock, Finder, and app metadata show TurtleTerm. |
| 71 | +3. App icon is TurtleTerm-branded. |
| 72 | +4. App is signed and notarized. |
| 73 | +5. Release artifacts include checksums, manifest, SBOM, and attestations. |
| 74 | +6. Required third-party notices are included without taking over the product surface. |
0 commit comments