컴퓨터를 다시 시작한 후 Swift Url 책갈피 권한이 손실 됨

당신 것

macOS 음악 앱에서 작업 중이며 사용자에게 라이브러리 디렉토리를 선택하라는 메시지가 표시됩니다. 선택 후 디렉토리가 스캔되고 Core Data에 음악 개체가 생성됩니다. 콘텐츠의 디렉토리 및 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)"

어떤 도움을 주시면 감사하겠습니다.

빨간 머리

북마크 만들기

securityScopeAllowOnlyReadAccess 선적 서류 비치:

withSecurityScope옵션 과 함께 사용하면 ...

그것은 withSecurityScope당신이 놓친 것입니다.

let bookmark: Data = try directory.bookmarkData(options: [.withSecurityScope, .securityScopeAllowOnlyReadAccess], includingResourceValuesForKeys: nil, relativeTo: nil)

책갈피 해결

init(resolvingBookmarkData:options:relativeTo:bookmarkDataIsStale:) 선적 서류 비치:

App Sandbox를 지원하기 위해 보안 범위 책갈피를 해결하려면 withSecurityScope옵션을 포함하십시오 .

북마크를 해결할 때 두 번째로 놓치는 부분입니다.

let directory = try? URL(resolvingBookmarkData: bookmarkData, options: [.withSecurityScope], relativeTo: nil, bookmarkDataIsStale: &isStale)

이렇게하면 문제가 해결되지만 isStale. 인 경우 북마크 데이터를 업데이트해야합니다 true.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다시 시작한 후 모든 컴퓨터 변경 사항이 취소됨

분류에서Dev

두 번째 시작에 게시 한 직후 컴퓨터가 종료 됨

분류에서Dev

glib 2.0 및 Gstreamer 컴파일 후 시스템 기능이 손실 됨

분류에서Dev

WPA2 암호화를 사용할 때 컴퓨터가 시작된 직후 무선 작동이 중지됨

분류에서Dev

컴퓨터를 다시 시작한 후 16.10으로 업데이트가 작동하지 않습니다.

분류에서Dev

Ubuntu Touch 이중 부팅 복구를 설치 한 후 손실 됨

분류에서Dev

다시 시작한 후 Elantech 터치 패드 작동이 중지됨

분류에서Dev

로그 오프하거나 다시 시작한 후 컴퓨터에 연결을 열 자마자 VbScript를 실행합니다.

분류에서Dev

PC를 다시 시작한 후 VS Code의 Fira 코드가 손실되는 이유는 무엇입니까?

분류에서Dev

리베이스 후 코드 손실, 병합이 스쿼시 됨

분류에서Dev

Raspberry Pi를 다시 시작하기 직전에 AJAX 응답이 손실 됨

분류에서Dev

VueJS : 동적 구성 요소가 다시로드 된 후 소품이 손실 됨

분류에서Dev

WPF 앱을 게시하고 다른 컴퓨터에서 실행 한 후 Crystal Report Viewer가 작동하지 않음

분류에서Dev

새로 재설치 한 후 컴퓨터를 시작할 수 없음

분류에서Dev

.htaccess-www가 아닌 URL을 www URL로 리디렉션 한 후 예쁜 URL이 손실 됨

분류에서Dev

Websphere 서버를 중지 한 후 컴퓨터를 다시 시작하지 않으면 다시 시작할 수 없습니다.

분류에서Dev

15.10으로 업데이트 한 후 "이 컴퓨터 정보"에 15.04가 표시됨

분류에서Dev

마스터 클러스터 kubernetes를 실행 한 후 시스템이 중단됨

분류에서Dev

Wifi-Adapter를 찾을 수 없음, 수정 됨, 이제 다시 손실 됨, 동일한 솔루션이 작동하지 않음 : Exec 형식 오류

분류에서Dev

이벤트가 다시 시작된 후에도 Flutter BlocListener가 한 번만 실행 됨

분류에서Dev

재시작 또는 삭제 후 Vagrant에서 데이터 손실

분류에서Dev

서버 재시작 후 Redis 데이터 손실

분류에서Dev

