An open API service indexing awesome lists of open source software.

https://github.com/beeware/briefcase-macos-app-template

A template for generating macOS app projects with Briefcase
https://github.com/beeware/briefcase-macos-app-template

Last synced: 11 months ago
JSON representation

A template for generating macOS app projects with Briefcase

Awesome Lists containing this project

README

          

# Briefcase macOS App Template

A [Cookiecutter](https://github.com/cookiecutter/cookiecutter/) template
for building Python apps that will run under macOS.

## Using this template

The easiest way to use this project is to not use it at all - at least,
not directly. [Briefcase](https://github.com/beeware/briefcase/) is a
tool that uses this template, rolling it out using data extracted from a
`pyproject.toml` configuration file.

However, if you *do* want use this template directly...

1. Install
[Cookiecutter](https://github.com/cookiecutter/cookiecutter). This
is a tool used to bootstrap complex project templates:

$ pip install cookiecutter

2. Run `cookiecutter` on the template:

$ cookiecutter https://github.com/beeware/briefcase-macOS-app-template

This will ask you for a number of details of your application,
including the name of your application (which should be a
valid PyPI identifier), and the Formal Name of your application
(the full name you use to describe your app). The remainder of these
instructions will assume a name of `my-project`, and a formal name
of `My Project`.

3. [Obtain a Python Apple support package for
macOS](https://github.com/beeware/Python-Apple-support), and extract
it into the `My Project/My Project.app/Contents/Resources/Suppoort`
directory generated by the template.

4. Obtain a stub binary, and add it as a file named `My Project` in the
`My Project/My Project.app/Contents/MacOS/` directory generated by
the template. The [stub
project](https://github.com/beeware/briefcase-macOS-Xcode-template/tree/main/stub)
in the [Briefcase macOS Xcode
template](https://github.com/beeware/briefcase-macOS-Xcode-template)
generates two stub binaries - one for GUI apps, and one for console
apps; copy the appropriate executable from that project into your
app template.

5. Add your code to the template, into the
`My Project/My Project.app/Contents/Resources/app` directory. At the
very minimum, you need to have an `app//__main__.py` file
that defines an entry point that will start your application.

If your code has any dependencies, they should be installed into the
`My Project/My Project.app/Contents/Resources/app_packages`
directory.

If you've done this correctly, a project with a formal name of
`My Project`, with an app name of `my-project` should have a directory
structure that looks something like:

My Project/
My Project.app/
Contents/
MacOS/
My Project
Resources/
app/
README
my_project/
__init__.py
__main__.py
app_packages/
README
...
Support/
...
VERSIONS
my-project.icns
Info.plist
installer/
resources/
welcome.html
scripts/
postinstall
Distribution.xml
Entitlements.plist
briefcase.toml

The `My Project.app` directory should identify as an macOS application
that can be started by clicking on the application icon in Finder. It
can also be distributed as a standalone package.

Before you can run the app, you will need to sign any binary files,
frameworks and embedded apps in the `My Project.app` folder, as well as
the `My Project.app` folder itself. The `Entitlements.plist` file should
be a good starting point for the entitlements required to sign the app.

## Next steps

Of course, running Python code isn't very interesting by itself - you
won't be able to do any console input or output, because a macOS app
doesn't display a console.

To do something interesting, you'll need to work with the native macOS
system libraries to draw widgets and respond to user input. The [Rubicon
Objective C](https://github.com/beeware/rubicon-objc) bridging library
can be used to interface with the macOS system libraries. Alternatively,
you could use a cross-platform widget toolkit that supports macOS (such
as [Toga](https://github.com/beeware/toga)) to provide a GUI for your
application.

If you have any external library dependencies (like Toga, or anything
other third-party library), you should install the library code into the
`app_packages` directory. This directory is the same as a
`site_packages` directory on a desktop Python install.