1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
===================
macOS Xcode project
===================
+--------+-------+---------+--------+---+-----+--------+-----+-------+
| Host Platform Support (:ref:`platform-support-key`) |
+--------+-------+---------+--------+---+-----+--------+-----+-------+
| macOS | Windows | Linux |
+--------+-------+-----+--------+-------+-----+--------+-----+-------+
| x86‑64 | arm64 | x86 | x86‑64 | arm64 | x86 | x86‑64 | arm | arm64 |
+========+=======+=====+========+=======+=====+========+=====+=======+
| |f| | |f| | | | | | | | |
+--------+-------+-----+--------+-------+-----+--------+-----+-------+
Briefcase supports creating a full Xcode project for a macOS app. This project
can then be used to build an actual app bundle, with the ``briefcase build``
command or directly from Xcode.
By default, apps will be both signed and notarized when they are packaged.
Packaging format
================
Briefcase supports three packaging formats for a macOS Xcode project:
1. A DMG that contains the ``.app`` bundle (using ``briefcase package macOS Xcode -p
dmg``).
2. A zipped ``.app`` folder (using ``briefcase package macOS Xcode -p zip``).
3. A ``.pkg`` installer (using ``briefcase package macOS Xcode -p pkg``).
``.pkg`` is the *required* format for console apps. ``.dmg`` is the
default format for GUI apps.
Icon format
===========
macOS Xcode projects use ``.png`` format icons. An application must provide icons of
the following sizes:
* 16px
* 32px
* 64px
* 128px
* 256px
* 512px
* 1024px
macOS Xcode projects do not support splash screens.
Additional options
==================
The following options can be provided at the command line when packaging
macOS apps.
.. include:: signing_options.rst
Application configuration
=========================
The following options can be added to the ``tool.briefcase.app.<appname>.macOS.Xcode``
section of your ``pyproject.toml`` file.
``entitlement``
~~~~~~~~~~~~~~~
A property whose sub-attributes define keys that will be added to the app's
``Entitlements.plist`` file. Each entry will be converted into a key in the entitlements
file. For example, specifying::
entitlement."com.apple.vm.networking" = true
will result in an ``Entitlements.plist`` declaration of::
<key>com.apple.vm.networking</key><true/>
Any Boolean or string value can be used for an entitlement value.
All macOS apps are automatically granted the following entitlements:
* ``com.apple.security.cs.allow-unsigned-executable-memory``
* ``com.apple.security.cs.disable-library-validation``
You can disable these default entitlements by defining them manually. For example, to
enable library validation, you could add the following to your ``pyproject.toml``::
entitlement."com.apple.security.cs.disable-library-validation" = false
``info``
~~~~~~~~
A property whose sub-attributes define keys that will be added to the app's
``Info.plist`` file. Each entry will be converted into a key in the entitlements
file. For example, specifying::
info."NSAppleScriptEnabled" = true
will result in an ``Info.plist`` declaration of::
<key>NSAppleScriptEnabled</key><true/>
Any Boolean or string value can be used for an ``Info.plist`` value.
``universal_build``
~~~~~~~~~~~~~~~~~~~
A Boolean, indicating whether Briefcase should build a universal app (i.e, an app that
can target both x86_64 and ARM64). Defaults to ``true``; if ``false``, the binary will
only be executable on the host platform on which it was built - i.e., if you build on
an x86_64 machine, you will produce an x86_65 binary; if you build on an ARM64 machine,
you will produce an ARM64 binary.
Permissions
===========
Briefcase cross platform permissions map to a combination of ``info`` and ``entitlement``
keys:
* ``microphone``: an ``info`` entry for ``NSMicrophoneUsageDescription``; and
an ``entitlement`` of ``com.apple.security.device.audio-input``
* ``camera``: an ``info`` entry for ``NSCameraUsageDescription``; and
an ``entitlement`` of ``com.apple.security.device.camera``
* ``coarse_location``: an ``info`` entry for ``NSLocationUsageDescription``
(ignored if ``background_location`` or ``fine_location`` is defined); plus an
entitlement of ``com.apple.security.personal-information.location``
* ``fine_location``: an ``info`` entry for ``NSLocationUsageDescription``(ignored
if ``background_location`` is defined); plus an ``entitlement`` of
``com.apple.security.personal-information.location``
* ``background_location``: an ``info`` entry for ``NSLocationUsageDescription``;
plus an ``entitlement`` of ``com.apple.security.personal-information.location``
* ``photo_library``: an ``info`` entry for ``NSPhotoLibraryUsageDescription``;
plus an ``entitlement`` of
``com.apple.security.personal-information.photos-library``
Platform quirks
===============
Packaging with ``--adhoc-sign``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Using the ``--adhoc-sign`` option on macOS produces an app that will be able
to run on your own machine, but won't run on any other computer. In order to
distribute your app to other users, you will need to sign the app with a full
signing identity.
|