Skip to content

Build / iOS

Build / iOS #41

Workflow file for this run

name: Build / iOS
on: workflow_dispatch
defaults:
run:
shell: bash
jobs:
build-mobile:
runs-on: ${{ matrix.os }}
strategy:
# fail-fast: false
matrix:
os: [macos-14]
steps:
- name: Check out Git repository
uses: actions/checkout@v3
- name: Set up Xcode 16
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16'
- name: Confirm Xcode version
run: xcodebuild -version
- name: Install Node.js, NPM and Yarn
uses: actions/setup-node@v3
with:
node-version: 20
- name: Set npm version
run: npm install -g npm@10
- name: Authenticate with fontawesome NPM repo
run: |
npm config set "@fortawesome:registry" https://npm.fontawesome.com/
npm config set "//npm.fontawesome.com/:_authToken" ${{ secrets.FONT_AWESOME_AUTH_TOKEN }}
- name: Create .env file
run: echo "${{ secrets.ENV_FILE }}" > .env
- name: Install root dependencies
run: npm install
- name: Install the Apple certificate and provisioning profile
env:
BUILD_CERTIFICATE: ${{ secrets.APPLE_MOBILE_CERT }}
P12_PASSWORD: ${{ secrets.APPLE_MOBILE_CERT_PASSWORD }}
PROVISION_PROFILE_DEV_BASE64: ${{ secrets.PROVISION_PROFILE_DEV_BASE64 }}
PROVISION_PROFILE_DIST_BASE64: ${{ secrets.PROVISION_PROFILE_DIST_BASE64 }}
KEYCHAIN_PASSWORD: ${{ secrets.MAC_CERTS_PASSWORD }}
APPLE_MOBILE_APP_PASSWORD: ${{ secrets.APPLE_MOBILE_APP_PASSWORD }}
BUILD_PATH: $RUNNER_TEMP/build
run: |
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
PP_PATH_DEV=$RUNNER_TEMP/6f3f2659-b6b4-428f-be47-947e8d8f26cf.mobileprovision
PP_PATH_DIST=$RUNNER_TEMP/c2e4a68a-e7e2-48f3-a101-3849682530a8.mobileprovision
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# save this env vars for future steps
echo "KEYCHAIN_PATH=$KEYCHAIN_PATH" >> "$GITHUB_ENV"
# save build path for future steps
echo "BUILD_PATH=$BUILD_PATH" >> "$GITHUB_ENV"
# import certificate and provisioning profile from secrets
echo -n "$BUILD_CERTIFICATE" | base64 --decode -o $CERTIFICATE_PATH
echo -n "$PROVISION_PROFILE_DEV_BASE64" | base64 --decode -o $PP_PATH_DEV
echo -n "$PROVISION_PROFILE_DIST_BASE64" | base64 --decode -o $PP_PATH_DIST
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
# add remoteit-mobile-desktop to keychain list
xcrun altool --store-password-in-keychain-item 'remoteit-mobile-desktop' -u '[email protected]' -p $APPLE_MOBILE_APP_PASSWORD --keychain $KEYCHAIN_PATH
# list the keychain items
security list-keychain -d user -s $KEYCHAIN_PATH
# apply provisioning profile
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp $RUNNER_TEMP/*.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles
- name: Verify Provisioning Profiles
run: |
ls -la ~/Library/MobileDevice/Provisioning\ Profiles/
security find-identity -v -p codesigning
- name: Clean build dir
run: |
if [ -d "$BUILD_PATH" ]; then rm -rf "$BUILD_PATH"; fi
mkdir -p "$BUILD_PATH"
- name: npm build-mobile
run: npm run build-mobile
- name: Build archive
working-directory: ./ios/App
run: |
xcodebuild -workspace App.xcworkspace \
-scheme Remote.It \
-archivePath $BUILD_PATH/remoteit.xcarchive \
archive
- name: Export ipa
working-directory: ./ios/App
run: |
xcodebuild -exportArchive -archivePath $BUILD_PATH/remoteit.xcarchive -exportOptionsPlist ./ExportOptions.plist -exportPath $BUILD_PATH
- name: Validate ipa
working-directory: ./ios/App
run: |
xcrun altool --validate-app -f "$BUILD_PATH/Remote.It.ipa" -t ios --keychain "$RUNNER_TEMP/app-signing.keychain-db" -p '@keychain:remoteit-mobile-desktop' --output-format xml
- name: Upload ipa
working-directory: ./ios/App
run: |
xcrun altool --upload-app -f "$BUILD_PATH/Remote.It.ipa" -t ios --keychain "$RUNNER_TEMP/app-signing.keychain-db" -p '@keychain:remoteit-mobile-desktop' --output-format xml