2017-04-06 15 views
2

私はXcodeとSwiftをかなり新しくしています。私は私のドキュメントディレクトリに "file.txt"と呼ばれるファイルを作成しようとしていると、 "あなたはファイルを保存する権限がありません"というエラーが表示されます。Xcode Swift 3.0 MacOS(Sierra)アプリがファイルを作成できません、許可なし

最終的には、私はFIFinderSyncControllerを使ってすべてのもの( "/")を見ているので、デフォルトのドキュメントディレクトリを使いたくないです。

let targetFile = (FIFinderSyncController.default().targetedURL()?.path)! + "/file.txt" 

    NSLog("%@", targetFile as NSString) 

    let fileManager = FileManager.default 
    if fileManager.fileExists(atPath: (targetFile)) == false { 

     do { 
      let targetString = (FIFinderSyncController.default().targetedURL()?.path)! + "/Untitled.txt" 

      NSLog("%@", targetString as NSString) 

      let fileManager = FileManager.default 

      if fileManager.fileExists(atPath: targetString) == false { 
       let content = "" // Just creating empty file. 

       //writing 
       try content.write(toFile: targetString, atomically: false, encoding: String.Encoding.utf8) 

       //reading 
       let readingText = try NSString(contentsOfFile: targetString, encoding: String.Encoding.utf8.rawValue) 

       NSLog("%@", readingText as NSString) 
      } 
     } 
     catch { 
      print(error.localizedDescription) 
     } 
    } 

ログを示しています。

2017-04-06 13:35:46.450077-0700 Open New Text File[5177:1035580]  /Users/david/Documents/file.txt 
2017-04-06 13:35:46.450257-0700 Open New Text File[5177:1035580]  /Users/david/Documents/file.txt 
You don’t have permission to save the file “file.txt” in the folder “Documents”. 

答えて

2

私が助けるだろうと思ったので、私はここで答えを見つけました。問題はサンドボックスの限界です。追加する場合

com.apple.security.temporary-exception.files.home-relative-path.read-write 

対象のエンタイトルメントファイルには、監視する親フォルダの文字列を含む配列として配列を指定します。私の場合は、すべてを見るために "/"を追加しました。ここに私です:

<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key> 
<array> 
    <string>/</string> 
</array> 

これは、上記のフォルダに関連するすべてにアクセスすることができます。

1つの警告:(他のアプリで)他のFIFinderSyncControllerの設定があると、相互に影響を与える可能性があります(徹底的にテストされていないようです)。

関連する問題