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>
44 lines
1.9 KiB
Bash
Executable file
44 lines
1.9 KiB
Bash
Executable file
#!/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
|