升级到Xcode 11后,捆绑资源的URL不再起作用

时间:2019-09-24 12:22:09

标签: swift xcode11

我将Xcode升级到版本11.0(11A420a),部分代码无法像以前那样工作。我要将文件夹从Bundle复制到TemporaryDirectory。

    func makeHtmlFile (type: InvoiceType?) -> URL {
        let identifier = Bundle.main.bundleIdentifier!
        let cacheDirectory = NSTemporaryDirectory()  + "\(identifier)/Website/"
        let cacheURL = URL(fileURLWithPath: cacheDirectory )
        let websiteUrl = URL(fileReferenceLiteralResourceName: "Website")
        do {
            try FileManager().copyItem(at: websiteUrl, to: cacheURL)
        } catch let error { 
            print ("Copy \(error)\n\tWebsite: \(websiteUrl)\n\tCache:\(cacheURL)")
        }
        ...
    }

在Xcode 10中,这部分代码可以在包中找到文件夹/Website,在temporary directory中找到/var/folders/....,但是升级后会显示错误:

Copy Error Domain=NSCocoaErrorDomain Code=4 "The file “Website” doesn’t exist."

存在错误消息中显示的路径,我可以通过从错误消息中复制它们并将其粘贴到Finder -> Go -> Go to Folder中去到那里。有人知道升级后发生了什么变化吗?

1 个答案:

答案 0 :(得分:0)

好的,我至少为自己解决了问题。我没有使用NSTemporaryDirectory()来访问临时文件的URL,而是使用FileManager().temporaryDirectory

let tempDirectory = FileManager().temporaryDirectory
if let websiteURL = Bundle.main.url(forResource: "Website", withExtension: nil) {
    let cacheURL = tempDirectory.appendingPathComponent(websiteURL.lastPathComponent, isDirectory: true)
    ...
}

似乎可以像升级前一样工作。