您正在寻找 ImageCaptureCore 框架。这与 macOS 上用于从 SD 卡和相机导入的框架相同。它现在在 iOS 13.2 中可用。
更新:
ImageCaptureCore API 现在从 iOS 13.2 开始工作。
但是,请注意,从 iOS/iPadOS 13.1 Beta 3 (17A5837a) 开始,我还不能让它工作(报告给 Apple FB6799036)。它现在在iPadOS Features page 上标有星号,表示它将“今年晚些时候推出”。
我可以启动ICDeviceBrowser,但是当设备连接时我看到权限错误并且没有收到任何委托消息。所以在它开始工作之前可能需要一些许可或权利。
很遗憾,Apple 的开发者网站上没有文档或示例代码(即使是 macOS)。但框架确实存在于 iOS 13 SDK 中,你可以查看那里的头文件。
我们在我们的 macOS 应用程序中使用这个框架,并且只使用标题来解决问题并不算太糟糕。首先创建一个ICDeviceBrowser (ICDeviceBrowser.h),设置它的委托,然后启动浏览器:
@interface CameraManager() : NSObject <ICDeviceBrowserDelegate>
{
ICDeviceBrowser* _deviceBrowser;
}
@end
@implementation CameraManager
- (id) init
{
self = [super init];
_deviceBrowser = [[ICDeviceBrowser alloc] init];
_deviceBrowser.delegate = self;
[_deviceBrowser start];
return self;
}
...
@end
您应该在连接相机设备后开始接收委托消息:
- (void)deviceBrowser:(ICDeviceBrowser*)browser didAddDevice:(ICDevice*)addedDevice moreComing:(BOOL)moreComing;
- (void)deviceBrowser:(ICDeviceBrowser*)browser didRemoveDevice:(ICDevice*)removedDevice moreGoing:(BOOL)moreGoing;
当您收到didAddDevice: 消息时,您将需要使用ICDevice (ICDevice.h) 和ICCameraDevice (ICCameraDevice.h) API 来设置委托并启动会话。会话开始后,您将开始接收委托消息:
- (void)deviceBrowser:(ICDeviceBrowser*)browser didAddDevice:(ICDevice*)addedDevice moreComing:(BOOL)moreComing
{
if ((addedDevice.type & ICDeviceTypeMaskCamera) == ICDeviceTypeCamera)
{
ICCameraDevice* camera = (ICCameraDevice *) addedDevice;
camera.delegate = self;
[camera requestOpenSession];
// probably want to save 'camera' to a member variable
}
}
你可以使用委托方法:
- (void)cameraDevice:(nonnull ICCameraDevice *)camera
didAddItems:(nonnull NSArray<ICCameraItem *> *)items;
获取 API 枚举的项目列表或等待:
- (void)deviceDidBecomeReadyWithCompleteContentCatalog:(ICDevice*)device;
然后使用ICCameraDevice 上的.contents 属性获取所有内容。
您可以从那里使用ICCameraDevice 请求缩略图、元数据以及下载特定文件。我将把它作为练习留给读者。
正如我上面提到的,这似乎不适用于 iOS/iPadOS 13.1 Beta 3。希望这一切都能尽快开始工作,因为我真的很想自己开始测试它。
现在在 iOS 13.2 中可以使用。