WIP: iOS Share Target Reliability #235
Draft
jose
wants to merge 31 commits from
fix/ios-share-target-reliability into master
pull from: fix/ios-share-target-reliability
merge into: :master
:master
:retire-legacy-notification
:notify-api_endpoint-query
:notify-api-sms
:notify-api
:giftopia-app-icon
:fix/ios-share-target-reliability
:thanks-button-rework
:gifted-details-footer
:16kb-pages
:notify-api_android
:edit-proj-parent
:daily-notification-plugin-integration
:2026-01-01-tweaks
:no-locks
:web-share-target-native-implementation
:homeview-gift-recording-improvements
:accountview-contact-management-bundling
:gifted-dialog-recipient-fix
:entitygrid-infinite-scroll-improvements
:meeting-project-dialog
:refactor-initialize
:integrate-notification-plugin
:project-representative-dialog
:entity-selection-list-component
:bulk-members-dialog-refactor
:contact-path
:entity-selection-list-component-infinite-scroll
:meeting-members-admission-dialog
:address-duplicates
:meeting-members-admission-dialog-refactor
:android-file-save
:meeting-members-admission-improvements
:emojis
:meeting-members-set-visibility
:ios-disable-zoom
:view-headings-refresh
:star-projects2
:remove-cannot-upload-images-notification
:star-projects
:notification-system
:load-build-mode-env-file
:notify-initialization-fix
:new-activity-mark-read
:active_did_redux
:ios-qr-code-copy
:master-patch
:registration-prompt-parity
:seed-phrase-backup-prompt
:claimview-fullfills-offer
:wip_new_notifications
:account-import-duplicate-prevention
:electron-copy-paste-keyboard-shortcuts
:switching-identities-change-name
:playwright-test-00-fix
:profile_include_location
:electron-build-config-overwrite
:projectview-hide-offer-link-unregistered
:activedid_migration
:build-web-serve-test
:didview-invalid-did-handling
:electron-build-capacitor-config
:contact-gifting-current-user
:android-safe-area-insets
:deep-link-views-safe-area-inset
:dialog-notification-z-index
:ios-contact-copy
:onboard-alert-component
:dialog-styles-unified
:units-mocking
:performance-optimizations-testing
:playwright-test-60-fix
:notification-section
:fix-deep-link
:platformservicemixin-interface-consolidation
:nearby-filter
:replace-iconrenderer
:imagemagick-anrdoid
:ask-for-contacts-export
:offer-validation-logic
:playwright-test-updates
:logger-level
:remove-image-cache
:claim-view-error-handling
:build-improvement
:get-get-hash
:logging-upgrade
:notification-line-wrapping
:build-dev-to-dist
:fix-contact-import-export
:web-serve-fix
:deep-link
:web-tests
:build-with-env
:onboarding-dialog-fix
:streamline-attempt
:matthew-scratch-2025-06-28
:gifting-periphery-improvements
:gifting-ui-2025-05
:migrate-dexie-to-sqlite
:deep-links-android-update
:android-15-check
:capacitor-local-save
:master-settings-upgrade
:contacts-view-fixes
:ui-fixes-2025-06-w2
:home-icon-enhancements
:search-map-fix
:sql-absurd-sql-further
:sql-absurd-sql
:new-storage
:sql-wa-sqlite
:trent-tweaks
:qrcode-capacitor
:cross-platform-factory-redux
:build-ios
:ai-context
:cross-platform-factory
:registration-gate
:db-backup-cross-platform
:eye-slash
:homeview-cleanup-2025-03
:fix-service-worker
:main
:app_id_fix
:electron_fix_20250317
:homeview-refresh-2025-02
:deep_linking
:ui-fixes-2025-03
:side_step
:split_build_process
:d9085ced6df7dc7bdcd899959cea6489cab7f8b8
:v-onboarding-2024-04
:nostr
:playwright-pwa-install-test
:offer-edit
:passkey-cache
:passkey
:profile-pic
:notify-time
:ui-fixes-2024-03
:photo-reverse
:starred-projects
:vite-version
:design-tweaks-2023-12
:sw-cleanup
:home-view-notification-improvements
:friend-tech-inspired-pwa-dialog
:notification-request-permission-dialog
:plan-loc
:project-gives
:tweaks
:simple-signer
:experimental_plugin
:tmp
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Add doc/share-target-ios-launch-flow-audit.md documenting the iOS Share Extension launch path from openMainApp("timesafari://") through the native AppDelegate, Capacitor bridge, and JS bootstrap to /shared-photo navigation. Covers cold- vs warm-start execution order, the single appUrlOpen listener and its call graph, all shared-image detection mechanisms (startup timer, appStateChange, applicationDidBecomeActive, sharedPhotoReady flag, SharedPhotoReady notification), native launch-URL handling, and a timing analysis of the race conditions. Key findings: cold-start shares rely on the T+1000ms startup timer reading the App Group payload (not appUrlOpen, which registers at T+2000ms after the launch URL is delivered); warm-start shares are driven by appUrlOpen/appStateChange; the launch URL event and the SharedPhotoReady notification can be lost before JS is ready, but the durable App Group payload is not. Audit only; no code changes.Introduce AppBridgeViewController, a CAPBridgeViewController subclass that registers the app-local SharedImagePlugin from capacitorDidLoad(), where the Capacitor bridge is guaranteed to exist. This is the first step toward replacing AppDelegate's timed retry registration with a deterministic, bridge-ready registration point. Point the existing root bridge controller in Main.storyboard at AppBridgeViewController (same VC id/scene; only the custom class changes) and add the new file to the App target in project.pbxproj. The existing AppDelegate registration and its retry loop are intentionally left in place as a temporary safety net, so the plugin is now registered from both sites during this phase. No diagnostics, retry logic, JS, or Android code changed; plugin name ("SharedImage") and implementation are unchanged.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.