From bdb6f970436c42f19b34ca609852c21a534b14e4 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 16 Jun 2026 11:47:15 +0900 Subject: [PATCH 1/4] =?UTF-8?q?chore:=20TestFlight=20CD=20dSYM=20=EB=B3=B4?= =?UTF-8?q?=EC=A1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testflight.yml | 8 ++++++++ fastlane/Fastfile | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index 88036375..f65357fe 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -122,6 +122,14 @@ jobs: path: ~/Library/Logs/gym/*.log if-no-files-found: ignore + - name: Upload TestFlight dSYM + if: always() + uses: actions/upload-artifact@v6 + with: + name: testflight-dsym + path: fastlane/testflight_build/*.dSYM.zip + if-no-files-found: warn + - name: Skip TestFlight Upload if: (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'qa-local')) || (github.event_name == 'workflow_dispatch' && inputs.upload_to_app_store_connect != 'true') run: echo "Skipping TestFlight upload" diff --git a/fastlane/Fastfile b/fastlane/Fastfile index a62af34b..a409de41 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -131,9 +131,15 @@ platform :ios do export_method: "app-store", output_directory: TESTFLIGHT_BUILD_OUTPUT_DIRECTORY, output_name: "#{APP_PRODUCT_NAME}.ipa", + include_symbols: true, xcargs: "-skipPackagePluginValidation -skipMacroValidation" ) + dsym_output_path = lane_context[SharedValues::DSYM_OUTPUT_PATH].to_s + archive_path = lane_context[SharedValues::XCODEBUILD_ARCHIVE].to_s + UI.message("dSYM output path: #{dsym_output_path}") if !dsym_output_path.empty? + UI.message("Xcode archive path: #{archive_path}") if !archive_path.empty? + next api_key end From 647056c9f7daadfef2f0a3d784d4e42b483c4059 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 16 Jun 2026 12:01:55 +0900 Subject: [PATCH 2/4] =?UTF-8?q?chore:=20Homebrew=20tap=20trust=20=EA=B2=BD?= =?UTF-8?q?=EA=B3=A0=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testflight.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index f65357fe..a1ff106f 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -91,6 +91,8 @@ jobs: cache: true - name: Install SwiftLint + env: + HOMEBREW_REQUIRE_TAP_TRUST: "1" shell: bash run: | set -euo pipefail From c73880d06d4eb74c783b76a4f9f63fb0e2d833ac Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 16 Jun 2026 12:21:24 +0900 Subject: [PATCH 3/4] =?UTF-8?q?refactor:=20Firebase=EC=97=90=20dsym=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testflight.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index a1ff106f..c41599ca 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -116,6 +116,32 @@ jobs: - name: Build for TestFlight run: bundle exec fastlane testflight_build_only + - name: Upload dSYM to Firebase Crashlytics + shell: bash + run: | + set -euo pipefail + + google_service_info_path="Application/DevLogApp/Sources/Resource/GoogleService-Info.plist" + dsym_zip_path="$(find fastlane/testflight_build -maxdepth 1 -name '*.dSYM.zip' -print -quit)" + upload_symbols_path="$(find "$HOME/Library/Developer/Xcode/DerivedData" "$HOME/Library/Developer/Xcode/SourcePackages" "$GITHUB_WORKSPACE" -path '*/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols' -type f -print -quit 2>/dev/null || true)" + + if [ ! -f "$google_service_info_path" ]; then + echo "Missing GoogleService-Info.plist at $google_service_info_path" >&2 + exit 1 + fi + + if [ -z "$dsym_zip_path" ]; then + echo "Missing dSYM zip in fastlane/testflight_build" >&2 + exit 1 + fi + + if [ -z "$upload_symbols_path" ]; then + echo "Missing Firebase Crashlytics upload-symbols script" >&2 + exit 1 + fi + + "$upload_symbols_path" -gsp "$google_service_info_path" -p ios "$dsym_zip_path" + - name: Upload TestFlight build log if: always() uses: actions/upload-artifact@v6 From da630e5c8b813facc3b2d6724bfde11b65bd18f9 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 16 Jun 2026 12:30:08 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor:=20fastlane=20dSYM=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=B2=98=EB=A6=AC=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastlane/Fastfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index a409de41..ec1c77be 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -135,10 +135,10 @@ platform :ios do xcargs: "-skipPackagePluginValidation -skipMacroValidation" ) - dsym_output_path = lane_context[SharedValues::DSYM_OUTPUT_PATH].to_s - archive_path = lane_context[SharedValues::XCODEBUILD_ARCHIVE].to_s - UI.message("dSYM output path: #{dsym_output_path}") if !dsym_output_path.empty? - UI.message("Xcode archive path: #{archive_path}") if !archive_path.empty? + dsym_output_path = lane_context[SharedValues::DSYM_OUTPUT_PATH] + archive_path = lane_context[SharedValues::XCODEBUILD_ARCHIVE] + UI.message("dSYM output path: #{dsym_output_path}") unless dsym_output_path.to_s.empty? + UI.message("Xcode archive path: #{archive_path}") unless archive_path.to_s.empty? next api_key end