🌐 English | 한국어 | 日本語 | 简体中文 | 繁體中文
Simplify your macOS App deployment
zapp is a powerful CLI tool designed to streamline and automate the deployment process for macOS applications. It handles all stages of deployment in one tool, from dependency bundling to DMG/PKG creation, code signing, and notarization.
- Create DMG files
- Create PKG files
- Code signing
- Notarization / Stapling
- Modify plist (version)
- Auto binary dependencies bundling
- Support GitHub Actions
brew tap ironpark/zapp
brew install zappgo install github.com/ironpark/zapp@latestTip
If the --identity flag is not used to select a certificate, Zapp will automatically select an available certificate from the current keychain.
zapp sign --target="path/to/target.(app,dmg,pkg)"zapp sign --identity="Developer ID Application" --target="path/to/target.(app,dmg,pkg)"Note
When executing the notarize command, if Zapp receives an app bundle path, it automatically compresses the app bundle and attempts to notarize it.
zapp notarize --profile="key-chain-profile" --target="path/to/target.(app,dmg,pkg)" --staplezapp notarize --apple-id="[email protected]" --password="pswd" --team-id="XXXXX" --target="path/to/target.(app,dmg,pkg)" --stapleNote
This process inspects the dependencies of the application executable, includes the necessary libraries within /Contents/Frameworks and modifies the link paths to enable standalone execution.
zapp dep --app="path/to/target.app"zapp dep --app="path/to/target.app" --libs="/usr/local/lib" --libs="/opt/homebrew/Cellar/ffmpeg/7.0.2/lib"Tip
dep, dmg, pkg commands can be used with the --sign, --notarize, and --staple flags.
- The
--signflag will automatically sign the app bundle after bundling the dependencies. - The
--notarizeflag will automatically notarize the app bundle after signing.
zapp dep --app="path/to/target.app" --sign --notarize --profile "profile" --stapleZapp can be used to create DMG files, a common format used for distributing macOS apps. It greatly simplifies the DMG creation process by automatically extracting icons from the app bundle, compositing disk icons, and providing an interface for drag-and-drop installation of the app.
zapp dmg --app="path/to/target.app"zapp dmg --title="My App" \
--app="path/to/target.app" \
--icon="path/to/icon.icns" \
--bg="path/to/background.png" \
--out="MyApp.dmg"Tip
dep, dmg, pkg commands can be used with the --sign, --notarize, and --staple flags.
- The
--signflag will automatically sign the app bundle after bundling the dependencies. - The
--notarizeflag will automatically notarize the app bundle after signing.
zapp dmg --app="path/to/target.app" --sign --notarize --profile "profile" --stapleTip
If the --version and --identifier flags are not set, these values will be automatically retrieved from the Info.plist file of the provided app bundle
zapp pkg --app="path/to/target.app"zapp pkg --out="MyApp.pkg" --version="1.2.3" --identifier="com.example.myapp" --app="path/to/target.app"Include End User License Agreement (EULA) files in multiple languages:
zapp pkg --eula=en:eula_en.txt,es:eula_es.txt,fr:eula_fr.txt --app="path/to/target.app" Tip
dep, dmg, pkg commands can be used with the --sign, --notarize, and --staple flags.
- The
--signflag will automatically sign the app bundle after bundling the dependencies. - The
--notarizeflag will automatically notarize the app bundle after signing.
zapp pkg --app="path/to/target.app" --sign --notarize --profile "profile" --stapleThe following is a complete example showing how to use zapp to dependency bundling, codesign, packaging, notarize, and staple MyApp.app:
# Dependency bundling
zapp dep --app="MyApp.app"
# Codesign / notarize / staple
zapp sign --target="MyApp.app"
zapp notarize --profile="key-chain-profile" --target="MyApp.app" --staple
# Create pkg/dmg file
zapp pkg --app="MyApp.app" --out="MyApp.pkg"
zapp dmg --app="MyApp.app" --out="MyApp.dmg"
# Codesign / notarize / staple for pkg/dmg
zapp sign --target="MyApp.app"
zapp sign --target="MyApp.pkg"
zapp notarize --profile="key-chain-profile" --target="MyApp.pkg" --staple
zapp notarize --profile="key-chain-profile" --target="MyApp.dmg" --stapleor just use the shorthand command
zapp dep --app="MyApp.app" --sign --notarize --staple
zapp pkg --out="MyApp.pkg" --app="MyApp.app" \
--sign --notarize --profile="key-chain-profile" --staple
zapp dmg --out="MyApp.dmg" --app="MyApp.app" \
--sign --notarize --profile="key-chain-profile" --stapleZapp is released under the MIT License.
If you encounter any issues or have questions, please file an issue on the GitHub issue tracker.
