🚧 Early alpha Under active construction. Everything here may change without notice — except the appcast URL. That one's forever.

Aetower

Docs

Aetower distribution

scripts/package-macos.sh produces a local app bundle. When .env.release.local exists, it is loaded automatically so local rebuilds use the same stable Developer ID identity as release builds. Explicit environment variables still win over values from .env.release.local. Bare local packages do not automatically notarize or staple from .env.release.local; use the release wrapper or set notarization variables explicitly for that.

Local package


sh scripts/package-macos.sh

That builds:

If you need a purely local ad-hoc build, override signing explicitly:


AETOWER_SIGN_IDENTITY=- sh scripts/package-macos.sh

If you intentionally want a direct local package to also honor notarization flags from .env.release.local, opt in explicitly:


AETOWER_PACKAGE_LOAD_NOTARIZATION=1 sh scripts/package-macos.sh

Release signing

To sign with a real Developer ID identity without .env.release.local, set:


export AETOWER_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)"

Optional metadata overrides:


export AETOWER_BUNDLE_ID="com.yourcompany.aetower"
export AETOWER_VERSION="1.0.0"
export AETOWER_BUILD_NUMBER="42"
export AETOWER_ENTITLEMENTS_PATH="$PWD/macos/Aetower.entitlements"
export AETOWER_HELPER_ENTITLEMENTS_PATH="$PWD/macos/AetowerHelper.entitlements"

Default entitlements files now live at:

If you want Endpoint Security-backed lineage in enterprise builds, you must:

Notarization

First store credentials in the local keychain:


xcrun notarytool store-credentials aetower-notary --apple-id "<apple-id>" --team-id "<team-id>" --password "<app-specific-password>"

Then package with notarization enabled:


export AETOWER_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)"
export AETOWER_NOTARY_PROFILE="aetower-notary"
export AETOWER_NOTARIZE=1
export AETOWER_STAPLE=1
sh scripts/package-macos.sh

The script will zip the .app, submit it with xcrun notarytool, and optionally staple the notarization ticket back onto the bundle.

Release wrapper

scripts/release.sh and scripts/release-macos.sh opt into notarization and stapling by default. Override AETOWER_NOTARIZE=0 AETOWER_STAPLE=0 only for diagnostic release dry runs.

To force the stricter release path:


export AETOWER_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)"
export AETOWER_NOTARY_PROFILE="aetower-notary"
sh scripts/release-macos.sh

You can check the local machine before packaging:


sh scripts/release-preflight.sh

Aetower is a free early-alpha download for macOS 14+ (Apple silicon).

Download for macOS