Swift: SandBoxアプリでHomeDirectoryを取得

2815 ワード

SandBoxアプリだとNSHomeDirectory()では本来のホームディレクトリのパスが取得できない。
代わりにgetpwuid(getuid())を使うと取得できる。

extension FileManager {
    static var homeDirectoryURL: URL? {
        guard let pw = getpwuid(getuid()), let home = pw.pointee.pw_dir else { return nil }
        let homePath = self.default.string(withFileSystemRepresentation: home,
                                           length: strlen(home))
        return URL(fileURLWithPath: homePath)
    }
}

let home = FileManager.homeDirectoryURL

同様の結論に至っている記事
App Sandboxの中のmacOSアプリから本当のホームディレクトリを知る