Skip to content

fix: 친구 편지목록 엠티뷰 위치 조정 #84

fix: 친구 편지목록 엠티뷰 위치 조정

fix: 친구 편지목록 엠티뷰 위치 조정 #84

Workflow file for this run

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"