.. _apple_codesign_rcodesign: =================== Using ``rcodesign`` =================== The ``rcodesign`` executable provided by this project provides a command mechanism to interact with Apple code signing. Signing with ``sign`` ===================== The ``rcodesign sign`` command can be used to sign a filesystem path. Unless you want to create an ad-hoc signature on a Mach-O binary, you'll need to tell this command what code signing certificate to use. To sign a Mach-O executable:: rcodesign sign \ --p12-file developer-id.p12 --p12-password-file ~/.certificate-password \ --code-signature-flags runtime \ path/to/executable To sign an ``.app`` bundle (and all Mach-O binaries inside):: rcodesign sign \ --p12-file developer-id.p12 --p12-password-file ~/.certificate-password \ path/to/My.app To sign a DMG image:: rcodesign sign \ --p12-file developer-id.p12 --p12-password-file ~/.certificate-password \ path/to/app.dmg To sign a ``.pkg`` installer:: rcodesign sign \ --p12-file developer-id-installer.p12 --p12-password-file ~/.certificate-password \ path/to/installer.pkg Notarizing and Stapling ======================= You can notarize a signed asset via ``rcodesign notary-submit``. Notarization requires an App Store Connect API Key. See :ref:`apple_codesign_app_store_connect_api_key` for instructions on how to obtain one. Assuming you used ``rcodesign encode-app-store-connect-api-key`` to produce a JSON file with all the API Key information, simply specify ``--api-key-path`` to define the path to this JSON file. To notarize an already signed asset:: rcodesign notary-submit \ --api-key-path ~/.appstoreconnect/key.json \ path/to/file/to/notarize By default ``notarize-submit`` just uploads the asset to Apple. To wait on its notarization result, add ``--wait``:: rcodesign notary-submit \ --api-key-path ~/.appstoreconnect/key.json \ --wait \ path/to/file/to/notarize Or to wait and automatically staple the file if notarization was successful:: rcodesign notary-submit \ --api-key-path ~/.appstoreconnect/key.json \ --staple \ path/to/file/to/notarize If notarization is interrupted or was initiated on another machine and you just want to attempt to staple an asset that was already notarized, you can run ``rcodesign staple``. e.g.:: rcodesign staple path/to/file/to/staple .. tip:: It is possible to staple any asset, not just those notarized by you.