From 74d76c2271d081f5982b0d3d6a1bbf63dd0c49b2 Mon Sep 17 00:00:00 2001 From: melekr Date: Tue, 22 Apr 2025 22:44:41 -0400 Subject: [PATCH 1/5] Update Example App and add CustomDirectoryBacktraceClientTests --- Backtrace.xcodeproj/project.pbxproj | 416 +++++++++--------- Examples/Example-iOS/AppDelegate.swift | 123 ++++-- Podfile.lock | 4 +- .../CustomDirectoryBacktraceClientTests.swift | 84 ++++ 4 files changed, 385 insertions(+), 242 deletions(-) create mode 100644 Tests/CustomDirectoryBacktraceClientTests.swift diff --git a/Backtrace.xcodeproj/project.pbxproj b/Backtrace.xcodeproj/project.pbxproj index e53afc10..751511ba 100644 --- a/Backtrace.xcodeproj/project.pbxproj +++ b/Backtrace.xcodeproj/project.pbxproj @@ -7,10 +7,10 @@ objects = { /* Begin PBXBuildFile section */ + 0512FA45AC124F3DB90B0DE7 /* Pods_Backtrace_tvOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B9288E0E4E5D01140EBC0DD /* Pods_Backtrace_tvOSTests.framework */; }; 0B6B4CFD25CD8331002DA15C /* BacktraceOomWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B6B4CFC25CD8331002DA15C /* BacktraceOomWatcher.swift */; }; 0B6B4CFE25CD8331002DA15C /* BacktraceOomWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B6B4CFC25CD8331002DA15C /* BacktraceOomWatcher.swift */; }; 0B6B4CFF25CD8331002DA15C /* BacktraceOomWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B6B4CFC25CD8331002DA15C /* BacktraceOomWatcher.swift */; }; - 17FBEF33B4981AC198E2A5C5 /* Pods_Backtrace_iOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE42C17AAA889061766C6313 /* Pods_Backtrace_iOSTests.framework */; }; 2046B45B2C46FA1100A927DB /* Model.xcdatamodeld in Resources */ = {isa = PBXBuildFile; fileRef = F2AB639A22479A3200939BC9 /* Model.xcdatamodeld */; }; 2046B45C2C46FA5600A927DB /* BacktraceResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2046B4552C46F97800A927DB /* BacktraceResources.bundle */; }; 2046B45F2C46FCE500A927DB /* BacktraceResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2046B4552C46F97800A927DB /* BacktraceResources.bundle */; }; @@ -25,12 +25,16 @@ 2062D9C92C457B4500E4CE3C /* Crash+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2062D9C52C457B4500E4CE3C /* Crash+CoreDataProperties.swift */; }; 2062D9CA2C457B4500E4CE3C /* Crash+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2062D9C42C457B4500E4CE3C /* Crash+CoreDataClass.swift */; }; 2062D9CB2C457B4500E4CE3C /* Crash+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2062D9C52C457B4500E4CE3C /* Crash+CoreDataProperties.swift */; }; + 20B01A4B2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20B01A4A2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift */; }; + 20B01A4C2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20B01A4A2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift */; }; + 20B01A4D2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20B01A4A2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift */; }; 20DE4B342D4830D80076B3F6 /* NSManagedObjectContext+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DE4B332D4830D00076B3F6 /* NSManagedObjectContext+Extensions.swift */; }; 20DE4B352D4830D80076B3F6 /* NSManagedObjectContext+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DE4B332D4830D00076B3F6 /* NSManagedObjectContext+Extensions.swift */; }; 20DE4B362D4830D80076B3F6 /* NSManagedObjectContext+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DE4B332D4830D00076B3F6 /* NSManagedObjectContext+Extensions.swift */; }; 20DE4B382D48616A0076B3F6 /* NSManagedObjectContextExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DE4B372D48615C0076B3F6 /* NSManagedObjectContextExtensionTests.swift */; }; 20DE4B392D48616A0076B3F6 /* NSManagedObjectContextExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DE4B372D48615C0076B3F6 /* NSManagedObjectContextExtensionTests.swift */; }; 20DE4B3A2D48616A0076B3F6 /* NSManagedObjectContextExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DE4B372D48615C0076B3F6 /* NSManagedObjectContextExtensionTests.swift */; }; + 228764ABB0EC152A6F761F51 /* Pods_Backtrace_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 566633D47E8BA4D8F29F84F2 /* Pods_Backtrace_tvOS.framework */; }; 282C85E7223FD8E70014FE75 /* BacktraceCrashExceptionApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 282C85E6223FD8E70014FE75 /* BacktraceCrashExceptionApplication.swift */; }; 2846E1F8222F1DE60035F98C /* NetworkReachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2846E1F7222F1DE50035F98C /* NetworkReachability.swift */; }; 2846E1F9222F1DE60035F98C /* NetworkReachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2846E1F7222F1DE50035F98C /* NetworkReachability.swift */; }; @@ -87,12 +91,12 @@ 28F95BEC225260C9003936E0 /* AttributesStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28966EF92214BBD200E6E891 /* AttributesStorage.swift */; }; 28F95BED225260D3003936E0 /* AttributesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F259E4E12229C29A00F282C7 /* AttributesProvider.swift */; }; 28F95BEE225260D5003936E0 /* NetworkReachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2846E1F7222F1DE50035F98C /* NetworkReachability.swift */; }; - 2D1D06FAACD48C84129B2D59 /* Pods_Example_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36ECEC425F8F3327C37C1F59 /* Pods_Example_tvOS.framework */; }; + 44525FF5BF66CF1FFA3D9291 /* Pods_Example_iOS_ObjC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 869524D4A8FF0EC74D1D970B /* Pods_Example_iOS_ObjC.framework */; }; 4B947DBB2A055CA3000FAB59 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B947DBA2A055CA3000FAB59 /* Queue.swift */; }; 4B947DBC2A055CA3000FAB59 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B947DBA2A055CA3000FAB59 /* Queue.swift */; }; 4B947DBE2A055D21000FAB59 /* BreadcrumbRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B947DBD2A055D21000FAB59 /* BreadcrumbRecord.swift */; }; 4B947DBF2A055D21000FAB59 /* BreadcrumbRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B947DBD2A055D21000FAB59 /* BreadcrumbRecord.swift */; }; - 4C480376384811737377B65F /* Pods_Backtrace_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C1FE4B8FD1AF4C449ED1133 /* Pods_Backtrace_macOS.framework */; }; + 617C8AA5CF90E5389DCB0AE2 /* Pods_Example_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63638D5E71B550671C9CD801 /* Pods_Example_tvOS.framework */; }; 6E45A3A7273095E500DB0BAC /* BacktraceMetricsSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E45A3A6273095E500DB0BAC /* BacktraceMetricsSettings.swift */; }; 6E45A3A8273095E500DB0BAC /* BacktraceMetricsSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E45A3A6273095E500DB0BAC /* BacktraceMetricsSettings.swift */; }; 6E45A3A9273095E500DB0BAC /* BacktraceMetricsSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E45A3A6273095E500DB0BAC /* BacktraceMetricsSettings.swift */; }; @@ -126,8 +130,7 @@ 6EB713F8276294160075D1C1 /* MetricsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB713F7276294160075D1C1 /* MetricsRequest.swift */; }; 6EB713F9276294160075D1C1 /* MetricsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB713F7276294160075D1C1 /* MetricsRequest.swift */; }; 6EB713FA276294160075D1C1 /* MetricsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB713F7276294160075D1C1 /* MetricsRequest.swift */; }; - 8556B5D9705836593FC08552 /* Pods_Backtrace_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F61D37E90FC0BDFF5071866E /* Pods_Backtrace_tvOS.framework */; }; - 862E3B67B0F002247C72B451 /* Pods_Example_iOS_ObjC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD28556196F4A705A6D4FD35 /* Pods_Example_iOS_ObjC.framework */; }; + 88DA2AF027839D79F3EB446A /* Pods_Backtrace_iOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CED5613A06DF2B963D4DCE34 /* Pods_Backtrace_iOSTests.framework */; }; A24A4B5728B595D9004F5052 /* BacktraceMetricsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A24A4B4828B595D8004F5052 /* BacktraceMetricsTest.swift */; }; A24A4B5828B595D9004F5052 /* BacktraceMetricsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A24A4B4828B595D8004F5052 /* BacktraceMetricsTest.swift */; }; A24A4B5928B595D9004F5052 /* BacktraceMetricsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A24A4B4828B595D8004F5052 /* BacktraceMetricsTest.swift */; }; @@ -183,7 +186,6 @@ A24A4B9328B59653004F5052 /* BacktraceNotificationObserverMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = A24A4B9028B59653004F5052 /* BacktraceNotificationObserverMock.swift */; }; A24A4B9428B59768004F5052 /* BacktraceBreadcrumbsLogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28A652EB285C6C1500306631 /* BacktraceBreadcrumbsLogManager.swift */; }; A24A4B9628B59789004F5052 /* BacktraceBreadcrumbFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28A652E9285C6C1400306631 /* BacktraceBreadcrumbFile.swift */; }; - A68D97A397E6F33DE76E74CC /* Pods_Example_macOS_ObjC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B55842D20F5714BBCAC1CA70 /* Pods_Example_macOS_ObjC.framework */; }; AF5AB03A26261A4E0003698C /* AttachmentsStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF7833BA2613D1B400530A10 /* AttachmentsStorage.swift */; }; AF5AB04726261A760003698C /* AttachmentBookmarkHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCCCEC126260BC400B83A28 /* AttachmentBookmarkHandler.swift */; }; AF5AB05526261BDD0003698C /* AttachmentBookmarkHandlerMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF5AB05426261BDD0003698C /* AttachmentBookmarkHandlerMock.swift */; }; @@ -199,9 +201,10 @@ AFCCCE232625392300B83A28 /* ReportMetadataStorageMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCCCE222625392300B83A28 /* ReportMetadataStorageMock.swift */; }; AFCCCE242625392300B83A28 /* ReportMetadataStorageMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCCCE222625392300B83A28 /* ReportMetadataStorageMock.swift */; }; AFCCCE252625392300B83A28 /* ReportMetadataStorageMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCCCE222625392300B83A28 /* ReportMetadataStorageMock.swift */; }; - C7C674988265A05271D3415F /* Pods_Backtrace_macOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEE9165B520FB586340D398B /* Pods_Backtrace_macOSTests.framework */; }; - C9426615FF5E45E92A61BE6B /* Pods_Backtrace_tvOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0B5F559B3F9C5070DE2DCCF /* Pods_Backtrace_tvOSTests.framework */; }; - DBE3128686636B65F735FEEF /* Pods_Backtrace_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2894981C2D4DC714898BBB1 /* Pods_Backtrace_iOS.framework */; }; + B818CA7A08DFA393D3C07659 /* Pods_Backtrace_macOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04A0D026E4AA3ADF20D0B274 /* Pods_Backtrace_macOSTests.framework */; }; + C2AE1782033BEBBCDBC23DBF /* Pods_Example_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0D88FE2821C3575D9DF97C5 /* Pods_Example_iOS.framework */; }; + C787497131553D6EE7218C58 /* Pods_Backtrace_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAAAA8AA815B95F7A94B95CB /* Pods_Backtrace_macOS.framework */; }; + C7E0847F568D2802D3227D31 /* Pods_Example_macOS_ObjC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AF9B07F1AF0F58B2AD3CF3B /* Pods_Example_macOS_ObjC.framework */; }; F21211A5222348AC000B3692 /* BacktraceCrashReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F21211A4222348AC000B3692 /* BacktraceCrashReporter.swift */; }; F21211A6222348AC000B3692 /* BacktraceCrashReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F21211A4222348AC000B3692 /* BacktraceCrashReporter.swift */; }; F21211A8222348C2000B3692 /* SignalContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F21211A7222348C2000B3692 /* SignalContext.swift */; }; @@ -216,7 +219,6 @@ F21DD3B12255EA2A00404CC3 /* test.txt in Resources */ = {isa = PBXBuildFile; fileRef = F21DD3B02255EA2A00404CC3 /* test.txt */; }; F21DD3B22255EA2A00404CC3 /* test.txt in Resources */ = {isa = PBXBuildFile; fileRef = F21DD3B02255EA2A00404CC3 /* test.txt */; }; F21DD3B32255EA2A00404CC3 /* test.txt in Resources */ = {isa = PBXBuildFile; fileRef = F21DD3B02255EA2A00404CC3 /* test.txt */; }; - F225AE8512E50709F6BDDE3B /* Pods_Example_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CF35D8E7B65EE09F0E3982C /* Pods_Example_iOS.framework */; }; F229D78C223A591F008EC851 /* UrlSessionMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = F229D789223A56ED008EC851 /* UrlSessionMock.swift */; }; F229D78D223A5920008EC851 /* UrlSessionMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = F229D789223A56ED008EC851 /* UrlSessionMock.swift */; }; F22EB87721BBD36800DEE94E /* BacktraceClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = F22EB87621BBD36800DEE94E /* BacktraceClient.swift */; }; @@ -325,6 +327,7 @@ F2D8BE4B21BDA7D0007CFEFA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F2D8BE4A21BDA7D0007CFEFA /* Assets.xcassets */; }; F2D8BE4E21BDA7D0007CFEFA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F2D8BE4C21BDA7D0007CFEFA /* Main.storyboard */; }; F2D8BE5121BDA7D0007CFEFA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F2D8BE5021BDA7D0007CFEFA /* main.m */; }; + FB36E005C7AC5077BDCACB0D /* Pods_Backtrace_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB03492C6B793013659E3337 /* Pods_Backtrace_iOS.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -416,18 +419,21 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 037D6550B4724EB4F05F0774 /* Pods-Example-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS.release.xcconfig"; path = "Target Support Files/Pods-Example-iOS/Pods-Example-iOS.release.xcconfig"; sourceTree = ""; }; - 04C55AC90DC913E1DB190B57 /* Pods-Example-iOS-ObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS-ObjC.debug.xcconfig"; path = "Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC.debug.xcconfig"; sourceTree = ""; }; + 04A0D026E4AA3ADF20D0B274 /* Pods_Backtrace_macOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_macOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0B6B4CFC25CD8331002DA15C /* BacktraceOomWatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BacktraceOomWatcher.swift; sourceTree = ""; }; - 0E78E925890604A046A416BA /* Pods-Backtrace-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-macOS.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-macOS/Pods-Backtrace-macOS.release.xcconfig"; sourceTree = ""; }; + 0D8A0B80F40629AE4C666415 /* Pods-Backtrace-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-macOS.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-macOS/Pods-Backtrace-macOS.release.xcconfig"; sourceTree = ""; }; + 202B668E8F60B21AEDD500CF /* Pods-Example-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS.debug.xcconfig"; sourceTree = ""; }; 2046B4552C46F97800A927DB /* BacktraceResources.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BacktraceResources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 2050DB9C2C61A09D00C6CCA9 /* Example-iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Example-iOS.entitlements"; sourceTree = ""; }; 2050DBBE2C66D98500C6CCA9 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 2062D9C42C457B4500E4CE3C /* Crash+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Crash+CoreDataClass.swift"; sourceTree = ""; }; 2062D9C52C457B4500E4CE3C /* Crash+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Crash+CoreDataProperties.swift"; sourceTree = ""; }; + 20B01A4A2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomDirectoryBacktraceClientTests.swift; sourceTree = ""; }; 20D4E5F32CB46A41000C92BF /* BacktraceResources-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "BacktraceResources-Info.plist"; sourceTree = ""; }; 20DE4B332D4830D00076B3F6 /* NSManagedObjectContext+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Extensions.swift"; sourceTree = ""; }; 20DE4B372D48615C0076B3F6 /* NSManagedObjectContextExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSManagedObjectContextExtensionTests.swift; sourceTree = ""; }; + 22F135981150D5133F7FB608 /* Pods-Backtrace-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-iOS.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-iOS/Pods-Backtrace-iOS.debug.xcconfig"; sourceTree = ""; }; + 237733502AA96E545477B0A1 /* Pods-Backtrace-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-tvOS/Pods-Backtrace-tvOS.release.xcconfig"; sourceTree = ""; }; 282C85E6223FD8E70014FE75 /* BacktraceCrashExceptionApplication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BacktraceCrashExceptionApplication.swift; sourceTree = ""; }; 2846E1F7222F1DE50035F98C /* NetworkReachability.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkReachability.swift; sourceTree = ""; }; 2846E1FD223070CB0035F98C /* Attachment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Attachment.swift; sourceTree = ""; }; @@ -445,35 +451,36 @@ 28F95BB822525DCC003936E0 /* Backtrace-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Backtrace-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 28F95BBD22525DCC003936E0 /* Backtrace_tvOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Backtrace_tvOSTests.swift; sourceTree = ""; }; 28F95BBF22525DCC003936E0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2CF35D8E7B65EE09F0E3982C /* Pods_Example_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 36ECEC425F8F3327C37C1F59 /* Pods_Example_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3D6DBD2958FC7C95A508A2CF /* Pods-Example-macOS-ObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-macOS-ObjC.release.xcconfig"; path = "Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC.release.xcconfig"; sourceTree = ""; }; - 400175344F10D1AB39E97CBC /* Pods-Backtrace-iOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-iOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests.debug.xcconfig"; sourceTree = ""; }; - 4014972346CDB9143F7B57C9 /* Pods-Backtrace-macOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-macOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests.debug.xcconfig"; sourceTree = ""; }; + 38D7B56F1CF887D995B75EF8 /* Pods-Backtrace-macOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-macOSTests.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests.release.xcconfig"; sourceTree = ""; }; + 44EA57F7BD07B9FA61EB212B /* Pods-Backtrace-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-tvOS/Pods-Backtrace-tvOS.debug.xcconfig"; sourceTree = ""; }; + 4AF9B07F1AF0F58B2AD3CF3B /* Pods_Example_macOS_ObjC.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_macOS_ObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4B947DBA2A055CA3000FAB59 /* Queue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Queue.swift; sourceTree = ""; }; 4B947DBD2A055D21000FAB59 /* BreadcrumbRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreadcrumbRecord.swift; sourceTree = ""; }; - 4C1FE4B8FD1AF4C449ED1133 /* Pods_Backtrace_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 557C73F314ED9BC68CD99710 /* Pods-Backtrace-macOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-macOSTests.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests.release.xcconfig"; sourceTree = ""; }; - 559635099C43B2A8C8FB3E2E /* Pods-Example-iOS-ObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS-ObjC.release.xcconfig"; path = "Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC.release.xcconfig"; sourceTree = ""; }; - 5B2E658DD4FA5828A7383339 /* Pods-Backtrace-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-tvOS/Pods-Backtrace-tvOS.debug.xcconfig"; sourceTree = ""; }; - 5E37DA3F86EDF46AE4A6FD55 /* Pods-Backtrace-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-iOS.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-iOS/Pods-Backtrace-iOS.debug.xcconfig"; sourceTree = ""; }; - 638A1CADF7E8A6563C78C31C /* Pods-Example-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS.release.xcconfig"; sourceTree = ""; }; + 549BDDE38B86FC29939E59D2 /* Pods-Example-macOS-ObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-macOS-ObjC.debug.xcconfig"; path = "Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC.debug.xcconfig"; sourceTree = ""; }; + 566633D47E8BA4D8F29F84F2 /* Pods_Backtrace_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 63638D5E71B550671C9CD801 /* Pods_Example_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B31D402B6FE3C42F7535BC0 /* Pods-Backtrace-macOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-macOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests.debug.xcconfig"; sourceTree = ""; }; + 6B9288E0E4E5D01140EBC0DD /* Pods_Backtrace_tvOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_tvOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6DBE1FCB46F3AF48459B1B48 /* Pods-Backtrace-iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-iOSTests.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests.release.xcconfig"; sourceTree = ""; }; 6E45A3A6273095E500DB0BAC /* BacktraceMetricsSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BacktraceMetricsSettings.swift; sourceTree = ""; }; + 6E82B56FA4079E1601235818 /* Pods-Example-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS.release.xcconfig"; sourceTree = ""; }; 6E87F5EA2733174C00B90B07 /* Event.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; 6E87F5F2273325A800B90B07 /* UniqueEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniqueEvent.swift; sourceTree = ""; }; 6E87F5F6273332B400B90B07 /* SummedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummedEvent.swift; sourceTree = ""; }; 6E87F5FA27347A6E00B90B07 /* UniqueEventsPayload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniqueEventsPayload.swift; sourceTree = ""; }; 6E896E8927274A190005CDF2 /* BacktraceMetrics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BacktraceMetrics.swift; sourceTree = ""; }; 6E896E97272767080005CDF2 /* Payload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Payload.swift; sourceTree = ""; }; - 6EA442E045C5A9AADE7207D7 /* Pods-Example-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS.debug.xcconfig"; sourceTree = ""; }; 6EB713EB275ED4EF0075D1C1 /* SummedEventsPayload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummedEventsPayload.swift; sourceTree = ""; }; 6EB713EF276125760075D1C1 /* BacktraceMetricsSender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BacktraceMetricsSender.swift; sourceTree = ""; }; 6EB713F327617ED00075D1C1 /* BacktraceMetricsContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BacktraceMetricsContainer.swift; sourceTree = ""; }; 6EB713F7276294160075D1C1 /* MetricsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricsRequest.swift; sourceTree = ""; }; - 7161F22B650B5C3A47D7C4F7 /* Pods-Backtrace-iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-iOSTests.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests.release.xcconfig"; sourceTree = ""; }; - 7934AD125B26FB9A7FF5225A /* Pods-Backtrace-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests.release.xcconfig"; sourceTree = ""; }; - 79DE4E5AA2488ADC73D72F8D /* Pods-Example-macOS-ObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-macOS-ObjC.debug.xcconfig"; path = "Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC.debug.xcconfig"; sourceTree = ""; }; - 8AA7D23E1801210162B0B63C /* Pods-Example-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS.debug.xcconfig"; path = "Target Support Files/Pods-Example-iOS/Pods-Example-iOS.debug.xcconfig"; sourceTree = ""; }; + 7A9A25A10036FCEB0B73F1BD /* Pods-Example-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS.release.xcconfig"; path = "Target Support Files/Pods-Example-iOS/Pods-Example-iOS.release.xcconfig"; sourceTree = ""; }; + 7C8DE5DE446851BFED5767EC /* Pods-Backtrace-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests.release.xcconfig"; sourceTree = ""; }; + 7DE8749D21117C55DDE3B543 /* Pods-Example-macOS-ObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-macOS-ObjC.release.xcconfig"; path = "Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC.release.xcconfig"; sourceTree = ""; }; + 869524D4A8FF0EC74D1D970B /* Pods_Example_iOS_ObjC.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_iOS_ObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8707EC534471D4219A213C99 /* Pods-Example-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS.debug.xcconfig"; path = "Target Support Files/Pods-Example-iOS/Pods-Example-iOS.debug.xcconfig"; sourceTree = ""; }; + 9554BC617F7B373965A2094F /* Pods-Backtrace-iOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-iOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests.debug.xcconfig"; sourceTree = ""; }; + 98EC6E473C6F8695F1AEE4FA /* Pods-Backtrace-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-macOS.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-macOS/Pods-Backtrace-macOS.debug.xcconfig"; sourceTree = ""; }; A24A4B4828B595D8004F5052 /* BacktraceMetricsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BacktraceMetricsTest.swift; sourceTree = ""; }; A24A4B4928B595D8004F5052 /* BacktraceWatcherTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BacktraceWatcherTests.swift; sourceTree = ""; }; A24A4B4A28B595D8004F5052 /* BacktraceDatabaseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BacktraceDatabaseTests.swift; sourceTree = ""; }; @@ -493,20 +500,19 @@ A24A4B8828B5960E004F5052 /* BacktraceBreadcrumbs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BacktraceBreadcrumbs.swift; sourceTree = ""; }; A24A4B8C28B5961A004F5052 /* BacktraceBreadcrumbSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BacktraceBreadcrumbSettings.swift; sourceTree = ""; }; A24A4B9028B59653004F5052 /* BacktraceNotificationObserverMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BacktraceNotificationObserverMock.swift; sourceTree = ""; }; + A325AC11FD1F3638F2C1BD4B /* Pods-Example-iOS-ObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS-ObjC.release.xcconfig"; path = "Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC.release.xcconfig"; sourceTree = ""; }; + AA195E549AD37392CF95B9BB /* Pods-Backtrace-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests.debug.xcconfig"; sourceTree = ""; }; AF5AB05426261BDD0003698C /* AttachmentBookmarkHandlerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentBookmarkHandlerMock.swift; sourceTree = ""; }; AF7477582620C6B200DEE7D1 /* ReportMetadataStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportMetadataStorage.swift; sourceTree = ""; }; AF7833BA2613D1B400530A10 /* AttachmentsStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentsStorage.swift; sourceTree = ""; }; AFCCCE222625392300B83A28 /* ReportMetadataStorageMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportMetadataStorageMock.swift; sourceTree = ""; }; AFCCCEC126260BC400B83A28 /* AttachmentBookmarkHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentBookmarkHandler.swift; sourceTree = ""; }; - B2894981C2D4DC714898BBB1 /* Pods_Backtrace_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B55842D20F5714BBCAC1CA70 /* Pods_Example_macOS_ObjC.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_macOS_ObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8E3A63330AA85977C3A255E /* Pods-Backtrace-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests.debug.xcconfig"; sourceTree = ""; }; - CD28556196F4A705A6D4FD35 /* Pods_Example_iOS_ObjC.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_iOS_ObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CF0E6D0F08AAE9CB60192052 /* Pods-Backtrace-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-iOS.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-iOS/Pods-Backtrace-iOS.release.xcconfig"; sourceTree = ""; }; - DEE9165B520FB586340D398B /* Pods_Backtrace_macOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_macOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0B5F559B3F9C5070DE2DCCF /* Pods_Backtrace_tvOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_tvOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EA784170CE2484D66F12845A /* Pods-Backtrace-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-tvOS/Pods-Backtrace-tvOS.release.xcconfig"; sourceTree = ""; }; - EE42C17AAA889061766C6313 /* Pods_Backtrace_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_iOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0D88FE2821C3575D9DF97C5 /* Pods_Example_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4ED276BF50FF2F53E60BFE2 /* Pods-Backtrace-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-iOS.release.xcconfig"; path = "Target Support Files/Pods-Backtrace-iOS/Pods-Backtrace-iOS.release.xcconfig"; sourceTree = ""; }; + CAAAA8AA815B95F7A94B95CB /* Pods_Backtrace_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CED5613A06DF2B963D4DCE34 /* Pods_Backtrace_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_iOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E6818F67B2B11DBC266630FC /* Pods-Example-iOS-ObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS-ObjC.debug.xcconfig"; path = "Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC.debug.xcconfig"; sourceTree = ""; }; + EB03492C6B793013659E3337 /* Pods_Backtrace_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F21211A4222348AC000B3692 /* BacktraceCrashReporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BacktraceCrashReporter.swift; sourceTree = ""; }; F21211A7222348C2000B3692 /* SignalContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalContext.swift; sourceTree = ""; }; F21D302A224A18D50013B5D7 /* Store.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Store.swift; sourceTree = ""; }; @@ -597,8 +603,6 @@ F2D8BE4F21BDA7D0007CFEFA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F2D8BE5021BDA7D0007CFEFA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; F2D8BE5221BDA7D0007CFEFA /* Example_macOS_ObjC.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Example_macOS_ObjC.entitlements; sourceTree = ""; }; - F61D37E90FC0BDFF5071866E /* Pods_Backtrace_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Backtrace_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F972AA30EC889ADCC25E1C1F /* Pods-Backtrace-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Backtrace-macOS.debug.xcconfig"; path = "Target Support Files/Pods-Backtrace-macOS/Pods-Backtrace-macOS.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -613,7 +617,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8556B5D9705836593FC08552 /* Pods_Backtrace_tvOS.framework in Frameworks */, + 228764ABB0EC152A6F761F51 /* Pods_Backtrace_tvOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -621,7 +625,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C9426615FF5E45E92A61BE6B /* Pods_Backtrace_tvOSTests.framework in Frameworks */, + 0512FA45AC124F3DB90B0DE7 /* Pods_Backtrace_tvOSTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -629,7 +633,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4C480376384811737377B65F /* Pods_Backtrace_macOS.framework in Frameworks */, + C787497131553D6EE7218C58 /* Pods_Backtrace_macOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -637,7 +641,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C7C674988265A05271D3415F /* Pods_Backtrace_macOSTests.framework in Frameworks */, + B818CA7A08DFA393D3C07659 /* Pods_Backtrace_macOSTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -645,7 +649,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2D1D06FAACD48C84129B2D59 /* Pods_Example_tvOS.framework in Frameworks */, + 617C8AA5CF90E5389DCB0AE2 /* Pods_Example_tvOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -653,7 +657,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DBE3128686636B65F735FEEF /* Pods_Backtrace_iOS.framework in Frameworks */, + FB36E005C7AC5077BDCACB0D /* Pods_Backtrace_iOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -661,7 +665,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 17FBEF33B4981AC198E2A5C5 /* Pods_Backtrace_iOSTests.framework in Frameworks */, + 88DA2AF027839D79F3EB446A /* Pods_Backtrace_iOSTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -669,7 +673,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F225AE8512E50709F6BDDE3B /* Pods_Example_iOS.framework in Frameworks */, + C2AE1782033BEBBCDBC23DBF /* Pods_Example_iOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -677,7 +681,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 862E3B67B0F002247C72B451 /* Pods_Example_iOS_ObjC.framework in Frameworks */, + 44525FF5BF66CF1FFA3D9291 /* Pods_Example_iOS_ObjC.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -685,7 +689,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A68D97A397E6F33DE76E74CC /* Pods_Example_macOS_ObjC.framework in Frameworks */, + C7E0847F568D2802D3227D31 /* Pods_Example_macOS_ObjC.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -787,19 +791,19 @@ path = Model; sourceTree = ""; }; - C9AA6D00C0F2E6250F2BF95D /* Frameworks */ = { + BD1A6EA137CF923264D3C15E /* Frameworks */ = { isa = PBXGroup; children = ( - B2894981C2D4DC714898BBB1 /* Pods_Backtrace_iOS.framework */, - EE42C17AAA889061766C6313 /* Pods_Backtrace_iOSTests.framework */, - 4C1FE4B8FD1AF4C449ED1133 /* Pods_Backtrace_macOS.framework */, - DEE9165B520FB586340D398B /* Pods_Backtrace_macOSTests.framework */, - F61D37E90FC0BDFF5071866E /* Pods_Backtrace_tvOS.framework */, - E0B5F559B3F9C5070DE2DCCF /* Pods_Backtrace_tvOSTests.framework */, - 2CF35D8E7B65EE09F0E3982C /* Pods_Example_iOS.framework */, - CD28556196F4A705A6D4FD35 /* Pods_Example_iOS_ObjC.framework */, - B55842D20F5714BBCAC1CA70 /* Pods_Example_macOS_ObjC.framework */, - 36ECEC425F8F3327C37C1F59 /* Pods_Example_tvOS.framework */, + EB03492C6B793013659E3337 /* Pods_Backtrace_iOS.framework */, + CED5613A06DF2B963D4DCE34 /* Pods_Backtrace_iOSTests.framework */, + CAAAA8AA815B95F7A94B95CB /* Pods_Backtrace_macOS.framework */, + 04A0D026E4AA3ADF20D0B274 /* Pods_Backtrace_macOSTests.framework */, + 566633D47E8BA4D8F29F84F2 /* Pods_Backtrace_tvOS.framework */, + 6B9288E0E4E5D01140EBC0DD /* Pods_Backtrace_tvOSTests.framework */, + B0D88FE2821C3575D9DF97C5 /* Pods_Example_iOS.framework */, + 869524D4A8FF0EC74D1D970B /* Pods_Example_iOS_ObjC.framework */, + 4AF9B07F1AF0F58B2AD3CF3B /* Pods_Example_macOS_ObjC.framework */, + 63638D5E71B550671C9CD801 /* Pods_Example_tvOS.framework */, ); name = Frameworks; sourceTree = ""; @@ -807,26 +811,26 @@ E1CB76ADFD3A1D9326B4E46D /* Pods */ = { isa = PBXGroup; children = ( - 5E37DA3F86EDF46AE4A6FD55 /* Pods-Backtrace-iOS.debug.xcconfig */, - CF0E6D0F08AAE9CB60192052 /* Pods-Backtrace-iOS.release.xcconfig */, - 400175344F10D1AB39E97CBC /* Pods-Backtrace-iOSTests.debug.xcconfig */, - 7161F22B650B5C3A47D7C4F7 /* Pods-Backtrace-iOSTests.release.xcconfig */, - F972AA30EC889ADCC25E1C1F /* Pods-Backtrace-macOS.debug.xcconfig */, - 0E78E925890604A046A416BA /* Pods-Backtrace-macOS.release.xcconfig */, - 4014972346CDB9143F7B57C9 /* Pods-Backtrace-macOSTests.debug.xcconfig */, - 557C73F314ED9BC68CD99710 /* Pods-Backtrace-macOSTests.release.xcconfig */, - 5B2E658DD4FA5828A7383339 /* Pods-Backtrace-tvOS.debug.xcconfig */, - EA784170CE2484D66F12845A /* Pods-Backtrace-tvOS.release.xcconfig */, - C8E3A63330AA85977C3A255E /* Pods-Backtrace-tvOSTests.debug.xcconfig */, - 7934AD125B26FB9A7FF5225A /* Pods-Backtrace-tvOSTests.release.xcconfig */, - 8AA7D23E1801210162B0B63C /* Pods-Example-iOS.debug.xcconfig */, - 037D6550B4724EB4F05F0774 /* Pods-Example-iOS.release.xcconfig */, - 04C55AC90DC913E1DB190B57 /* Pods-Example-iOS-ObjC.debug.xcconfig */, - 559635099C43B2A8C8FB3E2E /* Pods-Example-iOS-ObjC.release.xcconfig */, - 79DE4E5AA2488ADC73D72F8D /* Pods-Example-macOS-ObjC.debug.xcconfig */, - 3D6DBD2958FC7C95A508A2CF /* Pods-Example-macOS-ObjC.release.xcconfig */, - 6EA442E045C5A9AADE7207D7 /* Pods-Example-tvOS.debug.xcconfig */, - 638A1CADF7E8A6563C78C31C /* Pods-Example-tvOS.release.xcconfig */, + 22F135981150D5133F7FB608 /* Pods-Backtrace-iOS.debug.xcconfig */, + C4ED276BF50FF2F53E60BFE2 /* Pods-Backtrace-iOS.release.xcconfig */, + 9554BC617F7B373965A2094F /* Pods-Backtrace-iOSTests.debug.xcconfig */, + 6DBE1FCB46F3AF48459B1B48 /* Pods-Backtrace-iOSTests.release.xcconfig */, + 98EC6E473C6F8695F1AEE4FA /* Pods-Backtrace-macOS.debug.xcconfig */, + 0D8A0B80F40629AE4C666415 /* Pods-Backtrace-macOS.release.xcconfig */, + 6B31D402B6FE3C42F7535BC0 /* Pods-Backtrace-macOSTests.debug.xcconfig */, + 38D7B56F1CF887D995B75EF8 /* Pods-Backtrace-macOSTests.release.xcconfig */, + 44EA57F7BD07B9FA61EB212B /* Pods-Backtrace-tvOS.debug.xcconfig */, + 237733502AA96E545477B0A1 /* Pods-Backtrace-tvOS.release.xcconfig */, + AA195E549AD37392CF95B9BB /* Pods-Backtrace-tvOSTests.debug.xcconfig */, + 7C8DE5DE446851BFED5767EC /* Pods-Backtrace-tvOSTests.release.xcconfig */, + 8707EC534471D4219A213C99 /* Pods-Example-iOS.debug.xcconfig */, + 7A9A25A10036FCEB0B73F1BD /* Pods-Example-iOS.release.xcconfig */, + E6818F67B2B11DBC266630FC /* Pods-Example-iOS-ObjC.debug.xcconfig */, + A325AC11FD1F3638F2C1BD4B /* Pods-Example-iOS-ObjC.release.xcconfig */, + 549BDDE38B86FC29939E59D2 /* Pods-Example-macOS-ObjC.debug.xcconfig */, + 7DE8749D21117C55DDE3B543 /* Pods-Example-macOS-ObjC.release.xcconfig */, + 202B668E8F60B21AEDD500CF /* Pods-Example-tvOS.debug.xcconfig */, + 6E82B56FA4079E1601235818 /* Pods-Example-tvOS.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -884,6 +888,7 @@ F266B85321C77D5D00D14417 /* Tests */ = { isa = PBXGroup; children = ( + 20B01A4A2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift */, 20DE4B372D48615C0076B3F6 /* NSManagedObjectContextExtensionTests.swift */, A24A4B5428B595D8004F5052 /* AttachmentStorageTests.swift */, A24A4B4F28B595D8004F5052 /* AttachmentTests.swift */, @@ -1089,7 +1094,7 @@ 28F95BBC22525DCC003936E0 /* Backtrace-tvOSTests */, F2C2FA5121BBD26300934744 /* Products */, E1CB76ADFD3A1D9326B4E46D /* Pods */, - C9AA6D00C0F2E6250F2BF95D /* Frameworks */, + BD1A6EA137CF923264D3C15E /* Frameworks */, ); sourceTree = ""; }; @@ -1244,7 +1249,7 @@ isa = PBXNativeTarget; buildConfigurationList = 28F95BC122525DCC003936E0 /* Build configuration list for PBXNativeTarget "Backtrace-tvOS" */; buildPhases = ( - 1AC2F744E60E2BDAA7282B3A /* [CP] Check Pods Manifest.lock */, + 027812341AF380A4ABB638FF /* [CP] Check Pods Manifest.lock */, 28F95BAB22525DCC003936E0 /* Headers */, 28F95BAC22525DCC003936E0 /* Sources */, 28F95BAD22525DCC003936E0 /* Frameworks */, @@ -1265,11 +1270,11 @@ isa = PBXNativeTarget; buildConfigurationList = 28F95BC422525DCC003936E0 /* Build configuration list for PBXNativeTarget "Backtrace-tvOSTests" */; buildPhases = ( - AC030A28CDD3537FE77F8ABC /* [CP] Check Pods Manifest.lock */, + 6AF195F1BFF6AAB7E989076A /* [CP] Check Pods Manifest.lock */, 28F95BB422525DCC003936E0 /* Sources */, 28F95BB522525DCC003936E0 /* Frameworks */, 28F95BB622525DCC003936E0 /* Resources */, - E75364CB7AFE3620C3044A9E /* [CP] Embed Pods Frameworks */, + D287E2302782469EDA6CE739 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -1285,7 +1290,7 @@ isa = PBXNativeTarget; buildConfigurationList = F266B82321C77AC800D14417 /* Build configuration list for PBXNativeTarget "Backtrace-macOS" */; buildPhases = ( - C9FFDFBE9B1DE5C7EABAAAE6 /* [CP] Check Pods Manifest.lock */, + 87AB83DC8CCC1BBAF6751476 /* [CP] Check Pods Manifest.lock */, F266B80D21C77AC800D14417 /* Headers */, F266B80E21C77AC800D14417 /* Sources */, F266B80F21C77AC800D14417 /* Frameworks */, @@ -1306,11 +1311,11 @@ isa = PBXNativeTarget; buildConfigurationList = F266B82621C77AC800D14417 /* Build configuration list for PBXNativeTarget "Backtrace-macOSTests" */; buildPhases = ( - 377781FC90BC6EA5E862C2BB /* [CP] Check Pods Manifest.lock */, + 0834C67A5C0547DA48B74ED2 /* [CP] Check Pods Manifest.lock */, F266B81621C77AC800D14417 /* Sources */, F266B81721C77AC800D14417 /* Frameworks */, F266B81821C77AC800D14417 /* Resources */, - C4700F99B4BDF71975FF61B7 /* [CP] Embed Pods Frameworks */, + 67CBC7E7582E29518FAAF728 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -1326,12 +1331,12 @@ isa = PBXNativeTarget; buildConfigurationList = F2A11C0522553C2A00354640 /* Build configuration list for PBXNativeTarget "Example-tvOS" */; buildPhases = ( - 8EFE07C5A17F22CAA406A797 /* [CP] Check Pods Manifest.lock */, + C548869835223929C5661858 /* [CP] Check Pods Manifest.lock */, F2A11BF322553C2800354640 /* Sources */, F2A11BF422553C2800354640 /* Frameworks */, F2A11BF522553C2800354640 /* Resources */, 28C74A2F226FBD7700CE713A /* Embed Frameworks */, - 6914068597A54B8F1876941E /* [CP] Copy Pods Resources */, + 2D3A108AA78FFAE2B107839E /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1346,7 +1351,7 @@ isa = PBXNativeTarget; buildConfigurationList = F2C2FA6221BBD26300934744 /* Build configuration list for PBXNativeTarget "Backtrace-iOS" */; buildPhases = ( - 7CE68EC82F38626CAD5A83D5 /* [CP] Check Pods Manifest.lock */, + C8CF01616607A511FC2161EF /* [CP] Check Pods Manifest.lock */, F2C2FA4B21BBD26300934744 /* Headers */, F2C2FA4C21BBD26300934744 /* Sources */, F2C2FA4D21BBD26300934744 /* Frameworks */, @@ -1367,11 +1372,11 @@ isa = PBXNativeTarget; buildConfigurationList = F2C2FA6521BBD26300934744 /* Build configuration list for PBXNativeTarget "Backtrace-iOSTests" */; buildPhases = ( - 050777E81C0FB8EF48CC70CA /* [CP] Check Pods Manifest.lock */, + 9556CBDEC7319AFF3D5868F7 /* [CP] Check Pods Manifest.lock */, F2C2FA5521BBD26300934744 /* Sources */, F2C2FA5621BBD26300934744 /* Frameworks */, F2C2FA5721BBD26300934744 /* Resources */, - EFABFCA43C47D5179DF3ED74 /* [CP] Embed Pods Frameworks */, + 11045ECA421E3E7992547252 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -1387,12 +1392,12 @@ isa = PBXNativeTarget; buildConfigurationList = F2D8BE1321BC065F007CFEFA /* Build configuration list for PBXNativeTarget "Example-iOS" */; buildPhases = ( - 9CCC130157A6E85E31DC6662 /* [CP] Check Pods Manifest.lock */, + 3495EE6590C7FC74DAF6EB8D /* [CP] Check Pods Manifest.lock */, F2D8BE0021BC065E007CFEFA /* Sources */, F2D8BE0121BC065E007CFEFA /* Frameworks */, F2D8BE0221BC065E007CFEFA /* Resources */, F2D7122821F11303002D2A26 /* Embed Frameworks */, - 9F14FD19D9E32B9F6126D063 /* [CP] Copy Pods Resources */, + A5CF64682A8DC21C75C6AB1E /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1407,12 +1412,12 @@ isa = PBXNativeTarget; buildConfigurationList = F2D8BE3221BC5F98007CFEFA /* Build configuration list for PBXNativeTarget "Example-iOS-ObjC" */; buildPhases = ( - B3A6D9E98B158C3D26810658 /* [CP] Check Pods Manifest.lock */, + 63D3A112A6516B118ED4BE0C /* [CP] Check Pods Manifest.lock */, F2D8BE1B21BC5F97007CFEFA /* Sources */, F2D8BE1C21BC5F97007CFEFA /* Frameworks */, F2D8BE1D21BC5F97007CFEFA /* Resources */, F2D7122B21F115CD002D2A26 /* Embed Frameworks */, - 5880228CA13D968E338D21C4 /* [CP] Copy Pods Resources */, + ABF1099E565AA5A863129B1D /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1427,12 +1432,12 @@ isa = PBXNativeTarget; buildConfigurationList = F2D8BE5321BDA7D0007CFEFA /* Build configuration list for PBXNativeTarget "Example-macOS-ObjC" */; buildPhases = ( - 329A0ACE1239193B26C9575A /* [CP] Check Pods Manifest.lock */, + B5EB54702FE1E14323F57673 /* [CP] Check Pods Manifest.lock */, F2D8BE3E21BDA7CF007CFEFA /* Sources */, F2D8BE3F21BDA7CF007CFEFA /* Frameworks */, F2D8BE4021BDA7CF007CFEFA /* Resources */, F289085621C532D9002B813E /* Embed Frameworks */, - E06E9BE8F447B2B652FCF47E /* [CP] Copy Pods Resources */, + 50519EAA60471284915B1E28 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1624,7 +1629,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 050777E81C0FB8EF48CC70CA /* [CP] Check Pods Manifest.lock */ = { + 027812341AF380A4ABB638FF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1639,14 +1644,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Backtrace-iOSTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Backtrace-tvOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1AC2F744E60E2BDAA7282B3A /* [CP] Check Pods Manifest.lock */ = { + 0834C67A5C0547DA48B74ED2 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1661,92 +1666,87 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Backtrace-tvOS-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Backtrace-macOSTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 329A0ACE1239193B26C9575A /* [CP] Check Pods Manifest.lock */ = { + 11045ECA421E3E7992547252 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Example-macOS-ObjC-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 377781FC90BC6EA5E862C2BB /* [CP] Check Pods Manifest.lock */ = { + 2D3A108AA78FFAE2B107839E /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Backtrace-macOSTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 5880228CA13D968E338D21C4 /* [CP] Copy Pods Resources */ = { + 3495EE6590C7FC74DAF6EB8D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Example-iOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6914068597A54B8F1876941E /* [CP] Copy Pods Resources */ = { + 50519EAA60471284915B1E28 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-tvOS/Pods-Example-tvOS-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 7CE68EC82F38626CAD5A83D5 /* [CP] Check Pods Manifest.lock */ = { + 63D3A112A6516B118ED4BE0C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1761,36 +1761,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Backtrace-iOS-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Example-iOS-ObjC-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8EFE07C5A17F22CAA406A797 /* [CP] Check Pods Manifest.lock */ = { + 67CBC7E7582E29518FAAF728 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Example-tvOS-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9CCC130157A6E85E31DC6662 /* [CP] Check Pods Manifest.lock */ = { + 6AF195F1BFF6AAB7E989076A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1805,31 +1800,36 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Example-iOS-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Backtrace-tvOSTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9F14FD19D9E32B9F6126D063 /* [CP] Copy Pods Resources */ = { + 87AB83DC8CCC1BBAF6751476 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Backtrace-macOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - AC030A28CDD3537FE77F8ABC /* [CP] Check Pods Manifest.lock */ = { + 9556CBDEC7319AFF3D5868F7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1844,53 +1844,48 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Backtrace-tvOSTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Backtrace-iOSTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B3A6D9E98B158C3D26810658 /* [CP] Check Pods Manifest.lock */ = { + A5CF64682A8DC21C75C6AB1E /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Example-iOS-ObjC-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-resources.sh\"\n"; showEnvVarsInLog = 0; }; - C4700F99B4BDF71975FF61B7 /* [CP] Embed Pods Frameworks */ = { + ABF1099E565AA5A863129B1D /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Backtrace-macOSTests/Pods-Backtrace-macOSTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-iOS-ObjC/Pods-Example-iOS-ObjC-resources.sh\"\n"; showEnvVarsInLog = 0; }; - C9FFDFBE9B1DE5C7EABAAAE6 /* [CP] Check Pods Manifest.lock */ = { + B5EB54702FE1E14323F57673 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1905,62 +1900,72 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Backtrace-macOS-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Example-macOS-ObjC-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E06E9BE8F447B2B652FCF47E /* [CP] Copy Pods Resources */ = { + C548869835223929C5661858 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Example-tvOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-macOS-ObjC/Pods-Example-macOS-ObjC-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E75364CB7AFE3620C3044A9E /* [CP] Embed Pods Frameworks */ = { + C8CF01616607A511FC2161EF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Backtrace-iOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EFABFCA43C47D5179DF3ED74 /* [CP] Embed Pods Frameworks */ = { + D287E2302782469EDA6CE739 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Backtrace-iOSTests/Pods-Backtrace-iOSTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Backtrace-tvOSTests/Pods-Backtrace-tvOSTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; F2F0628C22B0453C00BCA6D0 /* Lint */ = { @@ -2120,6 +2125,7 @@ A24A4B9328B59653004F5052 /* BacktraceNotificationObserverMock.swift in Sources */, A24A4B6B28B595D9004F5052 /* BacktraceRateLimiterTests.swift in Sources */, AF5AB05726261BDD0003698C /* AttachmentBookmarkHandlerMock.swift in Sources */, + 20B01A4D2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift in Sources */, 28F95BBE22525DCC003936E0 /* Backtrace_tvOSTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2217,6 +2223,7 @@ A24A4B7F28B595D9004F5052 /* CrashReporterTests.swift in Sources */, F2AB63762246484100939BC9 /* WatcherRepositoryMock.swift in Sources */, A24A4B6428B595D9004F5052 /* BacktraceReporterTests.swift in Sources */, + 20B01A4C2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift in Sources */, A24A4B5828B595D9004F5052 /* BacktraceMetricsTest.swift in Sources */, 20DE4B3A2D48616A0076B3F6 /* NSManagedObjectContextExtensionTests.swift in Sources */, A24A4B6128B595D9004F5052 /* BacktraceFileManagerTests.swift in Sources */, @@ -2332,6 +2339,7 @@ A24A4B7E28B595D9004F5052 /* CrashReporterTests.swift in Sources */, F2AB63752246484100939BC9 /* WatcherRepositoryMock.swift in Sources */, A24A4B6328B595D9004F5052 /* BacktraceReporterTests.swift in Sources */, + 20B01A4B2DB87D1200FED98F /* CustomDirectoryBacktraceClientTests.swift in Sources */, A24A4B5728B595D9004F5052 /* BacktraceMetricsTest.swift in Sources */, 20DE4B392D48616A0076B3F6 /* NSManagedObjectContextExtensionTests.swift in Sources */, A24A4B6028B595D9004F5052 /* BacktraceFileManagerTests.swift in Sources */, @@ -2644,7 +2652,7 @@ }; 28F95BC222525DCC003936E0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5B2E658DD4FA5828A7383339 /* Pods-Backtrace-tvOS.debug.xcconfig */; + baseConfigurationReference = 44EA57F7BD07B9FA61EB212B /* Pods-Backtrace-tvOS.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -2729,7 +2737,7 @@ }; 28F95BC322525DCC003936E0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EA784170CE2484D66F12845A /* Pods-Backtrace-tvOS.release.xcconfig */; + baseConfigurationReference = 237733502AA96E545477B0A1 /* Pods-Backtrace-tvOS.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -2808,7 +2816,7 @@ }; 28F95BC522525DCC003936E0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C8E3A63330AA85977C3A255E /* Pods-Backtrace-tvOSTests.debug.xcconfig */; + baseConfigurationReference = AA195E549AD37392CF95B9BB /* Pods-Backtrace-tvOSTests.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -2882,7 +2890,7 @@ }; 28F95BC622525DCC003936E0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7934AD125B26FB9A7FF5225A /* Pods-Backtrace-tvOSTests.release.xcconfig */; + baseConfigurationReference = 7C8DE5DE446851BFED5767EC /* Pods-Backtrace-tvOSTests.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -2950,7 +2958,7 @@ }; F266B82421C77AC800D14417 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F972AA30EC889ADCC25E1C1F /* Pods-Backtrace-macOS.debug.xcconfig */; + baseConfigurationReference = 98EC6E473C6F8695F1AEE4FA /* Pods-Backtrace-macOS.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; @@ -3039,7 +3047,7 @@ }; F266B82521C77AC800D14417 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0E78E925890604A046A416BA /* Pods-Backtrace-macOS.release.xcconfig */; + baseConfigurationReference = 0D8A0B80F40629AE4C666415 /* Pods-Backtrace-macOS.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; @@ -3121,7 +3129,7 @@ }; F266B82721C77AC800D14417 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4014972346CDB9143F7B57C9 /* Pods-Backtrace-macOSTests.debug.xcconfig */; + baseConfigurationReference = 6B31D402B6FE3C42F7535BC0 /* Pods-Backtrace-macOSTests.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -3200,7 +3208,7 @@ }; F266B82821C77AC800D14417 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 557C73F314ED9BC68CD99710 /* Pods-Backtrace-macOSTests.release.xcconfig */; + baseConfigurationReference = 38D7B56F1CF887D995B75EF8 /* Pods-Backtrace-macOSTests.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -3272,7 +3280,7 @@ }; F2A11C0322553C2A00354640 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6EA442E045C5A9AADE7207D7 /* Pods-Example-tvOS.debug.xcconfig */; + baseConfigurationReference = 202B668E8F60B21AEDD500CF /* Pods-Example-tvOS.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; @@ -3352,7 +3360,7 @@ }; F2A11C0422553C2A00354640 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 638A1CADF7E8A6563C78C31C /* Pods-Example-tvOS.release.xcconfig */; + baseConfigurationReference = 6E82B56FA4079E1601235818 /* Pods-Example-tvOS.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; @@ -3454,7 +3462,7 @@ }; F2C2FA6321BBD26300934744 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E37DA3F86EDF46AE4A6FD55 /* Pods-Backtrace-iOS.debug.xcconfig */; + baseConfigurationReference = 22F135981150D5133F7FB608 /* Pods-Backtrace-iOS.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; @@ -3547,7 +3555,7 @@ }; F2C2FA6421BBD26300934744 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF0E6D0F08AAE9CB60192052 /* Pods-Backtrace-iOS.release.xcconfig */; + baseConfigurationReference = C4ED276BF50FF2F53E60BFE2 /* Pods-Backtrace-iOS.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; @@ -3634,7 +3642,7 @@ }; F2C2FA6621BBD26300934744 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 400175344F10D1AB39E97CBC /* Pods-Backtrace-iOSTests.debug.xcconfig */; + baseConfigurationReference = 9554BC617F7B373965A2094F /* Pods-Backtrace-iOSTests.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -3716,7 +3724,7 @@ }; F2C2FA6721BBD26300934744 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7161F22B650B5C3A47D7C4F7 /* Pods-Backtrace-iOSTests.release.xcconfig */; + baseConfigurationReference = 6DBE1FCB46F3AF48459B1B48 /* Pods-Backtrace-iOSTests.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -3792,7 +3800,7 @@ }; F2D8BE1421BC065F007CFEFA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8AA7D23E1801210162B0B63C /* Pods-Example-iOS.debug.xcconfig */; + baseConfigurationReference = 8707EC534471D4219A213C99 /* Pods-Example-iOS.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -3876,7 +3884,7 @@ }; F2D8BE1521BC065F007CFEFA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 037D6550B4724EB4F05F0774 /* Pods-Example-iOS.release.xcconfig */; + baseConfigurationReference = 7A9A25A10036FCEB0B73F1BD /* Pods-Example-iOS.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -3954,7 +3962,7 @@ }; F2D8BE3321BC5F98007CFEFA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 04C55AC90DC913E1DB190B57 /* Pods-Example-iOS-ObjC.debug.xcconfig */; + baseConfigurationReference = E6818F67B2B11DBC266630FC /* Pods-Example-iOS-ObjC.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -4032,7 +4040,7 @@ }; F2D8BE3421BC5F98007CFEFA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 559635099C43B2A8C8FB3E2E /* Pods-Example-iOS-ObjC.release.xcconfig */; + baseConfigurationReference = A325AC11FD1F3638F2C1BD4B /* Pods-Example-iOS-ObjC.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -4104,7 +4112,7 @@ }; F2D8BE5421BDA7D0007CFEFA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 79DE4E5AA2488ADC73D72F8D /* Pods-Example-macOS-ObjC.debug.xcconfig */; + baseConfigurationReference = 549BDDE38B86FC29939E59D2 /* Pods-Example-macOS-ObjC.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -4181,7 +4189,7 @@ }; F2D8BE5521BDA7D0007CFEFA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3D6DBD2958FC7C95A508A2CF /* Pods-Example-macOS-ObjC.release.xcconfig */; + baseConfigurationReference = 7DE8749D21117C55DDE3B543 /* Pods-Example-macOS-ObjC.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; diff --git a/Examples/Example-iOS/AppDelegate.swift b/Examples/Example-iOS/AppDelegate.swift index 5290237f..66f3087d 100644 --- a/Examples/Example-iOS/AppDelegate.swift +++ b/Examples/Example-iOS/AppDelegate.swift @@ -1,5 +1,6 @@ import UIKit import Backtrace +import CrashReporter enum CustomError: Error { case runtimeError @@ -11,35 +12,44 @@ func throwingFunc() throws { @UIApplicationMain final class AppDelegate: UIResponder, UIApplicationDelegate { - - let fileUrl = createAndWriteFile("sample.txt") - + var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - let backtraceCredentials = BacktraceCredentials(endpoint: URL(string: Keys.backtraceUrl as String)!, - token: Keys.backtraceToken as String) + + // Usage https://docs.saucelabs.com/error-reporting/platform-integrations/ios/configuration/#usage + let backtraceCredentials = BacktraceCredentials(endpoint: URL(string: Keys.backtraceUrl as String)!, token: Keys.backtraceToken as String) + // Customize Database Settings https://docs.saucelabs.com/error-reporting/platform-integrations/ios/configuration/#database-settings let backtraceDatabaseSettings = BacktraceDatabaseSettings() backtraceDatabaseSettings.maxRecordCount = 10 + + // BacktraceClientConfiguration https://docs.saucelabs.com/error-reporting/platform-integrations/ios/configuration/#advanced-usage let backtraceConfiguration = BacktraceClientConfiguration(credentials: backtraceCredentials, dbSettings: backtraceDatabaseSettings, reportsPerMin: 10, allowsAttachingDebugger: true, detectOOM: true) - BacktraceClient.shared = try? BacktraceClient(configuration: backtraceConfiguration) - BacktraceClient.shared?.attributes = ["foo": "bar", "testing": true] - BacktraceClient.shared?.attachments.append(fileUrl) - BacktraceClient.shared?.delegate = self - do { - try throwingFunc() - } catch { - BacktraceClient.shared?.send(attachmentPaths: []) { (result) in - print("AppDelegate:Result:\(result)") - } + // Customize PLCrashReporterConfig with custom basePath https://docs.saucelabs.com/error-reporting/platform-integrations/ios/configuration/#plcrashreporter + guard let plcrashReporterConfig = PLCrashReporterConfig(signalHandlerType: .BSD, symbolicationStrategy: .all, basePath: crashDirectory.path) else { + fatalError("Could not create PLCrashReporterConfig") } + + let reporter = BacktraceCrashReporter(config: plcrashReporterConfig) + + // BacktraceClient + BacktraceClient.shared = try? BacktraceClient(configuration: backtraceConfiguration, crashReporter: reporter) + + // Attributes https://docs.saucelabs.com/error-reporting/platform-integrations/ios/configuration/#attributes + BacktraceClient.shared?.attributes = ["foo": "bar", "testing": true] + + // File Attachments https://docs.saucelabs.com/error-reporting/platform-integrations/ios/configuration/#file-attachments + BacktraceClient.shared?.attachments.append(sampleAttachmentURL) + + // Handling Delegate events https://docs.saucelabs.com/error-reporting/platform-integrations/ios/configuration/#handling-events + BacktraceClient.shared?.delegate = self BacktraceClient.shared?.loggingDestinations = [BacktraceBaseDestination(level: .debug)] @@ -49,32 +59,52 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { // Enable breadcrumbs https://docs.saucelabs.com/error-reporting/web-console/debug/#breadcrumbs-section BacktraceClient.shared?.enableBreadcrumbs() - // Add breadcrumb + // Add breadcrumbs https://docs.saucelabs.com/error-reporting/platform-integrations/ios/configuration/#breadcrumbs let attributes = ["My Attribute":"My Attribute Value"] _ = BacktraceClient.shared?.addBreadcrumb("My Breadcrumb", - attributes: attributes, - type: .user, - level: .error) + attributes: attributes, + type: .user, + level: .error) + // Sample throwing method + do { + try throwingFunc() + } catch { + BacktraceClient.shared?.send(attachmentPaths: []) { (result) in + print("AppDelegate:Result:\(result)") + } + } return true } - static func createAndWriteFile(_ fileName: String) -> URL { - let dirName = "directory" - let libraryDirectoryUrl = try! FileManager.default.url( - for: .libraryDirectory, in: .userDomainMask, appropriateFor: nil, create: true) - let directoryUrl = libraryDirectoryUrl.appendingPathComponent(dirName) - try? FileManager().createDirectory( - at: directoryUrl, - withIntermediateDirectories: false, - attributes: nil - ) - let fileUrl = directoryUrl.appendingPathComponent(fileName) - let formatter = DateFormatter() - formatter.timeStyle = .medium - let myData = formatter.string(from: Date()) - try! myData.write(to: fileUrl, atomically: true, encoding: .utf8) - return fileUrl - } + /// Custom directory with FileProtectionType.none + private lazy var crashDirectory: URL = { + do { + return try FileManager.default.createCustomDirectory( + name: "btcrash", + protection: .none + ) + } catch { + fatalError("Failed to create crash directory: \(error)") + } + }() + + /// Sample attachment + private lazy var sampleAttachmentURL: URL = { + do { + let attachmentsDir = try FileManager.default.createCustomDirectory( + name: "attachment", + protection: .none + ) + let fileURL = attachmentsDir.appendingPathComponent("sample.txt") + let formatter = DateFormatter() + formatter.timeStyle = .medium + let content = formatter.string(from: Date()) + try content.write(to: fileURL, atomically: true, encoding: .utf8) + return fileURL + } catch { + fatalError("Failed to write sample attachment: \(error)") + } + }() } extension AppDelegate: BacktraceClientDelegate { @@ -100,3 +130,24 @@ extension AppDelegate: BacktraceClientDelegate { print("AppDelegate: didReachLimit: \(result)") } } + +extension FileManager { + func createCustomDirectory(name: String, protection: FileProtectionType) throws -> URL { + let base = try url( + for: .libraryDirectory, + in: .userDomainMask, + appropriateFor: nil, + create: true + ) + let dir = base.appendingPathComponent(name, isDirectory: true) + try createDirectory( + at: dir, + withIntermediateDirectories: true, + attributes: [.protectionKey: protection] + ) + + print("Crash directory path: \(dir.path)") + + return dir + } +} diff --git a/Podfile.lock b/Podfile.lock index 1b403e1c..2a8ebd17 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - Backtrace (2.0.6): + - Backtrace (2.0.8): - PLCrashReporter (= 1.11.1) - Nimble (10.0.0) - PLCrashReporter (1.11.1) @@ -22,7 +22,7 @@ EXTERNAL SOURCES: :path: "./Backtrace.podspec" SPEC CHECKSUMS: - Backtrace: 72bea7c55570b42ab18dd7218ce41ceef3edca14 + Backtrace: 5bcc05d7ef650d354f3ec3bdba76462d5edf5530 Nimble: 5316ef81a170ce87baf72dd961f22f89a602ff84 PLCrashReporter: 5d2d3967afe0efad61b3048d617e2199a5d1b787 Quick: 749aa754fd1e7d984f2000fe051e18a3a9809179 diff --git a/Tests/CustomDirectoryBacktraceClientTests.swift b/Tests/CustomDirectoryBacktraceClientTests.swift new file mode 100644 index 00000000..fd0c6e88 --- /dev/null +++ b/Tests/CustomDirectoryBacktraceClientTests.swift @@ -0,0 +1,84 @@ +import Quick +import Nimble +@testable import Backtrace +@testable import CrashReporter + +final class CustomDirectoryBacktraceClientTests: QuickSpec { + override func spec() { + + describe("Custom crash directory") { + + var customDir: URL! + var credentials: BacktraceCredentials! + var backtraceClientConfiguration: BacktraceClientConfiguration! + var basePathConfig: PLCrashReporterConfig! + + beforeEach { + customDir = try! self.createCustomDirAndProtectionType() + credentials = BacktraceCredentials(endpoint: URL(string: "https://yourteam.backtrace.io")!, token: "") + backtraceClientConfiguration = BacktraceClientConfiguration(credentials: credentials) + basePathConfig = PLCrashReporterConfig(signalHandlerType: .BSD, symbolicationStrategy: .all, basePath: customDir.path) + } + + afterEach { + try? FileManager.default.removeItem(at: customDir) + } + + it("creates a valid PLCrashReporterConfig with a custom basePath") { + expect(basePathConfig).toNot(beNil()) + } + + it("initializes BacktraceCrashReporter without throwing") { + expect { _ = BacktraceCrashReporter(config: basePathConfig) }.toNot(throwError()) + } + + it("initializes BacktraceClient with BacktraceCrashReporte") { + let reporter = BacktraceCrashReporter(config: basePathConfig) + var client: BacktraceClient! + expect {client = try BacktraceClient(configuration: backtraceClientConfiguration,crashReporter: reporter)}.toNot(throwError()) + + BacktraceClient.shared = client + expect(BacktraceClient.shared).to(be(client)) + } + + describe("enabled reporter behavior") { + var reporter: BacktraceCrashReporter! + + beforeEach { + reporter = BacktraceCrashReporter(config: basePathConfig) + } + + it("enables PLCrashReporter without error and respects file protection") { + expect { try reporter.enableCrashReporting() }.toNot(throwError()) +#if !targetEnvironment(simulator) + let attributes = try? FileManager.default.attributesOfItem(atPath: customDir.path) + let protection = attributes?[.protectionKey] as? FileProtectionType + expect(protection).to(equal(FileProtectionType.none), description: "Expected file protection to match input (.none).") +#endif + } + + it("generates a live report without error") { + expect { _ = try reporter.generateLiveReport(attributes: ["foo": "bar"]) }.toNot(throwError()) + } + } + } + } + + // MARK: – Helpers + + private func createCustomDirAndProtectionType() throws -> URL { + let baseURL = try FileManager.default.url( + for: .libraryDirectory, + in: .userDomainMask, + appropriateFor: nil, + create: true + ) + let dir = baseURL.appendingPathComponent("crash-directory-spec-\(UUID().uuidString)") + try FileManager.default.createDirectory( + at: dir, + withIntermediateDirectories: true, + attributes: [.protectionKey: FileProtectionType.none] + ) + return dir + } +} From cc6335de4d74fcf5427dd074cf3d5b094e2463c7 Mon Sep 17 00:00:00 2001 From: melekr Date: Tue, 22 Apr 2025 22:55:06 -0400 Subject: [PATCH 2/5] Exclude file protection Test from simulator runs --- Tests/CustomDirectoryBacktraceClientTests.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/CustomDirectoryBacktraceClientTests.swift b/Tests/CustomDirectoryBacktraceClientTests.swift index fd0c6e88..3dda976b 100644 --- a/Tests/CustomDirectoryBacktraceClientTests.swift +++ b/Tests/CustomDirectoryBacktraceClientTests.swift @@ -48,14 +48,14 @@ final class CustomDirectoryBacktraceClientTests: QuickSpec { reporter = BacktraceCrashReporter(config: basePathConfig) } +#if !targetEnvironment(simulator) it("enables PLCrashReporter without error and respects file protection") { expect { try reporter.enableCrashReporting() }.toNot(throwError()) -#if !targetEnvironment(simulator) let attributes = try? FileManager.default.attributesOfItem(atPath: customDir.path) let protection = attributes?[.protectionKey] as? FileProtectionType expect(protection).to(equal(FileProtectionType.none), description: "Expected file protection to match input (.none).") -#endif } +#endif it("generates a live report without error") { expect { _ = try reporter.generateLiveReport(attributes: ["foo": "bar"]) }.toNot(throwError()) From 3205ea5d7d959ccf78a6a1d35340b977e5ba3896 Mon Sep 17 00:00:00 2001 From: melekr Date: Tue, 22 Apr 2025 23:01:19 -0400 Subject: [PATCH 3/5] Update CustomDirectoryBacktraceClientTests.swift --- Tests/CustomDirectoryBacktraceClientTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Tests/CustomDirectoryBacktraceClientTests.swift b/Tests/CustomDirectoryBacktraceClientTests.swift index 3dda976b..5f822432 100644 --- a/Tests/CustomDirectoryBacktraceClientTests.swift +++ b/Tests/CustomDirectoryBacktraceClientTests.swift @@ -50,7 +50,6 @@ final class CustomDirectoryBacktraceClientTests: QuickSpec { #if !targetEnvironment(simulator) it("enables PLCrashReporter without error and respects file protection") { - expect { try reporter.enableCrashReporting() }.toNot(throwError()) let attributes = try? FileManager.default.attributesOfItem(atPath: customDir.path) let protection = attributes?[.protectionKey] as? FileProtectionType expect(protection).to(equal(FileProtectionType.none), description: "Expected file protection to match input (.none).") From add6fa71cc8d8b4f2e1186563370534a0e9a7bc8 Mon Sep 17 00:00:00 2001 From: melekr Date: Tue, 22 Apr 2025 23:11:43 -0400 Subject: [PATCH 4/5] Update metadata storage FileProtectionType --- Sources/Public/Internal/ReportMetadataStorage.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Public/Internal/ReportMetadataStorage.swift b/Sources/Public/Internal/ReportMetadataStorage.swift index 951d5617..988f404c 100644 --- a/Sources/Public/Internal/ReportMetadataStorage.swift +++ b/Sources/Public/Internal/ReportMetadataStorage.swift @@ -17,7 +17,7 @@ enum ReportMetadataStorageImpl: ReportMetadataStorage { if !FileManager.default.fileExists(atPath: config.directoryUrl.path) { try FileManager.default.createDirectory(atPath: config.directoryUrl.path, withIntermediateDirectories: false, - attributes: nil) + attributes: [.protectionKey: FileProtectionType.none]) } if #available(iOS 11.0, tvOS 11.0, macOS 10.13, *) { From 2307a107eca766f14069b51674ab87d75cec5ea5 Mon Sep 17 00:00:00 2001 From: melekr Date: Fri, 25 Apr 2025 11:59:55 -0400 Subject: [PATCH 5/5] Limit FileProtectionType Test to real devices --- Tests/CustomDirectoryBacktraceClientTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/CustomDirectoryBacktraceClientTests.swift b/Tests/CustomDirectoryBacktraceClientTests.swift index 5f822432..41ea958e 100644 --- a/Tests/CustomDirectoryBacktraceClientTests.swift +++ b/Tests/CustomDirectoryBacktraceClientTests.swift @@ -48,7 +48,7 @@ final class CustomDirectoryBacktraceClientTests: QuickSpec { reporter = BacktraceCrashReporter(config: basePathConfig) } -#if !targetEnvironment(simulator) +#if !targetEnvironment(simulator) && !os(macOS) && !targetEnvironment(macCatalyst) it("enables PLCrashReporter without error and respects file protection") { let attributes = try? FileManager.default.attributesOfItem(atPath: customDir.path) let protection = attributes?[.protectionKey] as? FileProtectionType