iOS Swift: записывайте распечатки и отлаживайте распечатки в файл - PullRequest
0 голосов
/ 20 ноября 2018

Вечером, возможно ли сохранить в файле все отпечатки и отладочные отпечатки?

Я хотел бы иметь журналы того, что делает мое приложение, даже когда оно не запускается из Xcode.

Я думал переопределить методы print и debugPrint и записать ввод в файл.

Спасибо

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

В стандартной библиотеке Swift есть методы:

func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream

и

func debugPrint<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream

Вы можете создать объект, реализующий TextOutputStream, который сохранит сообщение в файл вашеговыбор.Это очень полезно, если у вас уже есть отпечатки в базе кода.Затем вы можете просто добавить к ним дополнительный параметр.Помните, что эти распечатки прекратят запись в стандартный вывод (консоль).

Документация для печати

Документация для debugPrint

Пример:

final class LogDestination: TextOutputStream {
  private let path: String
  init() {
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    path = paths.first! + "/log"
  }

  func write(_ string: String) {
    if let data = string.data(using: .utf8), let fileHandle = FileHandle(forWritingAtPath: path) {
      defer {
        fileHandle.closeFile()
      }
      fileHandle.seekToEndOfFile()
      fileHandle.write(data)
    }
  }
}

А потом

// I would probably use Singleton for this
var dest = LogDestination()
print("My test message", to: &dest)
0 голосов
/ 20 ноября 2018

Я думаю, вы хотите, чтобы ваши журналы во внешний файл.Если это так, то вы можете попробовать это:

func redirectLogs(flag:Bool)  {
    if flag {
        if let documentsPathString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
            let logPath = documentsPathString.appending("app.log")
            freopen(logPath.cString(using: String.Encoding.ascii), "a+",stderr)
        }
    }
}
0 голосов
/ 20 ноября 2018

Возможно записать все журналы print / debugPrint в файл в iOS.Используйте ниже для записи журналов отладки в файлы.

Примечание : при использовании приведенного ниже кода журналы не будут печататься на консоли.

func writeIntoFile() {
    if let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
        let filePath = documentDirectoryPath + "/logfile.txt"
        freopen(filePath.cString(using: .ascii), "a", stderr)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...