pageta-native/ShareExtension/Resources/PagetaShareExtension.entitlements
Till JS 95b866179f π-6: ShareExt + App-Group-Queue + Launch-Flush
User kann jetzt aus Safari/Mail/anderen Apps URLs an Pageta senden:
Share-Sheet → ShareExt schreibt URL in App-Group-Queue → bei nächstem
App-Launch wird die Queue an pageta-api POSTet. Pattern wie
herbatrium-native η-8.3 PendingShareStore.

- Sources/Core/PendingShareStore.swift: UserDefaults im App-Group
  `group.ev.mana.pageta`, enqueue/dedupe/remove/clear. @unchecked
  Sendable wegen UserDefaults-Sendable-Lücke (thread-safe per
  Apple-Docs, aber nicht markiert).
- ShareExtension/ShareViewController.swift: UIKit-Share-Services-
  Bridge. Akzeptiert public.url (Safari) + public.plain-text mit
  NSDataDetector-Link-Extraktion (Mail/Messages). Async-loadItem +
  enqueue + completeRequest. Keine UI — Apple's Default-Share-Sheet
  reicht.
- project.yml: neues Target PagetaShareExtension (Bundle
  ev.mana.pageta.share, App-Extension), Embed in PagetaNative-App,
  shared PendingShareStore.swift in beiden Targets. Bundle-ID
  explizit (Lessons aus herbatrium η-8.2: XcodeGen lowercased
  sonst target-name).
- PagetaAPI.saveArticle(url:userNote:): POST /api/v1/articles —
  Server fährt Readability über die URL, dedup auf urlHash.
- PagetaNativeApp.flushPendingShares(): .onAppear, signedIn-Gate,
  iteriert Queue, POSTet, removed bei Success. Network-Fehler →
  URL bleibt in Queue, nächster Launch versucht's nochmal.

3 neue PendingShareStore-Tests (enqueue/dedupe/remove) mit
isoliertem UserDefaults-Slot pro Test. 23/23 grün, iOS+macOS Build
green.

Pre-Conditions vor Real-Run:
- Bundle-ID ev.mana.pageta.share im Apple-Dev-Portal
- App-Group group.ev.mana.pageta für BEIDE Targets
- Provisioning-Profile mit App-Group + Keychain-Sharing

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

10 lines
297 B
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.ev.mana.pageta</string>
</array>
</dict>
</plist>