add macOS desktop target with sandbox entitlements

OS-detecting Makefile (make run works on macOS/Linux/Windows), 1280x720
default window in MainMenu.xib, squared app icons, sandbox with scoped
SBPL exceptions for subprocess execution, _DARWIN_C_SOURCE for ptyc
compilation, expanded PATH merging Homebrew and ~/.local/bin for GUI
apps, native traffic dots skipped on macOS (titlebar owns them).

DebugProfile.entitlements is gitignored (machine-specific SBPL paths);
a template with __HOMEDIR__/__PROJECTS__/__SHELL__ placeholders is
committed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeroen Schweitzer
2026-04-25 13:18:39 +02:00
co-authored by Claude Opus 4.6
parent 3242c8ec13
commit 8edcc78bfe
21 changed files with 319 additions and 20 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 950 B

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 710 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

+2 -2
View File
@@ -332,10 +332,10 @@
</menu>
<window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="335" y="390" width="800" height="600"/>
<rect key="contentRect" x="335" y="390" width="1280" height="720"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/>
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
<rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="1280" height="720"/>
<autoresizingMask key="autoresizingMask"/>
</view>
</window>
+19
View File
@@ -8,5 +8,24 @@
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.temporary-exception.sbpl</key>
<array>
<string>(allow process-exec* (literal "/bin/zsh"))</string>
<string>(allow process-exec* (literal "/usr/bin/which"))</string>
<string>(allow process-exec* (subpath "/Users/jeroenschweitzer/.local/bin"))</string>
<string>(allow process-exec* (subpath "/Users/jeroenschweitzer/Projects/clide/ptyc/bin"))</string>
<string>(allow process-exec* (subpath "/Users/jeroenschweitzer/Projects/clide/native/dugite"))</string>
<string>(allow process-fork)</string>
<string>(allow file-read* file-write* (subpath "/Users/jeroenschweitzer/Projects"))</string>
<string>(allow file-read* file-write* (subpath "/Users/jeroenschweitzer/projects"))</string>
<string>(allow file-read* (subpath "/opt/homebrew"))</string>
<string>(allow file-read* (subpath "/Users/jeroenschweitzer/.local"))</string>
<string>(allow file-read* (subpath "/Users/jeroenschweitzer/.pql"))</string>
<string>(allow file-read* file-write* (subpath "/private/tmp"))</string>
</array>
</dict>
</plist>
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
DebugProfile.entitlements template — machine-specific sandbox exceptions.
Copy to DebugProfile.entitlements and replace placeholders:
__HOMEDIR__ → your home directory (e.g. /Users/you)
__PROJECTS__ → your projects root (e.g. /Users/you/Projects)
__SHELL__ → your login shell (e.g. /bin/zsh)
Git is bundled via dugite-native (D-59) — no Homebrew exec needed.
Run `make dugite-fetch` to download the binary.
-->
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.temporary-exception.sbpl</key>
<array>
<string>(allow process-exec* (literal "__SHELL__"))</string>
<string>(allow process-exec* (literal "/usr/bin/which"))</string>
<string>(allow process-exec* (subpath "__HOMEDIR__/.local/bin"))</string>
<string>(allow process-exec* (subpath "__PROJECTS__/clide/ptyc/bin"))</string>
<string>(allow process-exec* (subpath "__PROJECTS__/clide/native/dugite"))</string>
<string>(allow process-fork)</string>
<string>(allow file-read* file-write* (subpath "__PROJECTS__"))</string>
<string>(allow file-read* (subpath "/opt/homebrew"))</string>
<string>(allow file-read* (subpath "__HOMEDIR__/.local"))</string>
<string>(allow file-read* (subpath "__HOMEDIR__/.pql"))</string>
<string>(allow file-read* file-write* (subpath "/private/tmp"))</string>
</array>
</dict>
</plist>