diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml index 7a4adae3..daff3c19 100644 --- a/.github/workflows/ui-tests.yml +++ b/.github/workflows/ui-tests.yml @@ -69,9 +69,9 @@ jobs: - targetPlatform: StandaloneWindows64 runs-on: [self-hosted, windows] test_script: pytest -xs test/test_windows.py::WindowsTest - # - targetPlatform: Android - # runs-on: [ self-hosted, macOS ] - # test_script: browserstack-sdk pytest -s ./test/test_android.py --browserstack.config "browserstack.android.yml" + - targetPlatform: Android + runs-on: [ self-hosted, macOS ] + test_script: browserstack-sdk pytest -s ./test/test_android.py --browserstack.config "browserstack.android.yml" concurrency: group: test-${{ matrix.targetPlatform }} runs-on: ${{ matrix.runs-on }} @@ -110,26 +110,26 @@ jobs: BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} 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" + 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-mobile.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/Assets/Editor/MobileBuilder.cs b/sample/Assets/Editor/MobileBuilder.cs index 116108f0..d80d5bf9 100644 --- a/sample/Assets/Editor/MobileBuilder.cs +++ b/sample/Assets/Editor/MobileBuilder.cs @@ -31,6 +31,12 @@ private static void BuildPlayer(string defaultBuildPath, BuildOptions buildOptio { string buildPath = GetBuildPathFromArgs(defaultBuildPath); + if (platform == BuildTarget.iOS) + { + string bundleIdentifier = GetBundleIdentifierFromArgs(); + PlayerSettings.applicationIdentifier = bundleIdentifier; + } + BuildPlayerOptions buildPlayerOptions = CreateBuildPlayerOptions(buildPath, buildOptions, platform); if (setupForAltTester) @@ -79,6 +85,19 @@ private static BuildTarget GetPlatformFromArgs() return BuildTarget.Android; // Default to Android if no platform is specified } + private static string GetBundleIdentifierFromArgs() + { + string[] args = Environment.GetCommandLineArgs(); + for (int i = 0; i < args.Length; i++) + { + if (args[i] == "--bundleIdentifier" && i + 1 < args.Length) + { + return args[i + 1]; + } + } + return "com.immutable.Immutable-Sample"; + } + private static string GetAltTesterHostFromArgs() { string[] args = Environment.GetCommandLineArgs(); diff --git a/sample/Tests/browserstack.ios.yml b/sample/Tests/browserstack.ios.yml index ed8a216f..4d39ce54 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: ../build/output/iOS/IPA/Payload.ipa #For running local tests +app: ./Payload.ipa #For running local tests # ======================================= # Platforms (Browsers / Devices to test) diff --git a/sample/Tests/src/fetch_otp.py b/sample/Tests/src/fetch_otp.py index 1b406388..49443bba 100644 --- a/sample/Tests/src/fetch_otp.py +++ b/sample/Tests/src/fetch_otp.py @@ -3,8 +3,8 @@ from mailslurp_client.api import WaitForControllerApi import re -INBOX_ID = "26b067b8-ef3a-4655-955a-19f157b35b6e" -EMAIL = "26b067b8-ef3a-4655-955a-19f157b35b6e@mailslurp.net" +INBOX_ID = "2d8e4d25-91f6-4da5-b613-bf3b807dc5d5" +EMAIL = "2d8e4d25-91f6-4da5-b613-bf3b807dc5d5@mailslurp.net" def get_mailslurp_client(): configuration = mailslurp_client.Configuration() diff --git a/sample/Tests/test/test.py b/sample/Tests/test/test.py index 7593d747..1d11e6f5 100644 --- a/sample/Tests/test/test.py +++ b/sample/Tests/test/test.py @@ -7,9 +7,9 @@ from alttester import * class TestConfig: - EMAIL = "26b067b8-ef3a-4655-955a-19f157b35b6e@mailslurp.net" - PASSPORT_ID="email|673d0795219c150acebff862" - WALLET_ADDRESS = "0x9af9826a83581ddfa0bdd7754de8a741ce64ebe8" + EMAIL = "2d8e4d25-91f6-4da5-b613-bf3b807dc5d5@mailslurp.net" + PASSPORT_ID="email|673eb448219c150aceb417da" + WALLET_ADDRESS = "0x2eaedd0e4c78d44fcb87d7494463360810761c3e" class UnityTest(unittest.TestCase): diff --git a/sample/Tests/test/test_ios.py b/sample/Tests/test/test_ios.py index ce5f3aa9..0ccd9f6a 100644 --- a/sample/Tests/test/test_ios.py +++ b/sample/Tests/test/test_ios.py @@ -12,8 +12,10 @@ from alttester import AltDriver, By +from test import TestConfig + sys.path.insert(0, str(Path(__file__).resolve().parent.parent / 'src')) -from fetch_otp import EMAIL, fetch_code +from fetch_otp import fetch_code # To run this test on an actual Android device: appium --base-path /wd/hub --allow-insecure chromedriver_autodownload class TestBase(unittest.TestCase): @@ -24,9 +26,7 @@ class TestBase(unittest.TestCase): def setUpClass(cls): # https://appium.github.io/appium-xcuitest-driver/latest/preparation/real-device-config/ options = XCUITestOptions() - options.app = "./Payload.ipa" options.show_xcode_log = True - options.xcode_org_id = "APPLE_TEAM_ID" # Replace with Apple Team ID options.auto_accept_alerts = True cls.appium_driver = webdriver.Remote('https://hub-cloud.browserstack.com/wd/hub/', options=options) @@ -75,14 +75,14 @@ def test_1_pkce_login(self): # Found email target_context = context - email_field.send_keys("imx.game.sdk.demo@gmail.com") + email_field.send_keys(TestConfig.EMAIL) submit_button = driver.find_element(by=AppiumBy.XPATH, value="//form/div/div/div[2]/button") submit_button.click() time.sleep(10) # Wait for OTP - code = fetch_gmail_code() - assert code, "Failed to fetch OTP from Gmail" + code = fetch_code() + assert code, "Failed to fetch OTP from MailSlurp" print(f"Successfully fetched OTP: {code}") # Unlike on Android, each digit must be entered into a separate input field on iOS. diff --git a/sample/build_ios.sh b/sample/build_ios.sh index a9e3e5e4..9cdeb517 100755 --- a/sample/build_ios.sh +++ b/sample/build_ios.sh @@ -1,14 +1,15 @@ #!/bin/bash -PATH_UNITY="/Applications/Unity/Unity.app/Contents/MacOS/Unity" +PATH_UNITY="/Applications/Unity/Hub/Editor/2021.3.26f1/Unity.app/Contents/MacOS/Unity" PATH_TO_UNITY_SDK_SAMPLE_APP="./" BUILD_METHOD="MobileBuilder.BuildForAltTester" -APPLE_TEAM_ID="" +APPLE_TEAM_ID="54XMLXPF98" # 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" +DERIVED_DATA_PATH="$(pwd)/build/output/iOS/DerivedData" # Function to clear a directory clear_directory() { @@ -25,9 +26,15 @@ clear_directory() { clear_directory "$BUILD_XCODE_PATH" clear_directory "$BUILD_ARCHIVE_PATH" clear_directory "$BUILD_IPA_PATH" +clear_directory "$DERIVED_DATA_PATH" + +mkdir -p "$BUILD_XCODE_PATH" +mkdir -p "$BUILD_ARCHIVE_PATH" +mkdir -p "$BUILD_IPA_PATH" +mkdir -p "$DERIVED_DATA_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" +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 --bundleIdentifier com.immutable.Immutable-Sample-GameSDK" echo "Running command: $UNITY_COMMAND" # Execute the Unity build command @@ -39,39 +46,19 @@ if [ $? -ne 0 ]; then exit 1 fi -# Build and archive project -xcodebuild -project "$(pwd)/build/output/iOS/Xcode/Unity-iPhone.xcodeproj" \ +echo "Building app..." +xcodebuild clean build \ + -project "$(pwd)/build/output/iOS/Xcode/Unity-iPhone.xcodeproj" \ -scheme Unity-iPhone \ - -archivePath "$(pwd)/build/output/iOS/Archive/Unity-iPhone.xcarchive" \ - -configuration Release \ + -destination "generic/platform=iOS" \ DEVELOPMENT_TEAM="$APPLE_TEAM_ID" \ - CODE_SIGN_STYLE=Automatic \ - archive + -allowProvisioningUpdates \ + -derivedDataPath "$(pwd)/build/output/iOS/DerivedData" + +mkdir -p "$(pwd)/build/output/iOS/IPA/Payload" -# Create ExportOptions.plist with the correct APPLE_TEAM_ID -EXPORT_OPTIONS_PATH="$(pwd)/build/output/iOS/Archive/ExportOptions.plist" +mv "$(pwd)/build/output/iOS/DerivedData/Build/Products/ReleaseForRunning-iphoneos/ImmutableSample.app" "$(pwd)/build/output/iOS/IPA/Payload" -cat < "$EXPORT_OPTIONS_PATH" - - - - - method - development - teamID - $APPLE_TEAM_ID - signingStyle - automatic - compileBitcode - - thinning - <none> - - -EOF +pushd "$(pwd)/build/output/iOS/IPA" && zip -r Payload.zip Payload && popd -# Generate .ipa file -xcodebuild -exportArchive \ - -archivePath "$(pwd)/build/output/iOS/Archive/Unity-iPhone.xcarchive" \ - -exportPath "$(pwd)/build/output/iOS/IPA" \ - -exportOptionsPlist "$EXPORT_OPTIONS_PATH" +mv "$(pwd)/build/output/iOS/IPA/Payload.zip" "$(pwd)/Tests/Payload.ipa" \ No newline at end of file