diff --git a/.gitignore b/.gitignore index 5d48b9c..1c0a9fb 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ Verae-Secret-Credentials.MD # Compiled PT-06 menu bar (built by run-menubar.sh / swiftc) platform/macos/menubar/verae-menubar verae-print +platform/macos/pkg/resources/AppIcon.iconset/ +build/macos-pkg/ diff --git a/docs/COMMERCIAL-INSTALLER-BACKLOG.md b/docs/COMMERCIAL-INSTALLER-BACKLOG.md index f59b1db..f929432 100644 --- a/docs/COMMERCIAL-INSTALLER-BACKLOG.md +++ b/docs/COMMERCIAL-INSTALLER-BACKLOG.md @@ -130,6 +130,7 @@ NSIS product already covers much of the *install experience* (files under Progra | Item | Location / notes | Status | |------|------------------|--------| | **Signed + notarized `.pkg` builder** | [`platform/macos/pkg/build-pkg.sh`](../platform/macos/pkg/build-pkg.sh) | **Full commercial path for installer package**: universal `verae-print`, codesign hardened runtime, stages `Verae Print Stamp.app`, `pkgbuild` + `productbuild` (Developer ID Installer), `notarytool submit --wait`, `stapler staple`, SHA256SUMS | +| **Installer GUI: product ID + Verae brand + license Agree** | [`pkg/Distribution.xml.in`](../platform/macos/pkg/Distribution.xml.in) + [`pkg/resources/`](../platform/macos/pkg/resources/) + [`smoke-installer-ui.sh`](../platform/macos/pkg/smoke-installer-ui.sh) | **Done** — productbuild Distribution with welcome, **license Agree/Disagree**, readme product ID table, conclusion, plum brand backgrounds; app Info.plist `VeraeProductID` + AppIcon; smoke 15/14 | | Entitlements | [`platform/macos/pkg/entitlements.plist`](../platform/macos/pkg/entitlements.plist) | network client, user-selected files, allow-jit | | Postinstall (printer, LaunchAgent, key setup) | [`platform/macos/pkg/scripts/postinstall`](../platform/macos/pkg/scripts/postinstall) | Console-user IPP queue + `mac-key-setup` | | App bundle **inside** pkg stage | Built by `build-pkg.sh` → `/Applications/Verae Print Stamp.app` | Thin wrapper: runs `verae-print mac-key-setup` or `stamp -open` on dropped PDFs; codesigned in pkg flow | diff --git a/docs/PACKAGING.md b/docs/PACKAGING.md index b607911..3dee3bd 100644 --- a/docs/PACKAGING.md +++ b/docs/PACKAGING.md @@ -325,3 +325,34 @@ Operator enable package (secrets/VM only left): | `platform/macos/pkg/build-pkg.sh` | optional signed `.pkg` (certs required) | | `platform/smoke-packaging-metadata.sh` | A4 packaging smoke | | `site/printit.verae.ai/certificate.html` | CERT-01 web cert viewer (brand kit) | + + +## macOS product .pkg installer GUI + +`platform/macos/pkg/build-pkg.sh` builds a **product** package (not a bare +component) with Installer.app pages: + +| Page | Resource | Purpose | +|------|----------|---------| +| Welcome | `resources/welcome.html` | Verae branding + product ID `ai.verae.print-stamp` | +| License | `resources/license.html` | **Agree / Disagree** EULA acceptance | +| Read Me | `resources/readme.html` | Product identification table (name, IDs, version, publisher) | +| Conclusion | `resources/conclusion.html` | Next steps after install | +| Background | `resources/background.png` (+ dark) | Verae plum brand panel | + +Distribution template: `Distribution.xml.in` → stamped `Distribution.xml`. +App bundle also carries `CFBundleIconFile` (AppIcon.icns), `VeraeProductID`, +and `/Library/Application Support/Verae/PrintStamp/PRODUCT.txt`. + +```sh +# Full signed + notarized (needs signing.env) +./platform/macos/pkg/build-pkg.sh + +# Local unsigned product for Installer UI review +SKIP_SIGN=1 ./platform/macos/pkg/build-pkg.sh +open build/macos-pkg/dist/VeraePrintStamp-macos.pkg + +# Smoke: product ID + brand + license resources embedded +./platform/macos/pkg/smoke-installer-ui.sh +``` + diff --git a/platform/macos/pkg/Distribution.xml.in b/platform/macos/pkg/Distribution.xml.in new file mode 100644 index 0000000..784177c --- /dev/null +++ b/platform/macos/pkg/Distribution.xml.in @@ -0,0 +1,67 @@ + + + Verae Print Stamp + ai.verae + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @COMPONENT_NAME@ + diff --git a/platform/macos/pkg/LICENSE.txt b/platform/macos/pkg/LICENSE.txt new file mode 100644 index 0000000..484718c --- /dev/null +++ b/platform/macos/pkg/LICENSE.txt @@ -0,0 +1,39 @@ +Verae Print Stamp (PrintIt) +Product ID: ai.verae.print-stamp +Copyright (c) Verae / FlightLookup Inc. / George Lambert + +END USER LICENSE AGREEMENT + +You must accept this agreement to install Verae Print Stamp. + +1. License +UNLICENSED — all rights reserved unless otherwise agreed in writing. +Subject to this agreement, Verae grants a limited, non-exclusive, +non-transferable license to install and use Verae Print Stamp on macOS +computers you own or control for Verae-backed document timestamping. + +2. What is sent to Verae +This software sends only a SHA-256 digest of your document (and related +registration metadata) to Verae. Document bytes remain on your computer. + +3. Accounts and keys +Signing keys and customer tokens are tied to your Verae account. Keep +keys secret. Portal: https://customer.verae.ai/portal/ + +4. Restrictions +Do not reverse engineer except where mandatory law allows. +Do not remove Verae branding, copyright, or product identification. +Do not misrepresent timestamp receipts or certificate contents. + +5. Disclaimer +THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. + +6. Limitation of liability +TO THE MAXIMUM EXTENT PERMITTED BY LAW, VERAE AND ITS SUPPLIERS ARE NOT +LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE +DAMAGES ARISING FROM USE OF THE SOFTWARE. + +7. Contact +Downloads: https://printit.verae.ai/ +Support: https://verae.com +Bundle: Verae Print Stamp.app (ai.verae.print-stamp) diff --git a/platform/macos/pkg/build-pkg.sh b/platform/macos/pkg/build-pkg.sh index bb1484f..3d4d554 100755 --- a/platform/macos/pkg/build-pkg.sh +++ b/platform/macos/pkg/build-pkg.sh @@ -1,13 +1,31 @@ #!/usr/bin/env bash # Build a Developer ID–signed, notarized macOS .pkg for Verae Print Stamp. -# Uses the same signing.env as Verae Timestamping.app (FlightLookup Inc.). +# Installer GUI includes: product identification, Verae branding, license Agree. +# +# Env: +# VERSION override HelperVersion +# SIGNING_ENV path to Apple signing.env (default ~/fie/installers/macos/signing.env) +# SKIP_SIGN=1 unsigned component + product (local UI smoke; no notary) +# SKIP_NOTARY=1 sign product but skip notarytool/staple +# UNSIGNED_ONLY=1 alias for SKIP_SIGN=1 set -euo pipefail ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" PKG_DIR="$(cd "$(dirname "$0")" && pwd)" +RES_SRC="$PKG_DIR/resources" SIGNING_ENV="${SIGNING_ENV:-$HOME/fie/installers/macos/signing.env}" -# shellcheck source=/dev/null -source "$SIGNING_ENV" +SKIP_SIGN="${SKIP_SIGN:-${UNSIGNED_ONLY:-0}}" +SKIP_NOTARY="${SKIP_NOTARY:-0}" + +if [[ "$SKIP_SIGN" != "1" ]]; then + if [[ ! -f "$SIGNING_ENV" ]]; then + echo "error: signing env not found: $SIGNING_ENV" >&2 + echo "hint: SKIP_SIGN=1 ./build-pkg.sh # unsigned product for installer UI smoke" >&2 + exit 1 + fi + # shellcheck source=/dev/null + source "$SIGNING_ENV" +fi # Package version = internal/job.HelperVersion (single source of truth). if [[ -z "${VERSION:-}" ]]; then @@ -18,15 +36,18 @@ BUILD_ROOT="$ROOT/build/macos-pkg" STAGE="$BUILD_ROOT/stage" SCRIPTS="$BUILD_ROOT/scripts" DIST="$BUILD_ROOT/dist" +RES_STAGE="$BUILD_ROOT/resources" ID_APP="${APPLE_APP_SIGN_ID:-Developer ID Application: FlightLookup Inc. (G8CKY7VMZC)}" ID_PKG="${APPLE_INSTALLER_SIGN_ID:-Developer ID Installer: FlightLookup Inc. (G8CKY7VMZC)}" ENTITLEMENTS="$PKG_DIR/entitlements.plist" BUNDLE_ID="ai.verae.print-stamp" PKG_ID="ai.verae.print-stamp.pkg" +PRODUCT_NAME="Verae Print Stamp" +COMPONENT_NAME="VeraePrintStamp-component.pkg" echo "→ Cleaning $BUILD_ROOT" rm -rf "$BUILD_ROOT" -mkdir -p "$STAGE" "$SCRIPTS" "$DIST" \ +mkdir -p "$STAGE" "$SCRIPTS" "$DIST" "$RES_STAGE" \ "$STAGE/Library/Application Support/Verae/PrintStamp/bin" \ "$STAGE/Library/Application Support/Verae/PrintStamp/ipp" \ "$STAGE/Library/Application Support/Verae/PrintStamp/registration-pdf" \ @@ -37,16 +58,30 @@ cd "$ROOT" mkdir -p "$BUILD_ROOT/bin" GOOS=darwin GOARCH=arm64 go build -o "$BUILD_ROOT/bin/verae-print-arm64" ./cmd/verae-print GOOS=darwin GOARCH=amd64 go build -o "$BUILD_ROOT/bin/verae-print-amd64" ./cmd/verae-print -# Embed version string into HelperVersion via env for postinstall display echo "$VERSION" > "$STAGE/Library/Application Support/Verae/PrintStamp/VERSION" +# Product identification sidecar for support/audit +cat > "$STAGE/Library/Application Support/Verae/PrintStamp/PRODUCT.txt" </dev/null || true cp -f "$ROOT/internal/pdfcert/logo.png" "$STAGE/Library/Application Support/Verae/PrintStamp/registration-pdf/VeraeFullLogo.png" 2>/dev/null || true +cp -f "$PKG_DIR/LICENSE.txt" "$STAGE/Library/Application Support/Verae/PrintStamp/LICENSE.txt" echo "→ IPP helper files" cp -f "$ROOT/platform/macos/ipp/verae-print-command.sh" "$STAGE/Library/Application Support/Verae/PrintStamp/ipp/" cp -f "$ROOT/platform/macos/ipp/com.verae.timestamping.ipp.plist" "$STAGE/Library/Application Support/Verae/PrintStamp/ipp/" chmod 755 "$STAGE/Library/Application Support/Verae/PrintStamp/ipp/verae-print-command.sh" -# Point LaunchAgent template -c path will be rewritten in postinstall to user support; -# also bake library binary path into a system copy of the command for reference. sed -i '' "s|VERAE_PRINT_BIN:-\$HOME/bin/verae-print|VERAE_PRINT_BIN:-/Library/Application Support/Verae/PrintStamp/bin/verae-print|" \ "$STAGE/Library/Application Support/Verae/PrintStamp/ipp/verae-print-command.sh" 2>/dev/null || true -echo "→ Building Verae Print Stamp.app" -APP="$STAGE/Applications/Verae Print Stamp.app" +echo "→ Building $PRODUCT_NAME.app (branded + product ID)" +APP="$STAGE/Applications/${PRODUCT_NAME}.app" mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" +if [[ -f "$RES_SRC/AppIcon.icns" ]]; then + cp -f "$RES_SRC/AppIcon.icns" "$APP/Contents/Resources/AppIcon.icns" +fi +cp -f "$ROOT/assets/VeraeFullLogo.png" "$APP/Contents/Resources/VeraeFullLogo.png" 2>/dev/null || true + cat > "$APP/Contents/Info.plist" < CFBundleExecutableVerae Print Stamp CFBundleIdentifier$BUNDLE_ID - CFBundleNameVerae Print Stamp - CFBundleDisplayNameVerae Print Stamp + CFBundleName$PRODUCT_NAME + CFBundleDisplayName$PRODUCT_NAME CFBundlePackageTypeAPPL CFBundleShortVersionString$VERSION CFBundleVersion$VERSION + CFBundleGetInfoString + $PRODUCT_NAME $VERSION — Verae / FlightLookup Inc. (ai.verae.print-stamp) + CFBundleIconFileAppIcon LSMinimumSystemVersion14.0 NSHighResolutionCapable CFBundleDocumentTypes @@ -95,7 +137,11 @@ cat > "$APP/Contents/Info.plist" < NSHumanReadableCopyright - Copyright © FlightLookup Inc. / Verae + Copyright © Verae / FlightLookup Inc. All rights reserved. + VeraeProductID$BUNDLE_ID + VeraePackageID$PKG_ID + VeraeBrandVerae + VeraeProductURLhttps://printit.verae.ai/ PLIST @@ -120,20 +166,41 @@ for f in "$@"; do done RUN chmod 755 "$APP/Contents/MacOS/Verae Print Stamp" +echo "APPL????" > "$APP/Contents/PkgInfo" 2>/dev/null || printf 'APPL????' > "$APP/Contents/PkgInfo" -echo "→ Signing app bundle" -codesign --force --deep --sign "$ID_APP" --options runtime --timestamp \ - --entitlements "$ENTITLEMENTS" \ - "$APP" +if [[ "$SKIP_SIGN" != "1" ]]; then + echo "→ Signing app bundle" + codesign --force --deep --sign "$ID_APP" --options runtime --timestamp \ + --entitlements "$ENTITLEMENTS" \ + "$APP" +else + echo "→ SKIP_SIGN=1 — leaving app unsigned" +fi + +echo "→ Preparing installer GUI resources (welcome / license / readme / branding)" +cp -f "$RES_SRC/welcome.html" "$RES_STAGE/" +cp -f "$RES_SRC/license.html" "$RES_STAGE/" +cp -f "$RES_SRC/conclusion.html" "$RES_STAGE/" +cp -f "$RES_SRC/background.png" "$RES_STAGE/" +cp -f "$RES_SRC/background-dark.png" "$RES_STAGE/" +# readme: inject version +sed "s/{{VERSION}}/$VERSION/g" "$RES_SRC/readme.html" > "$RES_STAGE/readme.html" +# Distribution from template +sed \ + -e "s/@VERSION@/$VERSION/g" \ + -e "s/@PKG_ID@/$PKG_ID/g" \ + -e "s/@BUNDLE_ID@/$BUNDLE_ID/g" \ + -e "s/@COMPONENT_NAME@/$COMPONENT_NAME/g" \ + "$PKG_DIR/Distribution.xml.in" > "$BUILD_ROOT/Distribution.xml" echo "→ Preparing pkg scripts" cp -f "$PKG_DIR/scripts/postinstall" "$SCRIPTS/postinstall" chmod 755 "$SCRIPTS/postinstall" -COMPONENT_PKG="$DIST/VeraePrintStamp-component.pkg" +COMPONENT_PKG="$DIST/$COMPONENT_NAME" PRODUCT_PKG="$DIST/VeraePrintStamp-${VERSION}.pkg" -echo "→ pkgbuild component" +echo "→ pkgbuild component ($PKG_ID $VERSION)" pkgbuild \ --root "$STAGE" \ --scripts "$SCRIPTS" \ @@ -142,25 +209,34 @@ pkgbuild \ --install-location "/" \ "$COMPONENT_PKG" -echo "→ productbuild + Developer ID Installer sign" -productbuild \ - --package "$COMPONENT_PKG" \ - --sign "$ID_PKG" \ - --timestamp \ - "$PRODUCT_PKG" +echo "→ productbuild Distribution (branded + license accept + product ID)" +PB_ARGS=( + --distribution "$BUILD_ROOT/Distribution.xml" + --resources "$RES_STAGE" + --package-path "$DIST" +) +if [[ "$SKIP_SIGN" != "1" ]]; then + PB_ARGS+=(--sign "$ID_PKG" --timestamp) +fi +productbuild "${PB_ARGS[@]}" "$PRODUCT_PKG" -echo "→ Notarizing $PRODUCT_PKG" -xcrun notarytool submit "$PRODUCT_PKG" --wait \ - --key "$APPLE_API_KEY_PATH" \ - --key-id "$APPLE_API_KEY_ID" \ - --issuer "$APPLE_API_ISSUER_ID" - -echo "→ Stapling" -xcrun stapler staple "$PRODUCT_PKG" - -echo "→ Verifying" -spctl -a -vv -t install "$PRODUCT_PKG" || true -pkgutil --check-signature "$PRODUCT_PKG" || true +if [[ "$SKIP_SIGN" != "1" && "$SKIP_NOTARY" != "1" ]]; then + echo "→ Notarizing $PRODUCT_PKG" + xcrun notarytool submit "$PRODUCT_PKG" --wait \ + --key "$APPLE_API_KEY_PATH" \ + --key-id "$APPLE_API_KEY_ID" \ + --issuer "$APPLE_API_ISSUER_ID" + echo "→ Stapling" + xcrun stapler staple "$PRODUCT_PKG" + echo "→ Verifying" + spctl -a -vv -t install "$PRODUCT_PKG" || true + pkgutil --check-signature "$PRODUCT_PKG" || true +elif [[ "$SKIP_SIGN" == "1" ]]; then + echo "→ SKIP_SIGN=1 — skipping notary/staple (open $PRODUCT_PKG to review Installer UI)" +elif [[ "$SKIP_NOTARY" == "1" ]]; then + echo "→ SKIP_NOTARY=1 — signed product, not notarized" + pkgutil --check-signature "$PRODUCT_PKG" || true +fi # Stable latest name + checksums cp -f "$PRODUCT_PKG" "$DIST/VeraePrintStamp-macos.pkg" @@ -169,10 +245,45 @@ cp -f "$PRODUCT_PKG" "$DIST/VeraePrintStamp-macos.pkg" shasum -a 256 "VeraePrintStamp-${VERSION}.pkg" VeraePrintStamp-macos.pkg > SHA256SUMS ) +# Expand smoke: ensure Distribution + license resources embedded +EXPAND="$BUILD_ROOT/expand-check" +rm -rf "$EXPAND" +pkgutil --expand "$PRODUCT_PKG" "$EXPAND" +fail=0 +has_expand_file() { + local f + f="$(find "$EXPAND" -name "$1" -print -quit 2>/dev/null || true)" + [[ -n "$f" && -s "$f" ]] +} +for need in Distribution welcome.html license.html readme.html conclusion.html background.png; do + if ! has_expand_file "$need"; then + echo "error: product pkg missing installer resource: $need" >&2 + fail=1 + fi +done +DIST_FILE="" +[[ -f "$EXPAND/Distribution" ]] && DIST_FILE="$EXPAND/Distribution" +[[ -z "$DIST_FILE" && -f "$EXPAND/Distribution.xml" ]] && DIST_FILE="$EXPAND/Distribution.xml" +if [[ -z "$DIST_FILE" ]] || ! grep -q 'Verae Print Stamp' "$DIST_FILE"; then + echo "error: Distribution missing product title Verae Print Stamp" >&2 + fail=1 +fi +if [[ -n "$DIST_FILE" ]] && ! grep -q 'ai.verae.print-stamp' "$DIST_FILE"; then + echo "error: Distribution missing product id ai.verae.print-stamp" >&2 + fail=1 +fi +if [[ "$fail" -ne 0 ]]; then + echo "Installer resource check failed. Tree:" >&2 + find "$EXPAND" -maxdepth 3 -type f >&2 || true + exit 1 +fi +echo "→ Installer GUI resources verified inside product pkg" + echo echo "Signed installable ready:" echo " $PRODUCT_PKG" echo " $DIST/VeraePrintStamp-macos.pkg" echo +echo "Installer pages: Welcome (branded) → License (Agree) → Read Me (product ID) → Install → Conclusion" echo "Install: double-click the .pkg (or: sudo installer -pkg … -target /)" echo "Then: Print → Destination → Verae Timestamping" diff --git a/platform/macos/pkg/resources/AppIcon.icns b/platform/macos/pkg/resources/AppIcon.icns new file mode 100644 index 0000000..7797ce8 Binary files /dev/null and b/platform/macos/pkg/resources/AppIcon.icns differ diff --git a/platform/macos/pkg/resources/background-dark.png b/platform/macos/pkg/resources/background-dark.png new file mode 100644 index 0000000..2fd93bf Binary files /dev/null and b/platform/macos/pkg/resources/background-dark.png differ diff --git a/platform/macos/pkg/resources/background.png b/platform/macos/pkg/resources/background.png new file mode 100644 index 0000000..966b034 Binary files /dev/null and b/platform/macos/pkg/resources/background.png differ diff --git a/platform/macos/pkg/resources/conclusion.html b/platform/macos/pkg/resources/conclusion.html new file mode 100644 index 0000000..7e36e51 --- /dev/null +++ b/platform/macos/pkg/resources/conclusion.html @@ -0,0 +1,43 @@ + + + + +Install complete — Verae Print Stamp + + + +
+

