I have a React Native project that builds and uploads successfully using Fastlane on my local Mac (Xcode 26.1).
However, the GitHub Actions iOS build fails with the following error:
** ARCHIVE FAILED **
Exit status: 65
Maybe the error shown is caused by using the wrong version of Xcode
Found multiple versions of Xcode in '/Applications/'
This build process was executed using '/Applications/Xcode_16.1.app'
Here’s the relevant part of my GitHub Actions workflow:
ame: QA Release Build
on:
push:
branches: [main]
jobs:
qa-build:
runs-on: macos-14 # should use macos-latest when ios builds enabled
name: Build QA Release
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Ruby and Fastlane
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true
- name: Install Fastlane
run: |
gem install fastlane
bundle install
- name: Setup environment variables
run: |
echo "KINDE_DOMAIN=${{ vars.KINDE_DOMAIN }}" >> .env
echo "KINDE_CLIENT_ID=${{ vars.KINDE_CLIENT_ID }}" >> .env
echo "KINDE_SCOPES=${{ vars.KINDE_SCOPES }}" >> .env
echo "PUBLIC_API_URL=${{ vars.PUBLIC_API_URL }}" >> .env
echo "KINDE_AUDIENCE=${{ vars.KINDE_AUDIENCE }}" >> .env
- name: Create credentials directories
run: |
mkdir -p credentials/ios
- name: Setup Apple API Key for Fastlane Match
run: |
echo '${{ secrets.FASTLANE_PASSWORD }}' > credentials/ios/AuthKey.p8
- name: Setup Google Service Info Plist for iOS
run: |
echo "${{ secrets.IOS_GOOGLE_SERVICE_INFO_PLIST }}" | base64 --decode > GoogleService-Info.plist
- name: Expo Prebuild
run: npm run prebuild --clean
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.FASTLANE_MATCH_DEPLOY_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
- name: Select Xcode version
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.1'
- name: Build and Release iOS QA
run: fastlane ios qa_release
env:
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
- name: Upload iOS Release IPA
uses: actions/upload-artifact@v4
with:
name: ios-release-ipa
path: ios/build/smbmobile.ipa
retention-days: 30
How to solve this issue ?