Swift-код работает на игровой площадке, но не в проекте - PullRequest
0 голосов
/ 17 июня 2020

Я протестировал некоторый код на игровой площадке, и он работает так, как я ожидал.

Я создал чрезвычайно базовый c (одна функция, одна кнопка, одно текстовое поле) проект для тестирования кода и не работает - фактически зависает (пляжный мяч).

Что могло вызвать это? И игровая площадка, и проект импортируют Cocoa и Foundation.

Код ниже.

Кажется, что на этой строке зависает:

let data = pipe.fileHandleForReading.readDataToEndOfFile()

Вот код как написано на детской площадке (и скопировано в проект):

import Cocoa
import Foundation




// *** Getting exiftool version number

func exiftoolVersion() -> String {

    let task = Process()
    let pipe = Pipe()

    task.standardOutput = pipe
    task.arguments = ["-ver"]
    task.executableURL = URL(fileURLWithPath: "/usr/local/bin/exiftool")
    do {
        try task.run()
        task.waitUntilExit()
    }
    catch {

    }

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    var output = String(data: data, encoding: .utf8)!

    output = output.filter { !$0.isWhitespace }
    return output
}

1 Ответ

0 голосов
/ 17 июня 2020

Я знаю, что единственный способ решить вашу проблему - это добавить go к вашему .entitlements файлу и отключить песочницу приложения, установив значение false, как показано ниже.

    <key>com.apple.security.app-sandbox</key>
    <false/>

Это связано с тем, что в изолированном режиме вам не разрешено запускать внешнюю программу.

Изменить: поскольку это не сработало для вас, можете ли вы попробовать заменить catch {} на

        catch {
            print(error)
        }

и посмотреть, что / есть ли ошибка?

...