diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index f8ef3c0..16ebffc 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -31,17 +31,14 @@ jobs: P12_PASSWORD: ${{ secrets.P12_PASSWORD }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} run: | - # Decode certificate to file CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH - # Create temporary keychain KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db 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 set-key-partition-list -S apple-tool:,apple: \ @@ -56,7 +53,11 @@ jobs: echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles - cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles + + # Xcode requires the filename to be the profile's UUID + UUID=$(security cms -D -i $PP_PATH | plutil -extract UUID raw -) + cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles/$UUID.mobileprovision + echo "Installed provisioning profile UUID: $UUID" # ── CocoaPods ─────────────────────────────────────────────────────────── @@ -68,13 +69,36 @@ jobs: # ── Build ─────────────────────────────────────────────────────────────── - - name: Build iOS IPA + - name: Build iOS Archive env: - BUNDLE_ID: ${{ secrets.BUNDLE_ID }} TEAM_ID: ${{ secrets.TEAM_ID }} run: | - flutter build ipa --release \ - --export-options-plist=ios/ExportOptions.plist + # Build Flutter (no codesign — signing happens in xcodebuild archive) + flutter build ios --release --no-codesign + + # Archive with manual signing + xcodebuild archive \ + -workspace ios/Runner.xcworkspace \ + -scheme Runner \ + -configuration Release \ + -archivePath $RUNNER_TEMP/Runner.xcarchive \ + CODE_SIGN_STYLE="Manual" \ + DEVELOPMENT_TEAM="$TEAM_ID" \ + PROVISIONING_PROFILE_SPECIFIER="Enaklo Owner App Store" \ + CODE_SIGN_IDENTITY="iPhone Distribution" \ + -allowProvisioningUpdates + + - name: Export IPA + run: | + xcodebuild -exportArchive \ + -archivePath $RUNNER_TEMP/Runner.xcarchive \ + -exportPath $RUNNER_TEMP/export \ + -exportOptionsPlist ios/ExportOptions.plist \ + -allowProvisioningUpdates + + # Copy IPA to build output folder + mkdir -p build/ios/ipa + cp $RUNNER_TEMP/export/*.ipa build/ios/ipa/ # ── Upload to TestFlight ──────────────────────────────────────────────── @@ -96,9 +120,9 @@ jobs: if: ${{ always() }} run: | security delete-keychain $RUNNER_TEMP/app-signing.keychain-db || true - rm -f ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision || true + rm -rf ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision || true - # ── Artifact (opsional, untuk debugging) ──────────────────────────────── + # ── Artifact ──────────────────────────────────────────────────────────── - name: Upload IPA as Artifact if: always()