Adeha is a minimal physical-device proof that an iOS UI-test runner can launch itself and execute its automation independently after Xcode installs it.
The special behavior comes from one build setting on the UI-test target:
SKIP_COPYING_TEST_FRAMEWORKS = YES
In an XcodeGen target specification, that is:
settings:
SKIP_COPYING_TEST_FRAMEWORKS: YESThe setting tells Xcode to omit its copied testing frameworks from the runner. The runner can then use the testing frameworks available through the device's developer support environment when launched directly.
The rest of this repository is the smallest readable fixture we found for
demonstrating that behavior. project.yml describes the UI-test target, and
Adeha.swift contains automation that leaves the runner, opens SpringBoard,
and drags the Home Screen.
Add SKIP_COPYING_TEST_FRAMEWORKS as a user-defined build setting on the
UI-test target and set it to YES. With XcodeGen, add the YAML line shown
above. This is a direct target setting; project generators merely express it.
Install XcodeGen, then replace the bundle identifier and development team in
project.yml with your own values:
brew install xcodegen
xcodegen generateConnect an iPhone with Developer Mode enabled. Ask Xcode for its available destinations and copy the phone's iOS device ID:
xcodebuild -project Adeha.xcodeproj -scheme Adeha -showdestinationsBuild, install, and test the runner:
xcodebuild \
-project Adeha.xcodeproj \
-scheme Adeha \
-destination 'platform=iOS,id=DEVICE_ID' \
testLaunch Adeha-Runner from the Home Screen to run the automation again. After
changing Adeha.swift, rerun xcodebuild test to rebuild and reinstall it.
Regenerate the project after changing project.yml or the source layout.
We tested both configurations on the same iPhone:
- With the setting absent,
xcodebuild testpassed while direct launch terminated during its attempt to initiate acom.apple.testmanagerdsession. - With the setting set to
YES,xcodebuild testpassed and direct launch ran the test suite successfully with exit code 0.
Verified on August 26, 2026, with Xcode 26.3 and an iPhone 16 Pro Max running iOS 26.6.