Reconnect on a real handover instead of waiting for a dead path
A Wi-Fi to cellular switch left the session visibly dropping: the media transport rebound itself within a few seconds, but nothing noticed the blackholed control connection until an unanswered keepalive proved it, and the teardown that followed announced a lost connection and waited another second before dialling again. Watch the system path on iOS and fail the control connection the moment the carrying interface changes, which is the only path change TCP cannot survive. Roaming between access points and a link that is merely unusable for a while keep the same interface and the same source address, so ControlPathWatcher reports neither; an unsatisfied path holds the last signature rather than reporting, so a reconnect is never started into a route that cannot carry it. Tighten the keepalive window on the phone as the backstop for what the monitor cannot see, run the first reconnect attempt immediately, and defer the lost-connection announcement until an attempt has actually failed, so a sub-second handover is silent and only a real outage is announced. A control reconnect still re-authenticates and rejoins: the media keys come from the TLS exporter of the connection that was lost, so seamless handover needs control-plane session resumption rather than a faster reconnect.
This commit is contained in:
@@ -164,8 +164,9 @@ Before packaging, confirm:
|
||||
- the bundle identifiers are the stable identifiers above;
|
||||
- both version pairs match;
|
||||
- both executables contain `arm64`; and
|
||||
- the host `Info.plist` contains `CFBundleIconName` and the bundle contains both
|
||||
`AppIcon60x60@2x.png` (120x120) and `AppIcon76x76@2x~ipad.png` (152x152).
|
||||
- the host `Info.plist` contains `CFBundleIconName` nested inside both `CFBundleIcons` and
|
||||
`CFBundleIcons~ipad`, which is where `actool` writes it and not at the top level, and the
|
||||
bundle contains both `AppIcon60x60@2x.png` (120x120) and `AppIcon76x76@2x~ipad.png` (152x152).
|
||||
|
||||
Also decode each embedded profile and verify its name, UUID, application identifier, and
|
||||
`get-task-allow` value:
|
||||
@@ -270,7 +271,7 @@ clean build regenerated the app manifests.
|
||||
|
||||
## Last verified release build
|
||||
|
||||
On 2026-09-22, version `0.0.1`, build `2026092203` was built with .NET 10.0.401 and Xcode 27.0.
|
||||
On 2026-09-24, version `0.0.1`, build `2026092401` was built with .NET 10.0.401 and Xcode 27.0.
|
||||
The host and ReplayKit extension passed strict nested-signature validation with App Store Connect
|
||||
profiles, matching distribution identities, matching versions, the shared App Group, and
|
||||
`get-task-allow=false`. The host carries `CFBundleIconName` with the 120x120 and 152x152 icons.
|
||||
|
||||
Reference in New Issue
Block a user