Files
Client/ios/Share Extension/SETUP.md
T

4.4 KiB
Raw Blame History

iOS Share Extension — Xcode Setup

Die Quellen unter ios/Share Extension/ müssen einmalig in Xcode als Share Extension Target verdrahtet werden — analog zur TimetableWidgetExtension. Erst danach taucht „Marianum Fulda" im System-Share-Sheet auf.

Schritt 1 — Share-Extension-Target anlegen

  1. ios/Runner.xcworkspace in Xcode öffnen.
  2. Projekt-Sidebar → Runner (Projekt-Root) → + Add Target unten links.
  3. iOS → Share Extension wählen.
  4. Eigenschaften:
    • Product Name: Share Extension (mit Leerzeichen, exakt so — der Ordnername und Podfile-Eintrag matchen).
    • Bundle Identifier: eu.mhsl.marianum.mobile.client.Share-Extension.
    • Language: Swift.
    • Embed in: Runner.
  5. Beim Activate-Scheme-Dialog auf Cancel klicken.
  6. Deployment Target = mind. iOS 12.0 (Plugin-Mindestanforderung).

Schritt 2 — Vorhandene Quelldateien ins Target ziehen

Xcode legt Dummy-Dateien an. Diese löschen (Move to Trash). Dann:

  1. Sidebar → Rechtsklick auf den Ordner Share ExtensionAdd Files to "Runner"…
  2. Im File-Picker zu ios/Share Extension/ navigieren und folgende Dateien selektieren:
    • ShareViewController.swift
    • Info.plist
    • MainInterface.storyboard
    • Share Extension.entitlements
  3. Wichtig: bei „Add to targets" nur Share Extension ankreuzen, nicht Runner.

Schritt 3 — App Group aktivieren

Beide Targets brauchen die App-Group-Berechtigung, damit die Extension geteilte Dateien für die Hauptapp im gemeinsamen Container ablegen kann.

  1. Runner-Target → Signing & Capabilities+ CapabilityApp Groups.
    • Group-ID hinzufügen: group.eu.mhsl.marianum.mobile.client.share (zusätzlich zur bereits existierenden Widget-Group).
  2. Dasselbe für Share Extension-Target — mit derselben Group-ID group.eu.mhsl.marianum.mobile.client.share.

Im Apple-Developer-Portal muss diese App-Group bei beiden App-IDs eingetragen sein, sonst schlägt das Provisioning fehl.

Schritt 4 — User-Defined Build Setting CUSTOM_GROUP_ID

Beide Targets brauchen das User-Defined Setting, das in Runner/Info.plist und Share Extension/Info.plist als $(CUSTOM_GROUP_ID) referenziert wird.

  1. Runner → Build Settings → + (oben links) → Add User-Defined Setting.
    • Name: CUSTOM_GROUP_ID
    • Wert: group.eu.mhsl.marianum.mobile.client.share
  2. Dasselbe für Share Extension-Target.

Schritt 5 — Entitlements verlinken

  1. Runner → Build Settings → CODE_SIGN_ENTITLEMENTS zeigt bereits auf Runner/Runner.entitlements (jetzt mit beiden Groups).
  2. Share Extension → Build Settings → CODE_SIGN_ENTITLEMENTS → auf Share Extension/Share Extension.entitlements setzen.

Schritt 6 — Info.plist-Pfad

Share Extension → Build Settings → INFOPLIST_FILE → auf Share Extension/Info.plist setzen.

Schritt 7 — Build Phases reorder

Damit das Plugin-Modul vom Extension-Target gefunden wird:

  1. Runner-Target → Build Phases.
  2. Embed Foundation Extensions per Drag-and-Drop vor Thin Binary ziehen.

Schritt 8 — Pods installieren

cd ios && pod install

Der Podfile-Eintrag (target 'Share Extension' do inherit! :search_paths end) ist bereits vorhanden.

Schritt 9 — Build & Run

  1. Scheme Runner wählen → Run auf Device oder Simulator (≥ iOS 12).
  2. Foto in der Fotos-App auswählen → Teilen → „Marianum Fulda" sollte erscheinen.
  3. Auswahl → App öffnet sich, ShareTargetPage erscheint.

Troubleshooting

  • Error: No such module 'receive_sharing_intent' → Schritt 7 (Build Phases reorder) wurde übersprungen.
  • Error: Frameworks' not allowed in extension → In Build Settings der Share Extension Other Linker Flags und Framework Search Paths leeren (nur die geerbten Pod-Pfade behalten).
  • Share-Sheet zeigt App nicht anNSExtensionActivationRule-Limits in Share Extension/Info.plist zu klein? Werte testweise erhöhen. Außerdem: App muss mindestens einmal nach Install geöffnet worden sein, sonst wird die Extension von iOS nicht registriert.
  • Files kommen mit nil Pfad an → App-Group nicht konsistent. Prüfen, dass CUSTOM_GROUP_ID in beiden Targets identisch ist und die Entitlement-Files dieselbe Group enthalten.

Was am Mac noch zu tun ist

  • Schritte 18 oben (~15 Min).
  • Auf physischem iPhone testen — Simulator-Share-Sheet ist eingeschränkt.