4.4 KiB
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
ios/Runner.xcworkspacein Xcode öffnen.- Projekt-Sidebar →
Runner(Projekt-Root) → + Add Target unten links. - iOS → Share Extension wählen.
- 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.
- Product Name:
- Beim Activate-Scheme-Dialog auf Cancel klicken.
- 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:
- Sidebar → Rechtsklick auf den Ordner
Share Extension→ Add Files to "Runner"… - Im File-Picker zu
ios/Share Extension/navigieren und folgende Dateien selektieren:ShareViewController.swiftInfo.plistMainInterface.storyboardShare Extension.entitlements
- Wichtig: bei „Add to targets" nur
Share Extensionankreuzen, 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.
- 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).
- Group-ID hinzufügen:
- 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.
- Runner → Build Settings →
+(oben links) → Add User-Defined Setting.- Name:
CUSTOM_GROUP_ID - Wert:
group.eu.mhsl.marianum.mobile.client.share
- Name:
- Dasselbe für Share Extension-Target.
Schritt 5 — Entitlements verlinken
- Runner → Build Settings →
CODE_SIGN_ENTITLEMENTSzeigt bereits aufRunner/Runner.entitlements(jetzt mit beiden Groups). - Share Extension → Build Settings →
CODE_SIGN_ENTITLEMENTS→ aufShare Extension/Share Extension.entitlementssetzen.
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:
- Runner-Target → Build Phases.
Embed Foundation Extensionsper Drag-and-Drop vorThin Binaryziehen.
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
- Scheme
Runnerwählen → Run auf Device oder Simulator (≥ iOS 12). - Foto in der Fotos-App auswählen → Teilen → „Marianum Fulda" sollte erscheinen.
- 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 FlagsundFramework Search Pathsleeren (nur die geerbten Pod-Pfade behalten). - Share-Sheet zeigt App nicht an
→
NSExtensionActivationRule-Limits inShare Extension/Info.plistzu 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
nilPfad an → App-Group nicht konsistent. Prüfen, dassCUSTOM_GROUP_IDin 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.