Closed yanz-safe closed 1 month ago
I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.
Looks like one more lock is missing inside of completion handler.
propogateErrors
does not need to be wrapped, as it has its own lock code.
Created PR with fix https://github.com/firebase/firebase-ios-sdk/pull/13776
Description
I published the application to AppStore recently. Firebase & Apple captured this crash report for 9/150 of users on launch day. All of them are first-time fresh users.
Initially I had Firebase SDK version 10.29. I found this report and though it might be the same crash and update SDK to 11.3.0. Unfortunately, today crash report was reopened by Firebase on new version of app :(
Using Xcode 15.4 now. Cannot migrate right now.
Reproducing the issue
Was not able to reproduce. Attaching the crash report from Xcode, and code where I configure RemoteConfig and use it.
EnvironmentManager is called almost immediately after the
@main
app struct initializes.Expand
Crash report / SDK 10.29.0
from Xcode Organiser``` Incident Identifier: 982B6A2B-0523-414D-88D0-FDDD29C9E4F7 Distributor ID: com.apple.AppStore Hardware Model: iPhone16,2 Process: MyProject [3041] Path: /private/var/containers/Bundle/Application/1E9A3F84-9865-4AF3-B3B9-9054A2025EAD/MyProject.app/MyProject Identifier: myproject.dot.com Version: 2.12 (101) AppStoreTools: 16A242d AppVariant: 1:iPhone16,2:18 Code Type: ARM-64 (Native) Role: Foreground Parent Process: launchd [1] Coalition: myproject.dot.com [1323] Date/Time: 2024-09-30 23:19:55.4535 -0400 Launch Time: 2024-09-30 23:19:53.8804 -0400 OS Version: iPhone OS 18.0 (22A3354) Release Type: User Baseband Version: 2.16.06 Report Version: 104 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: SIGNAL 6 Abort trap: 6 Terminating Process: MyProject [3041] Triggered by Thread: 0 Last Exception Backtrace: 0 CoreFoundation 0x19319d08c __exceptionPreprocess + 164 (NSException.m:249) 1 libobjc.A.dylib 0x19049f2e4 objc_exception_throw + 88 (objc-exception.mm:356) 2 CoreFoundation 0x193298168 __NSFastEnumerationMutationHandler + 116 (NSEnumerator.m:132) 3 MyProject 0x105bdec08 __53-[RCNConfigRealtime fetchLatestConfig:targetVersion:]_block_invoke_2 + 436 (RCNConfigRealtime.m:449) 4 libdispatch.dylib 0x19ae14370 _dispatch_call_block_and_release + 32 (init.c:1549) 5 libdispatch.dylib 0x19ae160d0 _dispatch_client_callout + 20 (object.m:576) 6 libdispatch.dylib 0x19ae249e0 _dispatch_main_queue_drain + 980 (queue.c:8093) 7 libdispatch.dylib 0x19ae245fc _dispatch_main_queue_callback_4CF + 44 (queue.c:8253) 8 CoreFoundation 0x19316ff64 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1773) 9 CoreFoundation 0x19316d188 __CFRunLoopRun + 1996 (CFRunLoop.c:3143) 10 CoreFoundation 0x19316c5b8 CFRunLoopRunSpecific + 572 (CFRunLoop.c:3414) 11 GraphicsServices 0x1dec021c4 GSEventRunModal + 164 (GSEvent.c:2196) 12 UIKitCore 0x195cc25f0 -[UIApplication _run] + 816 (UIApplication.m:3820) 13 UIKitCore 0x195d7110c UIApplicationMain + 340 (UIApplication.m:5472) 14 SwiftUI 0x1978cb804 closure #1 in KitRendererCommon(_:) + 168 (UIKitApp.swift:68) 15 SwiftUI 0x1978a8e68 runApp(_:) + 100 (UIKitApp.swift:16) 16 SwiftUI 0x1978abd68 static App.main() + 180 (App.swift:121) 17 MyProject 0x10479d2bc static MyProjectApp.$main() + 52 (MyProjectApp.swift:0) 18 MyProject 0x10479d2bc main + 64 19 dyld 0x1b893fd34 start + 2724 (dyldMain.cpp:1334) Thread 0 name: Thread 0 Crashed: 0 libsystem_kernel.dylib 0x00000001e2fbb274 __pthread_kill + 8 (:-1) 1 libsystem_pthread.dylib 0x000000021a512ef8 pthread_kill + 268 (pthread.c:1721) 2 libsystem_c.dylib 0x000000019aecfb6c __abort + 136 (abort.c:163) 3 libsystem_c.dylib 0x000000019aecfae4 abort + 140 (abort.c:130) 4 libc++abi.dylib 0x000000021a4365b8 abort_message + 132 (abort_message.cpp:78) 5 libc++abi.dylib 0x000000021a424bac demangling_terminate_handler() + 348 (cxa_default_handlers.cpp:77) 6 libobjc.A.dylib 0x00000001904bae04 _objc_terminate() + 156 (objc-exception.mm:496) 7 MyProject 0x0000000105da1bdc FIRCLSTerminateHandler() + 340 (FIRCLSException.mm:463) 8 libc++abi.dylib 0x000000021a43587c std::__terminate(void (*)()) + 16 (cxa_handlers.cpp:59) 9 libc++abi.dylib 0x000000021a435820 std::terminate() + 108 (cxa_handlers.cpp:88) 10 libdispatch.dylib 0x000000019ae160e4 _dispatch_client_callout + 40 (object.m:579) 11 libdispatch.dylib 0x000000019ae249e0 _dispatch_main_queue_drain + 980 (queue.c:8093) 12 libdispatch.dylib 0x000000019ae245fc _dispatch_main_queue_callback_4CF + 44 (queue.c:8253) 13 CoreFoundation 0x000000019316ff64 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1773) 14 CoreFoundation 0x000000019316d188 __CFRunLoopRun + 1996 (CFRunLoop.c:3143) 15 CoreFoundation 0x000000019316c5b8 CFRunLoopRunSpecific + 572 (CFRunLoop.c:3414) 16 GraphicsServices 0x00000001dec021c4 GSEventRunModal + 164 (GSEvent.c:2196) 17 UIKitCore 0x0000000195cc25f0 -[UIApplication _run] + 816 (UIApplication.m:3820) 18 UIKitCore 0x0000000195d7110c UIApplicationMain + 340 (UIApplication.m:5472) 19 SwiftUI 0x00000001978cb804 closure #1 in KitRendererCommon(_:) + 168 (UIKitApp.swift:68) 20 SwiftUI 0x00000001978a8e68 runApp(_:) + 100 (UIKitApp.swift:16) 21 SwiftUI 0x00000001978abd68 static App.main() + 180 (App.swift:121) 22 MyProject 0x000000010479d2bc static MyProjectApp.$main() + 52 (MyProjectApp.swift:0) 23 MyProject 0x000000010479d2bc main + 64 24 dyld 0x00000001b893fd34 start + 2724 (dyldMain.cpp:1334) Thread 1 name: Thread 1: 0 libsystem_kernel.dylib 0x00000001e2fb6694 guarded_pwrite_np + 8 (:-1) 1 libsqlite3.dylib 0x00000001c05f36f4 seekAndWrite + 456 (sqlite3.c:44286) 2 libsqlite3.dylib 0x00000001c05ade68 unixWrite + 180 (sqlite3.c:44364) 3 libsqlite3.dylib 0x00000001c05b6a4c writeJournalHdr + 344 (sqlite3.c:65385) 4 libsqlite3.dylib 0x00000001c05a9b6c pager_write + 788 (sqlite3.c:69965) 5 libsqlite3.dylib 0x00000001c05acea8 sqlite3BtreeInsert + 2456 (sqlite3.c:86321) 6 libsqlite3.dylib 0x00000001c059489c sqlite3VdbeExec + 26772 (sqlite3.c:105671) 7 libsqlite3.dylib 0x00000001c058d748 sqlite3_step + 960 (sqlite3.c:97868) 8 MyProject 0x0000000105bd554c -[RCNConfigDBManager insertMainTableWithValues:fromSource:] + 360 (RCNConfigDBManager.m:467) 9 MyProject 0x0000000105bd5350 __77-[RCNConfigDBManager insertMainTableWithValues:fromSource:completionHandler:]_block_invoke + 48 (RCNConfigDBManager.m:418) 10 libdispatch.dylib 0x000000019ae14370 _dispatch_call_block_and_release + 32 (init.c:1549) 11 libdispatch.dylib 0x000000019ae160d0 _dispatch_client_callout + 20 (object.m:576) 12 libdispatch.dylib 0x000000019ae1d6d8 _dispatch_lane_serial_drain + 744 (queue.c:3934) 13 libdispatch.dylib 0x000000019ae1e1e0 _dispatch_lane_invoke + 380 (queue.c:4025) 14 libdispatch.dylib 0x000000019ae29258 _dispatch_root_queue_drain_deferred_wlh + 288 (queue.c:7193) 15 libdispatch.dylib 0x000000019ae28aa4 _dispatch_workloop_worker_thread + 540 (queue.c:6787) 16 libsystem_pthread.dylib 0x000000021a50fc7c _pthread_wqthread + 288 (pthread.c:2696) 17 libsystem_pthread.dylib 0x000000021a50c488 start_wqthread + 8 (:-1) Thread 2: 0 libsystem_pthread.dylib 0x000000021a50c480 start_wqthread + 0 (:-1) Thread 3: 0 libsystem_pthread.dylib 0x000000021a50c480 start_wqthread + 0 (:-1) Thread 4 name: Thread 4: 0 libsystem_kernel.dylib 0x00000001e2fb0484 kevent_id + 8 (:-1) 1 libdispatch.dylib 0x000000019ae38b00 _dispatch_kq_poll + 228 (event_kevent.c:760) 2 libdispatch.dylib 0x000000019ae3950c _dispatch_event_loop_wait_for_ownership + 436 (event_kevent.c:2236) 3 libdispatch.dylib 0x000000019ae25a20 __DISPATCH_WAIT_FOR_QUEUE__ + 340 (queue.c:1704) 4 libdispatch.dylib 0x000000019ae255e8 _dispatch_sync_f_slow + 148 (queue.c:1799) 5 MyProject 0x0000000105f95120 -[APMIdentity appleConsentStatus] + 104 6 MyProject 0x0000000105fac378 APMUpdateConsentSignalsAndIdentifiers + 408 7 MyProject 0x0000000105fb1f30 -[APMMeasurement(Event) createRawEventMetadataWithUserAttributes:] + 1288 8 MyProject 0x0000000105fb3c30 -[APMMeasurement(Event) writeEvent:isPublicEvent:isRealtime:] + 628 9 MyProject 0x0000000105fb19e4 __57-[APMMeasurement(Event) writeFilteredEventOnWorkerQueue:]_block_invoke + 488 10 MyProject 0x0000000106001970 -[APMSqliteStore performTransactionWithError:block:] + 160 11 MyProject 0x0000000105f78778 -[APMDatabase performTransaction:] + 40 12 MyProject 0x0000000105fb1738 -[APMMeasurement(Event) writeFilteredEventOnWorkerQueue:] + 440 13 MyProject 0x0000000105fb14a0 -[APMMeasurement(Event) writeEventOnWorkerQueue:] + 492 14 MyProject 0x0000000105fb1078 -[APMMeasurement(Event) handleEventOnWorkerQueue:] + 712 15 MyProject 0x0000000105fa561c -[APMMeasurement logEventOnWorkerQueue:notifyEventListeners:] + 64 16 MyProject 0x0000000105fa54a8 -[APMMeasurement logEventOnWorkerQueueWithOrigin:isPublicEvent:name:parameters:timestamp:enabled:ignoreEnabled:ignoreInterceptor:interceptor:addedScreenParameters:] + 296 17 MyProject 0x0000000105fa52d8 __151-[APMMeasurement logEventWithOrigin:isPublicEvent:name:parameters:timestamp:enabled:ignoreEnabled:ignoreInterceptor:interceptor:addedScreenParameters:]_block_invoke + 60 18 MyProject 0x0000000105ff89b0 __51-[APMScheduler scheduleOnWorkerQueueBlockID:block:]_block_invoke + 44 19 libdispatch.dylib 0x000000019ae14370 _dispatch_call_block_and_release + 32 (init.c:1549) 20 libdispatch.dylib 0x000000019ae160d0 _dispatch_client_callout + 20 (object.m:576) 21 libdispatch.dylib 0x000000019ae1d6d8 _dispatch_lane_serial_drain + 744 (queue.c:3934) 22 libdispatch.dylib 0x000000019ae1e1e0 _dispatch_lane_invoke + 380 (queue.c:4025) 23 libdispatch.dylib 0x000000019ae29258 _dispatch_root_queue_drain_deferred_wlh + 288 (queue.c:7193) 24 libdispatch.dylib 0x000000019ae28aa4 _dispatch_workloop_worker_thread + 540 (queue.c:6787) 25 libsystem_pthread.dylib 0x000000021a50fc7c _pthread_wqthread + 288 (pthread.c:2696) 26 libsystem_pthread.dylib 0x000000021a50c488 start_wqthread + 8 (:-1) Thread 5: 0 libsystem_pthread.dylib 0x000000021a50c480 start_wqthread + 0 (:-1) Thread 6: 0 MyProject 0x00000001050df3ac type metadata accessor for AWSPinpointPushNotificationsPlugin + 0 (
Expand
Crash report / SDK 11.3.0
from Firebase``` # Crashlytics - Stack trace # Application: myproject.dot.com # Platform: apple # Version: 2.14 (105) # Issue: a744604c487d9eb321b8bd6288937e6f # Session: 75cad5ff805b4c15978e35d124c0e37c_DNE_0_v2 # Date: Thu Oct 03 2024 05:49:06 GMT+0530 (India Standard Time) Fatal Exception: NSGenericException 0 CoreFoundation 0x8408c (Missing UUID 47427277ee153c17ad686886b0380b5e) 1 libobjc.A.dylib 0x172e4 objc_exception_throw 2 CoreFoundation 0x17f168 (Missing UUID 47427277ee153c17ad686886b0380b5e) 3 MyProject 0x1a001ec __53-[RCNConfigRealtime fetchLatestConfig:targetVersion:]_block_invoke_2 + 465 (RCNConfigRealtime.m:465) 4 libdispatch.dylib 0x2370 _dispatch_call_block_and_release 5 libdispatch.dylib 0x40d0 _dispatch_client_callout 6 libdispatch.dylib 0x129e0 _dispatch_main_queue_drain 7 libdispatch.dylib 0x125fc _dispatch_main_queue_callback_4CF 8 CoreFoundation 0x56f64 (Missing UUID 47427277ee153c17ad686886b0380b5e) 9 CoreFoundation 0x54188 (Missing UUID 47427277ee153c17ad686886b0380b5e) 10 CoreFoundation 0x535b8 (Missing UUID 47427277ee153c17ad686886b0380b5e) 11 GraphicsServices 0x11c4 GSEventRunModal 12 UIKitCore 0x3de5f0 (Missing UUID 5bd027b10ec935fdb9f06288a525693a) 13 UIKitCore 0x48d10c (Missing UUID 5bd027b10ec935fdb9f06288a525693a) 14 SwiftUI 0x126804 (Missing UUID ee7bf04621303abd99d1664bafbae422) 15 SwiftUI 0x103e68 (Missing UUID ee7bf04621303abd99d1664bafbae422) 16 SwiftUI 0x106d68 (Missing UUID ee7bf04621303abd99d1664bafbae422) 17 MyProject 0x5b786c main (MyProjectApp.swift) 18 ??? 0x1a85b7d34 (Missing) Crashed: com.google.firebase.crashlytics.ios.exception 0 MyProject 0x1bb61f4 FIRCLSProcessRecordAllThreads + 392 (FIRCLSProcess.c:392) 1 MyProject 0x1bb65d4 FIRCLSProcessRecordAllThreads + 423 (FIRCLSProcess.c:423) 2 MyProject 0x1bc4758 FIRCLSHandler + 34 (FIRCLSHandler.m:34) 3 MyProject 0x1bc455c __FIRCLSExceptionRecord_block_invoke + 240 (FIRCLSException.mm:240) 4 libdispatch.dylib 0x40d0 _dispatch_client_callout + 20 5 libdispatch.dylib 0x13750 _dispatch_lane_barrier_sync_invoke_and_complete + 56 6 MyProject 0x1bc34d8 FIRCLSExceptionRecord + 242 (FIRCLSException.mm:242) 7 MyProject 0x1bc4020 FIRCLSExceptionRecordNSException + 126 (FIRCLSException.mm:126) 8 MyProject 0x1bc30e0 FIRCLSTerminateHandler() + 407 (FIRCLSException.mm:407) 9 libc++abi.dylib 0x1287c std::__terminate(void (*)()) + 16 10 libc++abi.dylib 0x12820 std::terminate() + 108 11 libobjc.A.dylib 0x3f938 objc_terminate + 16 12 libdispatch.dylib 0x40e4 _dispatch_client_callout + 40 13 libdispatch.dylib 0x129e0 _dispatch_main_queue_drain + 980 14 libdispatch.dylib 0x125fc _dispatch_main_queue_callback_4CF + 44 15 CoreFoundation 0x56f64
SwiftUI app with AppDelegate.
Expand
AppDelegate+setupRemoteConfig()
```swift final class AppDelegate: NSObject, UIApplicationDelegate { func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil ) -> Bool { log("didFinishLaunchingWithOptions", launchOptions as Any) FirebaseApp.configure() setupRemoteConfig() application.registerForRemoteNotifications() return true } private func setupRemoteConfig() { let remoteConfig = RemoteConfig.remoteConfig() let remoteSettings = RemoteConfigSettings() if remoteConfig.lastFetchStatus == .noFetchYet || !isReleaseConfiguration() { remoteSettings.minimumFetchInterval = 0 } remoteConfig.configSettings = remoteSettings remoteConfig.fetchAndActivate { status, error in log("[Remote config] fetchAndActivate status = \(status), error = \(String(describing: error))") } remoteConfig.addOnConfigUpdateListener { update, error in let keys = update?.updatedKeys ?? [] log("[Remote config] Remote config update, error = \(String(describing: error))") let sizes = keys.map { "\($0)-\(remoteConfig[$0].dataValue.count)" } log(sizes) remoteConfig.activate() } } } ```
EnvironmentManager where I want to wait a bit to download the config before app is fully initialized
Expand
EnvironmentManager.swift
```swift private func remoteConfiguration(forceRefresh: Bool = false) async -> RemoteConfiguration? { if let _remote, !forceRefresh { return _remote } if remoteConfig.lastFetchStatus == .noFetchYet { do { let result: RemoteConfigUpdate? = try await withTimeout(duration: .seconds(5)) { [remoteConfig] in try await withCheckedThrowingContinuation { continuation in var registration: ConfigUpdateListenerRegistration? registration = remoteConfig.addOnConfigUpdateListener { status, error in guard registration != nil else { return } registration?.remove() registration = nil if let error = error { continuation.resume(throwing: error) } else { continuation.resume(returning: status) } } } } if let result { log("Remote config finished with updatedKeys.count = \(result.updatedKeys.count)") } else { log("Remote config finished without status") } } catch { log("Remote config finished", error) } } let configValue = remoteConfig.configValue(forKey: "app_environments") do { let remoteValue: SafeEnvironmentsRemoteConfig = try configValue.decoded() let available = remoteValue.available .map { $0.build(knownList: Self.known) } .filter { $0.enabled } let config = RemoteConfiguration(default: remoteValue.defaultEnvironmentId, available: available) _remote = config return config } catch { log(error) return nil } } ```
After the app is started I am using some keys like
remoteConfig.configValue(forKey: "<key>")
and by using@RemoteConfigProperty
Code like this can be ran on background thread:
Firebase SDK Version
11.3.0
Xcode Version
15.4
Installation Method
Swift Package Manager
Firebase Product(s)
Remote Config
Targeted Platforms
iOS
Relevant Log Output
If using Swift Package Manager, the project's Package.resolved
Expand
Package.resolved
snippet```json { "originHash" : "f52c6a316bdfde0e1c979091da2ce2362cc364314d92b6f3c5542d6a59dea745", "pins" : [ { "identity" : "abseil-cpp-binary", "kind" : "remoteSourceControl", "location" : "https://github.com/google/abseil-cpp-binary.git", "state" : { "revision" : "194a6706acbd25e4ef639bcaddea16e8758a3e27", "version" : "1.2024011602.0" } }, { "identity" : "alamofire", "kind" : "remoteSourceControl", "location" : "https://github.com/Alamofire/Alamofire.git", "state" : { "revision" : "f455c2975872ccd2d9c81594c658af65716e9b9a", "version" : "5.9.1" } }, { "identity" : "amplify-swift", "kind" : "remoteSourceControl", "location" : "https://github.com/aws-amplify/amplify-swift", "state" : { "revision" : "95d8f16780c4e11a243fdae93c386195347aea66", "version" : "2.42.1" } }, { "identity" : "amplify-swift-utils-notifications", "kind" : "remoteSourceControl", "location" : "https://github.com/aws-amplify/amplify-swift-utils-notifications.git", "state" : { "revision" : "959eec669ba97c7d923b963c3e66ca8a0b2737f6", "version" : "1.1.1" } }, { "identity" : "app-check", "kind" : "remoteSourceControl", "location" : "https://github.com/google/app-check.git", "state" : { "revision" : "21fe1af9be463a359aaf8d96789ef73fc3760d09", "version" : "11.0.1" } }, { "identity" : "aws-crt-swift", "kind" : "remoteSourceControl", "location" : "https://github.com/awslabs/aws-crt-swift", "state" : { "revision" : "7b42e0343f28b3451aab20840dc670abd12790bd", "version" : "0.36.0" } }, { "identity" : "aws-sdk-swift", "kind" : "remoteSourceControl", "location" : "https://github.com/awslabs/aws-sdk-swift.git", "state" : { "revision" : "828358a2c39d138325b0f87a2d813f4b972e5f4f", "version" : "1.0.0" } }, { "identity" : "combine-schedulers", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/combine-schedulers", "state" : { "revision" : "9fa31f4403da54855f1e2aeaeff478f4f0e40b13", "version" : "1.0.2" } }, { "identity" : "firebase-ios-sdk", "kind" : "remoteSourceControl", "location" : "https://github.com/firebase/firebase-ios-sdk", "state" : { "revision" : "f909f901bfba9e27e4e9da83242a4915d6dd64bb", "version" : "11.3.0" } }, { "identity" : "googleappmeasurement", "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleAppMeasurement.git", "state" : { "revision" : "93406fd21b85e66e2d6dbf50b472161fd75c3f1f", "version" : "11.3.0" } }, { "identity" : "googledatatransport", "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleDataTransport.git", "state" : { "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", "version" : "10.1.0" } }, { "identity" : "googleutilities", "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleUtilities.git", "state" : { "revision" : "53156c7ec267db846e6b64c9f4c4e31ba4cf75eb", "version" : "8.0.2" } }, { "identity" : "grpc-binary", "kind" : "remoteSourceControl", "location" : "https://github.com/google/grpc-binary.git", "state" : { "revision" : "f56d8fc3162de9a498377c7b6cea43431f4f5083", "version" : "1.65.1" } }, { "identity" : "gtm-session-fetcher", "kind" : "remoteSourceControl", "location" : "https://github.com/google/gtm-session-fetcher.git", "state" : { "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", "version" : "3.5.0" } }, { "identity" : "interop-ios-for-google-sdks", "kind" : "remoteSourceControl", "location" : "https://github.com/google/interop-ios-for-google-sdks.git", "state" : { "revision" : "2d12673670417654f08f5f90fdd62926dc3a2648", "version" : "100.0.0" } }, { "identity" : "jwtdecode.swift", "kind" : "remoteSourceControl", "location" : "https://github.com/auth0/JWTDecode.swift", "state" : { "revision" : "1e153ef009969543191970c66b7c60163c0b4a65", "version" : "3.2.0" } }, { "identity" : "keychainaccess", "kind" : "remoteSourceControl", "location" : "https://github.com/kishikawakatsumi/KeychainAccess.git", "state" : { "revision" : "84e546727d66f1adc5439debad16270d0fdd04e7", "version" : "4.2.2" } }, { "identity" : "leveldb", "kind" : "remoteSourceControl", "location" : "https://github.com/firebase/leveldb.git", "state" : { "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", "version" : "1.22.5" } }, { "identity" : "nanopb", "kind" : "remoteSourceControl", "location" : "https://github.com/firebase/nanopb.git", "state" : { "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", "version" : "2.30910.0" } }, { "identity" : "networkimage", "kind" : "remoteSourceControl", "location" : "https://github.com/gonzalezreal/NetworkImage", "state" : { "revision" : "7aff8d1b31148d32c5933d75557d42f6323ee3d1", "version" : "6.0.0" } }, { "identity" : "obfuscatemacro", "kind" : "remoteSourceControl", "location" : "https://github.com/p-x9/ObfuscateMacro", "state" : { "revision" : "e9109d5470a32e6e79adeb45b30b448a3625fd7d", "version" : "0.7.0" } }, { "identity" : "pendo-mobile-sdk", "kind" : "remoteSourceControl", "location" : "https://github.com/pendo-io/pendo-mobile-sdk", "state" : { "revision" : "3b8de7cf0c0a844e2295472fdecd192775ef1292", "version" : "3.4.2" } }, { "identity" : "promises", "kind" : "remoteSourceControl", "location" : "https://github.com/google/promises.git", "state" : { "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", "version" : "2.4.0" } }, { "identity" : "sdwebimage", "kind" : "remoteSourceControl", "location" : "https://github.com/SDWebImage/SDWebImage.git", "state" : { "revision" : "8a1be70a625683bc04d6903e2935bf23f3c6d609", "version" : "5.19.7" } }, { "identity" : "sdwebimagesvgcoder", "kind" : "remoteSourceControl", "location" : "https://github.com/SDWebImage/SDWebImageSVGCoder.git", "state" : { "revision" : "950167445ab703740569869c8b7510efc9d09a26", "version" : "1.7.0" } }, { "identity" : "sdwebimageswiftui", "kind" : "remoteSourceControl", "location" : "https://github.com/SDWebImage/SDWebImageSwiftUI.git", "state" : { "revision" : "5aa947356f4ea49a0c3b9968564267f6ea5abea7", "version" : "3.1.2" } }, { "identity" : "smithy-swift", "kind" : "remoteSourceControl", "location" : "https://github.com/smithy-lang/smithy-swift", "state" : { "revision" : "0ed3440f8c41e27a0937364d5035d2d4fefb8aa3", "version" : "0.71.0" } }, { "identity" : "sqlite.swift", "kind" : "remoteSourceControl", "location" : "https://github.com/stephencelis/SQLite.swift.git", "state" : { "revision" : "a95fc6df17d108bd99210db5e8a9bac90fe984b8", "version" : "0.15.3" } }, { "identity" : "swift-algorithms", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-algorithms.git", "state" : { "revision" : "f6919dfc309e7f1b56224378b11e28bab5bccc42", "version" : "1.2.0" } }, { "identity" : "swift-case-paths", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-case-paths", "state" : { "revision" : "642e6aab8e03e5f992d9c83e38c5be98cfad5078", "version" : "1.5.5" } }, { "identity" : "swift-clocks", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-clocks", "state" : { "revision" : "b9b24b69e2adda099a1fa381cda1eeec272d5b53", "version" : "1.0.5" } }, { "identity" : "swift-collections", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-collections", "state" : { "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", "version" : "1.1.4" } }, { "identity" : "swift-composable-architecture", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-composable-architecture", "state" : { "revision" : "8013f1a72af8ccb2b1735d7aed831a8dc07c6fd0", "version" : "1.15.0" } }, { "identity" : "swift-concurrency-extras", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-concurrency-extras", "state" : { "revision" : "6054df64b55186f08b6d0fd87152081b8ad8d613", "version" : "1.2.0" } }, { "identity" : "swift-custom-dump", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-custom-dump", "state" : { "revision" : "82645ec760917961cfa08c9c0c7104a57a0fa4b1", "version" : "1.3.3" } }, { "identity" : "swift-dependencies", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-dependencies", "state" : { "revision" : "0fc0255e780bf742abeef29dec80924f5f0ae7b9", "version" : "1.4.1" } }, { "identity" : "swift-identified-collections", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-identified-collections", "state" : { "revision" : "2f5ab6e091dd032b63dacbda052405756010dc3b", "version" : "1.1.0" } }, { "identity" : "swift-log", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-log.git", "state" : { "revision" : "9cb486020ebf03bfa5b5df985387a14a98744537", "version" : "1.6.1" } }, { "identity" : "swift-navigation", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-navigation", "state" : { "revision" : "d1bdbd8a5d1d1dfd2e4bb1f5e2f6facb631404d4", "version" : "2.2.1" } }, { "identity" : "swift-numerics", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-numerics.git", "state" : { "revision" : "0a5bc04095a675662cf24757cc0640aa2204253b", "version" : "1.0.2" } }, { "identity" : "swift-perception", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-perception", "state" : { "revision" : "bc67aa8e461351c97282c2419153757a446ae1c9", "version" : "1.3.5" } }, { "identity" : "swift-protobuf", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-protobuf.git", "state" : { "revision" : "edb6ed4919f7756157fe02f2552b7e3850a538e5", "version" : "1.28.1" } }, { "identity" : "swift-syntax", "kind" : "remoteSourceControl", "location" : "https://github.com/swiftlang/swift-syntax.git", "state" : { "revision" : "0687f71944021d616d34d922343dcef086855920", "version" : "600.0.1" } }, { "identity" : "swift-tagged", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-tagged", "state" : { "revision" : "3907a9438f5b57d317001dc99f3f11b46882272b", "version" : "0.10.0" } }, { "identity" : "xctest-dynamic-overlay", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", "state" : { "revision" : "27d767d643fa2cf083d0a73d74fa84cacb53e85c", "version" : "1.4.1" } } ], "version" : 3 } ```
If using CocoaPods, the project's Podfile.lock
na