I recently updated my application with embedded Watch app. Some users reported that the application does not install on their watch. Mine was ok. I had to completely remove iPhone application to reinstall it and reproduce the problem. iPhone is on 11.3 Watch on 4.3. One user report the problem while his iPhone is not yet upgraded to 11.3.
My application have accented character in its name but it has been there for years.
The tricky point is that the error message on the console gives no indication at all :
11:45:55.331887 +0200
appconduitd
0x16bdcb000 -[ACXServerInstallOperation receivedDictionaryOrData:]: 591: Got error 17 in install done from remote side (MI error (null) ; Extended 0x0 ; Desc (null))
11:45:55.332599 +0200
appconduitd
0x16bdcb000 -[ACXServerInstallOperation receivedDictionaryOrData:]: com.iphigenie.3.10: Got install done
11:45:55.333436 +0200
appconduitd
0x16bdcb000 -[ACXServerInstallOperation _onQueue_callCompletion:]: Resetting socket because of error Error Domain=ACXErrorDomain Code=17 "Got error 17 in install done from remote side (MI error (null) ; Extended 0x0 ; Desc (null))" UserInfo={SourceFileLine=591, NSLocalizedDescription=Got error 17 in install done from remote side (MI error (null) ; Extended 0x0 ; Desc (null)), FunctionName=-[ACXServerInstallOperation receivedDictionaryOrData:]}
11:45:55.334420 +0200
appconduitd
0x16bcb3000 -[ACXInstallQueue _onQueue_deQueueNextOperation]_block_invoke_2: Failed to install app com.iphigenie.3.10.watchkitapp (p = N, ui = N) : Error Domain=ACXErrorDomain Code=17 "Got error 17 in install done from remote side (MI error (null) ; Extended 0x0 ; Desc (null))" UserInfo={SourceFileLine=591, NSLocalizedDescription=Got error 17 in install done from remote side (MI error (null) ; Extended 0x0 ; Desc (null)), FunctionName=-[ACXServerInstallOperation receivedDictionaryOrData:]}
11:45:55.337546 +0200
appconduitd
0x16bee3000 -[ACXCompanionSyncConnection _onQueue_processPendingGizmoState]_block_invoke_3: Failed to install app com.iphigenie.3.10.watchkitapp : Error Domain=ACXErrorDomain Code=17 "Got error 17 in install done from remote side (MI error (null) ; Extended 0x0 ; Desc (null))" UserInfo={SourceFileLine=591, NSLocalizedDescription=Got error 17 in install done from remote side (MI error (null) ; Extended 0x0 ; Desc (null)), FunctionName=-[ACXServerInstallOperation receivedDictionaryOrData:]}
The error is on line 591 in the internal method, that's all we know. What could it be ?
Edit: A user installed Xcode and looked at the iPhone console. He found the error with a signature issue:
appconduitd 0x16bf73000 -[ACXInstallQueue _onQueue_deQueueNextOperation]_block_invoke_2: Failed to install app com.iphigenie.3.10.watchkitapp (p = N, ui = Y) : Error Domain=ACXErrorDomain Code=17 "Got error 17 in install done from remote side (MI error ApplicationVerificationFailed ; Extended 0xe8008017 ; Desc Failed to verify code signature of /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.LGdrVt/extracted/Payload/iPhiGéNie W.app : 0xe8008017 (A signed resource has been added, modified, or deleted.))" UserInfo={SourceFileLine=591, NSLocalizedDescription=Got error 17 in install done from remote side (MI error ApplicationVerificationFailed ; Extended 0xe8008017 ; Desc Failed to verify code signature of /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.LGdrVt/extracted/Payload/iPhiGéNie W.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)), FunctionName=-[ACXServerInstallOperation receivedDictionaryOrData:]}
So we have a "A signed resource has been added, modified, or deleted" clue. No Swift in the application. Maybe it is related to TestFlight ? This build was uploaded and testflight loaded before publication.
After struggling two weeks against this issue, I finally foud an explanation and workaround.
Here is the comment I just posted on the bug report 39488346 :
OK, I now have nailed down the issue to an unicode encoding/normalization. By managing to suppress any accented character from any file (coming from the product name) in the Watch application and extension, the Apple signed binary now install correctly on the Watch.
This is a MAJOR recent regression. It appears that WatchOS has recently switched between UTF-8/UTF16 and or between NFC/NFD normalization and that the signature check has NOT been updated accordingly. This explains why codesign on MacOS does not see any signature issue, while the WatchOS reject it.