From eba7eb9070cc4c0c136ec21e1a690fd820e5bc02 Mon Sep 17 00:00:00 2001 From: TomBumSuChoi Date: Tue, 5 May 2026 15:22:33 +0900 Subject: [PATCH 1/5] =?UTF-8?q?test(CI):=20MyITests=20/=20FeaturesTests=20?= =?UTF-8?q?placeholder=20=EC=9C=A0=EB=8B=9B=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=ED=83=80=EA=B2=9F=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FeaturesTests/FeaturesTests.swift | 8 ++++++++ MyI/Tests/MyITests.swift | 8 ++++++++ Project.swift | 22 ++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 FeaturesTests/FeaturesTests.swift create mode 100644 MyI/Tests/MyITests.swift diff --git a/FeaturesTests/FeaturesTests.swift b/FeaturesTests/FeaturesTests.swift new file mode 100644 index 00000000..a3eb2115 --- /dev/null +++ b/FeaturesTests/FeaturesTests.swift @@ -0,0 +1,8 @@ +import XCTest +@testable import Features + +final class FeaturesTests: XCTestCase { + func testPlaceholder() { + XCTAssertTrue(true) + } +} diff --git a/MyI/Tests/MyITests.swift b/MyI/Tests/MyITests.swift new file mode 100644 index 00000000..70eb43ba --- /dev/null +++ b/MyI/Tests/MyITests.swift @@ -0,0 +1,8 @@ +import XCTest +@testable import MyI + +final class MyITests: XCTestCase { + func testPlaceholder() { + XCTAssertTrue(true) + } +} diff --git a/Project.swift b/Project.swift index 30982578..509d12b6 100644 --- a/Project.swift +++ b/Project.swift @@ -126,6 +126,28 @@ let project = Project( "TARGETED_DEVICE_FAMILY": "1" ] ) + ), + .target( + name: "FeaturesTests", + destinations: .iOS, + product: .unitTests, + bundleId: "kr.co.codegrove.FeaturesTests", + deploymentTargets: .iOS("17.0"), + sources: ["FeaturesTests/**/*.swift"], + dependencies: [ + .target(name: "Features") + ] + ), + .target( + name: "MyITests", + destinations: .iOS, + product: .unitTests, + bundleId: "kr.co.codegrove.MyITests", + deploymentTargets: .iOS("17.0"), + sources: ["MyI/Tests/**/*.swift"], + dependencies: [ + .target(name: "MyI") + ] ) ] ) From e8b94f6ecbc8598b54ba4e3bd9d14da90bf62971 Mon Sep 17 00:00:00 2001 From: TomBumSuChoi Date: Tue, 5 May 2026 15:22:58 +0900 Subject: [PATCH 2/5] =?UTF-8?q?ci:=20PR=20=ED=8F=AC=EB=A7=A4=ED=8C=85=20?= =?UTF-8?q?=EA=B2=80=EC=82=AC=20=EC=9B=8C=ED=81=AC=ED=94=8C=EB=A1=9C=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 --- .github/workflows/ci.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..f511307c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,22 @@ +name: CI + +on: + pull_request: + branches: [develop, main] + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + format: + name: SwiftFormat lint + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + + - name: Install SwiftFormat + run: brew install swiftformat + + - name: Run SwiftFormat (lint mode) + run: swiftformat --lint . From d3448a5b4525370b81708dd61d55c351e9bf96d4 Mon Sep 17 00:00:00 2001 From: TomBumSuChoi Date: Tue, 5 May 2026 15:30:49 +0900 Subject: [PATCH 3/5] =?UTF-8?q?ci:=20Xcode=20Cloud=20post-clone=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80=20(Tu?= =?UTF-8?q?ist=20install=20+=20generate)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci_scripts/ci_post_clone.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 ci_scripts/ci_post_clone.sh diff --git a/ci_scripts/ci_post_clone.sh b/ci_scripts/ci_post_clone.sh new file mode 100755 index 00000000..436dc537 --- /dev/null +++ b/ci_scripts/ci_post_clone.sh @@ -0,0 +1,15 @@ +#!/bin/sh +set -eu + +# Xcode Cloud post-clone hook +# Tuist 프로젝트라 xcodebuild 호출 전에 xcodeproj/xcworkspace 생성이 필요. +# - Tuist 설치 +# - SPM 의존성 fetch +# - xcodeproj/xcworkspace 생성 + +# Repo root로 이동 (ci_scripts/에서 한 단계 위) +cd "$(dirname "$0")/.." + +brew install tuist +tuist install +tuist generate --no-open From fcdebfa11bbb615e0a9aefacef391837496bb239 Mon Sep 17 00:00:00 2001 From: TomBumSuChoi Date: Tue, 5 May 2026 15:57:33 +0900 Subject: [PATCH 4/5] =?UTF-8?q?ci:=20Xcode=20Cloud=20post-clone=EC=97=90?= =?UTF-8?q?=20GoogleService-Info.plist=20=EB=B3=B5=EC=9B=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci_scripts/ci_post_clone.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ci_scripts/ci_post_clone.sh b/ci_scripts/ci_post_clone.sh index 436dc537..cf25676d 100755 --- a/ci_scripts/ci_post_clone.sh +++ b/ci_scripts/ci_post_clone.sh @@ -3,6 +3,7 @@ set -eu # Xcode Cloud post-clone hook # Tuist 프로젝트라 xcodebuild 호출 전에 xcodeproj/xcworkspace 생성이 필요. +# - GoogleService-Info.plist 복원 (Environment Variable에서) # - Tuist 설치 # - SPM 의존성 fetch # - xcodeproj/xcworkspace 생성 @@ -10,6 +11,13 @@ set -eu # Repo root로 이동 (ci_scripts/에서 한 단계 위) cd "$(dirname "$0")/.." +# GoogleService-Info.plist 복원 (.gitignore라 repo에 없음) +# Xcode Cloud Environment Variable `GOOGLE_SERVICE_INFO_PLIST_BASE64`에서 디코딩. +# 로컬 빌드는 이미 plist 있으니 변수 없으면 skip. +if [ -n "${GOOGLE_SERVICE_INFO_PLIST_BASE64:-}" ]; then + echo "$GOOGLE_SERVICE_INFO_PLIST_BASE64" | base64 --decode > MyI/Resources/GoogleService-Info.plist +fi + brew install tuist tuist install tuist generate --no-open From 37cdabd513bf7b5a752f02dae163814ac0b20e52 Mon Sep 17 00:00:00 2001 From: TomBumSuChoi Date: Tue, 5 May 2026 16:23:45 +0900 Subject: [PATCH 5/5] =?UTF-8?q?style(DesignSystem):=20Asset+Alias=20extens?= =?UTF-8?q?ionAccessControl=20=EA=B7=9C=EC=B9=99=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DesignSystem/Asset+Alias.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DesignSystem/Asset+Alias.swift b/DesignSystem/Asset+Alias.swift index b2a22f26..f53b782c 100644 --- a/DesignSystem/Asset+Alias.swift +++ b/DesignSystem/Asset+Alias.swift @@ -2,14 +2,14 @@ import SwiftUI public typealias Asset = DesignSystemAsset -public extension Image { - init(_ asset: DesignSystemImages) { +extension Image { + public init(_ asset: DesignSystemImages) { self.init(asset: asset) } } -public extension Color { - init(_ asset: DesignSystemColors) { +extension Color { + public init(_ asset: DesignSystemColors) { self.init(asset: asset) } }