ios - ¿Cómo escribir un archivo en una carpeta ubicada en la aplicación de archivos de Apple en Swift 4?
xml (1)
Puede usar UIDocumentInteractionController y dejar que el usuario seleccione dónde quiere guardar su archivo cuando comparta su URL. El usuario solo tiene que seleccionar guardar en archivos y elegir qué directorio guardar el archivo que está exportando. Puede usar UIDocumentInteractionController para compartir cualquier tipo de archivo ubicado dentro de su paquete de aplicaciones, en su directorio de documentos u otra carpeta accesible desde su aplicación.
class ViewController: UIViewController {
let documentInteractionController = UIDocumentInteractionController()
func share(url: URL) {
documentInteractionController.url = url
documentInteractionController.uti = url.typeIdentifier ?? "public.data, public.content"
documentInteractionController.name = url.localizedName ?? url.lastPathComponent
documentInteractionController.presentOptionsMenu(from: view.frame, in: view, animated: true)
}
@IBAction func shareAction(_ sender: UIButton) {
guard let url = URL(string: "https://www.ibm.com/support/knowledgecenter/SVU13_7.2.1/com.ibm.ismsaas.doc/reference/AssetsImportCompleteSample.csv?view=kc") else { return }
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else { return }
let tmpURL = FileManager.default.temporaryDirectory
.appendingPathComponent(response?.suggestedFilename ?? "fileName.csv")
do {
try data.write(to: tmpURL)
DispatchQueue.main.async {
self.share(url: tmpURL)
}
} catch {
print(error)
}
}.resume()
}
}
extension URL {
var typeIdentifier: String? {
return (try? resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier
}
var localizedName: String? {
return (try? resourceValues(forKeys: [.localizedNameKey]))?.localizedName
}
}
Tengo un archivo XML en mi proyecto Xcode, y estoy intentando guardarlo primero en el disco, y en segundo lugar, ¿cómo puedo saber si lo he guardado correctamente? ¿Es este el enfoque adecuado? Utilizando el simulador, navegué a la nueva carpeta "Archivos" en iOS 11 y no lo veo, pero no estoy seguro de si debería estar allí o no.
guard let path = Bundle.main.url(forResource: "sample", withExtension: "xml") else {print("NO URL"); return}
let sample = try? Data(contentsOf: path)
print("sample XML = /(String(describing: sample?.debugDescription))")
//put xml file on the device
let filename = getDocumentsDirectory().appendingPathComponent("sample.xml")
do {
try sample?.write(to: filename)
} catch {
print("ERROR")
}
actualizado para incluir mi verificación si el archivo existe:
//check if file exists
let checkPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = URL(fileURLWithPath: checkPath)
let filePath = url.appendingPathComponent("sample.xml").path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath) {
print("FILE AVAILABLE")
} else {
print("FILE NOT AVAILABLE")
}