2 // ApplicationDirecrories.swift
5 // Created by Hori,Masaki on 2017/02/08.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 private func supportDirName() -> String {
13 let main = Bundle.main
15 return main.bundleIdentifier
16 ?? main.infoDictionary?["CFBundleName"] as? String
17 ?? main.infoDictionary?["CFBundleExecutable"] as? String
18 ?? "UnknownAppliation"
21 func localizedAppName() -> String {
23 guard let name = Bundle.main.localizedInfoDictionary?["CFBundleName"] as? String,
26 return supportDirName()
32 struct ApplicationDirecrories {
34 static let support = searchedURL(for: .applicationSupportDirectory)
35 .appendingPathComponent(supportDirName())
37 static let documents = searchedURL(for: .documentDirectory)
39 static let pictures = searchedURL(for: .picturesDirectory)
41 private static func searchedURL(for directory: FileManager.SearchPathDirectory) -> URL {
43 return FileManager.default.urls(for: directory, in: .userDomainMask)
45 ?? URL(fileURLWithPath: NSHomeDirectory())
49 extension ApplicationDirecrories {
51 static let screenshotSaveDirectoryURL: URL = {
53 let parentURL = URL(fileURLWithPath: AppDelegate.shared.screenShotSaveDirectory)
54 let url = parentURL.appendingPathComponent(localizedAppName())
55 let fm = FileManager.default
56 var isDir: ObjCBool = false
60 if !fm.fileExists(atPath: url.path, isDirectory: &isDir) {
62 try fm.createDirectory(at: url, withIntermediateDirectories: false)
64 } else if !isDir.boolValue {
66 print("\(url) is regular file, not direcory.")
72 print("Can not create screenshot save directory.")
81 func createDirectory(_ url: URL) -> Bool {
85 try FileManager.default.createDirectory(at: url,
86 withIntermediateDirectories: false,
97 func checkDirectory(_ url: URL, create: Bool) -> Bool {
101 let resourceValue = try url.resourceValues(forKeys: [.isDirectoryKey])
102 if !resourceValue.isDirectory! {
104 print("Expected a folder to store application data, found a file \(url.path).")
111 } catch let error as NSError {
113 if create, error.code == NSFileReadNoSuchFileError {
115 return createDirectory(url)