summaryrefslogtreecommitdiff
path: root/desktop/package/macos/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/package/macos/build.py')
-rwxr-xr-xdesktop/package/macos/build.py131
1 files changed, 131 insertions, 0 deletions
diff --git a/desktop/package/macos/build.py b/desktop/package/macos/build.py
new file mode 100755
index 00000000..0ba23129
--- /dev/null
+++ b/desktop/package/macos/build.py
@@ -0,0 +1,131 @@
+#!/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.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("○ Clean up from last build")
+ if os.path.exists(os.path.join(cli_dir, "dist")):
+ shutil.rmtree(os.path.join(cli_dir, "dist"))
+ if os.path.exists(os.path.join(desktop_dir, "macOS")):
+ shutil.rmtree(os.path.join(desktop_dir, "macOS"))
+
+ print("○ Building onionshare-cli")
+ run(["poetry", "install"], cli_dir)
+ run(["poetry", "build"], cli_dir)
+ whl_filename = glob.glob(os.path.join(cli_dir, "dist", "*.whl"))[0]
+ whl_basename = os.path.basename(whl_filename)
+ shutil.copyfile(whl_filename, os.path.join(desktop_dir, whl_basename))
+
+ 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}")
+
+ if not os.path.exists("/usr/local/bin/create-dmg"):
+ print("○ Error: create-dmg is not installed")
+ return
+
+ print("○ Creating DMG")
+ dmg_path = os.path.join(desktop_dir, "macOS", "OnionShare.dmg")
+ run(
+ [
+ "create-dmg",
+ "--volname",
+ "OnionShare",
+ "--volicon",
+ os.path.join(
+ desktop_dir, "src", "onionshare", "resources", "onionshare.icns"
+ ),
+ "--window-size",
+ "400",
+ "200",
+ "--icon-size",
+ "100",
+ "--icon",
+ "OnionShare.app",
+ "100",
+ "70",
+ "--hide-extension",
+ "OnionShare.app",
+ "--app-drop-link",
+ "300",
+ "70",
+ dmg_path,
+ app_path,
+ "--identity",
+ identity_name_application,
+ ]
+ )
+
+ print(f"○ Finished building DMG: {dmg_path}")
+
+
+if __name__ == "__main__":
+ main() \ No newline at end of file