# 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 Extension` → **Add 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** → **+ Capability** → **App 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

```bash
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 an**
  → `NSExtensionActivationRule`-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 1–8 oben (~15 Min).
- Auf physischem iPhone testen — Simulator-Share-Sheet ist eingeschränkt.
