Skip to content

Latest commit

 

History

History
134 lines (95 loc) · 3.5 KB

File metadata and controls

134 lines (95 loc) · 3.5 KB

Develop Liney

This guide is for contributors and maintainers working on the Liney codebase.

Requirements

  • macOS 14+
  • Xcode 16+ with command line tools
  • gh is optional and only needed for GitHub features and release publishing

Release builds also require the Metal toolchain component used by Ghostty:

xcodebuild -downloadComponent MetalToolchain

Build

xcodebuild \
  -project Liney.xcodeproj \
  -scheme Liney \
  -configuration Debug \
  -destination 'platform=macOS' \
  build

Test

xcodebuild \
  -project Liney.xcodeproj \
  -scheme Liney \
  -destination 'platform=macOS' \
  test

Run The Debug Build

open ~/Library/Developer/Xcode/DerivedData/Liney-*/Build/Products/Debug/Liney.app

Project Layout

Liney/
├─ App/
├─ Domain/
├─ Persistence/
├─ Services/
│  ├─ Git/
│  ├─ Process/
│  └─ Terminal/
│     └─ Ghostty/
├─ Support/
├─ UI/
└─ Vendor/

Docs

Data

Liney stores workspace state and app settings in ~/.liney/, and still reads legacy state from ~/Library/Application Support/Liney/ when present.

Release Build

scripts/build_macos_app.sh
open dist/Liney.app

Optional variables:

  • SIGNING_IDENTITY="Developer ID Application: Your Name (TEAMID)" to sign the .app
  • OUTPUT_DIR=/custom/output/path to change the output folder
  • RELEASE_ARCHS="arm64 x86_64" to override the default universal macOS artifact

The committed GhosttyKit.xcframework now includes both macOS arm64 and x86_64 slices, so the default release build emits a universal app bundle and DMG.

If you need to rebuild the vendored Ghostty xcframework, see docs/build_ghostty.md.

The build script emits:

  • dist/Liney.app
  • dist/Liney-<version>.dmg

Auto Updates

Liney uses Sparkle for signed app updates.

To prepare the signing key on a release machine:

scripts/setup_sparkle_keys.sh

This exports the private key to ~/.liney_release/sparkle_private_key and prints the public key that must stay in the app target's SUPublicEDKey.

Because Liney is open source, keep the private key outside this repository. A private release-infra repo, CI secret store, or dedicated release machine is the right place for it.

Publish

The root release entrypoint is:

./deploy.sh

By default it:

  • bumps the patch version
  • increments the build number by 1
  • signs and notarizes universal release artifacts
  • updates GitHub releases, Sparkle appcast metadata, and the Homebrew tap

scripts/deploy.sh still exists as a compatibility wrapper.

Current Limitations

  • The main supported local development path is the Xcode project
  • Ghostty is required for the terminal stack
  • Worktree switching restarts active panes after confirmation so their cwd always matches the newly selected worktree
  • Session persistence restores per-worktree layout, zoom state, and pane cwd, but relaunch still recreates fresh shell processes
  • Some GitHub workflow features expect gh to be installed and authenticated