Skip to content


The apple module contains important utilities to make signing, notarizing, and building packages for macOS easier.

The functions in this module require a device running macOS with Xcode 10 or higher.


A decorator for macOS-specific commands.

This should be used to denote that a function only works on macOS due to reliance on built-in tools from macOS or Xcode.

package_app_zip(app: str)

Create a ZIP file of the app.


  • app (str): The path to the macOS to make an archive of

build_pkg(app: str, identity: str, package_name: str)

Create an installable package from a macOS app.

By default, it will create an app package that installs to /Applications/. This package installer can also be used to submit an app to the Mac App Store.

If the package name isn't a file path, .pkg will automatically be appended at the end of the name.


  • app (str): The path to the app to create a package of.
  • identity (str): The identity to sign the package with
  • package_name (str): The name or path of the resulting package.

code_sign(identity: str, app_directory: str, **kwargs)

Digitally sign a macOS application with a signing identity and any entitlements.


  • identity (str): The identity to use during signing, usually a Developer ID.
  • app_directory (str): The path to the macOS application for signing.
  • **kwargs: Arbitrary keyword arguments.


  • entitlements (str): (Optional) The path to the entitlements the app should be signed with.
  • enable_hardened_runtime (bool): Whether to sign the app with the hardened runtime on.

upload_to_notary(app: str, identifier: str, username: str, password: str, **kwargs) -> str

Upload a macOS application archive to Apple's notary service for notarization.


  • app (str): The path to the macOS application to send to Apple.
  • identifier (str): The bundle identifier of the application.
  • username (str): The username (email address) of the Apple ID to notarize under.
  • password (str): The password of the Apple ID to notarize under.
  • **kwargs: Arbitrary keyword arguments.


  • provider (str): The App Store Connect or iTunes Connect provider associated with the Apple ID used to sign the app.


  • uuid_str (str): The request UUID.

check_notary_status(uuid: str, username: str, password: str) -> int

Get the notarization status of a given UUID.


  • uuid (str): The UUID of the app to check the status of.
  • username (str): The user that submitted the notarization request.
  • password (str): The password to use to sign into Apple.


  • status (int): The status code associated with the UUID notarization request. A code of -1 indicates that getting the status code failed, either because the item could not be found or because no status code has been given yet.

staple(app: str)

Staple a notarization ticket to a notarized app.


  • app (str): The path of the macOS app to staple the ticket to.