Build / iOS #36
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
| 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 Xcode version | |
| run: /usr/bin/xcodebuild -version | |
| - name: Check out Git repository | |
| uses: actions/checkout@v3 | |
| - 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 |