Я пытаюсь позволить пользователям выбирать песню из своей музыкальной библиотеки. Итак, проблема: MPMediaPickerController отображает белый экран и блокирует приложение после новой установки приложения и только после того, как пользователь предоставит разрешение. Выход из приложения и его перезапуск не воспроизводят ошибку (возможно, потому что разрешения уже предоставлены). Удаление приложения и переустановка воспроизводит ошибку.
- Я убедился, что мой файл
Info.plist
содержит правильную информацию - Я убедился, что средство выбора носителя отображается наосновной поток
- Я попытался создать свойство в моем ViewController для надежной ссылки на экземпляр MPMediaPickerController, чтобы убедиться, что он не удаляется из памяти (почему бы не попробовать?)
- Iу меня есть действующая подписка Apple Music, и я вошел в iCloud с действительным Apple ID
- Мое устройство зарегистрировано в iTunes Connect (или как его там) и имеет действительный профиль обеспечения
- Это на iOS 13.1.3.
Вот как я инициализирую средство выбора (я также пытался назначить свойство на контроллере представления):
let picker = MPMediaPickerController(mediaTypes: .music)
picker.allowsPickingMultipleItems = false // I've tried commenting this out
picker.popoverPresentationController?.sourceView = cell // I've tried commenting this out
picker.delegate = self // I've tried commenting this out
picker.prompt = "Choose a song" // I've tried commenting this out
self.present(picker, animated: true, completion: nil)
Вотсоответствующая строка в моем файле Info.plist:
<key>NSAppleMusicUsageDescription</key>
<string>Use tracks from your iTunes library as wakeup sounds</string>
В консоли я получаю следующие ошибки:
[MediaLibrary] SQLite error 14 detected while opening database '/var/mobile/Media/iTunes_Control/iTunes/MediaLibrary.sqlitedb'
[MediaLibrary] DISK IO ERROR: attempting to close and re-open connection for recovery.
[MediaLibrary] [_handleDiskIOError] checking database consistency
[Service] Failed to obtain service proxy to perform integrity check. err=Error Domain=NSCocoaErrorDomain Code=4097 "connection to service on pid 0 named com.apple.medialibraryd.xpc" UserInfo={NSDebugDescription=connection to service on pid 0 named com.apple.medialibraryd.xpc} There was an error waiting for a reply from the media library service. Error Domain=NSCocoaErrorDomain Code=4097 "connection to service on pid 0 named com.apple.medialibraryd.xpc" UserInfo={NSDebugDescription=connection to service on pid 0 named com.apple.medialibraryd.xpc}
[MediaLibrary] [_handleDiskIOError] failed to re-open database connection
[MediaLibrary] [_handleDiskIOError] FAILED TO HANDLE DISK IO ERROR
[MediaLibrary] [_handleDiskIOError] SHM file not found—unable to unlink
[MediaLibrary] [ML3DatabaseConnection] Unable to open database connection to path /var/mobile/Media/iTunes_Control/iTunes/MediaLibrary.sqlitedb. unable to open database file
[Service] Could not attempt recovery at path: /var/mobile/Media/iTunes_Control/iTunes/MediaLibrary.sqlitedb There was an error waiting for a reply from the media library service. Error Domain=NSCocoaErrorDomain Code=4097 "connection to service on pid 0 named com.apple.medialibraryd.xpc" UserInfo={NSDebugDescription=connection to service on pid 0 named com.apple.medialibraryd.xpc}
[xpc.exceptions] <NSXPCConnection: 0x281a5f3c0> connection to service on pid 466 named com.apple.Music.MediaPicker.viewservice: Exception caught during decoding of received selector remoteMediaPickerDidPickMediaItems:, dropping incoming message.
Exception: Exception while decoding argument 0 (#2 of invocation):
<NSInvocation: 0x283203a00>
return value: {v} void
target: {@} 0x0
selector: {:} null
argument 2: {@} 0x0
Exception: Could not open database file at /var/mobile/Media/iTunes_Control/iTunes/MediaLibrary.sqlitedb (errno = 1)
Моя догадка? Некоторая проблема синхронизации состояния гонки с SQLite, находящимся в другом потоке, это проблема, только когда пользователь ожидает предоставления разрешений. Это даже поправимо на моем конце?
Я бы не хотел иметь белый экран смерти! Есть предложения?