Skip to content

Commit 2771e99

Browse files
authored
[#526] Tuist 도입을 통해 불필요한 파일 및 환경을 개선한다 (#527)
* chore: Tuist 생성 기반 CI 의존성 정리 * chore: Tuist 생성 프로젝트 추적 제거 * docs: Tuist 생성 프로젝트 관리 규칙 정리 * docs: 리드미 업데이트 * chore: gitignore 경량화
1 parent c93a6d1 commit 2771e99

42 files changed

Lines changed: 71 additions & 9066 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yml

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,29 +65,17 @@ jobs:
6565
~/Library/Caches/org.swift.swiftpm
6666
~/Library/Developer/Xcode/SourcePackages
6767
.spm
68-
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
68+
key: ${{ runner.os }}-spm-${{ hashFiles('.mise.toml', 'Tuist.swift', 'Workspace.swift', 'Tuist/ProjectDescriptionHelpers/*.swift', 'Application/**/Project.swift', 'Widget/**/Project.swift') }}
6969
restore-keys: |
7070
${{ runner.os }}-spm-
7171
72-
- name: Generate Xcode project with Tuist
72+
- name: Generate Xcode workspace with Tuist
7373
shell: bash
7474
run: |
7575
set -euo pipefail
7676
7777
tuist generate --no-open
7878
79-
git diff --exit-code -- \
80-
DevLog.xcworkspace \
81-
Application/DevLogApp/DevLogApp.xcodeproj \
82-
Application/DevLogCore/DevLogCore.xcodeproj \
83-
Application/DevLogData/DevLogData.xcodeproj \
84-
Application/DevLogDomain/DevLogDomain.xcodeproj \
85-
Application/DevLogInfra/DevLogInfra.xcodeproj \
86-
Application/DevLogPersistence/DevLogPersistence.xcodeproj \
87-
Application/DevLogPresentation/DevLogPresentation.xcodeproj \
88-
Widget/DevLogWidgetCore/DevLogWidgetCore.xcodeproj \
89-
Widget/DevLogWidgetExtension/DevLogWidgetExtension.xcodeproj
90-
9179
- name: Select iOS Simulator Runtime (installed)
9280
id: pick_ios
9381
shell: bash

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
- name: Read release version
2626
id: release_version
2727
run: |
28-
version=$(ruby -e 'project = File.read("Application/DevLogApp/DevLogApp.xcodeproj/project.pbxproj"); match = project.match(/MARKETING_VERSION = ([^;]+);/); abort("MARKETING_VERSION not found") if match.nil?; puts match[1]')
28+
version=$(ruby -e 'version = File.readlines("Application/Shared/Version.xcconfig").find { |line| line.match?(/\AMARKETING_VERSION\s*=/) }; abort("MARKETING_VERSION not found") if version.nil?; puts version.split("=", 2).last.strip')
2929
echo "version=$version" >> "$GITHUB_OUTPUT"
3030
echo "tag=v$version" >> "$GITHUB_OUTPUT"
3131

.github/workflows/testflight.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,19 @@ jobs:
8484
sudo xcode-select -s "$XCODE_APP/Contents/Developer"
8585
xcodebuild -version
8686
87+
- name: Set up Tuist
88+
uses: jdx/mise-action@v4
89+
with:
90+
install: true
91+
cache: true
92+
93+
- name: Generate Xcode workspace with Tuist
94+
shell: bash
95+
run: |
96+
set -euo pipefail
97+
98+
tuist generate --no-open
99+
87100
- name: Write App Store Connect API key
88101
env:
89102
ASC_KEY_CONTENT: ${{ secrets.ASC_KEY_CONTENT }}

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Breakpoints_v2.xcbkptlist
1717
**/build/
1818
**/xcuserdata/
1919
ContentView.swift
20+
**/*.xcworkspace/
21+
**/*.xcodeproj/
2022

2123
# NPM
2224
node_modules/
@@ -44,7 +46,6 @@ fastlane/logs/
4446
.tmp/
4547
.spm/
4648
Tuist/.build/
47-
DevLog.xcworkspace/.tuist-generated
4849

4950
# drawio
5051
*.drawio.bkp

.hermes/skills/devlog-architecture-harness/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Use this skill in the repository root when the task touches any of these areas:
2828
- Widget snapshot, App Group, or widget deep-link data flow.
2929
- Architecture diagrams, README architecture text, or PR architecture explanation.
3030

31-
This repository is an Xcode workspace-based modular iOS app. There is no root `Package.swift`; modules are separate `.xcodeproj` entries under `DevLog.xcworkspace`.
31+
This repository is a Tuist-generated, workspace-based modular iOS app. There is no root `Package.swift`; module projects are generated from `Workspace.swift` and each module's `Project.swift`.
3232

3333
## Required project context
3434

.hermes/skills/devlog-architecture-harness/references/devlog-architecture-flow.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The goal is not to make the AI decide more architecture policy. The goal is to m
88

99
Use this reference with `AGENTS.md` and `.hermes/skills/devlog-architecture-harness/SKILL.md`.
1010

11-
This repository is an Xcode workspace-based modular iOS app. There is no root `Package.swift`; modules are separate `.xcodeproj` entries under `DevLog.xcworkspace`.
11+
This repository is a Tuist-generated, workspace-based modular iOS app. There is no root `Package.swift`; module projects are generated from `Workspace.swift` and each module's `Project.swift`.
1212

1313
## High-level harness flow
1414

.hermes/skills/devlog-architecture-harness/references/devlog-workflow-rules.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ This reference holds DevLog-specific working rules that should live with the pro
1313
- Prefer Xcode Local MCP for iOS project code changes.
1414
- If Xcode Local MCP is unavailable or fails because of session transport, state that explicitly before using a fallback.
1515
- This repository is workspace-based. Prefer workspace/scheme context over standalone project builds when dependencies cross module projects.
16-
- CI truth lives in `.github/workflows/build.yml`: select Xcode 26.3, install Tuist with mise, run `tuist generate --no-open`, assert generated Xcode files are clean with `git diff --exit-code`, then build `DevLog.xcworkspace` scheme `DevLog` with `-resolvePackageDependencies`, `-skipPackagePluginValidation`, and `-skipMacroValidation`.
16+
- CI truth lives in `.github/workflows/build.yml`: select Xcode 26.3, install Tuist with mise, run `tuist generate --no-open`, then build `DevLog.xcworkspace` scheme `DevLogApp` with `-resolvePackageDependencies`, `-skipPackagePluginValidation`, and `-skipMacroValidation`.
1717
- CI is build validation, not a full test run, unless the workflow changes.
18-
- Avoid unrelated `Package.resolved` churn. Keep lockfile changes only when dependency resolution is the task.
18+
- Avoid unrelated generated project and `Package.resolved` churn. Generated Xcode workspace/project files should not be tracked unless the project explicitly changes that policy.
1919

2020
## Xcode project file work
2121

22-
- Inspect Swift imports and `.xcodeproj/project.pbxproj` framework links together.
23-
- Validate touched `project.pbxproj` files with `plutil -lint`.
22+
- Inspect Swift imports and Tuist target dependencies together.
23+
- Validate generated project structure by rerunning `tuist generate --no-open` and building the workspace.
2424
- `plutil -lint` does not prove Xcode save behavior is healthy; for Xcode save crashes, inspect crash reports and project-reference call stacks.
2525
- Do not force a single `objectVersion` across projects. Treat Xcode's actual save output as the source of truth.
2626
- For synchronized-root cleanup, verify on copied files or a narrowed rule set before touching real project files.
27-
- When removing project-file objects, distinguish stale product references, real target links, orphan build files, and plugin churn.
27+
- When changing project structure, update the Tuist manifest first and treat generated Xcode project churn as disposable output.
2828

2929
## PR and review handling
3030

AGENTS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ These instructions apply only to the repository root.
2727

2828
Use this harness before any task that changes module boundaries, file ownership, layer dependencies, DI assembly, repository/service contracts, widget data flow, Firebase dependency placement, or architecture documentation.
2929

30-
Treat this repository as an Xcode workspace-based modular iOS app. There is no root `Package.swift`; modules are separate `.xcodeproj` entries under `DevLog.xcworkspace`.
30+
Treat this repository as a Tuist-generated, workspace-based modular iOS app. There is no root `Package.swift`; module projects are generated from `Workspace.swift` and each module's `Project.swift`.
3131

3232
### Mandatory flow
3333

@@ -89,7 +89,7 @@ These may proceed after inspection when they do not change architecture meaning:
8989
- If iOS project code changes, test build with Xcode Local MCP.
9090
- If Xcode Local MCP is unavailable, state that explicitly before using a fallback.
9191
- Do not claim architecture work is complete without checking the diff scope.
92-
- Do not spend time on unrelated lockfile churn. Keep `Package.resolved` changes only when they are part of the requested task.
92+
- Do not spend time on unrelated generated project or lockfile churn. Keep generated workspace/project and `Package.resolved` changes out of source control unless they are part of an explicitly approved dependency-lock policy.
9393
- For Firebase Cloud Functions, deploy updated functions one by one separately.
9494

9595
## Canonical project rules

0 commit comments

Comments
 (0)