1

我想知道,App Store 中是否有任何应用程序可以让我的 iPhone 对 iTunes 不可见?这意味着,当我通过 USB 电缆将我的 iPhone 连接到 PC 时,iTunes 会自动检测我的 iPhone。但是,我想要一个受密码保护的连接,因为当 iPhone 被盗时,任何人都可以将 iPhone 连接到 iTunes 并恢复所有数据。

所以我想保护它......当我的 iPhone 连接到 iTunes 时,它应该要求输入密码。

有没有办法通过使用私有 API或越狱 API 来做到这一点,或者是否有现成的应用程序可用?

4

1 回答 1

2

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 起可用。

于 2013-05-10T19:33:46.517 回答