Как использовать ICDeviceBrowser — не находит камеру

#swift #macos #camera

#swift #macos #камера

Вопрос:

Я только начал использовать ImageCaptureCore и ICDeviceBrowser, чтобы начать разработку программного обеспечения для управления камерой, и оно работает нормально, но ничего не находит.

Я пробовал это на 3 разных камерах (в режиме PTP и режиме MSC), включая iPhone. У меня последняя версия macOS и Xcode.

Делегат никогда не вызывается, и массив устройств всегда пуст.

 import Foundation
import ImageCaptureCore

print("Hello, World!")

let browser = ICDeviceBrowser.init()
let myDeviceBrowserDelegate = myDeviceBrowserDelegateClass.init()
browser.delegate = myDeviceBrowserDelegate
browser.browsedDeviceTypeMask = ICDeviceTypeMask(rawValue: ICDeviceTypeMask.camera.rawValue | ICDeviceLocationTypeMask.local.rawValue | ICDeviceLocationTypeMask.bluetooth.rawValue | ICDeviceLocationTypeMask.bonjour.rawValue | ICDeviceLocationTypeMask.remote.rawValue | ICDeviceLocationTypeMask.shared.rawValue)!

browser.start()
while(browser.isBrowsing){
    print("browsing cameras...")
    print(browser.devices!)
    sleep(10)
}
browser.stop()
  

Вот делегат:

 import Foundation
import ImageCaptureCore

class myDeviceBrowserDelegateClass : NSObject, ICDeviceBrowserDelegate {
    func deviceBrowser(_ browser: ICDeviceBrowser, didAdd device: ICDevice, moreComing: Bool) {
        print("Device added = (device) and more coming = (moreComing)")
    }

    func deviceBrowser(_ browser: ICDeviceBrowser, didRemove device: ICDevice, moreGoing: Bool) {
        print("Device added = (device) and more going = (moreGoing)")

    }
}
  

Ответ №1:

Проблема заключалась в том, что мне нужно было выполнить цикл выполнения. Поскольку инструменты Xcode автоматически включают цикл выполнения, мне просто нужно было запустить его, а не цикл ожидания

 RunLoop.current.run(until: Date.init(timeIntervalSinceNow: 1))
  

Комментарии:

1. Можете ли вы указать эту строку в контексте? Я сталкиваюсь с той же проблемой, и добавление этой строки, похоже, не помогает.