Enterprise WatchOS App Won't Install on WatchOS 26.5

We have an Apple Watch app and companion iPhone app that we distribute via Enterprise Distribution using OTA manual installation. (We are on an Apple Enterprise Developer Team)

With WatchOS 26.4 and earlier, the app would install fine on both the phone and the watch. However, after updating to WatchOS 26.5 (and iOS 26.5), the app will not install on the watch. It will install on the phone and we can trust the developer/run the phone app. However, when we go into the Apple Watch app on the phone and choose "Install" for the app, it tries to install for a minute and then returns an error "The app could not be installed at this time".

We have tried the following remedies:

  • Restarting both watch and phone, and reinstalling the app on phone
  • Factory resetting both the watch and the phone, then reinstalling app
  • Generating a new Distribution Certificate and new manual profiles for the app in Apple Developer
  • Looking through console logs from both the phone and the watch
  • Confirmed that we can install other (non-Enterprise) apps on the watch
  • Try installing a basic example app (the default Xcode watch + companion app project)

There does not seem to be anything obviously amiss about the app or its packaging, it seems to be something to do with the update to WatchOS 26.5.

The closest related errors we have found seems to be these: appconduitd 0x16d43f000 -[ACXInstallQueue _onQueue_deQueueNextOperation]_block_invoke_3: Failed to install app <redacted>.EnterpriseInstallTest.watchkitapp (p = Y, ui = Y) : Error Domain=ACXErrorDomain Code=8 "Failed to create socket" UserInfo={NSUnderlyingError=0xcf9138e10 {Error Domain=com.apple.identityservices.error Code=20 "Socket open timed out" UserInfo={NSLocalizedDescription=Socket open timed out}}, FunctionName=-[ACXServerInstallOperation _onQueue_prepForTransferAndInstall]_block_invoke, SourceFileLine=370, NSLocalizedDescription=Failed to create socket} appconduitd 0x16d89f000 -[ACXCompanionSyncConnection _installQueuedOrCompletedForWatchBundleID:companionAppBundleID:withName:userInitiated:withError:withCompletion:]_block_invoke: Failed to install app <redacted>.EnterpriseInstallTest.watchkitapp : Error Domain=ACXErrorDomain Code=8 "Failed to create socket" UserInfo={NSUnderlyingError=0xcf9138e10 {Error Domain=com.apple.identityservices.error Code=20 "Socket open timed out" UserInfo={NSLocalizedDescription=Socket open timed out}}, FunctionName=-[ACXServerInstallOperation _onQueue_prepForTransferAndInstall]_block_invoke, SourceFileLine=370, NSLocalizedDescription=Failed to create socket}

I'm having the exact same issue, but after coming back to a project after awhile, so I wasn't sure it was related the the upgrade. Thanks for confirming.

In my case, I am using OTA install from a companion iPhone app,. but using a normal developer acction (not enterprise) with develop provisioning profiles. Was working great before, but now when I try to install teh app from the phone it hangs for about a minute and displays the "App cannot be installed at this time" error. The Console shows:

0x16f1e3000 -[ACXCompanionSyncConnection _installQueuedOrCompletedForWatchBundleID:companionAppBundleID:withName:userInitiated:withError:withCompletion:]_block_invoke: Failed to install app com.parax.desek.watch : Error Domain=ACXErrorDomain Code=8 "Failed to create socket" UserInfo={NSUnderlyingError=0xa97209aa0 {Error Domain=com.apple.identityservices.error Code=20 "Socket open timed out" UserInfo={NSLocalizedDescription=Socket open timed out}}, FunctionName=-[ACXServerInstallOperation _onQueue_prepForTransferAndInstall]_block_invoke, SourceFileLine=370, NSLocalizedDescription=Failed to create socket}

I have tried resetting the watch twice with no success. Definitely seems to be something broken in 26.5. Too bad I can't try to downgrade to verify.

That does sound similar to what I am experiencing. I wonder if there is some issue introduced by 26.5 that prevents the watch from verifying the app signing on install, or communicating with the iPhone to do that?

Do you have a feedback report yet? If not, would you mind to file one and share your report ID here? Thanks.

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.

Ziqiao Chen, I do have a Feedback report filed. Here is the info: FB22807635 (Cannot Install Enterprise Team Watch App From iPhone in 26.5)

Please let me know if you need any more details.

Thank you

Same issue, used like 3 different AIs on the highest level to do every diagnostic possible and it can't even fix it. Following but just reporting you're not the only one.

Ziqiao Chen, I do have a Feedback report filed. Here is the info: FB22807635 (Cannot Install Enterprise Team Watch App From iPhone in 26.5)

Thank you for reporting the issue. Just to confirm that it is most likely a regression we have known, and folks are actively working on that.

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.

Thank you for the response, it is good to hear that it is being worked on!

I'm seeing the same, as well as watch connectivity problems in general. Xcode has a hard time staying connected, and it seems like applicationContexts may have some issues transferring well.

I'm really hoping this is sorted out in 26.5.1 soon.

Claude's summary of us chasing this problem all day:

The failure originates in appconduitd (Application Conduit Daemon), not the install pipeline itself.     
  Specific cascade:                                                                                      
                                                                                                           
  1. appconduitd calls ACXServerInstallOperation _onQueue_prepForTransferAndInstall                        
  2. ACXIDSSocketManager tries handleIDSRelayConnectionResponseWithContext
  3. Underlying call to identityservicesd reports legacy control channel connect ready ... socket error: 60
   (Operation timed out) on peer at fe80::*%utun3 (link-local IPv6 over a Continuity utun interface)       
  4. Bubbles up as com.apple.identityservices.error Code=20 "Socket open timed out"
  5. Returns to appconduitd as ACXErrorDomain Code=8 "Failed to create socket"                             
  6. User sees: "The app could not be installed at this time."                                             
                                                                                                           
  So the broken layer is IDS (Identity Services) peer transport over the Bluetooth-discovered link, not the
   install pipeline. That's a useful narrow target for Apple to focus on, vs. the broader "install is      
  broken."                                                                                                 
                                                                                                         
  Workarounds we empirically validated:  

  1. Toggle Bluetooth off then on on BOTH iPhone AND Apple Watch. Handoff toggle on iPhone alone is not    
  sufficient. Watch restart alone is not sufficient. Both ends, both subsystems, forces a fresh IDS peer
  handshake.                                                                                               
  2. Direct install via xcrun devicectl device install app --device <WATCH_UUID> path/to/watch.app —     
  completely bypasses the broken Watch.app propagation, treating the watch as a paired companion device.   
  Works for dev installs; doesn't help non-developer enterprise users who can't run devicectl.
                                                                                                           
  Related secondary symptom worth mentioning: even after the install eventually succeeds,                  
  updateApplicationContext from iPhone to Watch can silently fail to deliver for watch apps that ARE
  installed. Apple's framework dedupes by byte-equality against an iPhone-side "last set" cache that       
  doesn't get invalidated when the broken IDS transport drops a delivery. The cache and the watch's real 
  slot drift permanently out of sync; subsequent calls return no change and skip delivery. Workaround:
  stamp each dict with _sentAt = Date().timeIntervalSince1970 to defeat dedup. Same underlying broken
  transport, expressing in a different layer.

Enterprise WatchOS App Won't Install on WatchOS 26.5
 
 
Q