Я работаю над приложением macOS musi c, в котором я предлагаю пользователю выбрать каталог библиотеки. После выбора каталог сканируется, и в Core Data создаются объекты musi c. Чтобы сохранить права доступа к каталогу и URL-адреса его содержимого, я сохраняю URL-адрес каталога в виде закладки. Упрощенный код:
let directoryAndPermissionsKey: String = "" // Key for storing url to UserDefaults
/// Saves directory and permissions
func storeDirectoryAndPermissions(for directory: URL) throws -> Void {
// Saves directory and permissions
do {
// Creates bookmark
let bookmark: Data = try directory.bookmarkData(options: .securityScopeAllowOnlyReadAccess, includingResourceValuesForKeys: nil, relativeTo: nil)
// Stores directory and permissions
UserDefaults.standard.removeObject(forKey: directoryAndPermissionsKey)
UserDefaults.standard.set(bookmark, forKey: directoryAndPermissionsKey)
// Throws error
} catch {
throw PersistentLibraryError.cannotSaveDirectory
}
}
/// Retrieves directory
func retrieveDirectoryUrl() -> URL? {
// Indicates if data is stale
var isStale: Bool = false
// Makes sure that directory and permissions are stored
guard
UserDefaults.standard.object(forKey: directoryAndPermissionsKey) != nil,
let bookmarkData = UserDefaults.standard.object(forKey: directoryAndPermissionsKey) as? Data,
let directory = try? URL(resolvingBookmarkData: bookmarkData, bookmarkDataIsStale: &isStale)
else {
return nil
}
// Starts accessing directory
_ = directory.startAccessingSecurityScopedResource()
// Returns directory
return directory
}
Кроме того, в файл plist включены следующие строки:
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
Код до сих пор работал отлично. Даже когда я закрываю и повторно запускаю приложение, я все равно могу инициализировать AV Audio Player без каких-либо проблем с разрешениями.
Однако недавно я обнаружил, что при перезапуске компьютера выдается следующая ошибка при попытке для инициализации AVAudioPlayer:
Error Domain=NSOSStatusErrorDomain Code=-54 "permErr: permissions error (on file open)"
Любая помощь приветствуется.