Skip to content

Order File is generated but app freezes (when RUN_FAULT_ORDER=1 is set) #15

@saluja-amandeep

Description

@saluja-amandeep

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 .order file is successfully generated (~30 MB), and the test passes.
  • However, on the second app launch (when RUN_FAULT_ORDER=1 is set), the app freezes on the splash screen.
  • AppDelegate is 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) .order file .

Actual Result

  • The app freezes before entering main() or AppDelegate.
  • Test completes, but the .order file 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions