fix: 친구 편지목록 엠티뷰 위치 조정 #84
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: Develop Build & Deploy | |
| # 개발 빌드: develop 브랜치 → 개발 서버 (dev.taba.asia) | |
| # Android: APK → Artifact | |
| # iOS: IPA → TestFlight | |
| on: | |
| push: | |
| branches: [develop] | |
| workflow_dispatch: | |
| jobs: | |
| build-android: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - uses: subosito/flutter-action@v2 | |
| with: | |
| flutter-version: '3.24.5' | |
| channel: 'stable' | |
| - run: flutter pub get | |
| - run: | | |
| echo "🔧 개발 빌드 (서버: https://dev.taba.asia/api/v1)" | |
| flutter build apk --release \ | |
| --build-name=1.0.0-dev \ | |
| --build-number=${{ github.run_number }} \ | |
| --dart-define=API_ENV=dev | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-dev-apk | |
| path: build/app/outputs/flutter-apk/app-release.apk | |
| retention-days: 30 | |
| build-ios: | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: subosito/flutter-action@v2 | |
| with: | |
| flutter-version: '3.24.5' | |
| channel: 'stable' | |
| - run: flutter pub get | |
| - name: Install CocoaPods dependencies | |
| run: | | |
| cd ios | |
| # Retry logic for pod install (network issues with GitHub) | |
| for i in {1..3}; do | |
| echo "Attempting pod install (attempt $i/3)..." | |
| if pod install --repo-update; then | |
| echo "Pod install succeeded" | |
| exit 0 | |
| else | |
| echo "Pod install failed, retrying in 10 seconds..." | |
| sleep 10 | |
| fi | |
| done | |
| echo "Pod install failed after 3 attempts" | |
| exit 1 | |
| - name: Setup Certificates | |
| if: env.APPLE_CERTIFICATE_BASE64 != '' | |
| env: | |
| APPLE_CERTIFICATE_BASE64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} | |
| APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
| APPLE_PROVISIONING_PROFILE_BASE64: ${{ secrets.APPLE_PROVISIONING_PROFILE_BASE64 }} | |
| run: | | |
| security create-keychain -p "" build.keychain || true | |
| security default-keychain -s build.keychain | |
| security unlock-keychain -p "" build.keychain | |
| security set-keychain-settings -t 3600 -u build.keychain | |
| echo "$APPLE_CERTIFICATE_BASE64" | base64 -d > cert.p12 | |
| security import cert.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign || exit 1 | |
| security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "" build.keychain || true | |
| if [ -n "$APPLE_PROVISIONING_PROFILE_BASE64" ]; then | |
| echo "$APPLE_PROVISIONING_PROFILE_BASE64" | base64 -d > profile.mobileprovision | |
| TEMP_PLIST=$(mktemp) | |
| security cms -D -i profile.mobileprovision > "$TEMP_PLIST" | |
| PROFILE_UUID=$(/usr/libexec/PlistBuddy -c "Print UUID" "$TEMP_PLIST") | |
| PROFILE_NAME=$(/usr/libexec/PlistBuddy -c "Print Name" "$TEMP_PLIST" 2>/dev/null || echo "") | |
| PROFILE_TEAM_ID=$(/usr/libexec/PlistBuddy -c "Print TeamIdentifier:0" "$TEMP_PLIST" 2>/dev/null || echo "") | |
| rm -f "$TEMP_PLIST" | |
| mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles | |
| cp profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$PROFILE_UUID.mobileprovision | |
| chmod 644 ~/Library/MobileDevice/Provisioning\ Profiles/$PROFILE_UUID.mobileprovision | |
| /usr/libexec/PlistBuddy -c "Delete :provisioningProfiles" ios/ExportOptions-dev.plist 2>/dev/null || true | |
| /usr/libexec/PlistBuddy -c "Add :provisioningProfiles dict" ios/ExportOptions-dev.plist | |
| /usr/libexec/PlistBuddy -c "Add :provisioningProfiles:com.coby.taba string $PROFILE_UUID" ios/ExportOptions-dev.plist | |
| /usr/libexec/PlistBuddy -c "Set :signingStyle manual" ios/ExportOptions-dev.plist 2>/dev/null || \ | |
| /usr/libexec/PlistBuddy -c "Add :signingStyle string manual" ios/ExportOptions-dev.plist | |
| /usr/libexec/PlistBuddy -c "Set :teamID $PROFILE_TEAM_ID" ios/ExportOptions-dev.plist 2>/dev/null || \ | |
| /usr/libexec/PlistBuddy -c "Add :teamID string $PROFILE_TEAM_ID" ios/ExportOptions-dev.plist | |
| sed -i '' 's/CODE_SIGN_STYLE = Automatic;/CODE_SIGN_STYLE = Manual;/g' ios/Runner.xcodeproj/project.pbxproj || true | |
| sed -i '' 's/CODE_SIGN_IDENTITY = "Apple Development";/CODE_SIGN_IDENTITY = "Apple Distribution";/g' ios/Runner.xcodeproj/project.pbxproj || true | |
| sed -i '' "s/PROVISIONING_PROFILE_SPECIFIER = \"\";/PROVISIONING_PROFILE_SPECIFIER = \"$PROFILE_NAME\";/g" ios/Runner.xcodeproj/project.pbxproj || true | |
| echo "$PROFILE_UUID" > /tmp/profile_uuid.txt | |
| fi | |
| - name: Build IPA | |
| run: | | |
| echo "🔧 개발 빌드 (서버: https://dev.taba.asia/api/v1)" | |
| flutter build ipa --release \ | |
| --build-name=1.0.0-dev \ | |
| --build-number=${{ github.run_number }} \ | |
| --dart-define=API_ENV=dev \ | |
| --export-options-plist=ios/ExportOptions-dev.plist | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: ios-dev-ipa | |
| path: build/ios/ipa/*.ipa | |
| retention-days: 30 | |
| - name: Upload to TestFlight | |
| if: success() && env.APP_STORE_CONNECT_API_KEY_ID != '' | |
| env: | |
| APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }} | |
| APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }} | |
| APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }} | |
| run: | | |
| mkdir -p ~/private_keys | |
| echo "$APP_STORE_CONNECT_API_KEY" > ~/private_keys/AuthKey_$APP_STORE_CONNECT_API_KEY_ID.p8 | |
| chmod 600 ~/private_keys/AuthKey_$APP_STORE_CONNECT_API_KEY_ID.p8 | |
| IPA_FILE=$(find build/ios/ipa -name "*.ipa" | head -1) | |
| xcrun altool --upload-app --type ios --file "$IPA_FILE" \ | |
| --apiKey $APP_STORE_CONNECT_API_KEY_ID \ | |
| --apiIssuer $APP_STORE_CONNECT_ISSUER_ID || echo "⚠️ Upload failed, IPA saved as artifact" |