|
2 | 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
3 | 3 | <plist version="1.0"> |
4 | 4 | <dict> |
| 5 | + <key>CFBundleExecutable</key> |
| 6 | + <string>tacet</string> |
5 | 7 | <key>CFBundleIdentifier</key> |
6 | 8 | <string>com.drycodeworks.tacet-agent</string> |
7 | 9 | <key>CFBundleName</key> |
8 | 10 | <string>Tacet</string> |
9 | | - <key>CFBundleExecutable</key> |
10 | | - <string>tacet</string> |
11 | 11 | <key>CFBundlePackageType</key> |
12 | 12 | <string>APPL</string> |
13 | 13 | <key>CFBundleShortVersionString</key> |
14 | | - <string>0.1.2</string> |
| 14 | + <string>0.1.3</string> |
15 | 15 | <key>CFBundleVersion</key> |
16 | | - <string>3</string> |
| 16 | + <string>4</string> |
17 | 17 | <key>LSMinimumSystemVersion</key> |
18 | 18 | <string>13.0</string> |
19 | 19 | <key>LSUIElement</key> |
20 | 20 | <true/> |
21 | | - <key>NSMicrophoneUsageDescription</key> |
22 | | - <string>Tacet records your voice while you hold the dictate hotkey, to transcribe it.</string> |
23 | | - <key>NSLocalNetworkUsageDescription</key> |
24 | | - <string>Tacet talks to the transcription server on your local network.</string> |
25 | | - <!-- ATS cannot express this app's actual policy, so the app enforces its |
26 | | - own and ATS is opened to let it. |
27 | | -
|
28 | | - NSAllowsLocalNetworking alone was not enough: it covers .local names |
29 | | - and link-local addresses, and a Tailscale peer is neither — the |
30 | | - tailnet uses CGNAT space (100.64.0.0/10). The two-machine setup |
31 | | - therefore failed with: |
32 | | -
|
33 | | - Cannot start load of Task ... since it does not conform to ATS policy |
34 | | - finished with error [-1022] ... requires the use of a secure connection |
35 | | -
|
36 | | - while the SAME build worked on the machine running the server, |
37 | | - because there the tailnet address belongs to the local host and |
38 | | - CFNetwork treats it as local. So this is invisible to a |
39 | | - single-machine install and to every test. |
40 | | -
|
41 | | - The exceptions ATS does support are static domain lists, and the |
42 | | - server address here is user configuration — there is nothing to |
43 | | - enumerate at build time. |
44 | | -
|
45 | | - What actually gates connections is ClientConfig.validateTransport, |
46 | | - which is stricter than ATS where it matters: plain HTTP to loopback |
47 | | - always, to a numeric IP only with an explicit opt-in recorded in the |
48 | | - config, and to a HOSTNAME never — where ATS would happily allow a |
49 | | - hostname it considers "local". |
50 | | -
|
51 | | - REMOVE THIS once the server speaks TLS. A tailnet with HTTPS enabled |
52 | | - can issue a real certificate for its MagicDNS name (`tailscale cert`), |
53 | | - and an https:// hostname needs no exception at all. --> |
54 | 21 | <key>NSAppTransportSecurity</key> |
55 | 22 | <dict> |
56 | | - <!-- ONLY this key. Do not add NSAllowsLocalNetworking back. |
57 | | - Apple: if NSAllowsLocalNetworking is present, the system IGNORES |
58 | | - NSAllowsArbitraryLoads on macOS 10.12+. The two together are not |
59 | | - additive — the more specific key wins and the general one is |
60 | | - silently discarded, which is how a bundle can carry |
61 | | - NSAllowsArbitraryLoads=true and still fail every request with |
62 | | - -1022. Verified exactly that way here. --> |
63 | 23 | <key>NSAllowsArbitraryLoads</key> |
64 | 24 | <true/> |
65 | 25 | </dict> |
| 26 | + <key>NSLocalNetworkUsageDescription</key> |
| 27 | + <string>Tacet talks to the transcription server on your local network.</string> |
| 28 | + <key>NSMicrophoneUsageDescription</key> |
| 29 | + <string>Tacet records your voice while you hold the dictate hotkey, to transcribe it.</string> |
66 | 30 | </dict> |
67 | 31 | </plist> |
0 commit comments