Использование XCode (11.4.1) на Catalina (10.15.4, только обновляется с Mojave 5 дней go), с крошечным SPM-проектом, открытым в XCode в «режиме папки» (т. Е. Не фактическим *) 1001 *), у меня есть тест, который должен прочитать некоторые входные данные из файла примера. Следующие рекомендации по созданию URL-адресов для этих файлов , Data(contentsOf:)
не могут его прочитать, хотя сгенерированный URL-адрес правильный.
Код:
func testCanReadConfigFromFile() {
let thisDirectory = URL(fileURLWithPath: #file)
.deletingLastPathComponent()
let url = thisDirectory
.appendingPathComponent("Test_data", isDirectory: true)
.appendingPathComponent("Config.json", isDirectory: false)
print(url.absoluteString)
do {
let _ = try Data(contentsOf: url)
} catch let error {
print(error)
print(error.localizedDescription)
}
}
исключение:
Error Domain=NSCocoaErrorDomain Code=256 "The file “Config.json” couldn’t be opened."
UserInfo={NSFilePath=/full/path/to/project/Tests/ProjectTests/Test_data/Config.json,
NSUnderlyingError=0x100b0aa30
{Error Domain=NSPOSIXErrorDomain Code=4 "Interrupted system call"}}
Если я беру строку, выводимую print(url.absoluteString)
, и в терминале выполняю file <absoulteString>
, это подтверждает, что мой файл существует по этому пути (и это JSON) .
«Прерванный системный вызов» заставляет меня думать, что виноваты более строгие правила «песочницы» Каталины, но мне не было показано диалоговое окно с разрешениями. Этот проект находится в моей папке ~ / Documents, которую Xcode имеет разрешение на чтение.
Отредактировано, чтобы добавить:
swift test
в командной строке работает. Это только запуск тестов в XCode, который обнаруживает проблему.