Project Topic: ํ ํ์ด์ง ์์ ๋ชจ๋ฐ์ผ ํค์ค์คํฌ ๊ตฌํํ๊ธฐ
Project Name: iMacDonald
Project Period: 11/25 ~ 11/29 12:00
Wire Frame: ๐Figma
iMacDonald?
- ๊ฐ๋จํ๊ณ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๊ตฌ์กฐ
- ์ต์ํ ๋ ์์ (i + MacDonald)์ ์กฐํฉ์ผ๋ก ๋์ ํ์์ฑ
i
์ ๋์ฌ๋ apple์ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ์ฐ์์ํด (iPhone, iPad, iMac ๋ฑ)- IT๊ธฐ์ ๊ณผ ์ ์ข ์ ์ธ ํจ์คํธํธ๋์ ๊ฒฐํฉ์ ์์ง
ํ์ฅ๐ฏ | ๐จ ๋์์ธ/๊ฐ๋ฐ | โก๏ธ ๊ฐ๋ฐ/ํ์ง | โก๏ธ ๊ฐ๋ฐ/ํ์ง | ๐จโ๐ป ๊ฐ๋ฐ ์ด๊ด |
---|---|---|---|---|
์ ํํธ | ๊น์๊ฒธ | ํฉ์๋ฒ | ์์ ๋ฌด | ์ฅ์๊ฒฝ |
iOS ๊ฐ๋ฐ, ํ๋ก๊ทธ๋จ ์ค๊ณ, ํ๋ก์ ํธ ๊ด๋ฆฌ | UI/UX ๋์์ธ, iOS ๊ฐ๋ฐ, ์ธํฐํ์ด์ค ๊ตฌํ | iOS ๊ฐ๋ฐ, ํ์ง ๊ด๋ฆฌ(QC), ๋ฒ๊ทธ ์์ ๋ฐ ํ ์คํธ | iOS ๊ฐ๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ, ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง | iOS ๊ฐ๋ฐ, ์ฝ๋ ๋ฆฌ๋ทฐ, ๊ธฐ์ ์ง์ |
- ๐จโ๐ป ๊ฐ์ ์ต์ 1๊ฐ์ ๊ธฐ๋ฅ ๋ ๋ฆฝ์ ๊ตฌํ
- โ๏ธ ํ์ ๊ฐ ๊ท ๋ฑํ ์ ๋ฌด๋ ๋ถ๋ฐฐ
- ๐ ๊ฐ์ธ ์ค๋ ฅ ํฅ์
- ๐ค ํ์ ๊ฒฝํ ์ถ์
- ๐ ์ค๋ฌด ๊ฒฝํ ํ๋
- ๐ ์ ์ฒด ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ดํด
- ๐ช ๊ฐ์ธ ์ญ๋ ๊ฐํ
- ๐คผ ํ์ํฌ ํฅ์
-
main ๋ธ๋์น์ ํ๋ก์ ํธ ๊ธฐ๋ณธ ์ธํ
- README ์์ฑ
- .gitignore ํ์ผ ์์ฑ
- ํ๋ก์ ํธ ํ์ผ ์์ฑ(Xcode)
- ์ฝ๋๋ฒ ์ด์ค ๊ธฐ๋ณธ ์ธํ (์คํ ๋ฆฌ๋ณด๋ ์ญ์ , info ์ค์ ๋ฑ)
- ํ๋ก์ ํธ Asset ์ถ๊ฐ(์ด๋ฏธ์ง, ์ปฌ๋ฌ์ธํธ ๋ฑ)
- ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๋ถ๋ฆฌ(๊ฐ ์ญํ ๋ณ๋ก ๋ถ๋ฆฌ)
-
dev ๋ธ๋์น ์์ฑ(main ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก)
- ๋ฉ์ธ ๋ธ๋์น์ ๋ง๋ค์ด์ง ๋ด์ฉ์ ๋ณต์
- ์์ ๋ธ๋์น(Default)๋ฅผ dev ๋ธ๋์น๋ก ์ค์
-
ํ์๋ณ ์๊ฒฉ ๋ธ๋์น ๋ถ๋ฆฌ
- dev ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฒฉ ๋ธ๋์น๋ฅผ ๋ถ๋ฆฌ
- ์ธ๋ถ์ ์ธ ์์ ๋ด์ฉ์ ๋ก์ปฌ ๋ธ๋์น๋ก ๋ถ๋ฆฌ
-
PR-Merge ์ ๋ต
- PR์ ์์ฑํ ๋๋ ์ ๊ท ๋ด์ฉ, ๋ณ๊ฒฝ ๋ด์ฉ, ๋ฌธ์ ์ ๋ฑ์ ์์ธํ ์์ฑ
- ํ์ ๋ชจ๋๋ PR์ ๋ํด ์ฝ๋ฉํธ๋ฅผ ์์ฑ
- Merge๋ ํ์ ๋ชจ๋๊ฐ Approve ํด์ผ๋ง ๊ฐ๋ฅ
-
๋ชจ๋ ์์ ์๋ฃ ํ test ๋ธ๋์น๋ฅผ ์์ฑ
- dev ๋ธ๋์น์ ๋ด์ฉ์ test ๋ธ๋์น๋ก ๋ณต์
- test ๋ธ๋์น์์ ํ๋ก์ ํธ ๋ฒ๊ทธ ํ์ธ ๋ฐ ์์
- ํ์์ ๋ฐ๋ผ hotFix ๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ์ด์
-
์์ฑ๋ ํ๋ก์ ํธ๋ฅผ main์ ์ ๋ฌ
- test ๋ธ๋์น์์ ๋ฒ๊ทธ ๋ฑ์ ์์ ํ ์ต์ข ์์ฑ๋ ํ๋ก์ ํธ๋ฅผ main ๋ธ๋์น์ ์ ๋ฌ
- ๋ถํ์ํ ๋ธ๋์น ์ญ์
- README ์์
- โจ
feat
: ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ - ๐
fix
: ๋ฒ๊ทธ ์์ - ๐
docs
: ๋ฌธ์ ์์ - ๐
style
: ์ฝ๋ ํฌ๋งทํ , ์ธ๋ฏธ์ฝ๋ก ๋๋ฝ, ์ฝ๋ ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ - โป๏ธ
refactor
: ์ฝ๋ ๋ฆฌํฉํ ๋ง - โ
test
: ํ ์คํธ ์ฝ๋, ๋ฆฌํฉํ ๋ง ํ ์คํธ ์ฝ๋ ์ถ๊ฐ - ๐จ
chore
: ๋น๋ ์ ๋ฌด ์์ , ํจํค์ง ๋งค๋์ ์์
- ๐
deploy
: ๋ฐฐํฌ - โก๏ธ
perf
: ์ฑ๋ฅ ๊ฐ์ - ๐ง
config
: ์ค์ ํ์ผ ์์ - ๐ฆ
build
: ๋น๋ ๊ด๋ จ ์์ - ๐
merge
: ํฉ๋ณ - โช๏ธ
revert
: ๋๋๋ฆฌ๊ธฐ
- ๋ฌธ์ : ๋ฉ๋ด๋ฅผ ๋ด์ ์นด๋๋ทฐ๊ฐ ๋ฉ์ธ๋ทฐ์ ๋ฐฐ์น๋ ๋ ๊ตฌ์ฑ์์๋ค์ ์คํ ๋ ์ด์์์ด ํ์ด์ง๋ ๋ฌธ์ ๋ฐ์
- ํด๊ฒฐ: ์นด๋๋ทฐ ๊ตฌ์ฑ ์์๋ค์ ์นด๋๋ทฐ์ ๋น์จ๋ก ์ค์ ํ์ฌ ํด๊ฒฐ
make.height.equalToSuperview().multipliedBy(0.6)
- ๋ฌธ์ :
layer.borderColor
๊ฐ ๋์ ์ผ๋ก ์ ๋ฐ์ดํธ ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ - ํด๊ฒฐ: iOS ๋ฒ์ ์ ๋ง๋ ๋ณด๋ ์ปฌ๋ฌ ์ ๋ฐ์ดํธ ๋ก์ง์ ๊ตฌํํ์ฌ ํด๊ฒฐ
// MARK: - Dark Mode Handling
/// ๋คํฌ๋ชจ๋ ๋ณ๊ฒฝ ๊ฐ์ง ์ ํธ์ถ๋๋ ๋ฉ์๋
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
updateBorderColor()
}
}
/// ํ
๋ง์ ๋ฐ๋ฅธ ํ
๋๋ฆฌ ์์ ์
๋ฐ์ดํธ ๋ฉ์๋
private func updateBorderColor() {
self.layer.borderColor = UIColor(named: "CardViewShadowColor")?.cgColor
}
/// iOS 17 ์ด์์์ ํ
๋ง ๋ณ๊ฒฝ ๊ฐ์ง ์ค์ ๋ฉ์๋
private func registerTraitChangeHandler() {
if #available(iOS 17.0, *) {
registerForTraitChanges([UITraitUserInterfaceStyle.self]) { (self: Self, previousTraitCollection: UITraitCollection) in
self.updateBorderColor()
}
}
}
- ๋ฌธ์ : ํ ์ด๋ธ๋ทฐ์์ ์ ์ ์ ๊ฑฐํ๋ ์ก์ ์์ ์ญ์ ์์(row.index)์ ๋ฐ๋ผ ์ฑ์ด ํฌ๋์๋๋ ํ์ ๋ฐ์
- ํด๊ฒฐ: ์ ์ ๊ฑฐ ์ก์ ์ ์์ ํ๊ณ ํ ์ด๋ธ๋ทฐ์์ ์ ๊ฑฐ๋ ํ์ ์ญ์ ํ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ ํด๊ฒฐ
cart.remove(at: row) // ์ญ์ ์ก์
์คํ์ ๋ฐฐ์ด์์ ์ธ๋ฑ์ค ์ ๊ฑฐ
// ํ
์ด๋ธ๋ทฐ์์ ์ ๊ฑฐํ ํ์ ์ญ์
tableView.deleteRows(at: [IndexPath(row: row, section: 0)], with: .none)
- ๋ฌธ์ : ๋คํฌ๋ชจ๋๋ ๋ผ์ดํธ๋ชจ๋๋ก ์ค์ ์ ๋ณ๊ฒฝํด๋ ๋ทฐ์ ๋ฐฐ๊ฒฝ์์ด ๊ณ ์ ๋์ด ๋ณํ์ง ์์
- ํด๊ฒฐ: ๋ฐฐ๊ฒฝ์์์ ์ปฌ๋ฌ๋ฅผ
UIColor.systemBackground
๋ก ์ฌ์ฉํ๊ฑฐ๋Asset
์์ ์์์ ์ ์ํ์ฌ ์ฌ์ฉ
- ๋ฌธ์ : ๋ฉ์ธ๋ทฐ์์ ํ ์ด๋ธ๋ทฐ๊ฐ ๋ณด์ด์ง ์์ ๋๋ ํ ์ด๋ธ๋ทฐ๊ฐ ์ฐจ์งํ๋ ์์ญ๋งํผ ์คํฌ๋กค์ด ๋์ง ์๋ ๋ฌธ์ ๋ฐ์
- ํด๊ฒฐ 1: ํ
์ด๋ธ๋ทฐ์
height
๋ฅผ 0์ผ๋ก ์ค์ ํ๊ณ ์ ์ด ์ ๋ฐ์ดํธ ๋ ๋๋งheight
๊ฐ์ด ๋์ด๋๋๋ก ์ค์ ->height
๊ฐ์ด ๊ณ์ 0์ผ๋ก ๊ณ ์ ๋์ด ํ ์ด๋ธ๋ทฐ๊ฐ ํฐ์น๋์ง ์๋ ๋ฌธ์ ๋ฐ์ - ํด๊ฒฐ 2: ํ
์ด๋ธ๋ทฐ๋ฅผ
Hidden
์ผ๋ก ์ค์ ํ๊ณ ์ ์ด ์ถ๊ฐ๋ ๋๋ง ๋ณด์ด๋๋ก ์ค์ -> ํ ์ด๋ธ๋ทฐ ์ ์ด 1๊ฐ์ผ ๋๋ ํ ์ด๋ธ๋ทฐ ์์ญ ์ ์ฒด๊ฐ ๋ฉ์ธ๋ทฐ์ ์ํฅ์ ๋ฏธ์ณ ์คํฌ๋กค๋์ง ์๋ ํ์ ๋ฐ์ - ํด๊ฒฐ 3: ํํฐ๋๊ป ํผ๋๋ฐฑ์ ๋ฐ์
hitTest
๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ํ ์ด๋ธ๋ทฐ์ ์ ์ด ๋น์ด์์ง ์์ ๋๋ง ํฐ์น๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค์ .
/// ํฐ์น ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฉ์๋
/// ํ
์ด๋ธ๋ทฐ ์์ญ ์ธ์ ํฐ์น๋ ๋ฌด์ํ๋๋ก ๊ตฌํ
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
guard !tableView.frame.contains(point) else {
return super.hitTest(point, with: event)
}
return nil
}