Fastlane snapshot报Unable to mount DeveloperDiskImage警告的原因咨询
原因解析
你遇到的这个紫色警告,核心逻辑其实很清晰:
- 你的Apple Watch和连接到电脑的iPhone处于配对状态,fastlane snapshot底层依赖的
xcodebuild命令在执行时,会自动扫描所有关联的iOS/iOS衍生设备(包括配对的Watch) - 当Watch处于锁屏状态(受密码保护)时,Xcode无法挂载它的开发者磁盘镜像,于是抛出了
Error Domain=com.apple.dtdevicekit Code=-402653158 "The device is passcode protected."的警告
而断开iPhone后警告消失,正是因为此时Xcode无法检测到配对的Watch设备,自然不会触发这个挂载尝试。
解决办法
临时快速解决
在运行fastlane snapshot之前,解锁你的Apple Watch并保持它处于唤醒状态,Xcode就能顺利完成开发者磁盘镜像的挂载,警告会自动消失。
长期规避方案
如果你不想每次都手动解锁Watch,可以通过配置指定fastlane只使用目标设备(模拟器或特定iPhone),避免Xcode检测到Watch:
- 在项目的
Snapshotfile中添加设备指定配置:
# 指定使用模拟器 device "iPhone 15 Pro" # 或者指定已连接的iPhone的UDID(可在Xcode的Window > Devices and Simulators中查看) device "your_iphone_udid_string_here"
- 或者在运行命令时直接通过参数指定设备:
fastlane snapshot --device "iPhone 15 Pro"
你提供的错误日志
[13:11:17]: ▸ 2018-01-23 13:11:17.281 xcodebuild[87131:11428054] iPhoneSupport: Unable to mount DeveloperDiskImage on Jack’s Apple Watch (Error Domain=com.apple.dtdevicekit Code=-402653158 "The device is passcode protected." UserInfo={NSLocalizedDescription=The device is passcode protected., com.apple.dtdevicekit.stacktrace=( [13:11:17]: ▸ 0 DTDeviceKitBase 0x00000001148bffed DTDKCreateNSError + 113 [13:11:17]: ▸ 1 DTDeviceKitBase 0x00000001148c0831 DTDK_AMDErrorToNSError + 1135 [13:11:17]: ▸ 2 DTDeviceKitBase 0x0000000114901441 -[DTDKMobileDeviceToken mountDeveloperDiskImage:withError:] + 782 [13:11:17]: ▸ 3 DTDeviceKitBase 0x0000000114901cf8 -[DTDKMobileDeviceToken mountDeveloperDiskImageWithError:] + 488 [13:11:17]: ▸ 4 IDEiOSSupportCore 0x00000001147d65ae __28-[DVTiOSDevice attachToken:]_block_invoke_4 + 216 [13:11:17]: ▸ 5 DVTFoundation 0x0000000108a75a4f __DVTDispatchAsync_block_invoke + 806 [13:11:17]: ▸ 6 libdispatch.dylib 0x00007fff72b10591 _dispatch_call_block_and_release + 12 [13:11:17]: ▸ 7 libdispatch.dylib 0x00007fff72b08d50 _dispatch_client_callout + 8 [13:11:17]: ▸ 8 libdispatch.dylib 0x00007fff72b1be76 _dispatch_continuation_pop + 472 [13:11:17]: ▸ 9 libdispatch.dylib 0x00007fff72b136cb _dispatch_async_redirect_invoke + 703 [13:11:17]: ▸ 10 libdispatch.dylib 0x00007fff72b0a941 _dispatch_root_queue_drain + 515 [13:11:17]: ▸ 11 libdispatch.dylib 0x00007fff72b0a6ed _dispatch_worker_thread3 + 101 [13:11:17]: ▸ 12 libsystem_pthread.dylib 0x00007fff72dcd1ca _pthread_wqthread + 1387 [13:11:17]: ▸ 13 libsystem_pthread.dylib 0x00007fff72dccc4d start_wqthread + 13 [13:11:17]: ▸ ), NSLocalizedRecoverySuggestion=Please unlock your device and reattach. (0xE800001A)., NSLocalizedFailureReason=Please unlock your device and reattach. (0xE800001A).})
内容的提问来源于stack exchange,提问作者Jack Wilkinson

