В изолированном приложении macOS прямой доступ к файлам ограничен. Чтобы сохранить постоянный доступ к файлам или папкам, выбранным пользователем, ты должен использовать security-scoped bookmarks.
UserDefaults или базу данных)1. Создай и сохрани bookmark:
let bookmarkData = try url.bookmarkData(
options: .withSecurityScope,
includingResourceValuesForKeys: nil,
relativeTo: nil
)
2. Разреши bookmark при следующем запуске:
var isStale = false
let resolvedURL = try URL(
resolvingBookmarkData: bookmarkData,
options: .withSecurityScope,
relativeTo: nil,
bookmarkDataIsStale: &isStale
)
3. Получи доступ и освободи ресурс:
resolvedURL.startAccessingSecurityScopedResource()
// ... выполни операции с файлом ...
resolvedURL.stopAccessingSecurityScopedResource()
stopAccessingSecurityScopedResource() когда закончишь — иначе получишь утечку ресурсовisStale равно true после разрешения bookmark, сразу же создай и сохрани новый bookmarkcom.apple.security.files.bookmarks.app-scope, включённого в настройках sandbox твоего приложенияSecurity-scoped bookmarks нужно разрешать каждый раз при запуске приложения, даже если данные bookmark'а еще не устарели, потому что разрешения sandbox сбрасываются между сессиями приложения.
Новый — ещё не проверен сообществом
Вы