Когда я подключаю свой iPad к MacBook, я могу получить журналы сбоев устройства (файлы *.ips
) в Xcode из
/Users/myuser/Library/Developer/Xcode/DeviceLogs/myipad
Кажется, я смог бы получить эти же файлы из кода на iPad с помощью FileManager
, но я не знаю, где они живут.
Я осмотрелся со следующим:
let LogDirAttempt = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("../")
let fm = FileManager.default
do {
let items = try fm.contentsOfDirectory(at: LogDirAttempt, includingPropertiesForKeys: .none)
for item in items {
print("Found \(item)")
}
} catch{
print("ERROR")
}
Вы можете получить их из кода с помощью import MetricKit
при начале инициализации MetricKitManager()
. Я могу публиковать отчеты о сбоях на своем сервере, используя методы didReceive
(см. ниже). Когда я тестировал это, приложение нужно было установить на мое устройство на некоторое время (возможно, час), прежде чем Metric Kit стал активным и начал получать отчеты о сбоях в виде строк в формате base64 при запуске приложения после предыдущего сбоя.
Обратите внимание, что сбои, обнаруженные xcode, не принимаются Metric Kit, а сбои в симуляторе не принимаются Metric Kit, поэтому вам необходимо запустить приложение со своего устройства и выполнить сбой для тестирования.
@available(iOS 14.0, *)
class MetricKitManager: NSObject, MXMetricManagerSubscriber {
public override init() {
super.init()
let metricManager = MXMetricManager.shared
metricManager.add(self)
}
func receiveReports() {
let shared = MXMetricManager.shared
shared.add(self)
}
func pauseReports() {
let shared = MXMetricManager.shared
shared.remove(self)
}
func didReceive(_ payloads: [MXMetricPayload]) {
var attachments: [String] = []
for payload in payloads {
let attachment = payload.jsonRepresentation().base64EncodedString()
attachments.append(attachment)
SubmitFeedback(eid: Employee.eid ?? "", message: attachment)
}
}
func didReceive(_ payloads: [MXDiagnosticPayload]) {
var attachments: [String] = []
for payload in payloads {
let attachment = payload.jsonRepresentation().base64EncodedString()
attachments.append(attachment)
SubmitFeedback(eid: Employee.eid ?? "", message: attachment)
}
}
}