Verae Print Stamp is installed

+
Product ID ai.verae.print-stamp · branded Verae installer
+ +

+ Thank you for choosing Verae. +

+
+ + diff --git a/platform/macos/pkg/resources/license.html b/platform/macos/pkg/resources/license.html new file mode 100644 index 0000000..f1fec1d --- /dev/null +++ b/platform/macos/pkg/resources/license.html @@ -0,0 +1,109 @@ + + + + +License Agreement — Verae Print Stamp + + + +
+

Verae Print Stamp — End User License Agreement

+
+ Product: Verae Print Stamp (PrintIt) · ID: ai.verae.print-stamp
+ Copyright © Verae / FlightLookup Inc. / George Lambert
+ You must accept this agreement to continue installation. +
+ +
+ Accept to install. By clicking Agree / Continue in the macOS + Installer, you accept these terms. If you do not agree, click Agree is not + available until you review, or cancel the installer. +
+ +

1. License

+

+ UNLICENSED — all rights reserved unless otherwise agreed in writing with Verae. + Subject to this agreement, Verae grants you a limited, non-exclusive, + non-transferable license to install and use Verae Print Stamp on Apple + macOS computers you own or control, for timestamping documents with Verae. +

+ +

2. What is sent to Verae

+

+ This software sends only a SHA-256 digest of your document + (and related registration metadata) to Verae for timestamp registration. + Document bytes remain on your computer. You are responsible for network + access, account credentials (including xVerae- keys), and lawful use. +

