From 0a94e21700607f4b188860a1687e1324708149c5 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 6 Jul 2026 15:03:21 -0300 Subject: [PATCH 1/2] ci(e2e-pay): drop universal-link (deeplink) support from wallet E2E MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors reown-com/react-native-examples#563. WalletConnect/actions#109 removes the Universal Link pay test (pay_single_option_nokyc_deeplink) from the shared suite, so the wallet-side infra that existed only to make it pass is dead weight. Pay links still reach the wallet via NFC. - app config: stop registering pay.walletconnect universal links — remove the https App Links autoVerify intent-filter (AndroidManifest.xml) and the applinks:pay.walletconnect.* entries (Runner.entitlements). Kept lab.reown.com / appkit-lab.reown.com (real dApp deep-link-back / link-mode) and the NFC NDEF_DISCOVERED intent-filter. Dart pay-link handler is unchanged. - ci: build the Maestro iOS simulator app unsigned (CODE_SIGNING_ALLOWED=NO, drop DEVELOPMENT_TEAM / CODE_SIGN_STYLE) — signing existed only to keep the associated-domains entitlement for the UL test. ARCHS=x86_64 kept (MLKit). - ci: remove the associated-domains developer-mode entitlement patch, swcutil reset, AASA cache priming, and the swcutil show dumps. - Bump the three shared-flow pins (pay-tests, setup, permit2-reset) and the setup-script REF to the #109 head (28181b5) so the deeplink flow is no longer downloaded. Follow-up: re-point all pins to the merge commit once WalletConnect/actions#109 lands on master. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci_e2e_pay_tests.yml | 70 ++++--------------- .../android/app/src/main/AndroidManifest.xml | 15 +--- .../example/ios/Runner/Runner.entitlements | 3 - .../lib/dependencies/deep_link_handler.dart | 4 ++ scripts/setup-maestro-pay-tests.sh | 2 +- 5 files changed, 22 insertions(+), 72 deletions(-) diff --git a/.github/workflows/ci_e2e_pay_tests.yml b/.github/workflows/ci_e2e_pay_tests.yml index ce1a7513..8f2e8743 100644 --- a/.github/workflows/ci_e2e_pay_tests.yml +++ b/.github/workflows/ci_e2e_pay_tests.yml @@ -113,10 +113,10 @@ jobs: --split-per-abi - name: Copy Maestro Pay test flows - uses: WalletConnect/actions/maestro/pay-tests@ddc7c0f9acd8b1576e9a78f0ef67f4b8fbb36db2 + uses: WalletConnect/actions/maestro/pay-tests@28181b5f133836380d2d9bb8ff06af5c3234fb9d - name: Install Maestro CLI - uses: WalletConnect/actions/maestro/setup@ddc7c0f9acd8b1576e9a78f0ef67f4b8fbb36db2 + uses: WalletConnect/actions/maestro/setup@28181b5f133836380d2d9bb8ff06af5c3234fb9d - name: Setup Android SDK uses: android-actions/setup-android@v3 @@ -160,7 +160,7 @@ jobs: - name: Reset USDT Permit2 allowance (Polygon) if: always() continue-on-error: true - uses: WalletConnect/actions/maestro/permit2-reset@ddc7c0f9acd8b1576e9a78f0ef67f4b8fbb36db2 + uses: WalletConnect/actions/maestro/permit2-reset@28181b5f133836380d2d9bb8ff06af5c3234fb9d with: chain-id: eip155:137 rpc-url: https://polygon-bor-rpc.publicnode.com @@ -266,15 +266,12 @@ jobs: run: pod repo update --silent # Two-step iOS simulator build: let Flutter emit Dart kernel + - # Generated.xcconfig, then drive xcodebuild ourselves. - # `flutter build ios --simulator` passes CODE_SIGNING_ALLOWED=NO, - # which strips entitlements and breaks Universal Links on the CI - # simulator (deep-link flow falls back to Safari). We also - # override DEVELOPMENT_TEAM + CODE_SIGN_STYLE: the project only - # sets DEVELOPMENT_TEAM for sdk=iphoneos*, so a plain simulator - # build would sign with an empty team prefix, and iOS rejects - # the app as an AASA handler because W5R8AG9K22. from - # the AASA no longer matches the app's application-identifier. + # Generated.xcconfig, then drive xcodebuild ourselves. The custom + # xcodebuild step exists only to pin ARCHS=x86_64 for the + # mobile_scanner/MLKit simulator slice (see the build step below) — + # `flutter build ios --simulator` can't override ARCHS. The build is + # unsigned: the pay suite no longer exercises Universal Links, so no + # associated-domains entitlement needs to survive. - name: Prepare Flutter iOS artifacts working-directory: packages/reown_walletkit/example run: | @@ -291,30 +288,7 @@ jobs: working-directory: packages/reown_walletkit/example/ios run: pod install - # iOS resolves Universal Links via the AASA file, which it fetches through - # Apple's CDN — often stale/missing on a fresh simulator, so the link opens - # Safari instead of the wallet. Appending `?mode=developer` to each associated - # domain makes the simulator fetch the AASA directly from the origin server, - # bypassing the CDN. Patched only here (CI runner); the committed entitlements - # file is untouched, so release builds keep reading the clean file. - - name: Enable associated-domains developer mode (Maestro build only) - run: | - set -euo pipefail - PB=/usr/libexec/PlistBuddy - ENT=packages/reown_walletkit/example/ios/Runner/Runner.entitlements - KEY=":com.apple.developer.associated-domains" - i=0 - while val=$("$PB" -c "Print $KEY:$i" "$ENT" 2>/dev/null); do - case "$val" in - applinks:*'?mode=developer') ;; - applinks:*) "$PB" -c "Set $KEY:$i ${val}?mode=developer" "$ENT" ;; - esac - i=$((i + 1)) - done - echo "Patched applinks entries in $ENT:" - "$PB" -c "Print $KEY" "$ENT" - - - name: Build Runner.app via xcodebuild (automatic signing) + - name: Build Runner.app via xcodebuild (unsigned) id: build_ios working-directory: packages/reown_walletkit/example/ios # Build the simulator app for x86_64. mobile_scanner pulls in Google @@ -337,13 +311,8 @@ jobs: -derivedDataPath ../build/ios-ddcache \ ARCHS=x86_64 \ ONLY_ACTIVE_ARCH=NO \ - CODE_SIGNING_ALLOWED=YES \ - CODE_SIGN_STYLE=Automatic \ - DEVELOPMENT_TEAM=W5R8AG9K22 \ - PROVISIONING_PROFILE_SPECIFIER= \ + CODE_SIGNING_ALLOWED=NO \ build - codesign --display --entitlements - \ - "../build/ios-ddcache/Build/Products/Debug-internal-iphonesimulator/Runner.app" - name: Boot iOS simulator run: | @@ -361,8 +330,6 @@ jobs: xcrun simctl boot "$SIMULATOR_UDID" 2>/dev/null || true # Wait for full boot before configuring the simulator xcrun simctl bootstatus "$SIMULATOR_UDID" -b - # Reset associated-domains state before install so the applinks binding isn't wiped later - xcrun simctl spawn booted swcutil reset || true # Disable UIKit animations to reduce Maestro timing flakiness xcrun simctl spawn booted defaults write com.apple.UIKit UIAnimationDragCoefficient -float 0 || true @@ -377,25 +344,16 @@ jobs: fi echo "Installing: $APP_PATH" xcrun simctl install booted "$APP_PATH" - # Prime the associated-domains cache for the pay Universal Link domains - for domain in pay.walletconnect.com staging.pay.walletconnect.com dev.pay.walletconnect.com lab.reown.com; do - xcrun simctl spawn booted swcutil dl -d "$domain" || true - done - sleep 3 - echo "=== swcutil show (after install + priming) ===" - xcrun simctl spawn booted swcutil show || true - name: Copy Maestro Pay test flows - uses: WalletConnect/actions/maestro/pay-tests@ddc7c0f9acd8b1576e9a78f0ef67f4b8fbb36db2 + uses: WalletConnect/actions/maestro/pay-tests@28181b5f133836380d2d9bb8ff06af5c3234fb9d - name: Install Maestro CLI - uses: WalletConnect/actions/maestro/setup@ddc7c0f9acd8b1576e9a78f0ef67f4b8fbb36db2 + uses: WalletConnect/actions/maestro/setup@28181b5f133836380d2d9bb8ff06af5c3234fb9d - name: Run Maestro iOS tests id: maestro_ios run: | - echo "=== swcutil show (Maestro run start) ===" - xcrun simctl spawn booted swcutil show || true maestro test \ --env APP_ID=com.walletconnect.flutterwallet.internal \ --env WPAY_CUSTOMER_KEY_SINGLE_NOKYC=${{ secrets.WPAY_CUSTOMER_KEY_SINGLE_NOKYC }} \ @@ -416,7 +374,7 @@ jobs: - name: Reset USDT Permit2 allowance (Polygon) if: always() continue-on-error: true - uses: WalletConnect/actions/maestro/permit2-reset@ddc7c0f9acd8b1576e9a78f0ef67f4b8fbb36db2 + uses: WalletConnect/actions/maestro/permit2-reset@28181b5f133836380d2d9bb8ff06af5c3234fb9d with: chain-id: eip155:137 rpc-url: https://polygon-bor-rpc.publicnode.com diff --git a/packages/reown_walletkit/example/android/app/src/main/AndroidManifest.xml b/packages/reown_walletkit/example/android/app/src/main/AndroidManifest.xml index dfdc4274..bb8f888f 100644 --- a/packages/reown_walletkit/example/android/app/src/main/AndroidManifest.xml +++ b/packages/reown_walletkit/example/android/app/src/main/AndroidManifest.xml @@ -110,18 +110,9 @@ - - - - - - - - - - - - + diff --git a/packages/reown_walletkit/example/ios/Runner/Runner.entitlements b/packages/reown_walletkit/example/ios/Runner/Runner.entitlements index 8b4f6bab..71befdfa 100644 --- a/packages/reown_walletkit/example/ios/Runner/Runner.entitlements +++ b/packages/reown_walletkit/example/ios/Runner/Runner.entitlements @@ -6,9 +6,6 @@ applinks:lab.reown.com applinks:appkit-lab.reown.com - applinks:pay.walletconnect.com - applinks:staging.pay.walletconnect.com - applinks:dev.pay.walletconnect.com diff --git a/packages/reown_walletkit/example/lib/dependencies/deep_link_handler.dart b/packages/reown_walletkit/example/lib/dependencies/deep_link_handler.dart index 5fa99853..b67eb0c6 100644 --- a/packages/reown_walletkit/example/lib/dependencies/deep_link_handler.dart +++ b/packages/reown_walletkit/example/lib/dependencies/deep_link_handler.dart @@ -49,6 +49,10 @@ class DeepLinkHandler { // Uri.parse(_walletKit.metadata.redirect?.universal ?? ''); // static String get host => universalUri.host; + // Pay links reach the wallet via NFC (the NDEF_DISCOVERED intent-filter on + // Android / associated NFC delivery on iOS). Universal-link registration for + // these hosts was removed from AndroidManifest.xml / Runner.entitlements, so + // on native these URLs now arrive via NFC rather than a tapped App Link. static const _payHosts = [ 'pay.walletconnect.com', 'staging.pay.walletconnect.com', diff --git a/scripts/setup-maestro-pay-tests.sh b/scripts/setup-maestro-pay-tests.sh index 0cde7d71..f97c93fa 100755 --- a/scripts/setup-maestro-pay-tests.sh +++ b/scripts/setup-maestro-pay-tests.sh @@ -5,7 +5,7 @@ set -euo pipefail -REF="${1:-d385e7a80fb4a3d378ee685021f3f7e24ccdf291}" +REF="${1:-28181b5f133836380d2d9bb8ff06af5c3234fb9d}" REPO="WalletConnect/actions" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ROOT_DIR="$(dirname "$SCRIPT_DIR")" From d7dc402011882323b2aca594f328b94dc640eb96 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Tue, 7 Jul 2026 10:51:13 -0300 Subject: [PATCH 2/2] ci(e2e-pay): re-point WalletConnect/actions pins to #109 merge commit WalletConnect/actions#109 merged, so replace the temporary #109-head pin (28181b5) with the merge commit (4be7c01) across the workflow pins and the setup-maestro-pay-tests.sh default REF. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci_e2e_pay_tests.yml | 12 ++++++------ scripts/setup-maestro-pay-tests.sh | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci_e2e_pay_tests.yml b/.github/workflows/ci_e2e_pay_tests.yml index 8f2e8743..661a118f 100644 --- a/.github/workflows/ci_e2e_pay_tests.yml +++ b/.github/workflows/ci_e2e_pay_tests.yml @@ -113,10 +113,10 @@ jobs: --split-per-abi - name: Copy Maestro Pay test flows - uses: WalletConnect/actions/maestro/pay-tests@28181b5f133836380d2d9bb8ff06af5c3234fb9d + uses: WalletConnect/actions/maestro/pay-tests@4be7c0112f9651fc63b18c137650b75d2fc9b200 - name: Install Maestro CLI - uses: WalletConnect/actions/maestro/setup@28181b5f133836380d2d9bb8ff06af5c3234fb9d + uses: WalletConnect/actions/maestro/setup@4be7c0112f9651fc63b18c137650b75d2fc9b200 - name: Setup Android SDK uses: android-actions/setup-android@v3 @@ -160,7 +160,7 @@ jobs: - name: Reset USDT Permit2 allowance (Polygon) if: always() continue-on-error: true - uses: WalletConnect/actions/maestro/permit2-reset@28181b5f133836380d2d9bb8ff06af5c3234fb9d + uses: WalletConnect/actions/maestro/permit2-reset@4be7c0112f9651fc63b18c137650b75d2fc9b200 with: chain-id: eip155:137 rpc-url: https://polygon-bor-rpc.publicnode.com @@ -346,10 +346,10 @@ jobs: xcrun simctl install booted "$APP_PATH" - name: Copy Maestro Pay test flows - uses: WalletConnect/actions/maestro/pay-tests@28181b5f133836380d2d9bb8ff06af5c3234fb9d + uses: WalletConnect/actions/maestro/pay-tests@4be7c0112f9651fc63b18c137650b75d2fc9b200 - name: Install Maestro CLI - uses: WalletConnect/actions/maestro/setup@28181b5f133836380d2d9bb8ff06af5c3234fb9d + uses: WalletConnect/actions/maestro/setup@4be7c0112f9651fc63b18c137650b75d2fc9b200 - name: Run Maestro iOS tests id: maestro_ios @@ -374,7 +374,7 @@ jobs: - name: Reset USDT Permit2 allowance (Polygon) if: always() continue-on-error: true - uses: WalletConnect/actions/maestro/permit2-reset@28181b5f133836380d2d9bb8ff06af5c3234fb9d + uses: WalletConnect/actions/maestro/permit2-reset@4be7c0112f9651fc63b18c137650b75d2fc9b200 with: chain-id: eip155:137 rpc-url: https://polygon-bor-rpc.publicnode.com diff --git a/scripts/setup-maestro-pay-tests.sh b/scripts/setup-maestro-pay-tests.sh index f97c93fa..c572aefb 100755 --- a/scripts/setup-maestro-pay-tests.sh +++ b/scripts/setup-maestro-pay-tests.sh @@ -5,7 +5,7 @@ set -euo pipefail -REF="${1:-28181b5f133836380d2d9bb8ff06af5c3234fb9d}" +REF="${1:-4be7c0112f9651fc63b18c137650b75d2fc9b200}" REPO="WalletConnect/actions" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ROOT_DIR="$(dirname "$SCRIPT_DIR")"