OSDN Git Service

shared instanceを持つようにした
[kcd/KCD.git] / KCD / ApplicationDirecrories.swift
index 0a93cea..bbab898 100644 (file)
@@ -8,21 +8,84 @@
 
 import Foundation
 
+private func supportDirName() -> String {
+    
+    let main = Bundle.main
+    
+    return main.bundleIdentifier
+        ?? main.infoDictionary?["CFBundleName"] as? String
+        ?? main.infoDictionary?["CFBundleExecutable"] as? String
+        ?? "UnknownAppliation"
+}
+
+func localizedAppName() -> String {
+    
+    guard let name = Bundle.main.localizedInfoDictionary?["CFBundleName"] as? String,
+        !name.isEmpty else {
+            
+            return supportDirName()
+    }
+    
+    return name
+}
+
 struct ApplicationDirecrories {
-    static let support: URL = {
-        let url = FileManager
-            .default
-            .urls(for: .applicationSupportDirectory,
-                  in: .userDomainMask).last ?? URL(fileURLWithPath: NSHomeDirectory())
-        return url.appendingPathComponent("com.masakih.KCD")
-    }()
-    
-    static let documents = FileManager
-        .default
-        .urls(for: .documentDirectory,
-              in: .userDomainMask).last ?? URL(fileURLWithPath: NSHomeDirectory())
-    static let pictures = FileManager
-        .default
-        .urls(for: .picturesDirectory,
-              in: .userDomainMask).last ?? URL(fileURLWithPath: NSHomeDirectory())
+    
+    static let shared = ApplicationDirecrories()
+    
+    static let support = searchedURL(for: .applicationSupportDirectory)
+        .appendingPathComponent(supportDirName())
+    
+    static let documents = searchedURL(for: .documentDirectory)
+    
+    static let pictures = searchedURL(for: .picturesDirectory)
+    
+    private static func searchedURL(for directory: FileManager.SearchPathDirectory) -> URL {
+        
+        return FileManager.default.urls(for: directory, in: .userDomainMask)
+            .last
+            ?? URL(fileURLWithPath: NSHomeDirectory())
+    }
+}
+
+
+func createDirectory(_ url: URL) -> Bool {
+    
+    do {
+        
+        try FileManager.default.createDirectory(at: url,
+                                                withIntermediateDirectories: false,
+                                                attributes: nil)
+        
+        return true
+        
+    } catch {
+        
+        return false
+    }
+}
+
+func checkDirectory(_ url: URL, create: Bool) -> Bool {
+    
+    do {
+        
+        let resourceValue = try url.resourceValues(forKeys: [.isDirectoryKey])
+        if !resourceValue.isDirectory! {
+            
+            print("Expected a folder to store application data, found a file \(url.path).")
+            
+            return false
+        }
+        
+        return true
+        
+    } catch let error as NSError {
+        
+        if create, error.code == NSFileReadNoSuchFileError {
+            
+            return createDirectory(url)
+        }
+        
+        return false
+    }
 }