+ +

3. Accounts and keys

+

+ Signing keys and customer tokens are tied to your Verae account. Keep keys + secret. Lost keys may prevent proving prior stamps. Portal: + https://customer.verae.ai/portal/ +

+ +

4. Restrictions

+
    +
  • Do not reverse engineer except where mandatory law allows.
  • +
  • Do not remove Verae branding, copyright, or product identification.
  • +
  • Do not use the software to infringe others’ rights or violate law.
  • +
  • Do not misrepresent timestamp receipts or certificate contents.
  • +
+ +

5. Ownership

+

+ The software, Verae marks, and documentation remain property of Verae and + its licensors. No trademark license is granted beyond normal use of the + installed product UI. +

+ +

6. Disclaimer

+

+ THE SOFTWARE IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT. TIMESTAMPING DEPENDS ON NETWORK, ACCOUNT, AND UPSTREAM + SERVICES. +

+ +

7. Limitation of liability

+

+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, VERAE AND ITS SUPPLIERS ARE NOT + LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE + DAMAGES, OR LOSS OF DATA, PROFITS, OR BUSINESS, ARISING FROM USE OF THE + SOFTWARE. +

+ +

8. Termination

+

+ This license ends if you breach it. On termination, stop using and uninstall + the software. Provisions that by nature should survive (ownership, + disclaimer, liability) survive termination. +

