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>
10 lines
297 B
XML
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>
|