Эта строка не может работать
var documentPath:URL = URL(string: documentsPath)!
URL(string
для строк URL, включая схему (file://
или https://
), для путей к файловой системе, которые вы должен использовать URL(fileURLWithPath
.
Однако, если вы используете API, связанный с URL-адресом FileManager
, вы вообще можете избежать использования метода init
.
Аналогичная проблема - absoluteString
, никогда не вызывайте ее по URL-адресу файловой системы, используйтевсегда path
.
Вторая фатальная проблема заключается в том, что каждый аргумент оболочки должен быть элементом в массиве arguments
, а исполняемый файл должен быть указан с полным путем
//create script
let scriptArguments = ["/path/to/pandoc", "-s", "-o", newPath, fileURL.path]
//set storage path
let documentsURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let scriptURL = documentsURL.appendingPathComponent("pandoc.sh")
.следующие строки являются избыточными
var myURLComponents = URLComponents()
myURLComponents.scheme = "file"
myURLComponents.path = documentPath.absoluteString
Запись строки в scriptURL
do {
//write file
try strScript.write(to: scriptURL, atomically: true, encoding: .utf8)
...
myTask.arguments = scriptArguments
И, наконец, неиспользуйте NS...
классы в Swift
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
Используйте native
эквивалент
let output = String(data: data, encoding: .utf8)