Skip to content

[#8] 프로젝트 초기 설정을 진행한다#9

Merged
opficdev merged 5 commits intomainfrom
chore/#8-project-setup
Apr 8, 2026
Merged

[#8] 프로젝트 초기 설정을 진행한다#9
opficdev merged 5 commits intomainfrom
chore/#8-project-setup

Conversation

@indextrown
Copy link
Copy Markdown
Contributor

@indextrown indextrown commented Apr 8, 2026

💡 PR 유형

  • Feature: 기능 추가
  • Fix: 일반 버그 수정
  • Hotfix: 긴급 버그 수정
  • Chore: 환경 설정 및 기타 작업
  • Refactor: 코드 개선
  • Test: 테스트 코드 작성
  • Docs: 문서 작성 및 수정
  • CI: CI/CD 및 GitHub Actions 작업 및 수정

✏️ 변경 사항

  • draft pr 오픈 이메일 알림 비활성화
  • iOS 최소 지원 버전을 15로 진행하였습니다
  • 프로젝트 초기 폴더 구조를 설정하였습니다
  • 예제를 바로 확인할 수 있도록 Sample App을 생성하였습니다
    • Sample App에서 라이브러리를 Local SPM로 등록하였습니다

🚨 관련 이슈

🎨 스크린샷

기능 스크린샷
IMG

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 라이브러리 사용 예시로 완전한 iOS 샘플 앱 추가
    • SwiftUI 기반 샘플 뷰 컴포넌트 및 기본 프리뷰 추가
    • 앱 아이콘·액센트 컬러 등 애셋 카탈로그 포함
    • 패키지 최소 지원 iOS 버전(15) 명시
  • 잡일(Chores)

    • PR 알림 워크플로우 개선: 드래프트 PR 무시 및 이벤트별 이메일 라벨링 추가

@indextrown indextrown self-assigned this Apr 8, 2026
@indextrown indextrown added the ⚙️ chore 기타 작업 관련 이슈 label Apr 8, 2026
@indextrown indextrown marked this pull request as ready for review April 8, 2026 04:40
@indextrown indextrown requested a review from opficdev April 8, 2026 04:40
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 8, 2026

📝 Walkthrough

Walkthrough

GitHub Actions 워크플로우에서 pull_request 이벤트 처리 로직을 확장했습니다: ready_for_review 트리거를 추가하고, PR이 draft일 때 열린(opened) 이벤트에 대해 이메일 발송을 조기 종료하도록 조건을 넣었습니다. 이벤트별로 내부 EVENT_LABEL 값을 PR 병합, PR 전환, PR 생성, 또는 무시됨으로 설정하도록 분기 로직을 명확히 했습니다. 또한 SampleApp 샘플 iOS 프로젝트(앱 진입점, Asset 카탈로그, Xcode 프로젝트/워크스페이스, Swift 패키지 참조)와 SKSampleView 컴포넌트, 빈 SKWebView 파일을 새로 추가했고 Package.swift에 iOS 15 플랫폼을 명시했습니다.

Sequence Diagram(s)

sequenceDiagram
    participant GitHub as "GitHub (pull_request event)"
    participant Actions as "GitHub Actions (email-notify.yml)"
    participant EmailSvc as "Email Action / Notifier"

    GitHub->>Actions: pull_request (opened/closed/ready_for_review)
    activate Actions
    alt opened && draft == true
        Actions-->>GitHub: set event_label=무시됨, exit early
    else opened && draft == false
        Actions->>Actions: set EVENT_LABEL="PR 생성"
        Actions->>EmailSvc: build & send email (if not ignored)
    else ready_for_review
        Actions->>Actions: set EVENT_LABEL="PR 전환"
        Actions->>EmailSvc: build & send email
    else closed && merged == true
        Actions->>Actions: set EVENT_LABEL="PR 병합"
        Actions->>EmailSvc: build & send email
    else
        Actions-->>GitHub: set event_label=무시됨, exit early
    end
    deactivate Actions
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

✨ 새 브랜치에 불빛이 켜지고
워크플로우는 깔끔히 분기하며
샘플앱은 작은 무대 위에 서네
iOS15로 첫 발자국, 앞으로 쭉 — 🚀


📝 코드 리뷰 노트

짧고 구체적으로 개선 포인트를 제안합니다.

  1. 워크플로우 draft 검사
  • 문제: 현재 draft == "true" 문자열 비교를 사용합니다. GitHub 이벤트에서는 github.event.pull_request.draft가 boolean으로 들어옵니다.
  • 제안: 조건을 boolean으로 처리하거나 명시적 캐스팅을 사용하세요. 예: if: github.event.pull_request.draft == true 대신 if: github.event.pull_request.draft 또는 환경 변수로 설정 시 echo "draft=${{ toJson(github.event.pull_request.draft) }}".
  • 참고: Actions 표현식 문서(조건식) 검토 권장.
  1. 이메일 발송 조건의 명시성
  • 문제: 이벤트를 무시할 때 워크플로우 전체에서 이메일 단계를 건너뛰는 방식이 암묵적일 수 있습니다.
  • 제안: 이메일 발송 step에 if: env.event_label != '무시됨' 같은 명시적 조건을 추가해 안전하게 보호하세요.
  1. github.event.action 사용 변경
  • 문제: github.event.action을 그대로 사용하도록 변경되어 값이 없을 때 빈 문자열/undefined가 될 수 있습니다.
  • 제안: 이메일 본문에 넣기 전에 기본값을 지정하세요. 예: ${{ github.event.action || 'unknown' }} 또는 조건부 포맷팅.
  1. SampleApp / Xcode 프로젝트
  • 확인 사항: 추가된 Xcode 프로젝트는 로컬 swift package 참조와 기본 설정(팀, 서명 등)을 포함합니다. 자동 서명(DEVELOPMENT_TEAM) 값이 placeholder일 가능성이 있어 CI 빌드에서 문제될 수 있습니다.
  • 제안: 프로젝트에 임시 팀 ID 대신 Automatic 설명 또는 CI 전용 설정(사인 비활성화)을 문서화하세요. 또한 .gitignore에 사용자/환경별 파일이 포함되지 않았는지 확인하세요.
  1. SKWebView.swift 빈 파일
  • 문제: 빈 파일로 남아 있어 의도가 불분명합니다.
  • 제안: 구현 예정이라면 // TODO: implement SKWebView 또는 간단한 스텁과 주석(목적, API 계획)을 추가해 다른 기여자가 혼동하지 않게 하세요.
  1. 샘플 확장성
  • 제안: SKSampleView와 SampleApp은 패키지 사용 예제입니다. 앞으로 네트워크/상태관리 예제가 필요하면 작은 모듈별 예제(예: MVVM 샘플, Swift Concurrency 사용 예)를 추가하면 학습 효율이 높아집니다.
  • 참고 자료: Apple의 Package.swift 문서, WWDC 세션(패키지 통합 및 Xcode에서의 로컬 패키지 사용).

칭찬 짧게: 시작이 아주 깔끔합니다 — 구조를 잘 잡으셨네요. 👏

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 PR의 주요 변경사항인 프로젝트 초기 설정(폴더 구조, Sample App, 의존성 설정 등)을 명확하게 요약하고 있습니다.
Linked Issues check ✅ Passed PR의 모든 변경사항(이메일 알림 설정, iOS 최소 버전, 폴더 구조, Sample App, 로컬 SPM 설정)이 issue #8의 프로젝트 초기 설정 요구사항을 충족합니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 프로젝트 초기 설정 범위 내에 있으며, 기능 구현이나 이미지 최적화 같은 범위 외 변경사항이 없습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/#8-project-setup

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (3)
.github/workflows/email-notify.yml (1)

110-121: dawidd6/action-send-mail 버전 업그레이드와 수신자 관리 개선이 필요합니다.

현재 코드에서 두 가지 개선할 점이 있습니다:

  1. 액션 버전 업데이트: @v3는 상당히 오래된 버전입니다. 현재 최신 버전은 @v16(2026년 3월)이므로 업그레이드를 권장합니다. 최신 버전에서는 보안 패치와 성능 개선이 적용되어 있습니다.

  2. 수신자 관리: 이메일 주소가 하드코딩되어 있는데, MAIL_USERNAME처럼 GitHub Secrets에 NOTIFY_RECIPIENTS를 추가하여 관리하면 코드 수정 없이 수신자를 유지보수할 수 있습니다.

🔧 개선 방안

버전 업그레이드:

-        uses: dawidd6/action-send-mail@v3
+        uses: dawidd6/action-send-mail@v16

수신자 관리:

-          to: opficdev@gmail.com, indextrown@gmail.com
+          to: ${{ secrets.NOTIFY_RECIPIENTS }}

이렇게 하면 GitHub Secrets에 NOTIFY_RECIPIENTS 값을 opficdev@gmail.com, indextrown@gmail.com으로 설정하고, 향후 변경이 필요할 때 코드 수정 없이 Secrets에서만 업데이트하면 됩니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/email-notify.yml around lines 110 - 121, Update the
dawidd6/action-send-mail usage: bump the action reference from
dawidd6/action-send-mail@v3 to the current stable `@v16` and replace the hardcoded
recipient list in the "to" input with a secret-based variable (e.g., use
secrets.NOTIFY_RECIPIENTS similar to MAIL_USERNAME) so the step named "Send
Email Notification" reads recipients from ${{ secrets.NOTIFY_RECIPIENTS }}
instead of the literal "opficdev@gmail.com, indextrown@gmail.com"; keep the
other inputs (server_address, server_port, username, password, subject, body,
from) unchanged.
Sources/SwiftUI-Kit/Wrapper/SKWebView.swift (1)

1-8: 빈 파일입니다 - 구현 예정이라면 TODO 주석을 추가하거나, 파일을 제거하는 것을 권장드립니다.

현재 import Foundation만 있는 빈 파일입니다. SKWebView라는 이름으로 보아 WKWebView를 래핑하는 컴포넌트가 될 것 같은데요:

  • 구현 예정이라면: // TODO: WKWebView wrapper 구현 예정 주석을 추가해주세요
  • 당장 필요 없다면: 초기 설정 PR에서는 제외하고, 실제 구현 시 추가하는 것이 깔끔합니다

또한 UIViewRepresentableWKWebView를 래핑하려면 Foundation 대신 SwiftUIWebKit이 필요합니다.

💡 향후 구현 시 참고할 import
-import Foundation
+import SwiftUI
+import WebKit
+
+// TODO: WKWebView wrapper 구현 예정

📚 참고 자료: UIViewRepresentable - Apple Developer Documentation

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Sources/SwiftUI-Kit/Wrapper/SKWebView.swift` around lines 1 - 8, File
SKWebView.swift is empty except for import Foundation; either remove the file or
mark it as TODO and/or implement a WKWebView wrapper: add a TODO comment like
"// TODO: Implement SKWebView as a WKWebView wrapper" if you intend to implement
later, otherwise delete the file now; if implementing, replace import Foundation
with "import SwiftUI" and "import WebKit" and implement a UIViewRepresentable
struct named SKWebView that creates and updates a WKWebView (implement
makeUIView(context:) -> WKWebView, updateUIView(_:context:), and Coordinator if
needed).
Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj (1)

172-172: DEVELOPMENT_TEAM 하드코딩은 공유 저장소에서 분리하는 편이 안전합니다.

Line 172, Line 236, Line 265, Line 298의 고정 Team ID는 외부 기여자/CI에서 서명 충돌을 만들기 쉽습니다. 공용 설정에서는 .xcconfig로 분리하거나 로컬 전용으로 관리하는 방식을 권장합니다.
참고: Apple Code Signing Guide, WWDC의 certificates/profiles 관리 세션.

Also applies to: 236-236, 265-265, 298-298

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj` at line 172, The
project currently hardcodes DEVELOPMENT_TEAM = LGX4B4WC66 in multiple pbxproj
entries; replace those literal Team IDs by removing the fixed value and sourcing
it from an external configuration: set DEVELOPMENT_TEAM = $(DEVELOPMENT_TEAM) in
the pbxproj and create a local-only .xcconfig (or a shared defaults .xcconfig)
that defines DEVELOPMENT_TEAM, commit a template (e.g., DEVELOPMENT_TEAM =
<YOUR_TEAM_ID>) and add the real local file to .gitignore, or alternatively
remove the key from shared settings and manage signing in CI/local Xcode
preferences; update all occurrences of the DEVELOPMENT_TEAM entry in the project
(the three/four hardcoded entries) accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj`:
- Line 190: Multiple IPHONEOS_DEPLOYMENT_TARGET values are inconsistent (some
set to 18.5, others to 15.0); normalize them so the project enforces minimum iOS
15 support. Edit the project.pbxproj and locate all occurrences of the
IPHONEOS_DEPLOYMENT_TARGET setting in both the project and target build
configurations (the project-level and target-level build setting blocks) and
change any 18.5 entries to 15.0 so all IPHONEOS_DEPLOYMENT_TARGET occurrences
match 15.0.

In `@Sources/SwiftUI-Kit/Native/SKSampleView.swift`:
- Line 2: 파일 상단 주석에 적힌 파일명이 실제 파일명과 일치하지 않습니다; SKSampleView.swift 파일의 헤더 주석(파일
헤더 문자열, 현재 "SwiftUIView.swift")을 찾아 실제 파일명 "SKSampleView.swift"로 바꿔 주세요. 해당 수정은
파일 최상단 주석 블록(파일명 표기 부분)을 편집하면 되며, 다른 메타정보(작성자, 날짜 등)는 변경할 필요 없습니다.

---

Nitpick comments:
In @.github/workflows/email-notify.yml:
- Around line 110-121: Update the dawidd6/action-send-mail usage: bump the
action reference from dawidd6/action-send-mail@v3 to the current stable `@v16` and
replace the hardcoded recipient list in the "to" input with a secret-based
variable (e.g., use secrets.NOTIFY_RECIPIENTS similar to MAIL_USERNAME) so the
step named "Send Email Notification" reads recipients from ${{
secrets.NOTIFY_RECIPIENTS }} instead of the literal "opficdev@gmail.com,
indextrown@gmail.com"; keep the other inputs (server_address, server_port,
username, password, subject, body, from) unchanged.

In `@Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj`:
- Line 172: The project currently hardcodes DEVELOPMENT_TEAM = LGX4B4WC66 in
multiple pbxproj entries; replace those literal Team IDs by removing the fixed
value and sourcing it from an external configuration: set DEVELOPMENT_TEAM =
$(DEVELOPMENT_TEAM) in the pbxproj and create a local-only .xcconfig (or a
shared defaults .xcconfig) that defines DEVELOPMENT_TEAM, commit a template
(e.g., DEVELOPMENT_TEAM = <YOUR_TEAM_ID>) and add the real local file to
.gitignore, or alternatively remove the key from shared settings and manage
signing in CI/local Xcode preferences; update all occurrences of the
DEVELOPMENT_TEAM entry in the project (the three/four hardcoded entries)
accordingly.

In `@Sources/SwiftUI-Kit/Wrapper/SKWebView.swift`:
- Around line 1-8: File SKWebView.swift is empty except for import Foundation;
either remove the file or mark it as TODO and/or implement a WKWebView wrapper:
add a TODO comment like "// TODO: Implement SKWebView as a WKWebView wrapper" if
you intend to implement later, otherwise delete the file now; if implementing,
replace import Foundation with "import SwiftUI" and "import WebKit" and
implement a UIViewRepresentable struct named SKWebView that creates and updates
a WKWebView (implement makeUIView(context:) -> WKWebView,
updateUIView(_:context:), and Coordinator if needed).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 703c3a1f-3b03-4a58-8203-a7e65a7eec00

📥 Commits

Reviewing files that changed from the base of the PR and between 26a5d56 and 9b0acd9.

📒 Files selected for processing (13)
  • .github/workflows/email-notify.yml
  • Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj
  • Examples/SampleApp/SampleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  • Examples/SampleApp/SampleApp/Assets.xcassets/AccentColor.colorset/Contents.json
  • Examples/SampleApp/SampleApp/Assets.xcassets/AppIcon.appiconset/Contents.json
  • Examples/SampleApp/SampleApp/Assets.xcassets/Contents.json
  • Examples/SampleApp/SampleApp/ContentView.swift
  • Examples/SampleApp/SampleApp/SampleApp.swift
  • Package.swift
  • Sources/SwiftUI-Kit/Native/SKSampleView.swift
  • Sources/SwiftUI-Kit/SwiftUI_Kit.swift
  • Sources/SwiftUI-Kit/Util/.gitkeep
  • Sources/SwiftUI-Kit/Wrapper/SKWebView.swift
💤 Files with no reviewable changes (1)
  • Sources/SwiftUI-Kit/SwiftUI_Kit.swift

Comment thread Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj Outdated
Comment thread Sources/SwiftUI-Kit/Native/SKSampleView.swift Outdated
@indextrown indextrown removed the request for review from opficdev April 8, 2026 04:45
@indextrown indextrown requested a review from opficdev April 8, 2026 04:50
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj`:
- Around line 348-351: Relative path for the XCLocalSwiftPackageReference is
hardcoded to "../../../SwiftUI-Kit", which ties resolution to a specific folder
name; change the relativePath value on the XCLocalSwiftPackageReference entry
(the DF5A97CE2F860E7D00BA954A block) to a pure relative path from SampleApp
(e.g. "../..") so the package is referenced by location rather than repository
folder name, update the relativePath string accordingly and keep the isa =
XCLocalSwiftPackageReference entry unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 48cc3bda-5b54-4b31-b2ed-ed06c8012265

📥 Commits

Reviewing files that changed from the base of the PR and between 9b0acd9 and 725dc78.

📒 Files selected for processing (2)
  • Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj
  • Sources/SwiftUI-Kit/Native/SKSampleView.swift
✅ Files skipped from review due to trivial changes (1)
  • Sources/SwiftUI-Kit/Native/SKSampleView.swift

Comment thread Examples/SampleApp/SampleApp.xcodeproj/project.pbxproj
@opficdev opficdev merged commit 0e4476e into main Apr 8, 2026
2 checks passed
@indextrown indextrown deleted the chore/#8-project-setup branch April 8, 2026 05:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⚙️ chore 기타 작업 관련 이슈

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[chore] 프로젝트 초기 설정을 진행한다

2 participants