Мой главный вопрос касается сохранения скриншота из приложения AppleTV с использованием XCTest и Swift4 (работающего на MacBook в паре с телевизионным устройством), но у меня возникают проблемы даже при записи простой текстовой строки в локальный файл.Если я смогу заставить работать этот простой файл-сохранить, я надеюсь, что смогу решить проблему со скриншотом.(Прошу прощения за то, что это выглядит как два вопроса, но они, похоже, связаны между собой и являются результатом моих усилий по устранению неполадок.)
Во-первых, вот что я пытаюсь сделать со скриншотом на основе примера кода, который я где-то нашелонлайн:
let appshot = XCUIApplication().windows.firstMatch.screenshot()
let shotpath = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask)[0].appendingPathComponent("appshot.png")
let shotpathUrl = URL(string: "file://\(shotpath)")
print("Saving to: \(shotpath)")
do {
try appshot.pngRepresentation.write(to: shotpathUrl!)
} catch {
print("Failed saving screenshot due to \(error)")
}
Это дает мне следующий вывод:
Saving to: file:///var/mobile/Containers/Data/Application/77D52C66-353B-4029-97D5-48E6BAE35C92/Downloads/appshot.png
Failed saving screenshot due to Error Domain=NSCocoaErrorDomain Code=4 "The file “appshot.png” doesn’t exist." UserInfo={NSFilePath=///var/mobile/Containers/Data/Application/77D52C66-353B-4029-97D5-48E6BAE35C92/Downloads/appshot.png, NSUnderlyingError=0x1c405bc60 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
Конечно, файл не существует, потому что это файл, который я пытаюсь создать.Но / var / mobile также не существует на моем ноутбуке - похоже, путь, который FileManager создает, может существовать на устройстве AppleTV, но я хочу его на моем ноутбуке, где выполняется мой тестовый сценарий.
Поэтому я отступил к гораздо более простому случаю, и даже это вызывает у меня проблемы:
let str = "This is a test"
let path = "file:///Users/haljor/foo.txt"
let pathUrl = URL(string: path)!
print("Path: \(path)")
print("URL: \(pathUrl)")
do {
try str.write(to: pathUrl, atomically: true, encoding: .utf8)
} catch {
print("Caught error writing to \(pathUrl): \(error)")
}
И вот вывод:
Path: file:///Users/haljor/foo.txt
URL: file:///Users/haljor/foo.txt
Caught error writing to file:///Users/haljor/foo.txt: Error Domain=NSCocoaErrorDomain Code=4 "The folder “foo.txt” doesn’t exist." UserInfo={NSURL=file:///Users/haljor/foo.txt, NSUserStringVariant=Folder, NSUnderlyingError=0x1c40553f0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
Здесь, похоже, он пытаетсяПишите в папку по указанному мною пути, а не в файл.Ясно, что есть что-то, чего я не понимаю в каждом из этих случаев.
У меня нет особых предпочтений относительно того, использую ли я полностью заданный путь или что-то еще с помощью FileManager - он просто должен приземлиться где-нибудь на моем ноутбуке (не на устройстве ТВ).Чего мне не хватает?