¿Cómo ejecutar un binario incrustado en la aplicación SwiftUI para Mac?

Aug 19 2020

Estoy tratando de desarrollar un validador XML realmente simple basado en XIDEL.

Aquí está mi código SwiftUI hasta ahora, que ejecuta el binario XIDEL incrustado, pero no puedo averiguar cómo pasar XML que debería ser validado. Mi objetivo es seleccionar un archivo XML de mi computadora y mostrar los resultados de XIDEL en una vista de contenido dentro de mi aplicación.

struct ContentView: View {

@State var message = "Hello, World!"
@State var isRunning = false

var body: some View {
    VStack {
        Text("XML Validator")
            .font(.largeTitle)
            .padding()
        HStack {
            TextField("Message", text: $message)
                .padding(.leading)
            Button(action: {

                let task = Process()
                let bundle = Bundle.main
                let execURL = bundle.url(forResource: "xidel", withExtension: nil)
                guard execURL != nil else {
                    print("XIDEL executable could not be found!")
                    return
                }
                task.executableURL = execURL!
                task.arguments = ["-e=//recipe/flavor1/text() my.xml"]
                do {
                    try task.run()
                    print("XIDEL executed successfully!")
                    self.isRunning = true
                } catch {
                    print("Error running XIDEL: \(error)")
                    self.isRunning = false
                }
                                    
            }) {
                Text("Validate")
            }.disabled(isRunning)
                .padding(.trailing)
        }
    }.frame(maxWidth: .infinity, maxHeight: .infinity)
}

}

Respuestas

1 Asperi Aug 19 2020 at 18:05

Prueba lo siguiente

    guard let path = Bundle.main.path(forResource: "my", ofType: "xml") else {
       print("my.xml could not be found!")
       return 
    }
    task.arguments = ["-e=//recipe/flavor1/text()", path]