name: "Build and Publish iOS" on: workflow_dispatch jobs: build: runs-on: macos-latest 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.BUILD_CERTIFICATE_BASE64 }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_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.10.2' # Install your project's dependencies - name: Install dependencies run: bash fix-pub.sh # Build and sign the ipa using a single flutter command - name: Building IPA working-directory: refilc run: bash build-ipa.sh # 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: refilc/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