Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
916 commits
Select commit Hold shift + click to select a range
061c5fc
Merge pull request #191 from boostcampwm2025/refector/#163-rename-skill
tomchoi95 Jan 26, 2026
666bb4f
Merge pull request #193 from boostcampwm2025/refector/#157-work-segmeโ€ฆ
tomchoi95 Jan 26, 2026
1c0d43a
Merge pull request #195 from boostcampwm2025/fix/#180-timer
tomchoi95 Jan 26, 2026
8e7c2ea
Merge pull request #196 from boostcampwm2025/fix/#181-junior-developeโ€ฆ
tomchoi95 Jan 26, 2026
b638618
Merge pull request #194 from boostcampwm2025/refector/#183-shop-housing
tomchoi95 Jan 26, 2026
b68828f
Merge pull request #197 from boostcampwm2025/fix/#188-character-asset
tomchoi95 Jan 26, 2026
46d7097
feat: ๋ฏธ์…˜ ์„ฑ๊ณต์‹œ ํ† ์ŠคํŠธ ๊ตฌํ˜„
tomchoi95 Jan 26, 2026
0b37514
feat: ๋ฏธ์…˜ ์ •๋ ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
tomchoi95 Jan 26, 2026
9dfb6e4
refector: description์— ๊ฒŒ์ž„๋ช… ์ถ”๊ฐ€
tomchoi95 Jan 26, 2026
1cf3e3e
chore: ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ
sunjae0902 Jan 26, 2026
214e3bd
fix: ๊ฒŒ์ž„ ์ง„ํ–‰ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํ•˜์œ„ ๋ทฐ ๋นŒ๋”ฉ ๋ฐฉ์‹ ๋ณ€๊ฒฝ
snughnu Jan 26, 2026
96f442a
fix: game, scene ์ƒํƒœ ๊ด€๋ฆฌ ๋ณ€๊ฒฝ
snughnu Jan 26, 2026
2713461
refector: ํฌ๋ฉ”ํŒ… ์ถ”๊ฐ€
tomchoi95 Jan 26, 2026
5eed401
Merge pull request #192 from boostcampwm2025/refector/#158-multi-touch
tomchoi95 Jan 26, 2026
aaf046b
Merge pull request #208 from boostcampwm2025/ui/#172-launch-screen-upโ€ฆ
sunjae0902 Jan 26, 2026
76b10a4
fix: QuizButton ๊ฐ„๊ฒฉ ์ˆ˜์ •
snughnu Jan 26, 2026
3fcbad2
feat: ํšŒํ”ผํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋•…์— ๋–จ์–ด์งˆ ๋•Œ ๊ณจ๋“œ ํš๋“
dongglehada Jan 26, 2026
ccf100e
fix: ๋ฒ„๊ทธ ์ƒ์„ฑํ™•๋ฅ  ์ˆ˜์ •
dongglehada Jan 26, 2026
d2e9410
fix: ํ”ผ๋ฒ„ ๊ฐ์†Œ์ˆ˜์น˜ ์ˆ˜์ •
dongglehada Jan 26, 2026
73c45d5
style: lint ๊ฒฝ๊ณ  ํ•ด๊ฒฐ
dongglehada Jan 26, 2026
4527b04
remove: ๊ณจ๋“œ ํš๋“ ๊ธฐ๋ก ์ˆ˜์ง‘ ์ œ๊ฑฐ
dongglehada Jan 26, 2026
fefafd0
remove: ๋ถˆํ•„์š” async ์ œ๊ฑฐ
dongglehada Jan 26, 2026
e809e97
fix: ํ€ด์ฆˆํ™”๋ฉด ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์ˆ˜์ •
snughnu Jan 26, 2026
2942762
Merge branch 'dev' into feat/#136-quiz-ui
snughnu Jan 26, 2026
1b8aea6
Merge pull request #207 from boostcampwm2025/feat/#177-mission-claim
tomchoi95 Jan 26, 2026
855f412
feat: ํ•„์š” record ์†์„ฑ ์ถ”๊ฐ€
dongglehada Jan 26, 2026
7c062b5
feat: ๋ฒ„๊ทธ ์ˆ˜์ง‘ ํšŸ์ˆ˜ ๊ธฐ๋ก
dongglehada Jan 26, 2026
fb76e4f
fix: devํƒ€๊นƒ ๋นŒ๋“œ ์—๋Ÿฌ ํ•ด๊ฒฐ
dongglehada Jan 26, 2026
e75f9a6
feat: Game pause / resume ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
sunjae0902 Jan 26, 2026
e32ad71
add: ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€
dongglehada Jan 26, 2026
76aaba8
Merge pull request #210 from boostcampwm2025/fix/#159-dodgeGame
dongglehada Jan 26, 2026
efda069
feat: ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค ๋ฒ„ํŠผ์— ์ ์šฉ
dongglehada Jan 26, 2026
1962b08
feat: ํ”ผ๋ฒ„, ๋ฒ„ํ”„ ์‹œ์Šคํ…œ pause / resume ๊ตฌํ˜„
sunjae0902 Jan 26, 2026
177ffb1
feat: ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€ ๋ฐ ์†Œ๋ฆฌ, ์ง„๋™ ์„ค์ • ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ
dongglehada Jan 26, 2026
f1420b7
feat: ์œ ์ ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ตฌํ˜„
tomchoi95 Jan 26, 2026
d9acdbe
feat: ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋ฐ ์ €์žฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
tomchoi95 Jan 26, 2026
b81ddf6
feat: DTO ๊ตฌ์กฐ์ฒด ์ถ”๊ฐ€
tomchoi95 Jan 26, 2026
7b0e17f
chore: iOS version 17๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
tomchoi95 Jan 26, 2026
efd5f37
Merge pull request #184 from boostcampwm2025/feat/#136-quiz-ui
snughnu Jan 26, 2026
c6fdec2
Merge branch 'dev' into fix/#162-game-reset
snughnu Jan 26, 2026
60a7b61
Refector: Record ๋ณ€๊ฒฝ ๋Œ€์‘
tomchoi95 Jan 26, 2026
3ac847e
Merge pull request #209 from boostcampwm2025/fix/#162-game-reset
snughnu Jan 26, 2026
800743d
refactor: ๋ฒ„ํ”„ ์‹œ์Šคํ…œ ๋‹จ์ผ ํƒ€์ด๋จธ ๊ตฌ์กฐ๋กœ ๊ฐœ์„ 
sunjae0902 Jan 26, 2026
d782b6a
refactor: ํ”ผ๋ฒ„ ์‹œ์Šคํ…œ ์ค‘๋ณต ์ฝ”๋“œ ํ•จ์ˆ˜ํ™”
sunjae0902 Jan 26, 2026
498ff52
feat: ๊ฐ ๊ฒŒ์ž„ ๋ชจ๋ธ์— pause, resume ํ•จ์ˆ˜ ๊ตฌํ˜„
sunjae0902 Jan 26, 2026
8c651c2
feat: GamePauseWrapper ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
sunjae0902 Jan 26, 2026
dcf3999
feat: Policy ์ƒ์ˆ˜ ํŒŒ์ผ ์ƒ์„ฑ
snughnu Jan 27, 2026
5c5639d
feat: ์ปค๋ฆฌ์–ด ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
505e5bc
remove: ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ
dongglehada Jan 27, 2026
3bfa1af
fix: sf์‹ฌ๋ณผ๋กœ ๋ณ€๊ฒฝ
dongglehada Jan 27, 2026
a1c5be5
feat: ํ”ผ๋ฒ„ ์‹œ์Šคํ…œ ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
6a7bcac
feat: TapGame ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
b60bd4e
feat: LanguageGame ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
057dfec
feat: DodgeGame ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
d38674c
feat: StackGame ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
3464948
feat: LanguageGame ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
98a2cb3
feat: DodgeGameCore ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
db89f0c
feat: MotionSystem ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
adb1cbe
feat: QuizGame ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
d3a21b7
feat: Skill ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
12e339f
feat: Consumable ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
b660396
feat: Equipment ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
39e1315
feat: Housing ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
e197e92
feat: AutoGainSystem ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
7503a4a
feat: BuffSystem ์ƒ์ˆ˜ ๋Œ€์ฒด
snughnu Jan 27, 2026
e931384
chore: Policy ํด๋”๋ง
snughnu Jan 27, 2026
7ab5f02
fix: ํ”ผ๋ฒ„ ์‹œ์Šคํ…œ ์ƒ์ˆ˜ ์ˆ˜์ •
snughnu Jan 27, 2026
8b4ef97
feat: ์ด๋ฏธ์ง€ ์—์…‹ ์ถ”๊ฐ€
tomchoi95 Jan 27, 2026
c21b9e6
feat: ํŠœํ† ๋ฆฌ์–ผ ๊ตฌํ˜„
tomchoi95 Jan 27, 2026
521c279
feat: keyValueStorage ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„
dongglehada Jan 27, 2026
e467a1b
feat: userDefaultStorage ์ƒ์„ฑ
dongglehada Jan 27, 2026
93baa86
feat: hapticService keyValueLocalStorage ์ ์šฉ
dongglehada Jan 27, 2026
25184be
feat: soundService ์ ์šฉ
dongglehada Jan 27, 2026
ffeafed
feat: WorkSelectedView ์ ์šฉ
dongglehada Jan 27, 2026
5a98522
feat: pauseGameStyle modifier๋กœ ๋ณ€๊ฒฝ
sunjae0902 Jan 27, 2026
f23189c
fix: onPause ์ฝœ๋ฐฑ ์ถ”๊ฐ€
sunjae0902 Jan 27, 2026
03e4caf
feat: tap, language ๊ฒŒ์ž„์— pauseStyle ์ถ”๊ฐ€
sunjae0902 Jan 27, 2026
eaaa088
fix: ํ”ผ๋ฒ„ ๊ฒŒ์ด์ง€ ์ •์ƒ ๋™์ž‘ ์ˆ˜์ •
tomchoi95 Jan 27, 2026
db9f7f3
feat: DodgeGameView์— pauseStyle ์ถ”๊ฐ€
sunjae0902 Jan 27, 2026
9feffdd
feat: ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์—์…‹ ๋ณ€๊ฒฝ
snughnu Jan 27, 2026
f62c785
fix: any ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
dongglehada Jan 27, 2026
90e2a6c
fix: ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์‚ฌ์ด์ฆˆ ์ˆ˜์ •
snughnu Jan 27, 2026
c9070f7
fix: set ์ธ์ž ์œ„์น˜ ์ˆ˜์ •
dongglehada Jan 27, 2026
316834e
feat: localStorage ํ”„๋กœํผํ‹ฐ๋ž˜ํผ ๊ตฌํ˜„
dongglehada Jan 27, 2026
c0b2765
remove: ๋ถˆํ•„์š” ๋ž˜ํผ ์ œ๊ฑฐ
dongglehada Jan 27, 2026
f5b285d
feat: StackGame pauseStyle ์ ์šฉ
sunjae0902 Jan 27, 2026
70415e7
Merge branch 'dev' into feat/#102-game-pause
sunjae0902 Jan 27, 2026
f2b464c
feat: ์†Œ๋น„์•„์ดํ…œ ์ฟจํƒ€์ž„ ํšจ๊ณผ ์ ์šฉ
snughnu Jan 27, 2026
ce92760
fix: ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•˜๋„๋ก ์ˆ˜์ •
tomchoi95 Jan 27, 2026
1877a25
feat: ๋ทฐ๊ฐ€ ์‚ฌ๋ผ์กŒ์„ ๋•Œ๋„ pauseStyle ์ ์šฉ
sunjae0902 Jan 27, 2026
b42c70b
fix: ์ผ์‹œ์ •์ง€ ์‹œ ์บ๋ฆญํ„ฐ ์œ„์น˜๋ณ€ํ™” ์ œ๊ฑฐ
sunjae0902 Jan 27, 2026
12161ee
feat: ์˜ค๋ฅ˜ ํŒ์—… ์ถ”๊ฐ€ ๋ฐ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋กœ๋“œ/์ €์žฅ ์‹คํŒจ ์‹œ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ
tomchoi95 Jan 27, 2026
49de189
fix: StackGameScene์—์„œ ํƒญ ๋ฌด์‹œ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
sunjae0902 Jan 27, 2026
8fbde22
Merge pull request #212 from boostcampwm2025/fix/#206-workItemButtonIโ€ฆ
dongglehada Jan 27, 2026
bdd902b
refactor: game์„ @State๋กœ ๋ณ€๊ฒฝ
tomchoi95 Jan 27, 2026
9819f24
feat: ์†Œ๋น„ ์•„์ดํ…œ ๊ฐœ์ˆ˜ ์ƒ‰์ƒ ๋ณ€๊ฒฝ์œผ๋กœ UX ๊ฐœ์„ 
snughnu Jan 27, 2026
94dd3f2
fix: ์ผ์‹œ์ •์ง€ ์ปดํฌ๋„ŒํŠธ ๋†’์ด ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ
sunjae0902 Jan 27, 2026
c3a28e2
fix: ํƒญ๋ฐ”, ๊ฒŒ์ž„ํˆด๋ฐ” pading ์ˆ˜์ •
snughnu Jan 27, 2026
550bc74
Merge branch 'dev' into feat/#141-consumable-effect
snughnu Jan 27, 2026
5f74f40
fix: DodgeGameView์—์„œ ๋ˆ„๋ฝ๋œ ์ฝ”๋“œ ์›๋ณต
sunjae0902 Jan 27, 2026
923b6a7
fix: StackGame์—์„œ ์ž‘์—…์ด ์ทจ์†Œ๋˜์–ด ํญํƒ„์ด ์ œ๊ฑฐ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
sunjae0902 Jan 27, 2026
948aa96
fix: ๋ฒ„ํ”„ ์‹œ์Šคํ…œ ๋‹จ์ผ ํƒ€์ด๋จธ + ์ ˆ๋Œ€ ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ๋กœ์ง์œผ๋กœ ๋ณ€๊ฒฝ
sunjae0902 Jan 27, 2026
dadc1d9
Merge pull request #218 from boostcampwm2025/feat/#203-kv-storage
dongglehada Jan 27, 2026
1307deb
Merge pull request #211 from boostcampwm2025/feat/#202-persistance-user
tomchoi95 Jan 27, 2026
2529344
Merge pull request #217 from boostcampwm2025/fix/#216-fever-guage
tomchoi95 Jan 27, 2026
44272f0
Merge pull request #215 from boostcampwm2025/feat/#204-policy-constant
snughnu Jan 27, 2026
ab22545
Merge pull request #220 from boostcampwm2025/feat/#141-consumable-effect
snughnu Jan 27, 2026
64f880a
Merge branch 'dev' into feat/#102-game-pause
sunjae0902 Jan 28, 2026
183e8c4
fix: ์ผ์‹œ์ •์ง€ ์ปดํฌ๋„ŒํŠธ ๋ฒ„ํŠผ ๊ฐ„๊ฒฉ ์ˆ˜์ • ๋ฐ ๋ฆฐํŠธ ํ•ด์†Œ
sunjae0902 Jan 28, 2026
905965a
Merge pull request #219 from boostcampwm2025/feat/#102-game-pause
sunjae0902 Jan 28, 2026
db5f8e4
Merge pull request #214 from boostcampwm2025/feat/#213-tutorial
snughnu Jan 28, 2026
9ddb208
chore: ์•ฑ ์นดํ…Œ๊ณ ๋ฆฌ, ๋ฒ„์ „ ์„ค์ •
snughnu Jan 28, 2026
821ac24
v1.0.0 (#226)
tomchoi95 Jan 28, 2026
e7aa12b
Merge remote-tracking branch 'origin/main' into dev
snughnu Jan 28, 2026
3bb37e5
chore: release-drafter.yml ์ถ”๊ฐ€
sunjae0902 Jan 28, 2026
fa483bc
feat: ์—…๋ฌด ๋ฒ„ํŠผ ์ปค๋ฆฌ์–ด์— ๋”ฐ๋ผ ํ•ด๊ธˆ
dongglehada Jan 28, 2026
e6c0481
refector: ํšจ๊ณผ ์„ค๋ช… ํ…์ŠคํŠธ ์ œ๊ฑฐ
tomchoi95 Jan 28, 2026
30b9ed9
fix: static ์ œ๊ฑฐ
dongglehada Jan 28, 2026
7d73eac
chore: release-note workflow ์ถ”๊ฐ€
sunjae0902 Jan 28, 2026
6728405
fix: ์ธํŠธ๋กœ๋ทฐ์—์„œ ๋ฉ”์ธํ™”๋ฉด ์ „ํ™˜ ์‹œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์†๋„ ์กฐ์ •
snughnu Jan 28, 2026
840c643
refector: ํŠœํ† ๋ฆฌ์–ผ ์—์…‹ ๊ต์ฒด
tomchoi95 Jan 28, 2026
7b4d8e8
refector: ๋ฒ„ํŠผ ์‚ฌ์ด ํŒจ๋”ฉ ์ถ”๊ฐ€
tomchoi95 Jan 28, 2026
1078dd3
fix: release-drafter๊ฐ€ ์•„๋‹Œ xcode marketing version์„ ๊ธฐ์ค€์œผ๋กœ ์ง์ ‘ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜โ€ฆ
sunjae0902 Jan 28, 2026
aefce10
remove: ๋ถˆํ•„์š”ํ•œ ์„ค์ • ํŒŒ์ผ ์‚ญ์ œ
sunjae0902 Jan 28, 2026
0980c50
Merge pull request #229 from boostcampwm2025/feat/#228-workMode-lock
dongglehada Jan 28, 2026
7996b04
Merge pull request #231 from boostcampwm2025/fix/#179-intro-animation
snughnu Jan 28, 2026
8e7fbea
Merge branch 'dev' into refector/#224-tutorial-image
tomchoi95 Jan 28, 2026
f6ffc66
fix: ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ • ๋ฐ ๋ณ‘ํ•ฉ ํ›„ ๋ฐ”๋กœ publish ๋˜๋„๋ก ๋ณ€๊ฒฝ
sunjae0902 Jan 28, 2026
29372cd
refactor: ํŠœํ† ๋ฆฌ์–ผ ์‚ฌ์ง„์— ์ŠคํŠธ๋กœํฌ ์ถ”๊ฐ€
tomchoi95 Jan 28, 2026
bbf831f
Merge pull request #230 from boostcampwm2025/chore/#227-auto-create-rโ€ฆ
sunjae0902 Jan 28, 2026
fa676cc
refector: ๋ฒ„ํŠผ ์ด๋ฏธ์ง€ ์ŠคํŠธ๋กœํฌ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
93f93a8
Merge pull request #232 from boostcampwm2025/refector/#224-tutorial-iโ€ฆ
tomchoi95 Jan 29, 2026
a81e4aa
fix: ์ปค๋ฆฌ์–ด๋ณ„ ๋ˆ„์  ์žฌ์‚ฐ ์žฌ์กฐ์ •
sunjae0902 Jan 29, 2026
5ed4ee7
refactor: ๋ฉ”์ธ๋ทฐ ์„œ๋ธŒ๋ทฐ๋กœ ๋ถ„ํ• 
tomchoi95 Jan 29, 2026
4d7021f
feat: Bgm, sfx on / off ๊ธฐ๋Šฅ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
71ffacf
feat: ์„ค์ • ๋ทฐ ๊ตฌํ˜„
tomchoi95 Jan 29, 2026
a65fcf3
feat: ๋ฒ„ํŠผ on / off ๊ตฌํ˜„
tomchoi95 Jan 29, 2026
9ffa650
feat: SettingSlider ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
d640b9a
fix: ์—…๋ฌด ํ•ด๊ธˆ ์กฐ๊ฑด ์ •์ฑ… ํŒŒ์ผ๋กœ ์ด๋™
snughnu Jan 29, 2026
6387e90
feat: FeedbackSettingView ๊ตฌํ˜„
tomchoi95 Jan 29, 2026
dab4aa2
feat: FeedbackSettingView์— ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
4b671f3
feat: ์Šคํ‚ฌ ํ•ด๊ธˆ์„ ์ปค๋ฆฌ์–ด์™€ ์—ฐ๋™
snughnu Jan 29, 2026
eb57c04
fix: Price๋ฒ„ํŠผ ํ•ด๊ธˆ ์ƒํƒœ์— ๋”ฐ๋ฅธ ๊ฐ€๊ฒฉ ํ‘œ์‹œ ์ˆ˜์ •
snughnu Jan 29, 2026
0206fcb
fix: SkillTestView ์ปค๋ฆฌ์–ด ์‹œ์Šคํ…œ ์ƒ์„ฑ์ž ์ˆ˜์ •
snughnu Jan 29, 2026
33586a1
feat: SettingSlider์— ํ™œ์„ฑํ™” ์ƒํƒœ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
0777690
fix: ์Šคํ‚ฌ, ์•„์ดํ…œ, ๋ถ€๋™์‚ฐ ๊ด€๋ จ ์ˆ˜์น˜ 1์ฐจ ์กฐ์ •
sunjae0902 Jan 29, 2026
1c85ea4
refactor: SettingSlider์˜ ์ƒ์ˆ˜ ๋ฐ ์Šคํƒ€์ผ ๊ฐœ์„ 
tomchoi95 Jan 29, 2026
358341f
fix: ๊ฒŒ์ž„ ๋‚ด ํ”ผ๋ฒ„์‹œ์Šคํ…œ ์ˆ˜์น˜ ์กฐ์ •
sunjae0902 Jan 29, 2026
d123533
fix: ํ€ด์ฆˆ ์ œํ•œ ์‹œ๊ฐ„ 20์ดˆ๋กœ ๋ณ€๊ฒฝ
sunjae0902 Jan 29, 2026
70cadd3
fix: ์Šคํ‚ฌ ์ตœ๋Œ€ ๋ ˆ๋ฒจ 1000์— ๋งž๊ฒŒ ์กฐ์ •
sunjae0902 Jan 29, 2026
115662c
fix: ๋ฒ„ํŠผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๊ฑฐ
tomchoi95 Jan 29, 2026
d9fc10b
feat: ์—…๋ฌด ํ•ด๊ธˆ ์กฐ๊ฑด ํ† ์ŠคํŠธ ๊ตฌํ˜„
snughnu Jan 29, 2026
71bcb9d
feat: SmallButton์— ์ด๋ฏธ์ง€ ์ง€์› ์ถ”๊ฐ€ ๋ฐ ๋ฉ”์ธ๋ทฐ ์„ค์ • ๋ฒ„ํŠผ ๊ตฌํ˜„
tomchoi95 Jan 29, 2026
35bb392
refactor: SmallButton์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ ๋กœ์ง ๊ฐœ์„ 
tomchoi95 Jan 29, 2026
d02480f
fix: ๋‹ค์ด์•„๊ฐ€ ์ผ์ • ์ฃผ๊ธฐ๋งˆ๋‹ค ์ผํšŒ์„ฑ์œผ๋กœ ์†Œ๋ชจ๋˜๋„๋ก ๋ณ€๊ฒฝ
sunjae0902 Jan 29, 2026
fd41534
feat: ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์†Œ๋ฆฌ ์žฌ์ƒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
2a2085a
fix: ์ค‘/๊ณ ๊ธ‰ ํ•ด๊ธˆ ํ›„ ๋‹ค์ด์•„ ์†Œ๋ชจํ•˜๋„๋ก ๋ณ€๊ฒฝ
sunjae0902 Jan 29, 2026
4dff77b
fix: ์žฌํ™” ํš๋“ ๊ด€๋ จ ํ…์ŠคํŠธ ์ˆ˜์ •
sunjae0902 Jan 29, 2026
687c9b5
feat: ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ์— ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์†Œ๋ฆฌ ์žฌ์ƒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
7f07002
fix: ์Šคํ‚ฌ ๊ณจ๋“œ ํš๋“๋Ÿ‰, ์—…๊ทธ๋ ˆ์ด๋“œ ๋น„์šฉ ๋ณ€๊ฒฝ
sunjae0902 Jan 29, 2026
ab3383e
fix: ์žฅ๋น„ ์•„์ดํ…œ ๊ฐ•ํ™” ์„ค๋ช… ๋ฌธ๊ตฌ ๋ณ€๊ฒฝ
sunjae0902 Jan 29, 2026
22f17cb
refactor: ๋ฒ„ํŠผ ํด๋ฆญ ์†Œ๋ฆฌ ํƒ€์ž… ๋ณ€๊ฒฝ ๋ฐ ๋ถˆํ•„์š”ํ•œ ์˜ค๋””์˜ค ํŒŒ์ผ ์‚ญ์ œ
tomchoi95 Jan 29, 2026
33ccbd3
feat: ๋ฐฐ๊ฒฝ ์Œ์•…(BGM) ์žฌ์ƒ ๋ฐ ์ •์ง€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
800e76d
fix: ์žฅ๋น„ ๊ฐ•ํ™” ๋น„์šฉ ์žฌ์„ค๊ณ„
sunjae0902 Jan 29, 2026
3a7c71e
feat: ๋‹ค์–‘ํ•œ ์‚ฌ์šด๋“œ ํšจ๊ณผ ์ถ”๊ฐ€ ๋ฐ ๊ธฐ์กด ์‚ฌ์šด๋“œ ๋กœ์ง ๊ฐœ์„ 
tomchoi95 Jan 29, 2026
77cf936
feat: ์‚ฌ์šด๋“œ ํšจ๊ณผ ๊ฐœ์„ 
tomchoi95 Jan 29, 2026
9ba80e2
fix: QuizGameView ProgressBar์—์„œ ๋งค์ง๋„˜๋ฒ„ ์ œ๊ฑฐ
sunjae0902 Jan 29, 2026
7470119
fix: audio ํ‘œ์ค€ํ™” ๋œ ์†Œ๋ฆฌ๋กœ ๋ณ€๊ฒฝ
dongglehada Jan 29, 2026
c3a13d6
fix: ์ˆ˜์ •๋œ ์นด์šดํŠธ๋‹ค์šด ํƒ€์ด๋จธ์—์„œ ์‚ฌ์šด๋“œ ํšจ๊ณผ ํŠธ๋ฆฌ๊ฑฐ ์‹œ์  ๋ณ€๊ฒฝ
tomchoi95 Jan 29, 2026
d03bfb7
feat: GameToolBar์— ๋ฒ„ํŠผ ์Šคํƒ€์ผ ์ถ”๊ฐ€ ๋ฐ SoundType ์ฃผ์„ ์ •๋ฆฌ
tomchoi95 Jan 29, 2026
aacea28
add: ํ€ด์ฆˆ ์˜ค๋””์˜ค ํŒŒ์ผ ์ถ”๊ฐ€
dongglehada Jan 29, 2026
1b45490
feat: ์ถ”๊ฐ€๋œ ํ€ด์ฆˆ ๊ด€๋ จ ์‚ฌ์šด๋“œ ํƒ€์ž… ๋ฐ ๊ธฐ์กด ์‚ฌ์šด๋“œ ๋กœ์ง ์ •๋ฆฌ
tomchoi95 Jan 29, 2026
66cff8d
feat: ํ€ด์ฆˆ ๊ฒŒ์ž„์—์„œ ์ •๋‹ต ๋ฐ ์˜ค๋‹ต ์‹œ ์‚ฌ์šด๋“œ ํšจ๊ณผ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
52150ce
feat: ๋ชจ๋“  ํšจ๊ณผ์Œ ์ •์ง€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐ ๊ฒŒ์ž„ ์ผ์‹œ์ •์ง€ ์‹œ ์‚ฌ์šด๋“œ ์ฒ˜๋ฆฌ ๊ฐœ์„ 
tomchoi95 Jan 29, 2026
b572b94
feat: ํ€ด์ฆˆ ๊ฒŒ์ž„ ์‚ฌ์šด๋“œ ํšจ๊ณผ ๊ฐœ์„ 
tomchoi95 Jan 29, 2026
f7a926a
fix: ์—…๋ฌด ๋ฏธํ•ด๊ธˆ ํ† ์ŠคํŠธ ๋ฌธ๊ตฌ ์ˆ˜์ •
snughnu Jan 29, 2026
b10a76c
refactor: rename soundEnabledKey to sfxEnabledKey for clarity
tomchoi95 Jan 29, 2026
8c7b403
feat: ํ–…ํ‹ฑ ์ถ”๊ฐ€
tomchoi95 Jan 29, 2026
0ce394e
chore: ํ…Œ์ŠคํŠธ ๋นŒ๋“œ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
tomchoi95 Jan 29, 2026
152ab85
fix: ์ปค๋ฆฌ์–ด ๋ณ„ ๋ˆ„์  ์žฌ์‚ฐ ํ™•๋Œ€
sunjae0902 Jan 29, 2026
fd1a337
Merge pull request #238 from boostcampwm2025/feat/#235-game-balancing
sunjae0902 Jan 29, 2026
58c1636
fix: ๋ฆฌ๋ทฐ ์ˆ˜์ • ์‚ฌํ•ญ ๋ฐ˜์˜
tomchoi95 Jan 29, 2026
b7f4c1b
fix: PriceButton ์›๋ณต
snughnu Jan 29, 2026
9ba829b
Merge branch 'dev' into feat/#233-career-skill-unlock
sunjae0902 Jan 29, 2026
71fd089
Merge pull request #239 from boostcampwm2025/feat/#236-settings
tomchoi95 Jan 29, 2026
8ebd58c
Merge branch 'dev' into feat/#233-career-skill-unlock
snughnu Jan 29, 2026
eb32980
Merge pull request #237 from boostcampwm2025/feat/#233-career-skill-uโ€ฆ
sunjae0902 Jan 29, 2026
92a6880
chore: v1.1.0 ๋ฒ„์ „ ์„ค์ •
sunjae0902 Jan 29, 2026
05bc4b6
Merge pull request #241 from boostcampwm2025/110tmp
sunjae0902 Jan 29, 2026
f48b73c
Merge pull request #242 from boostcampwm2025/dev
sunjae0902 Jan 29, 2026
d8e274c
docs: README ์—…๋ฐ์ดํŠธ
sunjae0902 Feb 1, 2026
8b3ca98
Merge pull request #244 from boostcampwm2025/docs/#223-readme
sunjae0902 Feb 1, 2026
c6dddc5
refactor: ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„ ์ˆ˜์ •
sunjae0902 Feb 2, 2026
6786304
fix: ๋นŒ๋“œ ๋„˜๋ฒ„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ค๋„๋ก ์ˆ˜์ •
sunjae0902 Feb 2, 2026
44bc14a
add: test target ์ถ”๊ฐ€
dongglehada Feb 2, 2026
3bb9c13
test: dataRace ํ™•์ธ์šฉ test์ฝ”๋“œ ์ถ”๊ฐ€
dongglehada Feb 2, 2026
39c2dae
fix: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ ๋ฐ main์— ๋จธ์ง€๋œ ์ปค๋ฐ‹ ๊ธฐ์ค€์œผ๋กœ PR ์ถ”์ ํ•˜๋„๋ก ๋ณ€๊ฒฝ
sunjae0902 Feb 2, 2026
c19313f
fix: ํ˜„์žฌ PR๋„ ํฌํ•จํ•˜๋„๋ก ๋ณ€๊ฒฝ
sunjae0902 Feb 2, 2026
1c507b3
fix: ์–ธ์–ด ๋งž์ถ”๊ธฐ ๊ฒŒ์ž„ ์ข…๋ฃŒ ํ›„ ๋ฒ„ํŠผ ํƒญ ํฌ๋ž˜์‹œ ๋ฐฉ์ง€ ์ฝ”๋“œ ์ถ”๊ฐ€
snughnu Feb 2, 2026
5e98be7
refactor: ๊ฐœ๋ณ„ ๊ฒŒ์ž„ ์‹œ๊ฐ„ ๊ธฐ๋ก ์‚ญ์ œ
tomchoi95 Feb 3, 2026
7c5afa8
refector: ๊ฒŒ์ž„ ์‹คํ–‰ ์‹œ๊ฐ„ ๊ธฐ๋ก ๋กœ์ง ์ถ”๊ฐ€
tomchoi95 Feb 3, 2026
64067ce
feat: ํ”Œ๋ ˆ์ด ํƒ€์ž„ ๊ธฐ๋ก ๋กœ์ง ์ถ”๊ฐ€
tomchoi95 Feb 3, 2026
88c52c8
fix: ์ˆ˜์ •๋œ ํ”Œ๋ ˆ์ด ํƒ€์ž„ ๊ธฐ๋ก ๋กœ์ง์œผ๋กœ ์—…๋ฐ์ดํŠธ
tomchoi95 Feb 3, 2026
48d6c9c
feat: ์กฐ๋‹จ์œ„ ํฌ๋ฉ”ํŒ… ์ถ”๊ฐ€
tomchoi95 Feb 3, 2026
6c42bc6
fix: actor -> mainActor๋กœ ๋ณ€๊ฒฝ
dongglehada Feb 3, 2026
ef85181
remove: gcdํ…Œ์ŠคํŠธ ์ œ๊ฑฐ
dongglehada Feb 3, 2026
7026afb
refactor: ๋ฏธ์…˜ ๋ณด์ƒ ์ˆ˜์ •
tomchoi95 Feb 3, 2026
e162b2b
refactor: ์žฅ๋น„ ๋ฐธ๋Ÿฐ์Šค ์ˆ˜์ •
tomchoi95 Feb 3, 2026
84a3599
refactor: ๊ฒŒ์ž„ ์ •์ฑ… ๋ฐ ๋ฐธ๋Ÿฐ์Šค ์กฐ์ •
tomchoi95 Feb 3, 2026
3548235
fix: ์•„์ดํ…œ ๊ตฌ๋งค ๋กœ์ง์— ์ค‘๋ณต ์ฒ˜๋ฆฌ ๋ฐฉ์ง€ ๋กœ์ง ์ถ”๊ฐ€
sunjae0902 Feb 3, 2026
0942f7f
fix: PriceButton์˜ ๊ฐ€๊ฒฉ์„ ํ•œ ์ค„๋กœ ํ‘œ์‹œํ•˜๊ฒŒ๋” ์ˆ˜์ •
snughnu Feb 3, 2026
3a1c5b4
fix: ์ œ์Šค์ฒ˜ ์ƒํƒœ ๋ณ€์ˆ˜ ์ˆ˜์ •: ๋‘ ์†๊ฐ€๋ฝ ํ„ฐ์น˜ ๋ฌธ์ œ ํ•ด๊ฒฐ
snughnu Feb 3, 2026
49b9560
remove: ๋ถˆํ•„์š” await ์ œ๊ฑฐ
dongglehada Feb 3, 2026
7074142
feat: LongPressRepeatModifier ๋ฐ View+ longPressRepeat ์ถ”๊ฐ€
tomchoi95 Feb 3, 2026
be02f70
fix: ์Šคํ‚ฌ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ์ตœ๊ณ  ๋ ˆ๋ฒจ ์ƒํƒœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •
sunjae0902 Feb 3, 2026
2739955
feat: PriceButton์— ๋กฑํ”„๋ ˆ์Šค ๋ฐ˜๋ณต ์—ฐ๋™
tomchoi95 Feb 3, 2026
3d36148
feat: ItemRow์— ๋กฑํ”„๋ ˆ์Šค ์•ก์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€
tomchoi95 Feb 3, 2026
e5d02e7
remove: ๋ถˆํ•„์š” await์ œ๊ฑฐ
dongglehada Feb 3, 2026
b9b7e43
feat: SkillView์— ์Šคํ‚ฌ ๋กฑํ”„๋ ˆ์Šค ์—ฐ์† ์—…๊ทธ๋ ˆ์ด๋“œ ์—ฐ๊ฒฐ
tomchoi95 Feb 3, 2026
85dc057
fix: ์žฅ๋น„ ์•„์ดํ…œ ์ตœ๊ณ  ๋ ˆ๋ฒจ ๋„๋‹ฌ ์ƒํƒœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •
sunjae0902 Feb 3, 2026
6a75387
refector: ๋ฏธ์…˜ ์™„๋ฃŒ ์ƒํƒœ ์†Œ์ˆซ์  2์ž๋ฆฌ๊นŒ์ง€ ๋ฐ˜์˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ
tomchoi95 Feb 3, 2026
894eb88
fix: ํŒ์—… ์„ธ๋กœ ๊ฐ„๊ฒฉ ์ถ”๊ฐ€
sunjae0902 Feb 3, 2026
0131a9c
fix: ์–ธ์–ด ๋ฒ„ํŠผ ํด๋ฆญ Task ๊ด€๋ฆฌ ์ˆ˜์ •
snughnu Feb 3, 2026
b94e385
test: ์Šคํ‚ฌ ์—…๊ทธ๋ ˆ์ด๋“œ UIํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
sunjae0902 Feb 3, 2026
bcfec2d
Merge pull request #264 from boostcampwm2025/fix/#256-purchasing-doubโ€ฆ
sunjae0902 Feb 3, 2026
af1f1b3
Merge pull request #260 from boostcampwm2025/fix/#255-languageGame-crash
snughnu Feb 3, 2026
8e13b50
Merge pull request #262 from boostcampwm2025/feat/#252-play-time
tomchoi95 Feb 3, 2026
64f1614
Merge pull request #266 from boostcampwm2025/feat/#246-skill-long-press
tomchoi95 Feb 3, 2026
4dd299d
Merge branch 'dev' into fix/#153-priceButton-bug
snughnu Feb 3, 2026
25e574f
fix: PriceButton ์ƒํƒœ GestureState๋กœ ๋ณ€๊ฒฝ
snughnu Feb 3, 2026
9b80ac8
fix: ๊ฐ€๊ฒฉ ๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™” ์‹œ ๋ˆŒ๋ฆผ ์ƒํƒœ ํ•ด์ œ
snughnu Feb 3, 2026
34306fd
refactor: ํƒญ ๊ฒŒ์ž„ ํ”ผ๋ฒ„ ํ–ฅ์ƒ
tomchoi95 Feb 3, 2026
1ea858e
fix: ์ฝ”๋“œ์งœ๊ธฐ ์†Œ๋ฆฌ ์ˆ˜์ •
dongglehada Feb 3, 2026
f472e2f
fix: block bomb ์†Œ๋ฆฌ ๋ณ€๊ฒฝ
dongglehada Feb 3, 2026
ce46b87
Merge pull request #259 from boostcampwm2025/fix/#243-release-note
sunjae0902 Feb 3, 2026
6156c6a
Merge pull request #265 from boostcampwm2025/fix/#247-concurrency-issue
dongglehada Feb 3, 2026
42deaf9
Merge pull request #263 from boostcampwm2025/refector/#248-balance
snughnu Feb 3, 2026
65397a5
Merge pull request #267 from boostcampwm2025/fix/#153-priceButton-bug
snughnu Feb 3, 2026
5ae8b53
Merge pull request #268 from boostcampwm2025/fix/#249-sound
dongglehada Feb 3, 2026
21423d9
Merge branch 'dev' into fix/#257-max-item-state
snughnu Feb 3, 2026
b850e7f
Merge pull request #269 from boostcampwm2025/fix/#257-max-item-state
snughnu Feb 3, 2026
6cedac7
chore: IPHONEOS_DEPLOYMENT_TARGET ์„ค์ •
snughnu Feb 3, 2026
ea955c1
chore: v1.1.1 ๋ฒ„์ „ ์„ค์ •
snughnu Feb 3, 2026
9cbe6e8
Merge pull request #270 from boostcampwm2025/dev
snughnu Feb 3, 2026
e94e404
remove: UI ํ…Œ์ŠคํŠธ ํƒ€๊ฒŸ ๋ฐ ์ฝ”๋“œ ์‚ญ์ œ
snughnu Feb 3, 2026
9a6eda3
fix: ๊ฐ€๊ฒฉ ๋ฒ„ํŠผ ํ…์ŠคํŠธ ์ •๋ ฌ ๋ณ€๊ฒฝ
snughnu Feb 3, 2026
dcf2afc
fix: ํ† ์ŠคํŠธ ์ตœ๋Œ€ ํ™”๋ฉด ๋น„์œจ ์ˆ˜์ •
snughnu Feb 3, 2026
d4f3234
fix: ๋กฑํ”„๋ ˆ์Šค ๊ฐ„๊ฒฉ ์ˆ˜์ •
snughnu Feb 3, 2026
99e47c9
chore: v1.1.2 ๋ฒ„์ „ ์„ค์ •
snughnu Feb 3, 2026
2a51242
Merge pull request #274 from boostcampwm2025/dev
snughnu Feb 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .github/ISSUE_TEMPLATE/hmm-issue-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
name: Hmm issue template
about: 'Hmm์˜ '
title: ''
labels: ''
assignees: ''

---

# ์ธ์ˆ˜ ์กฐ๊ฑด
- [ ]
9 changes: 9 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## ์—ฐ๊ด€๋œ ์ด์Šˆ

- closed #์ด์Šˆ๋ฒˆํ˜ธ

## ์ž‘์—… ๋‚ด์šฉ ๋ฐ ๊ณ ๋ฏผ ๋‚ด์šฉ

## ์Šคํฌ๋ฆฐ์ƒท

## ๋ฆฌ๋ทฐ ์š”๊ตฌ์‚ฌํ•ญ
126 changes: 126 additions & 0 deletions .github/workflows/ios-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
name: iOS CI

on:
push:
branches: [ main, dev ]
pull_request:
branches: [ main, dev ]

jobs:
build-and-test:
name: Build and Test
runs-on: macos-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable

- name: Show Xcode version
run: xcodebuild -version

- name: Find latest iOS Simulator
id: find-simulator
run: |
echo "๐Ÿ” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ฒ€์ƒ‰ ์ค‘..."

# simctl์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ iPhone ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
ALL_DEVICES=$(xcrun simctl list devices available | grep "iPhone")

echo "๐Ÿ“‹ ์ฐพ์€ iPhone ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ:"
echo "$ALL_DEVICES"

# ์ˆซ์ž๊ฐ€ ์žˆ๋Š” iPhone๋งŒ ์ถ”์ถœํ•˜๊ณ  ๋ฒˆํ˜ธ๋กœ ์ •๋ ฌ (iPhone 16, 17, 18... ๋“ฑ)
# sed๋กœ "iPhone <์ˆซ์ž>" ํŒจํ„ด๋งŒ ์ถ”์ถœํ•˜๊ณ , ์ˆซ์ž๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฐ€์žฅ ํฐ ๊ฒƒ ์„ ํƒ
NUMBERED_IPHONES=$(echo "$ALL_DEVICES" | grep -E "iPhone [0-9]+" | sed -E 's/.*iPhone ([0-9]+).*/\1/' | sort -n -u)
LATEST_NUMBER=$(echo "$NUMBERED_IPHONES" | tail -1)

echo "๐Ÿ“Š ์ฐพ์€ iPhone ๋ฒ„์ „: $(echo $NUMBERED_IPHONES | tr '\n' ' ')"
echo "๐ŸŽฏ ์ตœ์‹  ๋ฒ„์ „: iPhone $LATEST_NUMBER"

# ์ตœ์‹  ๋ฒ„์ „์˜ iPhone์„ ์šฐ์„ ์ˆœ์œ„๋กœ ์ฐพ๊ธฐ (Pro Max > Pro > Plus > ๊ธฐ๋ณธ)
SIMULATOR_ID=""
for MODEL in "iPhone $LATEST_NUMBER Pro Max" "iPhone $LATEST_NUMBER Pro" "iPhone $LATEST_NUMBER Plus" "iPhone $LATEST_NUMBER"; do
FOUND=$(echo "$ALL_DEVICES" | grep "$MODEL" | tail -1)
if [ ! -z "$FOUND" ]; then
echo "โœ… '$MODEL' ๋ฐœ๊ฒฌ!"
# UUID ์ถ”์ถœ
SIMULATOR_ID=$(echo "$FOUND" | grep -oE '[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}')
SIMULATOR_NAME=$(echo "$FOUND" | sed -E 's/^[[:space:]]*([^(]+).*/\1/' | xargs)

echo "simulator_id=$SIMULATOR_ID" >> $GITHUB_OUTPUT
echo "simulator_name=$SIMULATOR_NAME" >> $GITHUB_OUTPUT
echo "โœ… ์„ ํƒ๋œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ: $SIMULATOR_NAME"
echo "๐Ÿ“ฑ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ID: $SIMULATOR_ID"
break
fi
done

# ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ
if [ -z "$SIMULATOR_ID" ]; then
echo "โŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ iPhone ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!"
echo "๐Ÿ“‹ ์ „์ฒด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋ชฉ๋ก:"
xcrun simctl list devices available
exit 1
fi

- name: Show selected simulator
run: |
echo "๐ŸŽฏ ์‚ฌ์šฉํ•  ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ: ${{ steps.find-simulator.outputs.simulator_name }}"
echo "๐Ÿ†” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ID: ${{ steps.find-simulator.outputs.simulator_id }}"

- name: Cache SPM packages
uses: actions/cache@v4
with:
path: |
~/Library/Developer/Xcode/DerivedData/**/SourcePackages
**/Package.resolved
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-spm-

- name: Build SoloDeveloperTraining
run: |
cd SoloDeveloperTraining
xcodebuild clean build \
-project SoloDeveloperTraining.xcodeproj \
-scheme SoloDeveloperTraining \
-destination "platform=iOS Simulator,id=${{ steps.find-simulator.outputs.simulator_id }}" \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO

- name: Test SoloDeveloperTraining
run: |
cd SoloDeveloperTraining
xcodebuild test \
-project SoloDeveloperTraining.xcodeproj \
-scheme SoloDeveloperTraining \
-destination "platform=iOS Simulator,id=${{ steps.find-simulator.outputs.simulator_id }}" \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO \
|| echo "No tests found or tests failed - continuing..."

- name: Build SoloDeveloperTraining-Dev
run: |
cd SoloDeveloperTraining
xcodebuild clean build \
-project SoloDeveloperTraining.xcodeproj \
-scheme SoloDeveloperTraining-Dev \
-destination "platform=iOS Simulator,id=${{ steps.find-simulator.outputs.simulator_id }}" \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO

- name: Test SoloDeveloperTraining-Dev
run: |
cd SoloDeveloperTraining
xcodebuild test \
-project SoloDeveloperTraining.xcodeproj \
-scheme SoloDeveloperTraining-Dev \
-destination "platform=iOS Simulator,id=${{ steps.find-simulator.outputs.simulator_id }}" \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO \
|| echo "No tests found or tests failed - continuing..."
199 changes: 199 additions & 0 deletions .github/workflows/release-note.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
name: Release Note Generator

on:
pull_request:
types: [closed]
branches:
- main

permissions:
contents: write
pull-requests: read

jobs:
create_release_note:
# PR์ด ์‹ค์ œ๋กœ merge๋˜์—ˆ์„ ๋•Œ๋งŒ ์‹คํ–‰
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

# Xcode ํ”„๋กœ์ ํŠธ์—์„œ ๋ฒ„์ „ ์ •๋ณด ์ถ”์ถœ
- name: Extract Xcode version info
id: xcode_version
run: |
# ํ”„๋กœ์ ํŠธ ์ด๋ฆ„
PROJECT_NAME="SoloDeveloperTraining"

# MARKETING_VERSION ์ถ”์ถœ
MARKETING_VERSION=$(grep -m 1 "MARKETING_VERSION = " "${PROJECT_NAME}/${PROJECT_NAME}.xcodeproj/project.pbxproj" | sed 's/.*MARKETING_VERSION = \(.*\);/\1/' | tr -d ' ')

# BUILD_NUMBER ์ถ”์ถœ
BUILD_NUMBER=$(grep -m 1 "CURRENT_PROJECT_VERSION = " "${PROJECT_NAME}/${PROJECT_NAME}.xcodeproj/project.pbxproj" | awk -F'[ ;]' '{print $3}')

echo "marketing_version=$MARKETING_VERSION" >> $GITHUB_OUTPUT
echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT

echo "๐Ÿ“ฑ Extracted Marketing Version: $MARKETING_VERSION"
echo "๐Ÿ”ข Extracted Build Number: $BUILD_NUMBER"

# ๋ฒ„์ „์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
- name: Check if tag exists
id: check_tag
run: |
if git rev-parse "v${{ steps.xcode_version.outputs.marketing_version }}" >/dev/null 2>&1; then
echo "exists=true" >> $GITHUB_OUTPUT
echo "โš ๏ธ Tag v${{ steps.xcode_version.outputs.marketing_version }} already exists"
else
echo "exists=false" >> $GITHUB_OUTPUT
echo "โœ… Tag v${{ steps.xcode_version.outputs.marketing_version }} does not exist"
fi

# main ๋ธŒ๋žœ์น˜์— ํฌํ•จ๋œ ์ปค๋ฐ‹์„ ๊ธฐ์ค€์œผ๋กœ PR ์กฐํšŒ
- name: Get merged PRs in main branch
# ๋™์ผํ•œ ํƒœ๊ทธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋งŒ ์‹คํ–‰
if: steps.check_tag.outputs.exists == 'false'
id: get_prs
uses: actions/github-script@v7
with:
script: |
try {
const owner = context.repo.owner;
const repo = context.repo.repo;
const pull_number = context.payload.pull_request.number;

const prNumbers = new Set();

console.log(`๐Ÿ”Ž Analyzing commits from merged PR #${pull_number}...`);

// 1. ํ˜„์žฌ main์œผ๋กœ ๋จธ์ง€๋œ PR์— ํฌํ•จ๋œ ๋ชจ๋“  ์ปค๋ฐ‹ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
const commits = await github.paginate(
github.rest.pulls.listCommits,
{
owner,
repo,
pull_number: pull_number
}
);

// 2. ๊ฐ ์ปค๋ฐ‹๊ณผ ์—ฐ๊ฒฐ๋œ PR๋“ค์„ ์—ญ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
for (const commit of commits) {
const linkedPRs = await github.rest.repos.listPullRequestsAssociatedWithCommit({
owner,
repo,
commit_sha: commit.sha
});

linkedPRs.data.forEach(pr => {
// ๋จธ์ง€๋œ PR์ด๊ณ , ํ˜„์žฌ main์œผ๋กœ ๋จธ์ง€๋œ PR ์ž์ฒด๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ(ํ•˜์œ„ PR์ธ ๊ฒฝ์šฐ) ์ถ”๊ฐ€
if (pr.merged_at && pr.number !== pull_number) {
prNumbers.add(pr.number);
}
});
}

// 3. ํ˜„์žฌ PR์„ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค.
prNumbers.add(pull_number);

console.log(`โœ… Found ${prNumbers.size} unique sub-PRs.`);

const prDetails = [];
for (const number of Array.from(prNumbers)) {
const { data: pr } = await github.rest.pulls.get({
owner,
repo,
pull_number: number
});
prDetails.push(pr);
}

prDetails.sort((a, b) => new Date(b.merged_at) - new Date(a.merged_at));

// 4. PR ๋ผ๋ฒจ์— ๋”ฐ๋ผ ์นดํ…Œ๊ณ ๋ผ์ด์ง• ํ•ฉ๋‹ˆ๋‹ค.
const features = prDetails.filter(pr => pr.labels.some(l => ['Feature','UI','Design'].includes(l.name)));
const bugfixes = prDetails.filter(pr => pr.labels.some(l => ['Fix','Bug'].includes(l.name)));
const maintenance = prDetails.filter(pr => pr.labels.some(l => ['Chore','Refactor','Remove','Docs','Test'].includes(l.name)));
const others = prDetails.filter(pr => !pr.labels.some(l => ['Feature','UI','Design','Fix','Bug','Chore','Refactor','Remove','Docs','Test','Someday','Release'].includes(l.name)));

console.log(`๐Ÿ“Š PR Breakdown - Features: ${features.length}, Fixes: ${bugfixes.length}, Maint: ${maintenance.length}, Others: ${others.length}`);

// 5. ๋ฌธ์„œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
let releaseNotes = '## What\'s Changed\n\n';
const formatPR = (pr) => `- ${pr.title} @${pr.user.login} ([#${pr.number}](${pr.html_url}))\n`;

if (features.length) releaseNotes += `### ๐Ÿš€ New Features\n${features.map(formatPR).join('')}\n`;
if (bugfixes.length) releaseNotes += `### ๐Ÿ› Bug Fixes\n${bugfixes.map(formatPR).join('')}\n`;
if (maintenance.length) releaseNotes += `### ๐Ÿšฉ Maintenance\n${maintenance.map(formatPR).join('')}\n`;
if (others.length) releaseNotes += `### ๐Ÿ“ Others\n${others.map(formatPR).join('')}\n`;

return releaseNotes;

} catch (error) {
console.error('โŒ Error:', error.message);
core.setFailed(error.message);
throw error;
}

# ๋ฆด๋ฆฌ์ฆˆ ์ƒ์„ฑ ๋ฐ ์—…๋ฐ์ดํŠธ
- name: Create or Update Release
if: steps.check_tag.outputs.exists == 'false'
uses: actions/github-script@v7
with:
script: |
try {
const marketingVersion = '${{ steps.xcode_version.outputs.marketing_version }}';
const buildNumber = '${{ steps.xcode_version.outputs.build_number }}';
const tagName = `v${marketingVersion}`;
const releaseNotes = ${{ steps.get_prs.outputs.result }};

if (!marketingVersion || marketingVersion === '') {
throw new Error('Marketing version is empty or invalid');
}
if (!buildNumber || buildNumber === '') {
throw new Error('Build number is empty or invalid');
}

console.log(`๐Ÿ“ฆ Creating/updating release: ${tagName}`);
console.log(`๐Ÿ“ฑ Version: ${marketingVersion}`);
console.log(`๐Ÿ”ข Build: ${buildNumber}`);

const fullReleaseNotes = `**Version**: ${marketingVersion}\n**Build**: ${buildNumber}\n\n${releaseNotes}`;

const { data: releases } = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo
});

const existingRelease = releases.find(r => r.tag_name === tagName);

if (existingRelease) {
console.log(`๐Ÿ”„ Updating existing release: ${tagName}`);
await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: existingRelease.id,
body: fullReleaseNotes
});
console.log(`โœ… Updated release: ${tagName} (Build: ${buildNumber})`);
} else {
console.log(`๐Ÿ†• Creating new release: ${tagName}`);
const release = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: tagName,
name: `v${marketingVersion}`,
body: fullReleaseNotes,
draft: false,
prerelease: false
});
console.log(`โœ… Created release: ${tagName} (Build: ${buildNumber})`);
console.log(`๐Ÿ”— Release URL: ${release.data.html_url}`);
}

} catch (error) {
console.error('โŒ Error creating/updating release:', error.message);
core.setFailed(`Failed to create/update release: ${error.message}`);
throw error;
}
Loading