I've built iOS and watchOS apps using Xamarin and have tested them in debug. I'm now trying to test them in TestFlight. After much trial and error trying to upload my application through ApplicationLoader, I've finally got several builds through which pass muster and I can see in TestFlight on my phone. My iOS app installs and runs great through TestFlight, but the watchOS app doesn't work. I flip the "Show App on Apple Watch" switch and it proceeds to install. The app shows up on my watch with the loading indicator and finishes after a while. After that, launching the app results in seeing the loading app screen and getting kicked back out to the springboard. This happens every time I try to launch the app. I've tried monitoring the Console to see a crash, but don't see one (I've attached a partial log which filters on my app ID). The interesting thing that I found is that the install seems to finish and is acknowledged but after a while I get another message from ACXTestFlightInstallQueue that the install timed out. Google doesn't even have results for "ACXTestFlightInstallQueue", so I'm not able to find any similar cases. I'm not even sure if that's the source of my issue.
default 08:43:12.847251 -0500 appconduitd 0x16e0b3000 -[ACXInstallQueue _onQueue_deQueueNextOperation]_block_invoke_2: Finished install for com.tandt.ios.DashDev.watchkitapp default 08:43:13.662319 -0500 appconduitd 0x16e0b3000 -[ACXCompanionSyncConnection _onQueue_handleAppInstallMessage:]: Setting state to installed for com.tandt.ios.DashDev.watchkitapp default 08:43:13.664523 -0500 appconduitd 0x16e0b3000 -[ACXInstallQueue acknowledgeInstallationForWatchApp:]: Installation of com.tandt.ios.DashDev.watchkitapp acknowledged. default 08:43:13.666582 -0500 appconduitd 0x16df9b000 +[ACXDeviceConnectionClient messageAllObserversWithInstallStateUpdate:]_block_invoke: Messaging observers with update { "com.tandt.ios.DashDev.watchkitapp" = 2; } default 08:43:13.667784 -0500 TestFlight 0x1aa190b40 -[ACXDeviceConnection updatedInstallStateForApplicationsWithInfo:]_block_invoke_2: Messaging delegate <OASNanoAppInstallManager: 0x17403cf40> with state change 2 for app com.tandt.ios.DashDev.watchkitapp default 08:43:26.959158 -0500 appconduitd 0x16df9b000 -[ACXTestFlightInstallQueue init]_block_invoke: TestFlight install for com.tandt.ios.DashDev.watchkitapp timed out
Edit: The attached log shows 2 installs... I installed it on the watch, then removed it after it failed to launch and installed again. Then I tried to launch again and got the ACXTestFlightInstallQueue time out.
Answers
Things I've tried that didn't work:
I'm not sure that the app is getting into my own code, but what logging methods are there available for watchOS when not running in debug? I use Fabric Crashlytics for my iOS app, but haven't got it working. I've also not been able to handle unexpected exceptions on watchOS, even in debug mode. The major issue here is that I'm shooting in the dark without any decent logging.
Ok-- Knowing that the app worked when compiled in debug, I did several builds to find out what was wrong via process of elimination. I changed the build settings on my WKExtension and tested each one to see if it could launch after installation.
LAUNCHED - LLVM disabled, linking disabled, Thumb-2 disabled
LAUNCHED - LLVM disabled, Link SDK enabled, Thumb-2 disabled
CRASHED - LLVM enabled, linking disabled*, Thumb-2 disabled
CRASHED - LLVM enabled, linking disabled*, Thumb-2 enabled
CRASHED - LLVM enabled, Link SDK enabled, Thumb-2 disabled
CRASHED - LLVM enabled, Link SDK enabled, Thumb-2 enabled
Didn't try:
LLVM disabled, linking disabled, Thumb-2 enabled
LLVM disabled, Link SDK enabled, Thumb-2 enabled
You can see that as soon as I enabled LLVM, the app doesn't work. I also noticed that with linking disabled, I still get linking warnings (see below), so I believe that at least some linking may be enabled automatically if LLVM is enabled. I did test linking with LLVM disabled, which did work, so I don't think it's linking... But even if it is, the linking warnings don't provide much information on what I could do to preserve the code being removed.
Linking warnings:
I'm using Win 10, the VS 2017 Pro 15.2, VS for Mac 7.0, and Xamarin.iOS 10.10.0.30
Cross-posted on Bugzilla as I think it might be a bug: https://bugzilla.xamarin.com/show_bug.cgi?id=56312