9

シナリオ

ユーザーが Finder でディレクトリを右クリックし、カスタム MenuItem を見つけます。その項目をクリックすると、ユーザーが自分の作業を行うことができるウィンドウを開くようにアプリに指示します。終了したら、右クリックして選択したフォルダにファイルを書き込む必要があります。

問題

これですべてが機能するようになりましたが、最後の部分です。拡張機能は、選択したフォルダーに書き込めません。

操作したいフォルダーを選択しているユーザーは、Powerbox の一部ではないようopenPanelですsavePanel。メニュー項目からユーザーが選択したフォルダを操作する権限を取得するにはどうすればよいですか? 開発者ライブラリで、その問題に対する可能な解決策への参照が見つかりません。サンドボックス ガイドではなく、拡張機能ガイドではありません。

選択したファイルやフォルダーを使用する方法がなければ、カスタム メニュー項目を追加する可能性はかなり役に立たないので、それらにアクセスする方法が必要であると確信しています。

私の書き方が間違っているのかもしれません。私のメイン アプリは、一時ファイルを共有グループ フォルダーに書き込みます。その後、拡張機能がリッスンする通知を送信します。

func copyFile(notification:NSNotification)
{
    NSLog("write file")

    if let target = tmpTarget
    {
        let secureContainer = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.de.enie.Nu")
        let contents = NSFileManager.defaultManager().contentsOfDirectoryAtURL(secureContainer!, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles | NSDirectoryEnumerationOptions.SkipsPackageDescendants | NSDirectoryEnumerationOptions.SkipsSubdirectoryDescendants , error: nil)
        
        for content in contents as! [NSURL]
        {
            NSLog("tmp data: \(content.path!)")
            if content.lastPathComponent!.stringByDeletingPathExtension == "SharedData"
            {
                NSLog("found shared file")
                
                NSFileManager.defaultManager().copyItemAtURL(content, toURL: target.URLByAppendingPathComponent(content.lastPathComponent!), error: nil)
                
                NSFileManager.defaultManager().removeItemAtURL(content, error: nil)
            }
        }
        tmpTarget = nil
    }
}

ファイルを書き込もうとすると、次のコンソール通知が表示されます。

  • /Users//Desktop/SharedData.png で開く: 操作は許可されていません
  • /Users//Desktop/SharedData.png ファイルの書き込みを拒否

ユーザーが選択したフォルダにアクセスする方法についてのアイデアは大歓迎です。

アップデート

私は決して間違いを犯していないことを安心させました。を介してフォルダーにアクセスすることは許可されていますがNSOpenPanel(つまり、資格が適切である必要があります)、フォルダーを作成したり、デフォルトのターゲット URL をブックマークしたりすることはできませんFIFinderSyncController

4

2 に答える 2