+ +

9. Contact

+

+ Downloads: https://printit.verae.ai/
+ Support: https://verae.com
+ Product ID: ai.verae.print-stamp · Bundle: Verae Print Stamp.app +

+
+ + diff --git a/platform/macos/pkg/resources/readme.html b/platform/macos/pkg/resources/readme.html new file mode 100644 index 0000000..e4906ef --- /dev/null +++ b/platform/macos/pkg/resources/readme.html @@ -0,0 +1,49 @@ + + + + +Product identification — Verae Print Stamp + + + +
+

Product identification

+ + + + + + + + + + + + +
Product nameVerae Print Stamp (PrintIt)
Display nameVerae Print Stamp
PublisherVerae / FlightLookup Inc.
Bundle identifierai.verae.print-stamp
Installer package IDai.verae.print-stamp.pkg
Version{{VERSION}}
PlatformmacOS 14+ (Apple silicon & Intel)
Install locations + /Applications/Verae Print Stamp.app
+ /Library/Application Support/Verae/PrintStamp/ +
BrandVerae plum #531B59 · printit.verae.ai
Supporthttps://verae.com · https://printit.verae.ai/
LicenseMust accept EULA in this installer before files are installed
+

+ This Read Me identifies the product for audit and support. It is not a + substitute for the License Agreement screen. +

