2016-12-22 8 views
0

私はXCodeのプレイグラウンドを通していくつかのsqliteデータベース呼び出しをテストしようとしています。私はプレイグラウンドのResourcesフォルダーにあるデータベースから始め、それをPlaygrounds Documentsフォルダーに移動しようとしますが、リソースフォルダー内のファイルを指すシンボリックリンクが生成され、そのファイルに書き込めません。しかし、Documentsフォルダがどこにあるのか分かり、そこから手作業でファイルをコピーすると、すべて正常に動作します。xCodeプレイグラウンドと文書へのファイルの書き込み

なぜファイルマネージャのコピーコマンドは実際にコピーするのではなく、シンボリックリンクを作成するのですか?実際にこれを実現させる方法はありますか?それは遊び場だけの問題であるようです。リソースからドキュメントへのコピーはアプリ自体でうまくいきます。

...遊び場内

let dirPaths =  NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask, true) 
let docsDir = dirPaths[0] 
let destPath = (docsDir as NSString).appendingPathComponent("/data.sqlite") 
print(destPath) 

let fileMgr = FileManager.default 


let srcPath = Bundle.main.path(forResource: "data", ofType:"sqlite") 
// This copies the data.sqlite file from Resources to Documents 
// ** However in the playground, only a symlink is generated 
do { 
    try fileMgr.copyItem(atPath: srcPath!, toPath: destPath) 
} catch let error { 
    print("Error (during copy): \(error.localizedDescription)") 
} 

答えて

1

ロッドをテストするためのいくつかのコード、それは私がこれを理解、手遅れだが。

コンテキスト:

  • 私は
  • 私はStore.dbを追加したフレームワークを作成し、遊び場は私のプロジェクトで動作するようにするには、同じワークスペース
  • で私のプロジェクトに1つの遊び場を追加ファイルをフレームワークターゲットに転送
  • 私はStore.dbをリソースとしてプレイグラウンドに追加していません
  • Swift 3

遊び場

@testable import MyAppAsFramework 

func copyMockDBToDocumentsFolder(dbPath: String) { 
    let localDBName = "Store.db" 
    let documentPath = dbPath/localDBName 
    let dbFile = Bundle(for: MyAppAsFrameworkSomeClass.self).path(forResource: localDBName.deletingPathExtension, ofType: localDBName.pathExtension) 

    FileManager.copyFile(dbFile, toFolderPath: documentPath) 
} 

copyMockDBToDocumentsFolder(dbPath: "The documents path") 

/ copyFile(x)のようなものなどは、オペレータのオーバーロードと拡張

extension String { 

    public var pathExtension: String { 
     get { 
      return (self as NSString).pathExtension 
     } 
    } 

    public var deletingPathExtension: String { 
     get { 
      return (self as NSString).deletingPathExtension 
     } 
    } 

    public func appendingPath(_ path: String) -> String { 
     let nsSt = self as NSString 
     return nsSt.appendingPathComponent(path) 
    } 

} 


infix operator/: MultiplicationPrecedence 

public func/(left: String, right: String) -> String { 
    return left.appendingPath(right) 
} 


extension FileManager { 

    class func copyFile(_ filePath: String?, toFolderPath: String?) -> Bool { 

     guard let file = filePath else { return false } 
     guard let toFolder = toFolderPath else { return false } 

     var posibleError: NSError? 

     do { 
      try FileManager.default.copyItem(atPath: file, toPath:toFolder) 
     } catch let error as NSError { 
      posibleError = error 
      print("CAN'T COPY \(error.localizedDescription)") 
     } 

     return posibleError == nil 
    } 

} 
です
関連する問題