From 02e43f78c3f450ad2a7fd2bf39070952cf3d7818 Mon Sep 17 00:00:00 2001 From: stopflock Date: Wed, 15 Oct 2025 23:39:51 -0500 Subject: [PATCH] Now trying to follow an actual guide --- .github/workflows/workflow.yml | 81 ++++++++++++---------------------- 1 file changed, 29 insertions(+), 52 deletions(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 8bf1164..4f3712b 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -146,71 +146,48 @@ jobs: dart run flutter_launcher_icons dart run flutter_native_splash:create - - name: Set up code signing + - name: Install Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.IOS_DISTRIBUTION_CERTIFICATE_BASE64 }} + P12_PASSWORD: "" + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.IOS_APPSTORE_PROVISIONING_PROFILE_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.IOS_KEYCHAIN_PASSWORD }} run: | - # Create temporary keychain - security create-keychain -p "${{ secrets.IOS_KEYCHAIN_PASSWORD }}" build.keychain - security default-keychain -s build.keychain - security unlock-keychain -p "${{ secrets.IOS_KEYCHAIN_PASSWORD }}" build.keychain - security set-keychain-settings -t 3600 -u build.keychain + # 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 - echo "${{ secrets.IOS_DISTRIBUTION_CERTIFICATE_BASE64 }}" | base64 --decode > certificate.p12 - security import certificate.p12 -k build.keychain -P "" -T /usr/bin/codesign - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "${{ secrets.IOS_KEYCHAIN_PASSWORD }}" build.keychain + # import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH - # Debug: List what certificates we have - security find-identity -v -p codesigning build.keychain + # 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 - # Install provisioning profile + # import certificate to keychain + security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + + # apply provisioning profile mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles - echo "${{ secrets.IOS_APPSTORE_PROVISIONING_PROFILE_BASE64 }}" | base64 --decode > ~/Library/MobileDevice/Provisioning\ Profiles/${{ vars.IOS_PROVISIONING_PROFILE_UUID }}.mobileprovision - - # Configure Xcode project for manual signing with team ID - sed -i '' 's/CODE_SIGN_STYLE = Automatic;/CODE_SIGN_STYLE = Manual;/g' ios/Runner.xcodeproj/project.pbxproj - sed -i '' 's/DEVELOPMENT_TEAM = "";/DEVELOPMENT_TEAM = "${{ vars.IOS_TEAM_ID }}";/g' ios/Runner.xcodeproj/project.pbxproj - sed -i '' 's/DEVELOPMENT_TEAM = ;/DEVELOPMENT_TEAM = "${{ vars.IOS_TEAM_ID }}";/g' ios/Runner.xcodeproj/project.pbxproj - - # Create ExportOptions.plist with our values - cat > ios/ExportOptions.plist << EOF - - - - - method - app-store - teamID - ${{ vars.IOS_TEAM_ID }} - provisioningProfiles - - me.deflock.deflockapp - ${{ vars.IOS_PROVISIONING_PROFILE_UUID }} - - signingStyle - manual - uploadBitcode - - uploadSymbols - - compileBitcode - - - - EOF + cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles - name: Build iOS .ipa run: | flutter build ipa --release \ --dart-define=OSM_PROD_CLIENTID='${{ secrets.OSM_PROD_CLIENTID }}' \ - --dart-define=OSM_SANDBOX_CLIENTID='${{ secrets.OSM_SANDBOX_CLIENTID }}' \ - --export-options-plist=ios/ExportOptions.plist + --dart-define=OSM_SANDBOX_CLIENTID='${{ secrets.OSM_SANDBOX_CLIENTID }}' cp build/ios/iphoneos/Runner.ipa Runner.ipa - - - name: Clean up keychain + + - name: Clean up keychain and provisioning profile if: always() run: | - security delete-keychain build.keychain - rm -f certificate.p12 + security delete-keychain $RUNNER_TEMP/app-signing.keychain-db + rm ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision - name: Upload IPA artifact uses: actions/upload-artifact@v4