+
+ + diff --git a/platform/macos/pkg/resources/welcome.html b/platform/macos/pkg/resources/welcome.html new file mode 100644 index 0000000..6283973 --- /dev/null +++ b/platform/macos/pkg/resources/welcome.html @@ -0,0 +1,83 @@ + + + + +Welcome — Verae Print Stamp + + + +
+
+
V
+
+

Verae Print Stamp

+
Product ID: ai.verae.print-stamp · PrintIt for macOS
+
+
+ Verae branded installer +

+ This installer sets up Verae Print Stamp (PrintIt) so you can + timestamp PDFs and print jobs with a Verae-backed cryptographic receipt. + Only a SHA-256 digest leaves your Mac — document bytes stay local. +

+
    +
  • Verae Print Stamp.app in Applications
  • +
  • Helper binary under Application Support
  • +
  • Optional “Verae Timestamping” print destination
  • +
  • Menu bar / LaunchAgent hooks when enabled
  • +
+

Click Continue to review the license agreement, then install.

+
+ Publisher: Verae / FlightLookup Inc. · https://printit.verae.ai/ · https://verae.com +
+
+ + diff --git a/platform/macos/pkg/smoke-installer-ui.sh b/platform/macos/pkg/smoke-installer-ui.sh new file mode 100755 index 0000000..d628353 --- /dev/null +++ b/platform/macos/pkg/smoke-installer-ui.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# Smoke: assert macOS product pkg carries product ID, Verae branding, license UI. +# Prefer an existing dist pkg; else build unsigned with SKIP_SIGN=1. +set -euo pipefail +PKG_DIR="$(cd "$(dirname "$0")" && pwd)" +ROOT="$(cd "$PKG_DIR/../../.." && pwd)" +DIST="$ROOT/build/macos-pkg/dist" +VERSION="${VERSION:-}" +if [[ -z "$VERSION" && -f "$ROOT/internal/job/job.go" ]]; then + VERSION="$(grep -E 'HelperVersion[[:space:]]*=' "$ROOT/internal/job/job.go" | head -1 | sed -E 's/.*"([^"]+)".*/\1/')" +fi +VERSION="${VERSION:-0.3.6}" + +PRODUCT="${1:-}" +if [[ -z "$PRODUCT" ]]; then + if [[ -f "$DIST/VeraePrintStamp-${VERSION}.pkg" ]]; then + PRODUCT="$DIST/VeraePrintStamp-${VERSION}.pkg" + elif [[ -f "$DIST/VeraePrintStamp-macos.pkg" ]]; then + PRODUCT="$DIST/VeraePrintStamp-macos.pkg" + else + echo "→ no existing pkg; building unsigned product (SKIP_SIGN=1)" + SKIP_SIGN=1 "$PKG_DIR/build-pkg.sh" + PRODUCT="$DIST/VeraePrintStamp-${VERSION}.pkg" + fi +fi + +echo "→ smoke installer UI: $PRODUCT" +TMP="$(mktemp -d /tmp/verae-pkg-smoke.XXXXXX)" +trap 'rm -rf "$TMP"' EXIT +pkgutil --expand "$PRODUCT" "$TMP/exp" + +pass=0 +fail=0 +check() { + local id="$1"; shift + if "$@" >/dev/null 2>&1; then + echo " PASS $id" + pass=$((pass+1)) + else + echo " FAIL $id" + fail=$((fail+1)) + fi +} + +has_file() { + local name="$1" + local f + f="$(find "$TMP/exp" -name "$name" -print -quit 2>/dev/null || true)" + [[ -n "$f" && -s "$f" ]] +} + +find_one() { + find "$TMP/exp" -name "$1" -print -quit 2>/dev/null || true +} + +DIST_FILE="" +if [[ -f "$TMP/exp/Distribution" ]]; then + DIST_FILE="$TMP/exp/Distribution" +elif [[ -f "$TMP/exp/Distribution.xml" ]]; then + DIST_FILE="$TMP/exp/Distribution.xml" +fi +check has-distribution test -n "$DIST_FILE" -a -s "${DIST_FILE:-/dev/null}" +check title-verae grep -q 'Verae Print Stamp' "$DIST_FILE" +check product-id grep -q 'ai.verae.print-stamp' "$DIST_FILE" +check license-ref grep -qi 'license' "$DIST_FILE" +check welcome-ref grep -qi 'welcome' "$DIST_FILE" +check readme-ref grep -qi 'readme' "$DIST_FILE" +check background-ref grep -qi 'background' "$DIST_FILE" + +check welcome-html has_file welcome.html +check license-html has_file license.html +check readme-html has_file readme.html +check conclusion-html has_file conclusion.html +check background-png has_file background.png + +WELCOME="$(find_one welcome.html)" +LICENSE="$(find_one license.html)" +README="$(find_one readme.html)" +check welcome-branding grep -Eq '531B59|Verae branded|Product ID' "$WELCOME" +check license-accept grep -Eiq 'accept|Agree|License Agreement' "$LICENSE" +check readme-product-id grep -q 'ai.verae.print-stamp' "$README" + +echo "════════════════════════════════" +echo " installer-ui PASS=$pass FAIL=$fail" +[[ "$fail" -eq 0 ]]