feat(clients): in-app OSS / third-party-license screens

Surface THIRD-PARTY-NOTICES.txt in every GUI client (the desktop packages already
ship it as a file; this adds the on-glass screen):

- Linux: Preferences -> About -> Third-party licenses (adw::AboutDialog with the app
  license + Legal sections; include_str! the root notices).
- Apple: macOS About tab / iOS+tvOS Acknowledgements link; notices bundled as
  PunktfunkKit SPM resources, read via Bundle.module (the Xcode app links the SPM
  product, so they ride along - no .pbxproj edit).
- Android: Settings -> About -> Open-source licenses (reads the bundled asset).
- (Windows landed earlier in d1d2ca2: Settings -> About -> Third-party licenses.)

gen-third-party-notices.sh now copies the generated file into the Apple Resources/
and Android assets/ trees so the in-tree copies never drift.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-29 06:52:43 +00:00
parent d1d2ca293d
commit 7591425f6f
12 changed files with 32813 additions and 0 deletions
+14
View File
@@ -19,3 +19,17 @@ else
python3 scripts/gen-third-party-notices.py --out "$OUT"
fi
echo "==> wrote $OUT" >&2
# Keep the per-client in-tree copies in sync (the GUI apps bundle these as resources/assets and
# show them on their Acknowledgements / Open-source-licenses screen). The Linux/Windows Rust clients
# embed the root file directly via include_str!, so they need no copy.
if [ "$OUT" = "THIRD-PARTY-NOTICES.txt" ]; then
for dest in \
clients/apple/Sources/PunktfunkKit/Resources/THIRD-PARTY-NOTICES.txt \
clients/android/app/src/main/assets/THIRD-PARTY-NOTICES.txt; do
if [ -d "$(dirname "$dest")" ]; then
cp "$OUT" "$dest"
echo "==> synced $dest" >&2
fi
done
fi