6565 HARNESS_IOS_IPA_ARTIFACT_NAME : harness-ios-ipa
6666 HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_ARTIFACT_NAME : harness-xctest-agent-ipa
6767 HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_PATH : apps/simple-camera/ios/build/devicefarm/HarnessXCTestAgentUITests.ipa
68+ HARNESS_IOS_XCTEST_UI_TEST_PACKAGE_OUTPUT : apps/simple-camera/ios/build/devicefarm/HarnessXCTestUITestPackage.zip
69+ HARNESS_DEVICE_FARM_REPO_ARCHIVE_NAME : react-native-vision-camera.zip
6870 HARNESS_DEVICE_FARM_TEST_PACKAGE_OUTPUT : devicefarm-test-package.zip
6971 HARNESS_ANDROID_BUNDLE_ID : com.margelo.nitro.camera.example.simple
7072 HARNESS_ANDROID_DEVICE_ARCH : ${{ github.event.inputs.device_arch || 'arm64-v8a' }}
@@ -185,7 +187,7 @@ jobs:
185187 project-arn : ${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}
186188 aws-region : ${{ env.HARNESS_AWS_REGION }}
187189 file-path : apps/simple-camera/device-farm-tests/AwsTestSpecIOS.yml
188- upload-type : APPIUM_NODE_TEST_SPEC
190+ upload-type : XCTEST_UI_TEST_SPEC
189191 content-type : application/octet-stream
190192 upload-name : AwsTestSpecIOS-${{ github.run_id }}-${{ github.run_attempt }}.yml
191193
@@ -295,16 +297,6 @@ jobs:
295297 platform : android
296298 test-step-outcome : ${{ steps.run-test.outcome }}
297299
298- # iOS testing on AWS Device Farm is temporarily disabled.
299- # Device Farm has no UI operator to tap through runtime permission dialogs
300- # (Camera, Microphone, Location, etc.), so the app hangs on first launch.
301- # Unlike Android, there is no equivalent to `adb shell pm grant` for iOS, so
302- # we depend on an upcoming React Native Harness feature to pre-grant iOS
303- # permissions. Until that ships, we still build the iOS app here as a
304- # compile-only smoke test (and to keep the DerivedData/Pods caches warm), but
305- # we do NOT schedule any Device Farm run.
306- # TODO: Re-enable iOS Device Farm testing once Harness ships iOS permission
307- # pre-granting.
308300 build-ios :
309301 name : Build iOS
310302 runs-on : macos-latest
@@ -510,6 +502,38 @@ jobs:
510502 - name : Verify Harness XCTest UI runner IPA artifact
511503 run : test -f ${{ env.HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_PATH }}
512504
505+ - name : Create XCTest UI test package
506+ run : |
507+ set -euo pipefail
508+
509+ PACKAGE_PATH="${{ env.HARNESS_IOS_XCTEST_UI_TEST_PACKAGE_OUTPUT }}"
510+ PACKAGE_ROOT="$(mktemp -d)"
511+ REPO_ARCHIVE="$PACKAGE_ROOT/${{ env.HARNESS_DEVICE_FARM_REPO_ARCHIVE_NAME }}"
512+ RUNNER_IPA="$PACKAGE_ROOT/$(basename "${{ env.HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_PATH }}")"
513+
514+ rm -f "$PACKAGE_PATH"
515+ mkdir -p "$(dirname "$PACKAGE_PATH")"
516+
517+ git archive \
518+ --format=zip \
519+ --output "$REPO_ARCHIVE" \
520+ HEAD
521+
522+ cp "${{ env.HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_PATH }}" "$RUNNER_IPA"
523+
524+ (
525+ cd "$PACKAGE_ROOT"
526+ zip -qry "$GITHUB_WORKSPACE/$PACKAGE_PATH" \
527+ "$(basename "$RUNNER_IPA")" \
528+ "${{ env.HARNESS_DEVICE_FARM_REPO_ARCHIVE_NAME }}"
529+ )
530+
531+ unzip -tq "$PACKAGE_PATH"
532+ unzip -l "$PACKAGE_PATH"
533+
534+ - name : Verify XCTest UI test package
535+ run : test -f ${{ env.HARNESS_IOS_XCTEST_UI_TEST_PACKAGE_OUTPUT }}
536+
513537 - name : Configure AWS credentials
514538 uses : aws-actions/configure-aws-credentials@v6
515539 with :
@@ -527,16 +551,16 @@ jobs:
527551 content-type : application/octet-stream
528552 upload-name : simple-camera-${{ github.run_id }}-${{ github.run_attempt }}.ipa
529553
530- - name : Upload Harness XCTest UI runner IPA to AWS Device Farm
531- id : upload-xctest-runner
554+ - name : Upload XCTest UI test package to AWS Device Farm
555+ id : upload-xctest-ui-package
532556 uses : ./.github/actions/upload-devicefarm-artifact
533557 with :
534558 project-arn : ${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}
535559 aws-region : ${{ env.HARNESS_AWS_REGION }}
536- file-path : ${{ env.HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_PATH }}
537- upload-type : IOS_APP
538- content-type : application/octet-stream
539- upload-name : ${{ env.HARNESS_IOS_HARNESS_XCTEST_RUNNER_IPA_ARTIFACT_NAME }}- ${{ github.run_id }}-${{ github.run_attempt }}.ipa
560+ file-path : ${{ env.HARNESS_IOS_XCTEST_UI_TEST_PACKAGE_OUTPUT }}
561+ upload-type : XCTEST_UI_TEST_PACKAGE
562+ content-type : application/zip
563+ upload-name : harness-xctest-ui-package- ${{ github.run_id }}-${{ github.run_attempt }}.zip
540564
541565 - name : Schedule Device Farm iOS Automated Test
542566 id : run-test
@@ -548,14 +572,9 @@ jobs:
548572 "projectArn": "${{ env.HARNESS_DEVICE_FARM_PROJECT_ARN }}",
549573 "appArn": "${{ steps.upload-ipa.outputs['upload-arn'] }}",
550574 "devicePoolArn": "${{ env.HARNESS_DEVICE_FARM_IOS_DEVICE_POOL_ARN }}",
551- "configuration": {
552- "auxiliaryApps": [
553- "${{ steps.upload-xctest-runner.outputs['upload-arn'] }}"
554- ]
555- },
556575 "test": {
557- "type": "APPIUM_NODE ",
558- "testPackageArn": "${{ needs.prepare-devicefarm-assets .outputs.test_package_arn }}",
576+ "type": "XCTEST_UI ",
577+ "testPackageArn": "${{ steps.upload-xctest-ui-package .outputs['upload-arn'] }}",
559578 "testSpecArn": "${{ needs.prepare-devicefarm-assets.outputs.ios_test_spec_arn }}"
560579 }
561580 }
0 commit comments