From a6c1b267f41b7e25c540a4f904f5f271ea56f508 Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:16:17 +0900 Subject: [PATCH 01/11] =?UTF-8?q?[CD]=20=EC=B4=88=EA=B8=B0=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index 8df49b5d..0e7f0235 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,18 +19,12 @@ 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 (테플용 실제 설정) run: | mkdir -p Atcha-iOS/Atcha-iOS @@ -51,7 +45,7 @@ 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 }} # Fastfile에 작성된 테플 업로드용 lane 실행 (이름은 설정하신 대로 맞춰주세요) run: bundle exec fastlane beta From 65710c1a80917bd8d68af056e1ff91149217dd6e Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:24:39 +0900 Subject: [PATCH 02/11] =?UTF-8?q?[CD]=20=ED=83=80=EC=9E=84=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=ED=9A=9F=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index 0e7f0235..b7918782 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -46,6 +46,8 @@ jobs: 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_KEY_CONTENT }} + FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120 + FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 # Fastfile에 작성된 테플 업로드용 lane 실행 (이름은 설정하신 대로 맞춰주세요) run: bundle exec fastlane beta From 7b958ad745c022d77ea34313ef8024caa16a6df2 Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:32:55 +0900 Subject: [PATCH 03/11] =?UTF-8?q?[CD]=20iOS=20SDK=20=EC=84=A4=EC=B9=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added step to install iOS SDK using xcodebuild. --- .github/workflows/ios-cd-stage.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index b7918782..d68bbde3 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -25,6 +25,9 @@ jobs: with: xcode-version: "16.2" + - name: Install iOS SDK + run: sudo xcodebuild -downloadPlatform iOS + - name: Create Real Configs (테플용 실제 설정) run: | mkdir -p Atcha-iOS/Atcha-iOS From e491fe26be91544edabd696aca502e6f21a249ad Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:46:25 +0900 Subject: [PATCH 04/11] =?UTF-8?q?[CD]=20Config=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copy configuration files to expected paths after creation. --- .github/workflows/ios-cd-stage.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index d68bbde3..b4b6c130 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -37,8 +37,12 @@ jobs: # (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도 추가 + cp "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" "Atcha-iOS/StageConfig.xcconfig" + cp "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" "Atcha-iOS/BaseConfig.xcconfig" + + echo "Config files created and copied to expected paths." + - name: Install Fastlane run: bundle install @@ -53,4 +57,6 @@ jobs: FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 # Fastfile에 작성된 테플 업로드용 lane 실행 (이름은 설정하신 대로 맞춰주세요) - run: bundle exec fastlane beta + run: | + bundle exec fastlane beta \ + xcargs: "PROVISIONING_PROFILE_SPECIFIER='match AppStore com.atcha.iOS' CODE_SIGN_STYLE=Manual" From 9dab5a97d7d44dd5c6157b48f4626a65be992b0a Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:48:39 +0900 Subject: [PATCH 05/11] =?UTF-8?q?[CD]=20iOS=20SDK=20=EC=84=A4=EC=B9=98=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EB=AC=B4=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index b4b6c130..fad53a12 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -26,6 +26,7 @@ jobs: xcode-version: "16.2" - name: Install iOS SDK + continue-on-error: true run: sudo xcodebuild -downloadPlatform iOS - name: Create Real Configs (테플용 실제 설정) From 5528c9b0b4000ba0fdeaa359a28e214a3e3667b1 Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:53:38 +0900 Subject: [PATCH 06/11] =?UTF-8?q?[CD]=20fastlane=20=ED=99=98=EA=B2=BD=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index fad53a12..880ab9e0 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -54,10 +54,9 @@ jobs: 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_KEY_CONTENT }} + GYM_XC_ARGS: "PROVISIONING_PROFILE_SPECIFIER='match AppStore com.atcha.iOS' CODE_SIGN_STYLE=Manual" FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120 FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 # Fastfile에 작성된 테플 업로드용 lane 실행 (이름은 설정하신 대로 맞춰주세요) - run: | - bundle exec fastlane beta \ - xcargs: "PROVISIONING_PROFILE_SPECIFIER='match AppStore com.atcha.iOS' CODE_SIGN_STYLE=Manual" + run: bundle exec fastlane beta From 6652d1174cfdf7962ed2a01c98d91400fb1b3446 Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:01:45 +0900 Subject: [PATCH 07/11] =?UTF-8?q?[CD]=20iOS=20SDK=20=EC=9E=AC=EC=84=A4?= =?UTF-8?q?=EC=B9=98=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index 880ab9e0..edaa98ef 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -25,9 +25,20 @@ jobs: with: xcode-version: "16.2" - - name: Install iOS SDK - continue-on-error: true - run: sudo xcodebuild -downloadPlatform iOS + - 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: | From e4f2259a238202015fce5224426346283e18eebe Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:12:24 +0900 Subject: [PATCH 08/11] =?UTF-8?q?[CD]=20Config=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index edaa98ef..d938afb2 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -40,20 +40,22 @@ jobs: } done - - name: Create Real Configs (테플용 실제 설정) + - name: Create Real Configs run: | + # 1. 절대 경로로 확실하게 폴더 생성 mkdir -p Atcha-iOS/Atcha-iOS - # ⚠️ 주의: 테플에 올라가는 앱은 실제 동작해야 하므로 - # Dummy가 아닌 '진짜 환경 변수'가 들어간 Config 파일을 만들어야 합니다. - # (GitHub Secrets에 진짜 Config 내용을 텍스트로 넣어두고 빼서 쓰는 방식을 추천합니다) + # 2. Xcode가 에러 로그에서 찾고 있는 그 경로에 직접 파일 생성 + # 에러 로그: /Users/runner/work/Atcha-iOS/Atcha-iOS/Atcha-iOS/StageConfig.xcconfig echo "${{ secrets.STAGE_CONFIG_CONTENT }}" > "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" echo "${{ secrets.BASE_CONFIG_CONTENT }}" > "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" - - cp "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" "Atcha-iOS/StageConfig.xcconfig" - cp "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" "Atcha-iOS/BaseConfig.xcconfig" - - echo "Config files created and copied to expected paths." + + # 3. 만약 프로젝트 파일(.xcodeproj)이 루트에 있다면 루트에도 복사 (보험용) + cp "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" "./StageConfig.xcconfig" || true + cp "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" "./BaseConfig.xcconfig" || true + + echo "Config files created successfully." + ls -R Atcha-iOS/Atcha-iOS # 파일이 잘 들어갔는지 로그에 출력 - name: Install Fastlane run: bundle install @@ -65,9 +67,13 @@ jobs: 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_KEY_CONTENT }} - GYM_XC_ARGS: "PROVISIONING_PROFILE_SPECIFIER='match AppStore com.atcha.iOS' CODE_SIGN_STYLE=Manual" FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120 - FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 + # 🔥 중요: gym(build_app)이 사용할 환경 변수 설정 + GYM_SDK: "iphoneos" + GYM_CONFIGURATION: "Release" + GYM_EXPORT_METHOD: "app-store" + # 🔥 중요: 코드 사이닝 강제 매핑 (match에서 생성된 이름과 일치해야 함) + GYM_XC_ARGS: "PROVISIONING_PROFILE_SPECIFIER='match AppStore com.atcha.iOS' CODE_SIGN_STYLE=Manual" # Fastfile에 작성된 테플 업로드용 lane 실행 (이름은 설정하신 대로 맞춰주세요) run: bundle exec fastlane beta From 0246aae844e23f0959fab3c0fad13be130ccc82d Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:26:44 +0900 Subject: [PATCH 09/11] =?UTF-8?q?[CD]=20Config=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index d938afb2..03591d6d 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -67,13 +67,11 @@ jobs: 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_KEY_CONTENT }} - FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120 - # 🔥 중요: gym(build_app)이 사용할 환경 변수 설정 - GYM_SDK: "iphoneos" + GYM_SCHEME: "Atcha-Stage" GYM_CONFIGURATION: "Release" GYM_EXPORT_METHOD: "app-store" - # 🔥 중요: 코드 사이닝 강제 매핑 (match에서 생성된 이름과 일치해야 함) 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 From e1b925ada800c10f3a5f137c488323ce8aaa5e78 Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:40:54 +0900 Subject: [PATCH 10/11] =?UTF-8?q?[CD]=20Config=20Base64=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index 03591d6d..3e5c964e 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -42,20 +42,11 @@ jobs: - name: Create Real Configs run: | - # 1. 절대 경로로 확실하게 폴더 생성 mkdir -p Atcha-iOS/Atcha-iOS - - # 2. Xcode가 에러 로그에서 찾고 있는 그 경로에 직접 파일 생성 - # 에러 로그: /Users/runner/work/Atcha-iOS/Atcha-iOS/Atcha-iOS/StageConfig.xcconfig - echo "${{ secrets.STAGE_CONFIG_CONTENT }}" > "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" - echo "${{ secrets.BASE_CONFIG_CONTENT }}" > "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" - - # 3. 만약 프로젝트 파일(.xcodeproj)이 루트에 있다면 루트에도 복사 (보험용) - cp "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" "./StageConfig.xcconfig" || true - cp "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" "./BaseConfig.xcconfig" || true - - echo "Config files created successfully." - ls -R Atcha-iOS/Atcha-iOS # 파일이 잘 들어갔는지 로그에 출력 + echo "${{ secrets.STAGE_CONFIG_CONTENT }}" | base64 --decode > "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" + echo "${{ secrets.BASE_CONFIG_CONTENT }}" | base64 --decode > "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" + + cat "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" # 확인용 - name: Install Fastlane run: bundle install From 838a1e0738bc7d9739a56ac17edd03cbbff22487 Mon Sep 17 00:00:00 2001 From: JaeWoong Eum <98391474+woolnd@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:55:16 +0900 Subject: [PATCH 11/11] =?UTF-8?q?[CD]=20Config=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ios-cd-stage.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml index 3e5c964e..6e0fa943 100644 --- a/.github/workflows/ios-cd-stage.yml +++ b/.github/workflows/ios-cd-stage.yml @@ -42,11 +42,16 @@ jobs: - name: Create Real Configs run: | - mkdir -p Atcha-iOS/Atcha-iOS - echo "${{ secrets.STAGE_CONFIG_CONTENT }}" | base64 --decode > "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" - echo "${{ secrets.BASE_CONFIG_CONTENT }}" | base64 --decode > "Atcha-iOS/Atcha-iOS/BaseConfig.xcconfig" + # 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" - cat "Atcha-iOS/Atcha-iOS/StageConfig.xcconfig" # 확인용 + echo "=== 파일 위치 확인 ===" + pwd + ls *.xcconfig + echo "=== StageConfig 내용 ===" + cat StageConfig.xcconfig - name: Install Fastlane run: bundle install