iTunes 使用 AFC 守护程序通过 USB 与 iPhone 通信。显而易见的事情是防止这个守护进程自动启动。您可以使用它launchctl
来执行此操作。
在设备启动时(或 iPhone 连接到 PC 之后),您需要执行
launchctl unload /System/Library/LaunchDaemons/com.apple.afcd.plist
当您将您的设备连接到 PC 时,iTunes 将显示错误,指出无法连接到该设备。然后您的应用程序可以要求输入密码,当输入正确时,您可以像这样启动 AFC 守护进程
launchctl load /System/Library/LaunchDaemons/com.apple.afcd.plist
launchctl start com.apple.afcd
此方法的唯一问题是您需要重新启动 iTunes,否则即使您启动 AFC 守护程序,他也不会检测到设备。
更新
找到了合适的解决方案。有 IOKit.framework API 可以打开/关闭 USB - http://www.opensource.apple.com/source/IOKitUser/IOKitUser-502/usb_device.subproj/IOUSBDeviceControllerLib.h
这是代码:
//Declarations
IOReturn IOUSBDeviceControllerCreate(CFAllocatorRef allocator, IOUSBDeviceControllerRef* deviceRef);
IOReturn IOUSBDeviceControllerForceOffBus(IOUSBDeviceControllerRef device, int enable);
...
//Create controller
IOUSBDeviceControllerRef device = NULL;
IOUSBDeviceControllerCreate(NULL, &device);
//Turn USB off
IOUSBDeviceControllerForceOffBus(device, 1);
//Turn USB on
IOUSBDeviceControllerForceOffBus(device, 0);
//Free controller
CFRelease(device);
当 USB 关闭时,您的 mac/PC 将不再看到该设备。就像您在物理上断开了它一样。iTunes、Xcode、文件浏览器——它们都将不再看到它。
当 USB 打开时,您的 mac/PC 将检测到该设备。你不需要重新插入它。所有软件都会自动检测到它,就像设备被物理插入一样。
我应该警告您,当 USB 关闭时,如果不使用上面的代码,您将无法重新打开它。如果您坚持使用它,则只有设备重启会有所帮助。
仅在 iOS 7 上测试,但看起来这些功能自 iOS 4 起可用。