diff --git a/RELEASE.md b/RELEASE.md index 91d4a3ab..2290b42e 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -126,26 +126,16 @@ _TODO: Codesign_ ### macOS -Build a wheel package for OnionShare CLI (including Tor binaries, from Tor Browser): - -```sh -cd cli -poetry install -poetry build -``` - -This will make a file like `dist\onionshare_cli-$VERSION-py3-none-any.whl` (except with your specific version number). Move it into `..\desktop`: - -``` -cp dist/onionshare_cli-*-py3-none-any.whl ../desktop -cd ../desktop -``` - -Make sure the virtual environment is active, and then run `briefcase create`: +Make sure your virtual environment is active: ```sh . venv/bin/activate -./install/macos_package.sh +``` + +Run the macOS build script: + +```sh +./package/macos/build.py --with-codesign ``` Now, notarize the release. You must have an app-specific Apple ID password saved in the login keychain called `onionshare-notarize`. diff --git a/desktop/install/check_lacked_trans.py b/desktop/check_lacked_trans.py similarity index 100% rename from desktop/install/check_lacked_trans.py rename to desktop/check_lacked_trans.py diff --git a/desktop/install/macos_package.sh b/desktop/install/macos_package.sh deleted file mode 100755 index 44c42ca8..00000000 --- a/desktop/install/macos_package.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -export DEVELOPER_ID="Developer ID Application: Micah Lee (N9B95FDWH4)" - -# Cleanb up from the last build -rm -rf macOS -briefcase create - -# Codesign the child binaries -codesign --sign "$DEVELOPER_ID" \ - --entitlements install/macos_sandbox/ChildEntitlements.plist \ - macOS/OnionShare/OnionShare.app/Contents/Resources/app/onionshare/resources/tor/tor \ - --force --options runtime -codesign --sign "$DEVELOPER_ID" \ - --entitlements install/macos_sandbox/ChildEntitlements.plist \ - macOS/OnionShare/OnionShare.app/Contents/Resources/app/onionshare/resources/tor/libevent-2.1.7.dylib \ - --force --options runtime -codesign --sign "$DEVELOPER_ID" \ - --entitlements install/macos_sandbox/ChildEntitlements.plist \ - macOS/OnionShare/OnionShare.app/Contents/Resources/app/onionshare/resources/tor/obfs4proxy \ - --force --options runtime - -# Build and codesign the app bundle and dmg -cp install/macos_sandbox/Entitlements.plist macOS/OnionShare/ -briefcase package -i "$DEVELOPER_ID" diff --git a/desktop/install/onionshare.icns b/desktop/install/onionshare.icns deleted file mode 100644 index f65ad12d..00000000 Binary files a/desktop/install/onionshare.icns and /dev/null differ diff --git a/desktop/install/onionshare.ico b/desktop/install/onionshare.ico deleted file mode 100644 index dcde4f1f..00000000 Binary files a/desktop/install/onionshare.ico and /dev/null differ diff --git a/desktop/install/org.onionshare.OnionShare.appdata.xml b/desktop/install/org.onionshare.OnionShare.appdata.xml deleted file mode 100644 index 3630b89c..00000000 --- a/desktop/install/org.onionshare.OnionShare.appdata.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - org.onionshare.OnionShare - CC0-1.0 - GPL-3.0 - OnionShare - Securely and anonymously share files, host websites, and chat with friends - - - OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. - - - org.onionshare.OnionShare.desktop - - - https://raw.githubusercontent.com/micahflee/onionshare/master/docs/source/_static/screenshots/tabs.png - Types of services that OnionShare supports - - - https://github.com/micahflee/onionshare/issues/ - https://onionshare.org/ - https://onionshare.org/ - Micah Lee - micah@micahflee.com - - - - - diff --git a/desktop/install/org.onionshare.OnionShare.desktop b/desktop/install/org.onionshare.OnionShare.desktop deleted file mode 100644 index 190e2f26..00000000 --- a/desktop/install/org.onionshare.OnionShare.desktop +++ /dev/null @@ -1,18 +0,0 @@ -[Desktop Entry] -Name=OnionShare -GenericName=OnionShare Client -Comment=Share a file securely and anonymously over Tor -Comment[da]=Del en fil sikkert og anonymt over Tor -Comment[de]=Teile Dateien sicher und anonym über das Tor-Netzwerk -Comment[hr]=Dijeli datoteku sigurno i anonimno preko Tora -Exec=onionshare-gui -Terminal=false -Type=Application -Icon=org.onionshare.OnionShare -Categories=Network;FileTransfer; -Keywords=tor;anonymity;privacy;onion service;file sharing;file hosting; -Keywords[da]=tor;anonymitet;privatliv;onion-tjeneste;fildeling;filhosting; -Keywords[de]=tor;Anonymität;Privatsphäre;Onion-Service;File-Sharing;File-Hosting; -Keywords[hr]=tor;anonimnost;privatnost;Onion usluga;dijeljenje datoteka;hosting datoteka; -StartupNotify=true -StartupWMClass=onionshare diff --git a/desktop/install/org.onionshare.OnionShare.png b/desktop/install/org.onionshare.OnionShare.png deleted file mode 100644 index a4810d04..00000000 Binary files a/desktop/install/org.onionshare.OnionShare.png and /dev/null differ diff --git a/desktop/install/org.onionshare.OnionShare.svg b/desktop/install/org.onionshare.OnionShare.svg deleted file mode 100644 index 502da0d8..00000000 --- a/desktop/install/org.onionshare.OnionShare.svg +++ /dev/null @@ -1,2154 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/desktop/install/macos_sandbox/ChildEntitlements.plist b/desktop/package/macos/ChildEntitlements.plist similarity index 100% rename from desktop/install/macos_sandbox/ChildEntitlements.plist rename to desktop/package/macos/ChildEntitlements.plist diff --git a/desktop/install/macos_sandbox/Entitlements.plist b/desktop/package/macos/Entitlements.plist similarity index 100% rename from desktop/install/macos_sandbox/Entitlements.plist rename to desktop/package/macos/Entitlements.plist diff --git a/desktop/package/macos/build.py b/desktop/package/macos/build.py new file mode 100755 index 00000000..163f7752 --- /dev/null +++ b/desktop/package/macos/build.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +import os +import inspect +import subprocess +import argparse +import shutil +import glob + +root = os.path.dirname( + os.path.dirname( + os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + ) +) + + +def run(cmd, cwd=None): + subprocess.run(cmd, cwd=cwd, check=True) + + +def main(): + # Parse arguments + parser = argparse.ArgumentParser() + parser.add_argument( + "--with-codesign", + action="store_true", + dest="with_codesign", + help="Codesign the app bundle", + ) + args = parser.parse_args() + + cli_dir = os.path.join(root, "cli") + desktop_dir = os.path.join(root, "desktop") + + print("○ Building onionshare-cli") + run(["poetry", "install"], cli_dir) + run(["poetry", "build"], cli_dir) + whl_filename = glob.glob(f"{cli_dir}/dist/*.whl")[0] + whl_basename = os.path.basename(whl_filename) + shutil.copyfile(whl_filename, os.path.join(desktop_dir, whl_basename)) + + print("○ Clean up from last build") + if os.path.exists(os.path.join(desktop_dir, "macOS")): + shutil.rmtree(os.path.join(desktop_dir, "macOS")) + + print("○ Create app bundle") + run(["briefcase", "create"], desktop_dir) + app_path = os.path.join(desktop_dir, "macOS", "OnionShare", "OnionShare.app") + print(f"○ Unsigned app bundle: {app_path}") + + if args.with_codesign: + identity_name_application = "Developer ID Application: Micah Lee (N9B95FDWH4)" + entitlements_child_filename = os.path.join( + desktop_dir, "package", "macos", "ChildEntitlements.plist" + ) + entitlements_filename = os.path.join( + desktop_dir, "package", "macos", "Entitlements.plist" + ) + + print("○ Code signing app bundle") + run( + [ + "codesign", + "--deep", + "-s", + identity_name_application, + "--force", + "--entitlements", + entitlements_child_filename, + "--timestamp", + app_path, + ] + ) + run( + [ + "codesign", + "-s", + identity_name_application, + "--force", + "--entitlements", + entitlements_filename, + "--timestamp", + app_path, + ] + ) + print(f"○ Signed app bundle: {app_path}") + + print("○ TODO: Make a DMG package") + + +if __name__ == "__main__": + main() \ No newline at end of file
- OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. -