diff --git a/.github/workflows/build_ipa.yml b/.github/workflows/build_ipa.yml new file mode 100644 index 0000000..49ba224 --- /dev/null +++ b/.github/workflows/build_ipa.yml @@ -0,0 +1,87 @@ +name: "[DEV] Build and Publish iOS" +on: workflow_dispatch + +jobs: + # Build job + build: + runs-on: [self-hosted, macOS] + steps: + # Checks-out our repository under $GITHUB_WORKSPACE, so our job can access it + - name: Checkout repository + uses: actions/checkout@v2 + + # Install the Apple certificate and provisioning profile + - name: Install the Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.APPSTORE_CERT_BASE64 }} + P12_PASSWORD: ${{ secrets.APPSTORE_CERT_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.MOBILEPROVISION_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + # create variables + CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 + PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + # import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $PP_PATH + # 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 + security list-keychain -d user -s $KEYCHAIN_PATH + # apply provisioning profile + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles + # Install flutter + - name: Flutter get + uses: subosito/flutter-action@v1 + with: + flutter-version: '3.19.6' + + # Install your project's dependencies + - run: flutter pub get + + # Build and sign the ipa using a single flutter command + - name: Building IPA + run: flutter build ipa --release --export-options-plist=ios/Runner/ExportOptions.plist + + # Collect the file and upload as artifact + - name: collect ipa artifacts + uses: actions/upload-artifact@v2 + with: + name: release-ipa + # Path to the release files + path: build/ios/ipa/*.ipa + + # Important! Cleanup: remove the certificate and provisioning profile from the runner! + - name: Clean up keychain and provisioning profile + if: ${{ always() }} + run: | + security delete-keychain $RUNNER_TEMP/app-signing.keychain-db + rm ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision + + # Release job, upload the ipa to Firebase App Distribution + release: + name: Release ipa to Firebase + needs: [ build ] + runs-on: ubuntu-latest + steps: + + # Retrieve ipa file from GitHub artifacts + - uses: actions/checkout@v2 + - name: Get release-ipa from artifacts + uses: actions/download-artifact@v2 + with: + name: release-ipa + + # Upload ipa file to Fiebase + # - name: Upload artifact to Firebase App Distribution + # uses: wzieba/Firebase-Distribution-Github-Action@v1 + # with: + # appId: ${{secrets.FIREBASE_IOS_APP_ID}} + # token: ${{secrets.FIREBASE_TOKEN}} + # groups: ios-developers + # file: {your_app_name}.ipa