Flutter 开发时,idevice_id 不能执行问题的解决

发布日期:2019年12月13日本文同步发表于公众号:

在 MacOS 上进行 Flutter 开发的过程中,很多人会碰到 idevice_id 不能执行,需要挪到废纸篓的提示,并且找不到连接的 iOS 设备,不胜其烦。提示类似下图:

Error

产生这个问题是因为 MacOS 的安全机制,将下载的文件标记了特殊的扩展属性,执行这个文件的时候,会检查这个扩展属性,导致出现上述问题。

假设 Flutter 的安装目录为 FLUTTER_ROOT,我们使用 xattr 命令查看一下:

关于 xattr 命令,请参考 https://ss64.com/osx/xattr.html

xattr -l $FLUTTER_ROOT/bin/cache/artifacts/libimobiledevice/idevice_id

输出如下:

com.apple.quarantine: 0082;5df1b9a7;The Unarchiver;

quarantine 是隔离区的意思,这里可以看出这个文件是 The Unarchiver 解压的,标记了隔离区。

使用下面的命令去掉这个扩展属性:

xattr -d com.apple.quarantine $FLUTTER_ROOT/bin/cache/artifacts/libimobiledevice/idevice_id

然后再执行上面的 xattr -l 可以看到没有输出了。idevice_id 就能正常执行了。

在 Flutter 安装目录,需要如此处理的文件有这些:

$FLUTTER_ROOT/bin/cache/artifacts/libimobiledevice/idevice_id
$FLUTTER_ROOT/bin/cache/artifacts/libimobiledevice/ideviceinfo
$FLUTTER_ROOT/bin/cache/artifacts/libimobiledevice/idevicename
$FLUTTER_ROOT/bin/cache/artifacts/libimobiledevice/idevicescreenshot
$FLUTTER_ROOT/bin/cache/artifacts/libimobiledevice/idevicesyslog
$FLUTTER_ROOT/bin/cache/artifacts/usbmuxd/iproxy
$FLUTTER_ROOT/bin/cache/artifacts/ideviceinstaller/ideviceinstaller
$FLUTTER_ROOT/bin/cache/artifacts/ios-deploy/ios-deploy

打完收功。