Issue: /usr/local/bin/tailscale CLI throws a Swift fatal error about unknown bundleIdentifier
Impact:
$ tailscale status
Tailscale/BundleIdentifiers.swift:41: Fatal error: The current bundleIdentifier is unknown to the registryThe /usr/local/bin/tailscale symlink points to a CLI binary that has Swift code checking for a specific macOS bundle identifier. This check fails in certain contexts (likely when invoked outside of the Tailscale.app context).
-
Symlink (has issue):
/usr/local/bin/tailscale- Universal binary (x86_64 + arm64)
- Contains Swift code with bundleIdentifier check
- Fails with error when run directly
-
App Binary (works fine):
/Applications/Tailscale.app/Contents/MacOS/Tailscale- Universal binary (x86_64 + arm64)
- Works perfectly with
--version,status --json,whois --json
Our Go application uses exec.CommandContext(ctx, "tailscale", ...) which:
- Searches $PATH for the
tailscalebinary - Finds the working binary (either the app binary or a working CLI)
- Successfully executes
tailscale status --jsonandtailscale whois --json
# This works fine from our Go code perspective
/Applications/Tailscale.app/Contents/MacOS/Tailscale status --json
# Returns:
{
"BackendState": "Running",
"TailscaleIPs": ["100.90.254.16", ...],
"Self": {
"HostName": "Mike's Mac Studio",
...
}
}// internal/tailscale/tailscale.go:107
cmd := exec.CommandContext(ctx, "tailscale", "status", "--json")This command successfully finds and uses the working Tailscale binary, despite the symlink issue.
- Running
tailscaledirectly in Terminal: ❌ Error - Running from Go
exec.Command: ✅ Works - Tailscale daemon (
tailscaled): ✅ Running fine - Tailscale GUI app: ✅ Working normally
- Our security camera application: ✅ No impact
$ ps aux | grep tailscale
root 10142 ... /Library/SystemExtensions/.../network-extension
mike 1488 ... /Applications/Tailscale.app/Contents/MacOS/Tailscale$ ifconfig | grep "inet 100."
inet 100.90.254.16 --> 100.90.254.16 netmask 0xffffffff$ /Applications/Tailscale.app/Contents/MacOS/Tailscale --version
1.90.9All Tailscale integration code passes tests:
isLocalIP()correctly identifies 100.64.0.0/10GetUserEmailFromIP()successfully callstailscale whoisgetStatus()successfully callstailscale status --json
Should you be worried? ❌ NO
The bundleIdentifier error is:
- Limited to the
/usr/local/bin/tailscalesymlink - Does not affect the Tailscale daemon or app
- Does not impact our Go application's use of the Tailscale CLI
- Verified working in all our security boundary fixes
Action Required: None. System is fully functional with Tailscale authentication.
If the error message bothers you when running tailscale manually in Terminal:
# Option 1: Use the app binary directly
alias tailscale='/Applications/Tailscale.app/Contents/MacOS/Tailscale'
# Option 2: Reinstall Tailscale CLI
brew uninstall tailscale
brew install tailscale
# Option 3: Use the app binary path in your shell
export PATH="/Applications/Tailscale.app/Contents/MacOS:$PATH"But again, this is purely cosmetic - our application works perfectly as-is.
Date: 2025-12-08 Tailscale Version: 1.90.9 macOS Version: 24.5.0 (Darwin) Security Rating: 9.8/10 (unchanged)