Building TablePro
Development Builds
Xcode
Cmd+Rto build and runCmd+Bto build only- Scheme: TablePro, Destination: My Mac
Command Line
-skipPackagePluginValidation is required. CodeEditSourceEditor bundles a SwiftLint plugin that triggers Xcode’s plugin validation on CLI builds.Release Builds
build/Release/TablePro-arm64.app and build/Release/TablePro-x86_64.app.
The script extracts the right slice from the universal static libraries, strips the main binary, helpers, PluginKit framework, and plugin binaries, then signs each binary individually and the app bundle last with hardened runtime and entitlements. Environment variables control signing:
Notarization uses a
notarytool keychain profile named TablePro. Create it once with xcrun notarytool store-credentials "TablePro" --apple-id ... --team-id ... --password .... Do not sign or notarize by hand; the script already does it per binary, which is what Apple’s guidance requires.
Static Libraries
Static.a files (libmariadb, libpq, libsybdb, and others) are hosted on the libs-v1 GitHub Release, not in git.
Publishing Libraries (Maintainers)
After rebuilding a library, publish it withscripts/publish-libs.sh, naming every lib you rebuilt:
Libs/checksums.sha256, and uploads the archive with --clobber.
iOS xcframeworks (Libs/ios/*.xcframework) upload to the same release:
Creating a DMG
scripts/create-dmg.sh takes the version, the architecture (default universal), and the source app (default build/Release/TablePro.app):
build/Release/TablePro-0.57.0-arm64.dmg.
Clean Build
CI/CD
App Releases
.github/workflows/build.yml, triggered by v* tags (e.g. v0.57.0).
Jobs: SwiftLint, macOS Tests, Build ARM64, Build x86_64, Registry Readiness. The release job needs all five, so failing tests block the release. It produces DMGs, ZIPs, and Sparkle signatures, with release notes extracted from CHANGELOG.md.
Plugin Releases
.github/workflows/build-plugin.yml, triggered by plugin-*-v* tags (e.g. plugin-oracle-v1.0.0) or by workflow_dispatch. The dispatch input takes comma-separated tag:pluginKitVersion pairs, e.g. plugin-mongodb-v1.0.25:13. Omit :pluginKitVersion and the workflow reads currentPluginKitVersion from PluginManager.swift.
After a PluginKit ABI bump, re-release every registry plugin in one parallel matrix run:
