-
Notifications
You must be signed in to change notification settings - Fork 28
Description
Thanks for creating expo-react-native-cicd! It's a great project. I appreciate the effort you've put into making Expo builds more accessible and flexible.
I'm raising this issue as a feature request to explore the possibility of generating workflows that bypass EAS builds entirely. While the current implementation streamlines EAS builds, I'm interested in a solution that operates independently of the EAS infrastructure.
Motivation:
My primary motivation is to achieve complete independence from EAS, even at the cost of increased complexity in setup.
Some reasons I'm interested in this are:
- Cost: Even though
expo-react-native-cicdsignificantly reduces EAS costs, it would be ideal to eliminate them entirely. - Full Control: Bypassing EAS grants complete control over the build process and environment. Without the need for expo account etc.
Proposed Solution:
I'm suggesting the addition of a workflow generation option that leverages prebuilding the app and then uses tools like Fastlane and Gradle to replicate the functionality of EAS Build in a managed workflow. This would involve the following steps:
- Prebuilding: Use
expo prebuildto generate the native iOS and Android projects. - Dependency Management: Utilize tools like CocoaPods (for iOS) and Gradle (for Android) to manage dependencies within the generated native projects.
- Building (Android): Use Gradle commands to build the Android APK and AAB files.
- Building (iOS): Use Fastlane to manage code signing, provisioning profiles, and build the iOS IPA file.
- Distribution: Maintain existing distribution options (Google Drive, GitHub Releases, etc.) for the generated binaries.
Benefits:
- Zero EAS Costs: Completely eliminates dependency on EAS Build.
- Complete Control: Provides ultimate control over the build environment and process.
- Platform Independence: Reduces reliance on the EAS platform.
Considerations:
- Increased Complexity: This approach would inherently be more complex to set up and maintain than the current EAS-based workflow.
- Maintenance Burden: Requires ongoing maintenance to keep up with changes in Expo, Fastlane, Gradle, and Xcode.
- Potential Performance Differences: Build times might vary compared to EAS Build.
Example workflow structure:
- name: Setup
run: |
npm install
npx expo install --fix
- name: Prebuild
run: npx expo prebuild --clean
- name: Build Android
run: |
cd android
./gradlew assembleRelease
./gradlew bundleRelease
- name: Build iOS
run: |
cd ios
bundle install # make sure bundler is available
bundle exec fastlane build_app # run fastlane using bundler
# OR xcodebuild -workspace YourApp.xcworkspace -scheme YourApp archive
- name: Upload builds
run: |
# Your existing upload logic here, e.g., using GitHub CLI, etc.
echo "Implement upload steps here"I understand that this is a significant feature request with considerable implementation challenges. However, I believe that it would provide a valuable option for users who require complete independence from EAS.
Thanks again for your work on this!