From 755a6257bbb47383b28f46a1f4101ecb217d51b4 Mon Sep 17 00:00:00 2001 From: opficdev Date: Fri, 1 May 2026 22:40:49 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20HomeView=EC=9D=98=20=EB=AA=A8?= =?UTF-8?q?=EB=93=A0=20LoadingView=EB=8A=94=20=EB=94=9C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=20=EC=97=86=EC=9D=B4=20=EB=9C=A8=EB=8F=84=EB=A1=9D=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DevLog/Presentation/ViewModel/HomeViewModel.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/DevLog/Presentation/ViewModel/HomeViewModel.swift b/DevLog/Presentation/ViewModel/HomeViewModel.swift index bb682889..1440c0cf 100644 --- a/DevLog/Presentation/ViewModel/HomeViewModel.swift +++ b/DevLog/Presentation/ViewModel/HomeViewModel.swift @@ -160,10 +160,10 @@ final class HomeViewModel: Store { func run(_ effect: SideEffect) { switch effect { case .fetchTodoCategoryPreferences: - beginLoading(for: .preferences, mode: .delayed) + beginLoading(for: .preferences, mode: .immediate) Task { do { - defer { endLoading(for: .preferences, mode: .delayed) } + defer { endLoading(for: .preferences, mode: .immediate) } let preferences = try await fetchPreferencesUseCase.execute() send(.setTodoCategory(preferences.map(TodoCategoryItem.init(from:)))) } catch { @@ -195,10 +195,10 @@ final class HomeViewModel: Store { } } case .fetchRecentTodos: - beginLoading(for: .recentTodos, mode: .delayed) + beginLoading(for: .recentTodos, mode: .immediate) Task { do { - defer { endLoading(for: .recentTodos, mode: .delayed) } + defer { endLoading(for: .recentTodos, mode: .immediate) } let page = try await fetchRecentTodos() let items = page.items .filter { $0.createdAt != $0.updatedAt } @@ -243,10 +243,10 @@ final class HomeViewModel: Store { } } case .fetchWebPages: - beginLoading(for: .webPage, mode: .delayed) + beginLoading(for: .webPage, mode: .immediate) Task { do { - defer { endLoading(for: .webPage, mode: .delayed) } + defer { endLoading(for: .webPage, mode: .immediate) } let pages = try await fetchWebPagesUseCase.execute("") send(.updateWebPages(pages.map { WebPageItem(from: $0) })) } catch { From f1a0ccddedf0a6a6b9c57343d704fcf3d46ec2d1 Mon Sep 17 00:00:00 2001 From: opficdev Date: Fri, 1 May 2026 22:44:10 +0900 Subject: [PATCH 2/2] =?UTF-8?q?ci:=20=EC=88=98=EB=8F=99=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20TestFlight=20=EC=97=85=EB=A1=9C=EB=93=9C=EA=B0=80=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testflight.yml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index 52aa8de7..d5707731 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -1,6 +1,16 @@ name: iOS TestFlight on: + workflow_dispatch: + inputs: + upload_to_app_store_connect: + description: Upload to App Store Connect + required: true + default: "false" + type: choice + options: + - "false" + - "true" pull_request: types: - closed @@ -25,16 +35,21 @@ permissions: jobs: testflight: - if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' && (contains(github.event.pull_request.labels.*.name, 'qa') || contains(github.event.pull_request.labels.*.name, 'qa-local')) + if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' && (contains(github.event.pull_request.labels.*.name, 'qa') || contains(github.event.pull_request.labels.*.name, 'qa-local'))) runs-on: macos-latest timeout-minutes: 45 steps: - name: Checkout merge commit + if: github.event_name == 'pull_request' uses: actions/checkout@v5 with: ref: ${{ github.event.pull_request.merge_commit_sha }} + - name: Checkout current ref + if: github.event_name == 'workflow_dispatch' + uses: actions/checkout@v5 + - name: Install private config files uses: ./.github/actions/install-private-config with: @@ -78,10 +93,10 @@ jobs: - name: Build for TestFlight run: bundle exec fastlane testflight_build_only - - name: Skip TestFlight Upload for Local QA Label - if: contains(github.event.pull_request.labels.*.name, 'qa-local') - run: echo "Skipping TestFlight upload for PR labeled qa-local" + - 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" - name: Upload to TestFlight - if: contains(github.event.pull_request.labels.*.name, 'qa') && !contains(github.event.pull_request.labels.*.name, 'qa-local') + if: (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'qa') && !contains(github.event.pull_request.labels.*.name, 'qa-local')) || (github.event_name == 'workflow_dispatch' && inputs.upload_to_app_store_connect == 'true') run: bundle exec fastlane upload_testflight_build