Skip to content

Commit a93f6e3

Browse files
authored
Merge pull request #30 from kmatzen/fix/crash-reporter-bugs
Fix CrashReporter date decoding mismatch and force unwraps
2 parents 50dbfaa + 5f8aa4d commit a93f6e3

1 file changed

Lines changed: 30 additions & 28 deletions

File tree

Facett/CrashReporter.swift

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@ class CrashReporter: NSObject {
1111
private var bugReports: [BugReport] = []
1212

1313
// File paths for storing reports
14-
private var crashLogsPath: URL {
15-
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
16-
.appendingPathComponent("crash_logs.json")
14+
private var documentsDirectory: URL? {
15+
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
1716
}
1817

19-
private var bugReportsPath: URL {
20-
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
21-
.appendingPathComponent("bug_reports.json")
18+
private var crashLogsPath: URL? {
19+
documentsDirectory?.appendingPathComponent("crash_logs.json")
20+
}
21+
22+
private var bugReportsPath: URL? {
23+
documentsDirectory?.appendingPathComponent("bug_reports.json")
2224
}
2325

2426
override init() {
@@ -168,29 +170,25 @@ class CrashReporter: NSObject {
168170
}
169171

170172
private func saveErrorLog(_ errorLog: ErrorLog) {
171-
// Save to file system
172173
let encoder = JSONEncoder()
173174
encoder.dateEncodingStrategy = .iso8601
174175

175-
if let data = try? encoder.encode(errorLog) {
176+
if let data = try? encoder.encode(errorLog),
177+
let dir = documentsDirectory {
176178
let filename = "error_\(Date().timeIntervalSince1970).json"
177-
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
178-
.appendingPathComponent(filename)
179-
179+
let fileURL = dir.appendingPathComponent(filename)
180180
try? data.write(to: fileURL)
181181
}
182182
}
183183

184184
private func saveWarningLog(_ warningLog: WarningLog) {
185-
// Save to file system
186185
let encoder = JSONEncoder()
187186
encoder.dateEncodingStrategy = .iso8601
188187

189-
if let data = try? encoder.encode(warningLog) {
188+
if let data = try? encoder.encode(warningLog),
189+
let dir = documentsDirectory {
190190
let filename = "warning_\(Date().timeIntervalSince1970).json"
191-
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
192-
.appendingPathComponent(filename)
193-
191+
let fileURL = dir.appendingPathComponent(filename)
194192
try? data.write(to: fileURL)
195193
}
196194
}
@@ -199,30 +197,35 @@ class CrashReporter: NSObject {
199197
let encoder = JSONEncoder()
200198
encoder.dateEncodingStrategy = .iso8601
201199

202-
if let data = try? encoder.encode(crashLogs) {
203-
try? data.write(to: crashLogsPath)
200+
if let data = try? encoder.encode(crashLogs),
201+
let path = crashLogsPath {
202+
try? data.write(to: path)
204203
}
205204
}
206205

207206
private func saveBugReports() {
208207
let encoder = JSONEncoder()
209208
encoder.dateEncodingStrategy = .iso8601
210209

211-
if let data = try? encoder.encode(bugReports) {
212-
try? data.write(to: bugReportsPath)
210+
if let data = try? encoder.encode(bugReports),
211+
let path = bugReportsPath {
212+
try? data.write(to: path)
213213
}
214214
}
215215

216216
private func loadExistingReports() {
217-
// Load crash logs
218-
if let data = try? Data(contentsOf: crashLogsPath),
219-
let logs = try? JSONDecoder().decode([CrashLog].self, from: data) {
217+
let decoder = JSONDecoder()
218+
decoder.dateDecodingStrategy = .iso8601
219+
220+
if let path = crashLogsPath,
221+
let data = try? Data(contentsOf: path),
222+
let logs = try? decoder.decode([CrashLog].self, from: data) {
220223
crashLogs = logs
221224
}
222225

223-
// Load bug reports
224-
if let data = try? Data(contentsOf: bugReportsPath),
225-
let reports = try? JSONDecoder().decode([BugReport].self, from: data) {
226+
if let path = bugReportsPath,
227+
let data = try? Data(contentsOf: path),
228+
let reports = try? decoder.decode([BugReport].self, from: data) {
226229
bugReports = reports
227230
}
228231
}
@@ -247,8 +250,7 @@ class CrashReporter: NSObject {
247250
saveCrashLogs()
248251
saveBugReports()
249252

250-
// Clear individual log files
251-
let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
253+
guard let documentsPath = documentsDirectory else { return }
252254
let files = try? FileManager.default.contentsOfDirectory(at: documentsPath, includingPropertiesForKeys: nil)
253255

254256
files?.forEach { file in

0 commit comments

Comments
 (0)