@@ -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