xorg.conf.d를 업데이트 한 후 부팅시 컴퓨터가 멈춤

분류에서Dev

컴퓨터 시작 / 로그인 권한으로 VBS 스크립트 실행

분류에서Dev

xinput으로 마우스 버튼을 전환 한 후 컴퓨터를 다시 시작할 때마다 설정이 재설정됩니다.

분류에서Dev

다시 시작한 후 노트북 화면이 검게 표시됨

분류에서Dev

Firex 프록시를 사용한 후 내 컴퓨터에서 인터넷이 매우 느립니다.

분류에서Dev

완전한 정전이 컴퓨터를 손상시킬 수 있습니까?

분류에서Dev

UPS (배터리 백업)를 다시 시작한 후에 만 컴퓨터가 성공적으로 부팅되는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    다시 시작한 후 모든 컴퓨터 변경 사항이 취소됨

  2. 2

    두 번째 시작에 게시 한 직후 컴퓨터가 종료 됨

  3. 3

    glib 2.0 및 Gstreamer 컴파일 후 시스템 기능이 손실 됨

  4. 4

    WPA2 암호화를 사용할 때 컴퓨터가 시작된 직후 무선 작동이 중지됨

  5. 5

    컴퓨터를 다시 시작한 후 16.10으로 업데이트가 작동하지 않습니다.

  6. 6

    Ubuntu Touch 이중 부팅 복구를 설치 한 후 손실 됨

  7. 7

    다시 시작한 후 Elantech 터치 패드 작동이 중지됨

  8. 8

    로그 오프하거나 다시 시작한 후 컴퓨터에 연결을 열 자마자 VbScript를 실행합니다.

  9. 9

    PC를 다시 시작한 후 VS Code의 Fira 코드가 손실되는 이유는 무엇입니까?

  10. 10

    리베이스 후 코드 손실, 병합이 스쿼시 됨

  11. 11

    Raspberry Pi를 다시 시작하기 직전에 AJAX 응답이 손실 됨

  12. 12

    VueJS : 동적 구성 요소가 다시로드 된 후 소품이 손실 됨

  13. 13

    WPF 앱을 게시하고 다른 컴퓨터에서 실행 한 후 Crystal Report Viewer가 작동하지 않음

  14. 14

    새로 재설치 한 후 컴퓨터를 시작할 수 없음

  15. 15

    .htaccess-www가 아닌 URL을 www URL로 리디렉션 한 후 예쁜 URL이 손실 됨

  16. 16

    Websphere 서버를 중지 한 후 컴퓨터를 다시 시작하지 않으면 다시 시작할 수 없습니다.

  17. 17

    15.10으로 업데이트 한 후 "이 컴퓨터 정보"에 15.04가 표시됨

  18. 18

    마스터 클러스터 kubernetes를 실행 한 후 시스템이 중단됨

  19. 19

    Wifi-Adapter를 찾을 수 없음, 수정 됨, 이제 다시 손실 됨, 동일한 솔루션이 작동하지 않음 : Exec 형식 오류

  20. 20

    이벤트가 다시 시작된 후에도 Flutter BlocListener가 한 번만 실행 됨

  21. 21

    재시작 또는 삭제 후 Vagrant에서 데이터 손실

  22. 22

    서버 재시작 후 Redis 데이터 손실

  23. 23

    xorg.conf.d를 업데이트 한 후 부팅시 컴퓨터가 멈춤

  24. 24

    컴퓨터 시작 / 로그인 권한으로 VBS 스크립트 실행

  25. 25

    xinput으로 마우스 버튼을 전환 한 후 컴퓨터를 다시 시작할 때마다 설정이 재설정됩니다.

  26. 26

    다시 시작한 후 노트북 화면이 검게 표시됨

  27. 27

    Firex 프록시를 사용한 후 내 컴퓨터에서 인터넷이 매우 느립니다.

  28. 28

    완전한 정전이 컴퓨터를 손상시킬 수 있습니까?

  29. 29

    UPS (배터리 백업)를 다시 시작한 후에 만 컴퓨터가 성공적으로 부팅되는 이유는 무엇입니까?

뜨겁다태그

보관