-
-
Notifications
You must be signed in to change notification settings - Fork 10
Open
Description
Environment
- Xcode 16.4 (16F6)
- Simulator iOS 18.5 & physical device iOS 18.5
- FaultOrdering 1.0.0
Steps to Reproduce
Following the README instructions, I integrated FaultOrdering into our production app using an XCUITest.
The test is run with a debug scheme using release-level optimisations.
FaultOrdering is embedded via SwiftPM and added to the both app target’s (“Frameworks, Libraries, and Embedded Content” with Embed & Sign.) and UI test target
Observed Behavior
- An
.orderfile is successfully generated (~30 MB), and the test passes. - However, on the second app launch (when
RUN_FAULT_ORDER=1is set), the app freezes on the splash screen. AppDelegateis never called.- Xcode becomes unresponsive — it cannot detach or stop the app, and must be force-quit.
- This happens consistently on both simulator and real device.
- If I remove FaultOrdering from the app’s embedded frameworks for a physical device, the freeze goes away. But then I get:
preconditionFailure("No result data found")during the test.
Logs
UITestRunner:
CLIENT OF UIKIT REQUIRES UPDATE: This process does not adopt UIScene lifecycle. This will become an assert in a future version.
Running tests...
Fault ordering is not enabled
t = nans Interface orientation changed to Portrait
Test Suite 'Selected tests' started at 2025-07-24 09:50:33.693.
Test Suite 'MyAppUITests.xctest' started at 2025-07-24 09:50:33.693.
Test Suite 'FaultOrderingLaunchTest' started at 2025-07-24 09:50:33.693.
Test Case '-[MyAppUITests.FaultOrderingLaunchTest testLaunch]' started.
t = 0.00s Start Test at 2025-07-24 09:50:33.694
t = 0.02s Set Up
parsed linkmap with 374328 symbols
starting server ::1:38825
t = 3.41s Open com.example.myapp
t = 3.41s Launch com.example.myapp
warning: (arm64) /.../DerivedData/.../Build/Products/Debug_Stage-iphoneos/MyApp.app/MyApp empty dSYM file detected, dSYM was created with an executable with no debug info.
t = 19.99s Setting up automation session
t = 22.16s Wait for com.example.myapp to idle
<::1> open connection
<::1> request: GET /linkmap
Waiting for 10s for app to receive the linkmap
t = 36.35s Open com.example.myapp
t = 36.35s Launch com.example.myapp
t = 36.35s Terminate com.example.myapp:28103
<unknown>:0: error: -[MyAppUITests.FaultOrderingLaunchTest testLaunch] : Synchronous URL loading of http://localhost:38825/linkmap should not occur on this application's main thread as it may lead to UI unresponsiveness. Please switch to an asynchronous networking API such as URLSession.
<::1> close connection
t = 38.28s Setting up automation session
t = 98.31s Wait for com.example.myapp to idle
t = 104.59s Unable to monitor animations
t = 104.60s Unable to monitor event loop
Waiting for 120s to give the app time to run post-launch
t = 228.32s Added attachment named 'order-file'
t = 228.43s Tear Down
Test Case '-[MyAppUITests.FaultOrderingLaunchTest testLaunch]' passed (228.645 seconds).
Test Suite 'FaultOrderingLaunchTest' passed at 2025-07-24 09:54:22.340.
Executed 1 test, with 0 failures (0 unexpected) in 228.645 (228.647) seconds
Test Suite 'MyAppUITests.xctest' passed at 2025-07-24 09:54:22.341.
Executed 1 test, with 0 failures (0 unexpected) in 228.645 (228.648) seconds
Test Suite 'Selected tests' passed at 2025-07-24 09:54:22.342.
Executed 1 test, with 0 failures (0 unexpected) in 228.645 (228.649) seconds
App:
objc[28110]: Class GMSSDKMapsMobileSdksRoot is implemented in both /private/var/containers/Bundle/Application/.../MyApp.app/MyApp.debug.dylib (0x12333b408) and /private/var/containers/Bundle/Application/.../MyApp.app/MyApp.debug.dylib (0x12334e3c8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKDeductQuotaRequest is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b458) and /.../MyApp.app/MyApp.debug.dylib (0x12334e418). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKDeductQuotaRequest_Event is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b4a8) and /.../MyApp.app/MyApp.debug.dylib (0x12334e468). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKDeductQuotaResponse is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b4f8) and /.../MyApp.app/MyApp.debug.dylib (0x12334e4b8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKClientTypeRoot is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b5e8) and /.../MyApp.app/MyApp.debug.dylib (0x12334e508). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKClientTypeEnums is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b638) and /.../MyApp.app/MyApp.debug.dylib (0x12334e558). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKQuotaEventRoot is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b688) and /.../MyApp.app/MyApp.debug.dylib (0x12334e918). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKEventTypeEnums is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b6d8) and /.../MyApp.app/MyApp.debug.dylib (0x12334e968). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKQuotaResponseCodeRoot is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b728) and /.../MyApp.app/MyApp.debug.dylib (0x12334e9b8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[28110]: Class GMSSDKQuotaResponseCodeEnums is implemented in both /.../MyApp.app/MyApp.debug.dylib (0x12333b778) and /.../MyApp.app/MyApp.debug.dylib (0x12334ea08). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
Exception server started
starting server ::1:38824
Not breakpoint message
<::1> open connection
<::1> request: GET /file
<::1> close connection
Expected Result
- The second launch should run normally.
- FaultOrdering should return a valid (after app's lifecycle)
.orderfile .
Actual Result
- The app freezes before entering
main()orAppDelegate. - Test completes, but the
.orderfile could be potentially incorrect as the app didn't finish its lifecycle. - Removing the FaultOrdering product removes the freeze but breaks symbol collection.
Thanks for open-sourcing this tool — it's really powerful and we're eager to integrate it smoothly.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels