如何在 .playground 中写入文件?

How writeToFile in a .playground?

我编辑了一个 .plist 文件。我是如何理解的:由于沙盒,只能读取 Resources 目录中 .playgrounds 文件中的文件。但是怎么可能把编辑好的文件写入这个文件夹呢?

// read file
let xmlPath: String = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist")!
var xmlDictionary: [String : AnyObject] = NSDictionary(contentsOfFile: xmlPath) as Dictionary<String, AnyObject>

// editing file
// ...

// saving file
let saveDict: NSDictionary = xmlDictionary as NSDictionary
let savePath: String = xmlPath.stringByDeletingLastPathComponent.stringByAppendingPathComponent("Saved.plist")
saveDict.writeToFile(savePath, atomically: false) // ~> false

无论 savePath 还是 xmlPath 都有效,returns false 意味着 没有成功

如果我能替换旧的(未编辑的)版本的 .plist 文件就好了,但是保存到新文件也可以。

似乎无法修改主包中的文件,see earlier question。您可以做的是保存到沙盒应用程序文件夹,可以像这样检索其 URL:

 func applicationDirectory(directory:NSSearchPathDirectory) -> NSURL? {

    var appDirectory:String?
    var paths:[AnyObject] = NSSearchPathForDirectoriesInDomains(directory, NSSearchPathDomainMask.UserDomainMask, true);
    if paths.count > 0 {
        if let pathString = paths[0] as? String {
            appDirectory = pathString
        }
    }
    if let dD = appDirectory {
        return NSURL(string:dD)
    }
    return nil
}



func applicationTemporaryDirectory() -> NSURL? {

    if let tD = NSTemporaryDirectory() {
        return NSURL(string:tD)
    }

    return nil

}

applicationTemporaryDirectory()

applicationDirectory(NSSearchPathDirectory.DocumentDirectory)

url 将显示在 playground 的右侧,然后只需复制并粘贴到 Finder -> Go -> Go to Folder 对话框中即可。

GitHub Repo: 有关完整的工作示例,请参阅此 GitHub repo

可以。

通过查看其源代码,使用您当前的 plist 作为模板。

然后赋值给一个字符串

let newPlist: String = 
"""
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIconFile</key>
    <string></string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSMinimumSystemVersion</key>
    <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
    <key>NSHumanReadableCopyright</key>
    <string>Copyright © 2020 YourName. All rights reserved.</string>
    <key>NSMainStoryboardFile</key>
    <string>Main</string>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
    <key>NSSupportsAutomaticTermination</key>
    <true/>
    <key>NSSupportsSuddenTermination</key>
    <true/>
    <key>TDAMERITRADE_API_KEY</key>
    <string></string>
    <key>ACCOUNT_ID</key>
    <string></string>
    <key>CFBundleURLSchemes</key>
    <string>YourName.YourProjName</string>
</dict>
</plist>
"""

然后使用 url.

的 filePath 在字符串上调用 write 方法
let url: URL = URL(fileURLWithPath: "/Users/username/Desktop/iOS/YourProj/YourProj/info.plist")
newPlist.write(to: url, atomically: true, encoding: .utf8)