diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml index 909b3eda..57c8b76c 100644 --- a/.github/workflows/ui-tests.yml +++ b/.github/workflows/ui-tests.yml @@ -47,6 +47,8 @@ jobs: with: targetPlatform: ${{ matrix.targetPlatform }} projectPath: sample + buildMethod: ${{ matrix.buildMethod }} + customParameters: -logFile logFile.log -quit -batchmode - name: List build directory run: ls -R ./ - name: Upload artifact @@ -70,9 +72,6 @@ jobs: - targetPlatform: Android runs-on: [ self-hosted, macOS ] test_script: browserstack-sdk pytest -s ./test/test_android.py --browserstack.config "browserstack.android.yml" - - targetPlatform: iOS - runs-on: [ self-hosted, macOS ] - test_script: browserstack-sdk pytest -s ./test/test_ios.py --browserstack.config "browserstack.ios.yml" concurrency: group: test-${{ matrix.targetPlatform }} runs-on: ${{ matrix.runs-on }} @@ -110,9 +109,28 @@ jobs: MAILSLURP_API_KEY: ${{ secrets.MAILSLURP_API_KEY }} BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }} BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} - run: | - pwd - ls -la - cd sample/Tests - ./${{ matrix.test_script }} + working-directory: sample/Tests + run: ${{ matrix.test_script }} + test-ios: + name: Run iOS UI tests 🧪 + runs-on: [ self-hosted, macOS ] + steps: + - uses: actions/checkout@v3 + with: + lfs: true + - name: build iOS app + working-directory: sample + run: ./build_ios.sh + - uses: actions/setup-python@v4 + with: + python-version: "3.10" + - name: Install dependencies + run: pip install -r "sample/Tests/requirements.txt" + - name: Run UI tests + env: + MAILSLURP_API_KEY: ${{ secrets.MAILSLURP_API_KEY }} + BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }} + BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} + working-directory: sample/Tests + run: browserstack-sdk pytest -s ./test/test_ios.py --browserstack.config "browserstack.ios.yml" \ No newline at end of file diff --git a/sample/Tests/Payload.ipa b/sample/Tests/Payload.ipa deleted file mode 100644 index 8397d92d..00000000 Binary files a/sample/Tests/Payload.ipa and /dev/null differ diff --git a/sample/Tests/browserstack.ios.yml b/sample/Tests/browserstack.ios.yml index 4d39ce54..ed8a216f 100644 --- a/sample/Tests/browserstack.ios.yml +++ b/sample/Tests/browserstack.ios.yml @@ -26,7 +26,7 @@ source: pytest-browserstack:sample-sdk:v1.0 # Set `app` to define the app that is to be used for testing. # It can either take the id of any uploaded app or the path of the app directly. #app: ./WikipediaSample.apk -app: ./Payload.ipa #For running local tests +app: ../build/output/iOS/IPA/Payload.ipa #For running local tests # ======================================= # Platforms (Browsers / Devices to test) diff --git a/sample/build_ios.sh b/sample/build_ios.sh new file mode 100755 index 00000000..a9e3e5e4 --- /dev/null +++ b/sample/build_ios.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +PATH_UNITY="/Applications/Unity/Unity.app/Contents/MacOS/Unity" +PATH_TO_UNITY_SDK_SAMPLE_APP="./" +BUILD_METHOD="MobileBuilder.BuildForAltTester" +APPLE_TEAM_ID="" + +# Define the build paths +BUILD_XCODE_PATH="$(pwd)/build/output/iOS/Xcode" +BUILD_ARCHIVE_PATH="$(pwd)/build/output/iOS/Archive" +BUILD_IPA_PATH="$(pwd)/build/output/iOS/IPA" + +# Function to clear a directory +clear_directory() { + local dir_path=$1 + if [ -d "$dir_path" ]; then + echo "Clearing contents of $dir_path." + rm -rf "$dir_path"/* + else + echo "Directory not found at $dir_path" + fi +} + +# Clear all specified directories +clear_directory "$BUILD_XCODE_PATH" +clear_directory "$BUILD_ARCHIVE_PATH" +clear_directory "$BUILD_IPA_PATH" + +# Unity build command +UNITY_COMMAND="$PATH_UNITY -projectPath \"$PATH_TO_UNITY_SDK_SAMPLE_APP\" -executeMethod $BUILD_METHOD -logFile logFile.log -quit -batchmode --buildPath \"$BUILD_XCODE_PATH\" --platform iOS" +echo "Running command: $UNITY_COMMAND" + +# Execute the Unity build command +eval "$UNITY_COMMAND" + +# Check if the Unity build command was successful +if [ $? -ne 0 ]; then + echo "Unity build failed. Exiting script." + exit 1 +fi + +# Build and archive project +xcodebuild -project "$(pwd)/build/output/iOS/Xcode/Unity-iPhone.xcodeproj" \ + -scheme Unity-iPhone \ + -archivePath "$(pwd)/build/output/iOS/Archive/Unity-iPhone.xcarchive" \ + -configuration Release \ + DEVELOPMENT_TEAM="$APPLE_TEAM_ID" \ + CODE_SIGN_STYLE=Automatic \ + archive + +# Create ExportOptions.plist with the correct APPLE_TEAM_ID +EXPORT_OPTIONS_PATH="$(pwd)/build/output/iOS/Archive/ExportOptions.plist" + +cat < "$EXPORT_OPTIONS_PATH" + + + + + method + development + teamID + $APPLE_TEAM_ID + signingStyle + automatic + compileBitcode + + thinning + <none> + + +EOF + +# Generate .ipa file +xcodebuild -exportArchive \ + -archivePath "$(pwd)/build/output/iOS/Archive/Unity-iPhone.xcarchive" \ + -exportPath "$(pwd)/build/output/iOS/IPA" \ + -exportOptionsPlist "$EXPORT_OPTIONS_PATH"