diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index 8df49b5d..6e0fa943 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -6,7 +6,7 @@ name: iOS CD (Stage -> TestFlight) on: # develop이 아닌 env/stage 브랜치에 코드가 push 되거나 PR이 병합될 때 트리거됩니다. pull_request: - branches: ["env/stage"] + branches: ["env/dev", "env/stage"] jobs: deploy-testflight: @@ -19,29 +19,40 @@ jobs: steps: - name: Checkout Code uses: actions/checkout@v4 - # env/stage 브랜치를 기반으로 테플을 올리기 위해 명시적으로 체크아웃합니다. - with: - ref: env/stage - name: Select Xcode uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: "16.2" - - name: Install iOS SDK - run: sudo xcodebuild -downloadPlatform iOS - - - name: Create Real Configs (테플용 실제 설정) + - name: Install iOS SDK (Retry up to 3 times) + run: | + for i in {1..3}; do + echo "Attempt $i to download iOS platform..." + sudo xcodebuild -downloadPlatform iOS && break || { + if [ $i -lt 3 ]; then + echo "Attempt $i failed. Retrying in 10 seconds..." + sleep 10 + else + echo "All 3 attempts failed. Moving on (continue-on-error is set)." + exit 1 + fi + } + done + + - name: Create Real Configs run: | - mkdir -p Atcha-iOS/Atcha-iOS + # Xcode가 찾는 경로: /Users/runner/work/Atcha-iOS/Atcha-iOS/StageConfig.xcconfig + # checkout 후 현재 위치가 이미 그 경로이므로 바로 생성 + echo "${{ secrets.STAGE_CONFIG_CONTENT }}" | base64 --decode > "StageConfig.xcconfig" + echo "${{ secrets.BASE_CONFIG_CONTENT }}" | base64 --decode > "BaseConfig.xcconfig" + + echo "=== 파일 위치 확인 ===" + pwd + ls *.xcconfig + echo "=== StageConfig 내용 ===" + cat StageConfig.xcconfig - # ⚠️ 주의: 테플에 올라가는 앱은 실제 동작해야 하므로 - # Dummy가 아닌 '진짜 환경 변수'가 들어간 Config 파일을 만들어야 합니다. - # (GitHub Secrets에 진짜 Config 내용을 텍스트로 넣어두고 빼서 쓰는 방식을 추천합니다) - echo "${{ secrets.STAGE_CONFIG_CONTENT }}" > "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" - echo "${{ secrets.BASE_CONFIG_CONTENT }}" > "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" - # 필요에 따라 다른 Config도 추가 - - name: Install Fastlane run: bundle install @@ -51,7 +62,12 @@ jobs: MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_TOKEN }} APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }} APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.ASC_KEY_ID }} - APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.ASC_PRIVATE_KEY }} + APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.ASC_KEY_CONTENT }} + GYM_SCHEME: "Atcha-Stage" + GYM_CONFIGURATION: "Release" + GYM_EXPORT_METHOD: "app-store" + GYM_XC_ARGS: "PROVISIONING_PROFILE_SPECIFIER='match AppStore com.atcha.iOS' CODE_SIGN_STYLE=Manual" + FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120 # Fastfile에 작성된 테플 업로드용 lane 실행 (이름은 설정하신 대로 맞춰주세요) run: bundle exec fastlane beta