2017-05-02 1 views
1

applicationScripts 디렉토리에서 Apple 스크립트를 실행하는 앱을 빌드하려고합니다 (Apple Sandbox에서). 디렉토리가 모두 존재한다면 괜찮습니다. 하지만이 디렉토리를 지우면 내 응용 프로그램이 수동으로 만들 수 없습니다 (응용 프로그램 스크립트에 폴더를 만들 수있는 권한이 없습니다).Swift 3 + Sandbox - 존재하지 않는 경우 applicationScriptsDirectory를 만드는 방법

기본 폴더를 자동으로 만들 수있는 방법이 있습니까?

답변

2

샌드 박스 응용 프로그램에는 응용 프로그램 스크립트 디렉토리를 만들 수있는 권한이 있습니다.
url(for:in:appropriateFor:create:)FileManager 인 경우 URL을 검색하고 필요한 경우 디렉토리를 만듭니다.

let fileManager = FileManager.default 
let scriptsFolderURL = try! fileManager.url(for: .applicationScriptsDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 
+0

을 그리고 난 당신의 예제를 실행하려고 할 때 나는 치명적인 오류가있어 : ** 치명적인 오류 : '! 시도를' 표현식에서 예기치 않게 오류가 발생했습니다 : Error Domain = NSCocoaErrorDomain Code = 513 "파일을 저장할 수있는 권한이 없습니다 ** –

+0

이상한 문제없이 응용 프로그램 스크립트 폴더를 사용하여 두 개의 프로젝트를 만들었습니다. 폴더 ~ ~/Library/Application Scripts /'는'you : staff 700'이어야합니다. – vadian

+0

권한은 괜찮아 보입니다 : 755 iam : staff :-(파일 샌드 (App Sandbox 아래)) : 사용자가 선택한 파일 읽기/쓰기 심지어 괜찮아요) –

0

나는 맥 OS 10.12 아래 Application Scripts 폴더를 만들 수 없습니다 느낌을 가지고 있지만, 그것은 10.11에서 작동합니다. 이전에는 번들 스크립트 디렉토리를 만들고 파일을 복사 할 수 있었지만 Sandboxed 응용 프로그램에는 허용되지 않습니다. Apple은 지금이 제한 사항을 추가했을 수도 있습니다.

그것은 완벽하지 않습니다,하지만 작동하는 것 같다 :

lazy var scriptsFolderURL: URL = { 
    let manager = FileManager.default 
    var scriptsFolder: URL! 
    do { 
     scriptsFolder = try manager.url(for: .applicationScriptsDirectory, in: FileManager.SearchPathDomainMask.userDomainMask, appropriateFor: nil, create: true) 
    } catch { 
     scriptsFolder = manager.urls(for: .applicationScriptsDirectory, in: .userDomainMask).first! 
    } 
    return scriptsFolder 
}() 
관련 문제