diff --git a/BUILD.md b/BUILD.md index acc61e8..07099ed 100644 --- a/BUILD.md +++ b/BUILD.md @@ -46,7 +46,13 @@ Create a .rpm: ## macOS -Download and install Python 3.9.0 from https://www.python.org/downloads/release/python-390/. I downloaded `python-3.9.0-macosx10.9.pkg`. +Install python@3.7 (PyInstaller doesn't support newer versions yet) and other dependencies from Homebrew: + +``` +brew install python@3.7 create-dmg graphicsmagick imagemagick +``` + +Download and install Python 3.9.0 from https://www.python.org/downloads/release/python-379/. I downloaded `python-3.7.9-macosx10.9.pkg`. (PyInstaller does not support the latest version of Python yet.) If you don't have it already, install poetry (`pip3 install --user poetry`). Then install dependencies: @@ -60,19 +66,13 @@ Run from source tree: poetry run dangerzone ``` -To create an app bundle and DMG for distribution, use the `build_app.py` script +To create an app bundle, use the `build_app.py` script: ```sh poetry run ./install/macos/build_app.py ``` -If you want to build for distribution, you'll need a codesigning certificate, and you'll also need to have [create-dmg](https://github.com/sindresorhus/create-dmg) installed: - -```sh -brew install create-dmg graphicsmagick imagemagick -``` - -And then run `build_app.py --with-codesign`: +If you want to build for distribution, you'll need a codesigning certificate, and then run: ```sh poetry run ./install/macos/build_app.py --with-codesign diff --git a/RELEASE.md b/RELEASE.md index b7ba10e..b2022d8 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -36,17 +36,19 @@ To make a macOS release, go to macOS build machine: - Verify and checkout the git tag for this release - Run `poetry install` - Run `poetry run ./install/macos/build_app.py --with-codesign`; this will make `dist/Dangerzone.dmg` -- Notarize it: `xcrun altool --notarize-app --primary-bundle-id "media.firstlook.dangerzone" -u "micah@firstlook.org" -p "@keychain:dangerzone-notarize" --file dist/Dangerzone $VERSION.dmg` +- Notarize it: `xcrun altool --notarize-app --primary-bundle-id "media.firstlook.dangerzone" -u "micah@firstlook.org" -p "@keychain:dangerzone-notarize" --file dist/Dangerzone.dmg` - Wait for it to get approved, check status with: `xcrun altool --notarization-history 0 -u "micah@firstlook.org" -p "@keychain:dangerzone-notarize"` - (If it gets rejected, you can see why with: `xcrun altool --notarization-info [RequestUUID] -u "micah@firstlook.org" -p "@keychain:dangerzone-notarize"`) -- After it's approved, staple the ticket: `xcrun stapler staple dist/Dangerzone $VERSION.dmg` +- After it's approved, staple the ticket: `xcrun stapler staple dist/Dangerzone.dmg` This process ends up with the final file: ``` -dist/Dangerzone $VERSION.dmg +dist/Dangerzone.dmg ``` +Rename `Dangerzone.dmg` to `Dangerzone $VERSION.dmg`. + ## Windows release To make a Windows release, go to the Windows build machine: diff --git a/install/macos/build_app.py b/install/macos/build_app.py index 93d2e13..e298043 100644 --- a/install/macos/build_app.py +++ b/install/macos/build_app.py @@ -33,6 +33,7 @@ def main(): dist_path = os.path.join(root, "dist") app_path = os.path.join(dist_path, "Dangerzone.app") dmg_path = os.path.join(dist_path, "Dangerzone.dmg") + icon_path = os.path.join(root, "install", "macos", "dangerzone.icns") print("○ Deleting old build and dist") if os.path.exists(build_path): @@ -77,7 +78,20 @@ def main(): return print("○ Creating DMG") - run(["create-dmg", dmg_path, app_path, "--identity", identity_name_application]) + run([ + "create-dmg", + "--volname", "Dangerzone", + "--volicon", icon_path, + "--window-size", "400", "200", + "--icon-size", "100", + "--icon", "Dangerzone.app", "100", "70", + "--hide-extension", "Dangerzone.app", + "--app-drop-link", "300", "70", + dmg_path, + app_path, + "--identity", + identity_name_application + ]) print(f"○ Finished building DMG: {dmg_path}") diff --git a/poetry.lock b/poetry.lock index 9e5093d..c727e33 100644 --- a/poetry.lock +++ b/poetry.lock @@ -76,7 +76,7 @@ hook_testing = ["pytest (>=2.7.3)", "execnet (>=1.5.0)", "psutil"] [[package]] name = "pyinstaller-hooks-contrib" -version = "2020.9" +version = "2020.10" description = "Community maintained hooks for PyInstaller" category = "dev" optional = false @@ -267,8 +267,8 @@ pyinstaller = [ {file = "pyinstaller-4.0.tar.gz", hash = "sha256:970beb07115761d5e4ec317c1351b712fd90ae7f23994db914c633281f99bab0"}, ] pyinstaller-hooks-contrib = [ - {file = "pyinstaller-hooks-contrib-2020.9.tar.gz", hash = "sha256:a5fd45a920012802e3f2089e1d3501ef2f49265dfea8fc46c3310f18e3326c91"}, - {file = "pyinstaller_hooks_contrib-2020.9-py2.py3-none-any.whl", hash = "sha256:c382f3ac1a42b45cfecd581475c36db77da90e479b2f5bcb6d840d21fa545114"}, + {file = "pyinstaller-hooks-contrib-2020.10.tar.gz", hash = "sha256:bf4543a16c9c6e9dd2d70ea3fee78b81d3357a68f706df471d990213892259d9"}, + {file = "pyinstaller_hooks_contrib-2020.10-py2.py3-none-any.whl", hash = "sha256:dd752c88c1c7bb6920f7de248c12d4411c0463877e5e64afdc4f7e93dff9fc94"}, ] pyobjc-core = [ {file = "pyobjc-core-6.2.2.tar.gz", hash = "sha256:38e7b15a042439dadd18b28b78229e52fb882460fc16ddbae342b9972d5a827c"},