Store Apple notarization IDs in Keychain and notarize/staple OpenWork DMGs locally.
A small helper skill for the OpenWork macOS release flow.
It stores the App Store Connect Issuer ID, API Key ID, and .p8 path in the macOS Keychain so you donβt have to keep hunting them.
Keychain locations used by OpenWork release skills:
com.differentai.openwork.notaryissuer-idkey-idkey-pathThese are used to sign updater artifacts (required for in-app updates).
com.differentai.openwork.updaterupdater-private-keyupdater-public-keysecurity add-generic-password -a issuer-id -s com.differentai.openwork.notary -w "<ISSUER_UUID>" -U
security add-generic-password -a key-id -s com.differentai.openwork.notary -w "<KEY_ID>" -U
security add-generic-password -a key-path -s com.differentai.openwork.notary -w "/path/to/AuthKey_<KEY_ID>.p8" -U
security find-generic-password -a issuer-id -s com.differentai.openwork.notary -w
security find-generic-password -a key-id -s com.differentai.openwork.notary -w
security find-generic-password -a key-path -s com.differentai.openwork.notary -w
APPLE_SIGNING_IDENTITY='Developer ID Application: Different AI inc. (F5DJWB4CCV)' \
pnpm -C vendor/openwork exec tauri build --bundles dmg
bun .opencode/skill/openwork-notary/first-call.ts
DMG_PATH="vendor/openwork/src-tauri/target/release/bundle/dmg/OpenWork_0.1.2_aarch64.dmg"
xcrun stapler staple "$DMG_PATH"
spctl --assess --type open --verbose=4 "$DMG_PATH"
The OpenWork release workflow expects a GitHub Actions secret:
TAURI_SIGNING_PRIVATE_KEYTo populate it from Keychain:
security find-generic-password -a updater-private-key -s com.differentai.openwork.updater -w
Then paste that value into the repo secret TAURI_SIGNING_PRIVATE_KEY.
Notes:
pubkey in vendor/openwork/src-tauri/tauri.conf.json to match.spctl saying Unnotarized Developer ID means signing is fine but notarization is missing.codesign ... code has no resources but signature indicates they must be present usually means the .app bundle got signed incorrectly (or was modified after signing).