ikeh1024のブログ

ZennやQiitaに書くにはちょっと小粒なネタをこちらに書いています

FileManager.default.urlsの出力結果

概要

  • アプリから何かしらのファイルを保存したい場合、フォルダのパスの取得にurls(for:in:)を使用する。
  • 以下はその際の出力のメモ書き。

参考

出力例

FileManager.SearchPathDirectory Detail Paths
applicationDirectory Supported applications (/Applications). /Users/hogeuser/Applications
demoApplicationDirectory Unsupported applications and demonstration versions. /Users/hogeuser/Applications/Demos
developerApplicationDirectory Developer applications (/Developer/Applications). /Users/hogeuser/Developer/Applications
adminApplicationDirectory System and network administration applications. /Users/hogeuser/Applications/Utilities
libraryDirectory Various user-visible documentation, support, and configuration files (/Library). /Users/hogeuser/Library
developerDirectory Developer resources (/Developer). /Users/hogeuser/Developer
userDirectory User home directories (/Users). (nil)
documentationDirectory Documentation. /Users/hogeuser/Library/Documentation
documentDirectory Document directory. /Users/hogeuser/Documents
coreServiceDirectory Core services (System/Library/CoreServices). (nil)
autosavedInformationDirectory The user’s autosaved documents (Library/Autosave Information). /Users/hogeuser/Library/Autosave Information
desktopDirectory The user’s desktop directory. /Users/hogeuser/Desktop
cachesDirectory Discardable cache files (Library/Caches). /Users/hogeuser/Library/Caches
applicationSupportDirectory Application support files (Library/Application Support). /Users/hogeuser/Library/Application Support
downloadsDirectory The user’s downloads directory. /Users/hogeuser/Downloads
inputMethodsDirectory Input Methods (Library/Input Methods). /Users/hogeuser/Library/Input Methods
moviesDirectory The user’s Movies directory (~/Movies). /Users/hogeuser/Movies
musicDirectory The user’s Music directory (~/Music). /Users/hogeuser/Music
picturesDirectory The user’s Pictures directory (~/Pictures). /Users/hogeuser/Pictures
printerDescriptionDirectory The system’s PPDs directory (Library/Printers/PPDs). (nil)
sharedPublicDirectory The user’s Public sharing directory (~/Public). /Users/hogeuser/Public
preferencePanesDirectory The PreferencePanes directory for use with System Preferences (Library/PreferencePanes). /Users/hogeuser/Library/PreferencePanes
applicationScriptsDirectory The user scripts folder for the calling application (~/Library/Application Scripts/<code-signing-id>. /Users/hogeuser/Library/Application Scripts/com.apple.dt.Xcode.PlaygroundStub-macosx
itemReplacementDirectory The constant used to create a temporary directory. (nil)
allApplicationsDirectory All directories where applications can be stored. /Users/hogeuser/Applications
/Users/hogeuser/Applications/Utilities
/Users/hogeuser/Developer/Applications
/Users/hogeuser/Applications/Demos
allLibrariesDirectory All directories where resources can be stored. /Users/hogeuser/Library
/Users/hogeuser/Developer
trashDirectory The trash directory. /Users/hogeuser/.Trash

Code

import Cocoa

struct Directory {
    var directory: FileManager.SearchPathDirectory
    var name: String
    var detail: String
    
    var commonDirectoryURLs: [URL] {
        let urls = FileManager.default.urls(for: directory, in: .userDomainMask)
        return urls
    }
    
    var descriptionForMarkdown: String {
        var message = "|\(name)|\(detail)"
        
        let urls = self.commonDirectoryURLs
        
        if urls.isEmpty {
            message += "|(nil)"
        }
        
        for (index, url) in urls.enumerated() {
            if index == 0 {
                message += "|\(url.path)"
            } else {
                message += "<br>\(url.path)"
            }
        }
        message += "|"
        
        return message
    }
}

extension Directory {
    // ref: [FileManager\.SearchPathDirectory](https://developer.apple.com/documentation/foundation/filemanager/searchpathdirectory)
    // 2022/07/14
    static let allDirectories = [
        Directory(directory: .applicationDirectory, name: "applicationDirectory", detail: "Supported applications (/Applications)."),
        Directory(directory: .demoApplicationDirectory, name: "demoApplicationDirectory", detail: "Unsupported applications and demonstration versions."),
        Directory(directory: .developerApplicationDirectory, name: "developerApplicationDirectory", detail: "Developer applications (/Developer/Applications)."),
        Directory(directory: .adminApplicationDirectory, name: "adminApplicationDirectory", detail: "System and network administration applications."),
        Directory(directory: .libraryDirectory, name: "libraryDirectory", detail: "Various user-visible documentation, support, and configuration files (/Library)."),
        Directory(directory: .developerDirectory, name: "developerDirectory", detail: "Developer resources (/Developer)."),
        Directory(directory: .userDirectory, name: "userDirectory", detail: "User home directories (/Users)."),
        Directory(directory: .documentationDirectory, name: "documentationDirectory", detail: "Documentation."),
        Directory(directory: .documentDirectory, name: "documentDirectory", detail: "Document directory."),
        Directory(directory: .coreServiceDirectory, name: "coreServiceDirectory", detail: "Core services (System/Library/CoreServices)."),
        Directory(directory: .autosavedInformationDirectory, name: "autosavedInformationDirectory", detail: "The user’s autosaved documents (Library/Autosave Information)."),
        Directory(directory: .desktopDirectory, name: "desktopDirectory", detail: "The user’s desktop directory."),
        Directory(directory: .cachesDirectory, name: "cachesDirectory", detail: "Discardable cache files (Library/Caches)."),
        Directory(directory: .applicationSupportDirectory, name: "applicationSupportDirectory", detail: "Application support files (Library/Application Support)."),
        Directory(directory: .downloadsDirectory, name: "downloadsDirectory", detail: "The user’s downloads directory."),
        Directory(directory: .inputMethodsDirectory, name: "inputMethodsDirectory", detail: "Input Methods (Library/Input Methods)."),
        Directory(directory: .moviesDirectory, name: "moviesDirectory", detail: "The user’s Movies directory (~/Movies)."),
        Directory(directory: .musicDirectory, name: "musicDirectory", detail: "The user’s Music directory (~/Music)."),
        Directory(directory: .picturesDirectory, name: "picturesDirectory", detail: "The user’s Pictures directory (~/Pictures)."),
        Directory(directory: .printerDescriptionDirectory, name: "printerDescriptionDirectory", detail: "The system’s PPDs directory (Library/Printers/PPDs)."),
        Directory(directory: .sharedPublicDirectory, name: "sharedPublicDirectory", detail: "The user’s Public sharing directory (~/Public)."),
        Directory(directory: .preferencePanesDirectory, name: "preferencePanesDirectory", detail: "The PreferencePanes directory for use with System Preferences (Library/PreferencePanes)."),
        Directory(directory: .applicationScriptsDirectory, name: "applicationScriptsDirectory", detail: "The user scripts folder for the calling application (~/Library/Application Scripts/<code-signing-id>."),
        Directory(directory: .itemReplacementDirectory, name: "itemReplacementDirectory", detail: "The constant used to create a temporary directory."),
        Directory(directory: .allApplicationsDirectory, name: "allApplicationsDirectory", detail: "All directories where applications can be stored."),
        Directory(directory: .allLibrariesDirectory, name: "allLibrariesDirectory", detail: "All directories where resources can be stored."),
        Directory(directory: .trashDirectory, name: "trashDirectory", detail: "The trash directory."),
    ]
}

print("""
|FileManager.SearchPathDirectory|Detail|Paths|
|---|---|---|
""")

for directory in Directory.allDirectories {
    print(directory.descriptionForMarkdown)
}