pageta-native/scripts/xcodegen
Till JS d2fa494956 feat(macos): Share Extension fürs Teilen aus Safari auf macOS
Symmetrisch zur iOS-ShareExtension (π-6). Neues Target
PagetaShareExtensionMac mit NSViewController-basiertem
ShareViewController, teilt PendingShareStore.swift mit der
iOS-Variante. URL landet in App-Group-Queue, App drain't beim
nächsten Foreground.

Bundle: ev.mana.pageta.share.mac, sandboxed mit
group.ev.mana.pageta. Display-Name "In Pageta speichern".

XcodeGen-Stolperstein dazu: mappt platformFilter: macOS
fälschlich zu maccatalyst, deshalb wird die Mac-Appex auf
echten macOS-Builds nicht embeddet. Plus: platformFilter = macos
(Singular) wird von Apple ignoriert. scripts/xcodegen-Wrapper
patcht den Eintrag nach dem xcodegen-Lauf zu
platformFilters = (macos, ) (Plural-Whitelist). README + CLAUDE.md
weisen darauf hin.

Build-Verifikation:
- macOS BUILD SUCCEEDED, PagetaShareExtensionMac.appex in
  PagetaNative.app/Contents/PlugIns/
- iOS BUILD SUCCEEDED, nur PagetaShareExtension + Widget in
  PagetaNative.app/PlugIns/, KEINE Mac-Appex

Apple-Dev-Portal offen (Till manuell): 4. Bundle
ev.mana.pageta.share.mac + App-Group-Eintrag.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:20:21 +02:00

44 lines
1.9 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# Wrapper um `xcodegen`, der den bekannten XcodeGen-Bug behebt:
# `platformFilter: macOS` aus der project.yml wird fälschlich als
# `platformFilter = maccatalyst` in die pbxproj geschrieben. Das führt
# dazu, dass die Embed-Phase auf echten macOS-Builds skipped wird, weil
# `maccatalyst` ≠ `macos`.
#
# Wir patchen den Eintrag deshalb für `PagetaShareExtensionMac.appex`
# nachträglich auf `macos`. iOS-Extensions bleiben unangetastet — ihr
# `platformFilter = ios` ist von XcodeGen korrekt.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
# 1) xcodegen normal laufen lassen
xcodegen "$@"
PBXPROJ="$ROOT/PagetaNative.xcodeproj/project.pbxproj"
if [[ ! -f "$PBXPROJ" ]]; then
echo "✘ pbxproj nicht gefunden: $PBXPROJ" >&2
exit 1
fi
# 2) Maccatalyst → macos für den einen Mac-Share-Extension-Embed-Eintrag.
# sed läuft nur über Zeilen die unsere Mac-Appex referenzieren,
# damit wir keinen anderen maccatalyst-Filter umkippen.
BEFORE=$(grep -c "PagetaShareExtensionMac.appex.*platformFilter = maccatalyst" "$PBXPROJ" || true)
if [[ "$BEFORE" -gt 0 ]]; then
# In-place edit. Auf macOS braucht sed das leere Suffix-Argument.
# Apple's Build-System interpretiert `platformFilter = macos`
# (Singular) nicht als Inklusionsfilter und embeddet die Appex
# trotzdem in iOS-Builds. Workaround: `platformFilters = (macos, );`
# (Plural-Liste). Damit greift der Whitelist-Modus.
sed -i '' -E \
's|(.*PagetaShareExtensionMac\.appex in Embed Foundation Extensions.*)platformFilter = maccatalyst(.*)|\1platformFilters = (macos, )\2|g' \
"$PBXPROJ"
AFTER=$(grep -c "PagetaShareExtensionMac.appex.*platformFilters = (macos" "$PBXPROJ" || true)
echo "✓ Patched $AFTER PagetaShareExtensionMac platformFilter entries: maccatalyst → platformFilters=(macos,)"
else
echo "ℹ︎ Kein maccatalyst-Filter für PagetaShareExtensionMac gefunden — nichts zu patchen"
fi