"~ 폴더의 파일에 액세스하려고합니다."대화 상자가 표시되지 않는 경우 해결 방법

7639 단어 MacOSXSwift

개요


  • macOS10.15에서 파일 및 OS 기능에 액세스할 때 보안이 엄격해졌습니다.
  • macOS 10.15 Catalina에서는 'User Consent'가 더욱 강화되어 앱이 화면 캡처 촬영, 문서, 다운로드 폴더에 액세스할 때 사용자의 승인이 필요합니다. | AAPL Ch.

  • 예를 들어 데스크톱의 폴더에 액세스하려고 하면 다음과 같은 권한을 묻는 대화 상자가 나타납니다.
  • 그러나 프로그램을 쓰고 있는 가운데, 허가를 요구하는 다이얼로그가 아닌 케이스가 2개 있었으므로, 이하에서 소개합니다.

  • (↓코야츠)


    해결 방법 1. 보안 및 개인 정보 설정에 정보가 등록되어 있지 않은지 확인


  • 한번 「~폴더내의 파일에 액세스 하려고 하고 있습니다」의 다이얼로그로 회답하면, 아래와 같은 장소에 정보가 기록됩니다.
  • ON으로 하면 액세스를 허가할 수 있습니다만, 「~폴더내의 파일에 액세스 하려고 하고 있습니다」의 표시는 이후가 없어져 버립니다.
  • 다시 발행하고 싶은 경우는 정보를 터미널로부터 리셋트 할 필요가 있습니다. 예를 들면 다음과 같습니다.
  • tccutil reset <サービス名> <バンドルID>
  • 자세한 내용은 보안 및 개인정보 보호 설정값 재설정(macOS 10.15 Catalina)을 참조하십시오.
  • tccutil reset SystemPolicyDesktopFolder jp.co.hikeuchi.AccessConfirmSample
    



    해결 방법 2. 화면 보호기 레벨 창이 나쁜 경우


  • WindowLevel이 kCGScreenSaverWindowLevel 의 윈도우가 있을 때, 허가 화면이 표시되지 않기 때문에, WindowLevel를 변경해 해야 합니다.

  • 참고


  • NSWindow.Level
  • 보안 및 개인정보 보호 설정값 재설정(macOS 10.15 Catalina)

  • GitHub


  • htps : // 기주 b. 코 m / 퐁 m dau / 쿠이타 _ 아세스 s 콘후 rm mp ぇ

  • 코드


  • 간단히 다음을 구현
  • 선택한 창의 레벨로 변경
  • 데스크톱 파일 로드

  • @IBAction func windowLevelChanged(_ sender: NSPopUpButton) {
        switch sender.selectedTag() {
        case 0:
            window.level = NSWindow.Level(rawValue: NSWindow.Level.RawValue(kCGNormalWindowLevel))
        case 1:
            window.level = NSWindow.Level(rawValue: NSWindow.Level.RawValue(kCGModalPanelWindowLevel))
        case 2:
            window.level = NSWindow.Level(rawValue: NSWindow.Level.RawValue(kCGScreenSaverWindowLevel))
        default:
            window.level = NSWindow.Level(rawValue: NSWindow.Level.RawValue(kCGNormalWindowLevel))
        }
    }
    
    @IBAction func openButtonClicked(_ sender: Any) {
        let fileData: Data?
        do {
            let fileUrl = URL(fileURLWithPath: "/Users/ikeh/Desktop/sample.txt")
            fileData = try Data(contentsOf:fileUrl)
        } catch {
            // ファイルデータの取得でエラーの場合
            fileData = nil
        }
        print("\(String(describing: fileData))")
    }
    

    동작 확인


  • WindowLevel이 kCGScreenSaverWindowLevel 인 창이있을 때 사용 권한 화면이 표시되지 않습니다.
  • 스크린 세이버 레벨의 윈도우가, 액세스 허가 화면의 표시를 방해하고 있는 것 같은 동작을 볼 수 있습니다.


  • 다른 창 수준에서 문제없이 표시 될 수 있음



  • 좋은 웹페이지 즐겨찾기