Draft
Conversation
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Generated iOS project boilerplate from React Native 0.76.0 template with bundle ID set to com.revenuecat.maestro.e2e. Includes xcodeproj, app delegate, launch screen, privacy manifest, asset catalog, and test target. Co-Authored-By: Claude Opus 4.6 <[email protected]>
The RN repo uses Yarn workspaces, so a standalone yarn.lock is needed to prevent Yarn from treating MaestroTestApp as part of the workspace. Co-Authored-By: Claude Opus 4.6 <[email protected]>
react-native-screens 4.24+ requires RN 0.77+ codegen. Co-Authored-By: Claude Opus 4.6 <[email protected]>
Align with purchaseTesterTypescript patterns: ignore .yarn cache, .xcode.env.local, Xcode artifacts, and stop over-ignoring xcworkspace. Co-Authored-By: Claude Opus 4.6 <[email protected]>
Replace Objective-C AppDelegate (AppDelegate.h, AppDelegate.mm, main.m) with a Swift AppDelegate using @main annotation. Also adds required devDependencies for pod install to work correctly. Co-Authored-By: Claude Opus 4.6 <[email protected]>
Co-Authored-By: Claude Opus 4.6 <[email protected]> Made-with: Cursor
The StoreKitConfiguration.storekit file was on disk but not registered as a PBXFileReference in project.pbxproj, so Xcode couldn't find it at runtime. Also fix the scheme identifier path. Made-with: Cursor
The identifier is relative to the .xcodeproj directory, so it needs the ../ prefix to reach the sibling StoreKitConfiguration.storekit. Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Generated by 🚫 Danger |
Made-with: Cursor
Made-with: Cursor
This was referenced Mar 30, 2026
- Use portal: references for react-native-purchases and react-native-purchases-ui so E2E tests exercise the local branch code instead of whatever is published on npm - Commit ios/Podfile.lock for reproducible CI builds (force-added since root .gitignore has **/Podfile.lock) - Add try/catch to presentPaywall for diagnosable test failures - Type the navigation prop with RootStackParamList - Add README with build/run instructions and API key setup Made-with: Cursor
… add testID - Add e2e-tests/MaestroTestApp to root workspaces (matching purchaseTesterTypescript pattern) - Replace portal: deps with babel module-resolver aliases to SDK source - Configure Metro watchFolders + exclusionList for out-of-root resolution - Surface presentPaywall errors in a visible <Text testID="error-message"> instead of only console.error, so Maestro can capture failures - Switch from accessibilityLabel to testID for reliable Maestro targeting - Update README to describe the workspace + module-resolver mechanism Made-with: Cursor
…ile.lock - Add .catch() to getCustomerInfo() to surface errors in the UI instead of producing an unhandled promise rejection - Replace deprecated blacklistRE with blockList in metro.config.js - Regenerate Podfile.lock under current workspace setup (was generated under the old portal: setup) Made-with: Cursor
Made-with: Cursor
Without this file, CocoaPods' use_native_modules! doesn't know where to find react-native-purchases and react-native-purchases-ui, since they aren't explicit npm dependencies of the test app. Mirrors the purchaseTesterTypescript example. Made-with: Cursor
Include react-native-purchases and react-native-purchases-ui as Gradle projects so the Android autolinker can resolve them. Mirrors the purchaseTesterTypescript example. Made-with: Cursor
RN 0.76.x is incompatible with react-native-purchases-ui's AGP 8.13.2 (NativeDeviceEventManagerSpec unresolved supertype during Kotlin compilation). - React Native 0.76.9 → 0.78.0 (+ React 19, safe-area-context 5, screens 4.5) - Gradle wrapper 8.10.2 → 8.14.4 - Kotlin 1.9.25 → 2.0.21, NDK 26 → 27, targetSdk 34 → 35 - Add allprojects repositories block and explicit Gradle project includes - Regenerate Podfile.lock and yarn.lock Made-with: Cursor
react-native-screens 4.24.0 has a codegen incompatibility with
RN 0.78 ("Unknown prop type for accessibilityContainerViewIsModal").
Pin to ~4.11.0 (matching purchaseTesterTypescript) and regenerate
both yarn.lock and Podfile.lock.
Made-with: Cursor
Made-with: Cursor
The CLI is a devDependency of react-native (not production), so it's not installed transitively. Both pod install (use_native_modules!) and Gradle autolinking (RNGP) require it to discover native modules. Made-with: Cursor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a Maestro E2E test app under
e2e-tests/MaestroTestApp/— a minimal React Native app with two screens used by automated Maestro flows to verify the RevenueCat purchase integration.com.revenuecat.automatedsdktestsMAESTRO_TESTS_REVENUECAT_API_KEY) replaced at CI time viasedbabel-plugin-module-resolver+ MetrowatchFolders(same mechanism aspurchaseTesterTypescript)getCustomerInfoandpresentPaywallare surfaced in the UI (not just logged) for Maestro screenshot capturetestIDprops for reliable Maestro element targetingRootStackParamListPodfile.lockCounterpart PRs: purchases-flutter#1654, purchases-capacitor#699, cordova-plugin-purchases#857, purchases-unity#836, purchases-kmp#708
Follow-up PRs (stacked)