Skip to content

Latest commit

ย 

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿพ Pomopet

ํ•œ๊ตญ์–ด ยท English

๋‚ด๊ฐ€ ์˜ฌ๋ฆฐ ์ตœ์•  ์บ๋ฆญํ„ฐ๊ฐ€ ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•  ๋•Œ๋งŒ ๊นจ์–ด๋‚˜๋Š” macOS ๋ฉ”๋‰ด๋ฐ” ํฌ๋ชจ๋„๋กœ ํƒ€์ด๋จธ

Pomopet์€ ์ข‹์•„ํ•˜๋Š” ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€๋ฅผ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•ด ํ‚ค์šฐ๋Š” ๋ฉ”๋‰ด๋ฐ” ์•ฑ์ž…๋‹ˆ๋‹ค. ํฌ๋ชจ๋„๋กœ๋กœ ์ง‘์ค‘ํ•  ๋•Œ๋งˆ๋‹ค ์บ๋ฆญํ„ฐ๊ฐ€ ๊นจ์–ด๋‚˜๊ณ , ์—ฐ์† ๊ธฐ๋ก์ด ์Œ“์ž…๋‹ˆ๋‹ค. ํ•˜๋ฃจ๋ฅผ ๊ฑฐ๋ฅด๋ฉด ์บ๋ฆญํ„ฐ๊ฐ€ ์žฟ๋น›์œผ๋กœ ์ž ๋“ค๊ธฐ ๋•Œ๋ฌธ์— โ€” "๋‚ด ์บ๋ฆญํ„ฐ๋ฅผ ์žฌ์šฐ์ง€ ๋ง์ž" ๊ฐ€ ๊ณต๋ถ€ ๋™๊ธฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ†š ๋‹ค๋ฅธ ํŽซ ํฌ๋ชจ๋„๋กœ ์•ฑ๊ณผ ๋‹ค๋ฅธ ์ 

ํŽซ ํ‚ค์šฐ๋Š” ํฌ๋ชจ๋„๋กœ ์•ฑ์€ ๋งŽ์Šต๋‹ˆ๋‹ค. Pomopet์€ ์„ธ ๊ฐ€์ง€๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  1. ๐Ÿ–ผ๏ธ ๋‚ด๊ฐ€ ์˜ฌ๋ฆฐ ์ด๋ฏธ์ง€๊ฐ€ ํŽซ์ด ๋ฉ๋‹ˆ๋‹ค โ€” ๋นŒํŠธ์ธ ๊ณ ์–‘์ดยท๊ฐ•์•„์ง€ ์ค‘ ๊ณ ๋ฅด๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ข‹์•„ํ•˜๋Š” ์บ๋ฆญํ„ฐ๋ฅผ ์ง์ ‘ ์—…๋กœ๋“œํ•ด ๋„ํŠธ๋กœ ํ‚ค์›๋‹ˆ๋‹ค. "์ตœ์• ๋ฅผ ๋‚ด ๋ฉ”๋‰ด๋ฐ”์—์„œ ํ‚ค์šด๋‹ค"๋Š” ๊ฒฝํ—˜์€ ์—ฌ๊ธฐ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๐Ÿ˜ด ์•ˆ ํ•˜๋ฉด ์ž ๋“ญ๋‹ˆ๋‹ค โ€” ๋‹จ์ˆœํžˆ "์ง‘์ค‘ํ•  ๋•Œ ํ™œ์„ฑ / ์‰ด ๋•Œ ์ž ๋“ฆ"์ด ์•„๋‹ˆ๋ผ, ์˜ค๋Š˜ ํ•œ ๋ฒˆ๋„ ์ง‘์ค‘ํ•˜์ง€ ์•Š์œผ๋ฉด ์บ๋ฆญํ„ฐ๊ฐ€ ํ‘๋ฐฑ์œผ๋กœ ์ž ๋“ญ๋‹ˆ๋‹ค. ๋“€์˜ค๋ง๊ณ  ์ŠคํŠธ๋ฆญ์ฒ˜๋Ÿผ ์ง€ํ‚ค๊ณ  ์‹ถ์€ ๊ฒƒ์„ ์žƒ์ง€ ์•Š์œผ๋ ค๋Š” ๋™๊ธฐ๋กœ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ๐Ÿ†“ ๋ฌด๋ฃŒ ยท ์˜คํ”ˆ์†Œ์Šค โ€” ๊ฒฐ์ œยท๊ณ„์ •ยท๊ตฌ๋… ์—†์Œ. ์ฝ”๋“œ ์ „๋ถ€ ๊ณต๊ฐœ.

๊ฑฐ๊ธฐ์— ์—ฐ์†์ผ ๋งˆ์ผ์Šคํ†ค ๋ฐฐ์ง€(BRONZEโ†’DIAMOND)์™€ ํ™œ๋™ ์ž”๋””๊นŒ์ง€


๐Ÿ“ธ ์Šคํฌ๋ฆฐ์ƒท

์บ๋ฆญํ„ฐ (๊นจ์–ด๋‚จ) ์นœ๊ตฌ ํ†ต๊ณ„ ยท ์ž”๋”” ์„ค์ •
๋ฉ”์ธ ์นœ๊ตฌ ํ†ต๊ณ„ ์„ค์ •

๐Ÿ–ฅ๏ธ ๋ฉ”๋‰ด๋ฐ” ๋ชจ์Šต

์‹คํ–‰ํ•˜๋ฉด ๋งฅ ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฐ”์— ์ด๋ ‡๊ฒŒ ๋–  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์ง‘์ค‘ํ•จ (๊นจ์–ด๋‚จ ยท ์—ฐ์†์ผ) ์ง‘์ค‘ยทํœด์‹ ์ค‘ (๋‚จ์€ ์‹œ๊ฐ„)
๊นจ์–ด๋‚œ ํŽซ๊ณผ ์—ฐ์†์ผ ๋‚จ์€ ์‹œ๊ฐ„

์˜ฌ๋ฆฐ ์บ๋ฆญํ„ฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฉ”๋‰ด๋ฐ”์— ๋œน๋‹ˆ๋‹ค. ์˜ค๋Š˜ ํ•œ ๋ฒˆ๋„ ์ง‘์ค‘ ์•ˆ ํ•˜๋ฉด ํ‘๋ฐฑ์œผ๋กœ ์ž ๋“ค์–ด ์žˆ๋‹ค๊ฐ€, ์ง‘์ค‘ํ•˜๋ฉด ์ปฌ๋Ÿฌ๋กœ ๊นจ์–ด๋‚˜๊ณ  ์˜†์— ์—ฐ์†์ผ์ด ๋ถ™์Šต๋‹ˆ๋‹ค. ์ง‘์ค‘ยทํœด์‹ ์ค‘์—” ๋‚จ์€ ์‹œ๊ฐ„์ด ํ‘œ์‹œ๋ผ์š”.


โœจ ํŠน์ง•

  • ๐Ÿ–ผ๏ธ ๋‚ด ์บ๋ฆญํ„ฐ ์—…๋กœ๋“œ โ€” ์ข‹์•„ํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ๋„ํŠธ๋กœ ๋ณ€ํ™˜ํ•ด ํŽซ์œผ๋กœ ์‚ฌ์šฉ
  • ๐Ÿ‘€ ์˜ฌ๋ฆฌ๊ธฐ ์ „์— ๋ฏธ๋ฆฌ๋ณด๊ธฐ โ€” ๋„ํŠธ์™€ ๋ฉ”๋‰ด๋ฐ” ํฌ๊ธฐ๋กœ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ๋จผ์ € ํ™•์ธ. ๋ฐฐ๊ฒฝ์ด ์žˆ๋Š” ์‚ฌ์ง„์€ ๋ฐฐ๊ฒฝ์„ ์ž๋™์œผ๋กœ ์ง€์šธ ์ˆ˜ ์žˆ์–ด์š”
  • ๐Ÿ”ฅ ์—ฐ์† ๊ธฐ๋ก(์ŠคํŠธ๋ฆญ) โ€” ๋งค์ผ ์ง‘์ค‘ํ•˜๋ฉด ์—ฐ์†์ผ์ด ์Œ“์ด๊ณ , ํ•˜๋ฃจ ๊ฑธ๋ฅด๋ฉด ๋ฆฌ์…‹
  • ๐Ÿ˜ด ๊นจ์–ด๋‚จ/์ž ๋“ฆ โ€” ์˜ค๋Š˜ ์ง‘์ค‘ํ•˜๋ฉด ์บ๋ฆญํ„ฐ๊ฐ€ ์ปฌ๋Ÿฌ๋กœ ๊นจ์–ด๋‚˜ ํ†ตํ†ต ํА / ์•ˆ ํ•˜๋ฉด ํ‘๋ฐฑ์œผ๋กœ ์ž ๋“ฆ
  • ๐Ÿ… ๋งˆ์ผ์Šคํ†ค ์•„์šฐ๋ผ โ€” ์—ฐ์† 3์ผ BRONZE โ†’ 7์ผ SILVER โ†’ 30์ผ GOLD โ†’ 100์ผ DIAMOND ํ…Œ๋‘๋ฆฌ
  • ๐ŸŒฑ ํ™œ๋™ ํžˆํŠธ๋งต โ€” ์›” ๋‹ฌ๋ ฅ์œผ๋กœ ๊ณต๋ถ€ ๊ธฐ๋ก์„ ํ•œ๋ˆˆ์— (์›” ์ด๋™ ยท ๋‚ ์งœ hover๋กœ ๊ทธ๋‚  ์ƒ์„ธ)
  • ๐Ÿ… ๋‹จ์ˆœํ•œ ํฌ๋ชจ๋„๋กœ โ€” ์ง‘์ค‘ / ํœด์‹ ๋‘ ๊ฐ€์ง€๋งŒ ์ •ํ•˜๋ฉด ๋. ๋ชฉํ‘œ๋ฅผ ์„ธ์šธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค
  • ๐Ÿชถ ๊ฐ€๋ฒผ์›€ โ€” Dock ์•„์ด์ฝ˜ ์—†์ด ๋ฉ”๋‰ด๋ฐ”์—๋งŒ ์กด์žฌ. ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ์€ ์™ธ๋ถ€ ์ด๋ฏธ์ง€ ์—†์ด ์ฝ”๋“œ๋กœ ๋ Œ๋”๋ง
  • ๐Ÿ”„ ์ž๋™ ์—…๋ฐ์ดํŠธ โ€” ์ƒˆ ๋ฒ„์ „์„ ์•ฑ ์•ˆ์—์„œ ์ž๋™ ์„ค์น˜ (Sparkle, ์ž์„ธํžˆ๋Š” ์—…๋ฐ์ดํŠธ)
  • ๐Ÿ‘ฅ ์นœ๊ตฌ์™€ ๊ฐ™์ด ํ‚ค์šฐ๊ธฐ โ€” 6์ž๋ฆฌ ์ฝ”๋“œ๋กœ ์—ฐ๊ฒฐํ•ด ์นœ๊ตฌ ํŽซ์ด ๊นจ์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ž ๋“ค์–ด ์žˆ์œผ๋ฉด ์ฟก ์ฐŒ๋ฅด๊ธฐ (๊ธฐ๋ณธ ๊บผ์ง ยท ๋ฌด์—‡์ด ์˜ค๊ฐ€๋‚˜)
  • โ–ถ๏ธ ์ž‘์—… ์•ฑ ๊ฐ์ง€ โ€” ์ •ํ•ด๋‘” ์•ฑ(Xcode, VS Code ๋“ฑ)์„ ์ผœ๋ฉด 3์ดˆ ๋’ค ์ง‘์ค‘์ด ์ž๋™์œผ๋กœ ์‹œ์ž‘ (๊ฑฐ์ ˆํ•  ์‹œ๊ฐ„์„ ์ค๋‹ˆ๋‹ค). ๊ทธ ์•ฑ์—์„œ ๊ณ„์† ์ž‘์—… ์ค‘์ผ ๋•Œ๋„ ์•Œ์•„์ฑ•๋‹ˆ๋‹ค
  • โ˜• ์ž๋ฆฌ ๋น„์›€ ๊ฐ์ง€ โ€” ์ง‘์ค‘ ์ค‘ 5๋ถ„ ๋„˜๊ฒŒ ์ž…๋ ฅ์ด ์—†์œผ๋ฉด ์ค‘์ง€ํ• ์ง€ ๋ฌผ์–ด๋ด ๊ธฐ๋ก์ด ๋ถ€ํ’€์ง€ ์•Š๊ฒŒ
  • ๐ŸŒ ํ•œ๊ตญ์–ด ยท English โ€” ์‹œ์Šคํ…œ ์–ธ์–ด๋ฅผ ๋”ฐ๋ฅด๊ฑฐ๋‚˜, ์„ค์ •์—์„œ ๋ฒ„ํŠผ์œผ๋กœ ์ง์ ‘ ์ „ํ™˜

๐Ÿ“ฅ ์„ค์น˜

์š”๊ตฌ ์‚ฌํ•ญ: macOS 14 (Sonoma) ์ด์ƒ ยท Apple Silicon + Intel ๋ชจ๋‘ ์ง€์›(์œ ๋‹ˆ๋ฒ„์„ค)

๋ฐฉ๋ฒ• 1. Homebrew (์ถ”์ฒœ)

brew install --cask kes02/pomopet/pomopet

cask๊ฐ€ Gatekeeper ๊ฒฉ๋ฆฌ ์†์„ฑ์„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•ด ๋ฐ”๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 2. DMG ์ง์ ‘ ๋‹ค์šด๋กœ๋“œ

  1. Releases์—์„œ ์ตœ์‹  Pomopet-x.y.z.dmg ๋‹ค์šด๋กœ๋“œ
  2. dmg๋ฅผ ์—ด๊ณ  Pomopet.app์„ Applications๋กœ ๋“œ๋ž˜๊ทธ
  3. ์ฒ˜์Œ ์‹คํ–‰ ์‹œ โ€” ๋ฏธ์„œ๋ช… ๋นŒ๋“œ๋ผ macOS๊ฐ€ "์•…์„ฑ ์ฝ”๋“œ๊ฐ€ ์—†์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" ๋ผ๋ฉฐ ๋ง‰์Šต๋‹ˆ๋‹ค. macOS Sequoia(15)๋ถ€ํ„ฐ๋Š” "์šฐํด๋ฆญ โ†’ ์—ด๊ธฐ" ์šฐํšŒ๊ฐ€ ์‚ฌ๋ผ์กŒ์–ด์š”. ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ ํ†ต๊ณผ:
    • ํ„ฐ๋ฏธ๋„ (๊ฐ€์žฅ ๋น ๋ฆ„):
      xattr -dr com.apple.quarantine /Applications/Pomopet.app
    • ๋˜๋Š” ์‹œ์Šคํ…œ ์„ค์ • โ†’ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ๋ณด์•ˆ โ†’ ์•„๋ž˜๋กœ ์Šคํฌ๋กค โ†’ "Pomopet์ด(๊ฐ€) ์ฐจ๋‹จ๋จ" ์˜† "๊ทธ๋ž˜๋„ ์—ด๊ธฐ" โ†’ ๋‹ค์‹œ ์‹คํ–‰ ํ›„ ํ•œ ๋ฒˆ ๋” ํ™•์ธ

๐Ÿ’ก ์ฐจ๋‹จ ๋‹ค์ด์–ผ๋กœ๊ทธ์—์„œ "ํœด์ง€ํ†ต์œผ๋กœ ์ด๋™"์„ ๋ˆ„๋ฅด์ง€ ๋งˆ์„ธ์š”(์•ฑ์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค) โ€” "์™„๋ฃŒ"๋ฅผ ๋ˆ„๋ฅด๊ณ  ์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฌ์„ธ์š”. Apple ์„œ๋ช…/๊ณต์ฆ์ด ์—†์–ด ์ƒ๊ธฐ๋Š” ์ผ์ด๋ฉฐ ๊ธฐ๋Šฅ์—” ์ง€์žฅ์ด ์—†๊ณ , ์ตœ์ดˆ 1ํšŒ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (์œ„ Homebrew๋กœ ์„ค์น˜ํ•˜๋ฉด ์ด ๊ณผ์ • ์ž์ฒด๊ฐ€ ํ•„์š” ์—†์–ด์š”.)

๋ฐฉ๋ฒ• 3. ์†Œ์Šค์—์„œ ๋นŒ๋“œ (๊ฐœ๋ฐœ์ž์šฉ)

git clone https://github.com/kes02/Pomopet.git
cd Pomopet
open Pomopet.xcodeproj   # Xcode์—์„œ โŒ˜R
# ๋˜๋Š” DMG ์ง์ ‘ ํŒจํ‚ค์ง•:
bash scripts/package-dmg.sh 1.0.0   # โ†’ dist/Pomopet-1.0.0.dmg

๋ฆด๋ฆฌ์Šค (๋ฉ”์ธํ…Œ์ด๋„ˆ์šฉ)

# main ๋ธŒ๋žœ์น˜์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค (DMG๋Š” ํ˜„์žฌ ์ž‘์—…ํŠธ๋ฆฌ์—์„œ ๋นŒ๋“œ๋˜๋ฏ€๋กœ ํƒœ๊ทธ ๋Œ€์ƒ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•จ)
scripts/release.sh 1.2.3
# DMG ๋นŒ๋“œ โ†’ GitHub Release โ†’ Sparkle appcast EdDSA ์„œ๋ช… โ†’ Homebrew cask(sha256) ๊ฐฑ์‹ 

๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋Š” CHANGELOG.md์˜ ํ•ด๋‹น ๋ฒ„์ „ ์„น์…˜์„ ๊ทธ๋Œ€๋กœ ์ฝ์–ด ์”๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค ์ „์— ๋จผ์ € ์ž‘์„ฑํ•˜์„ธ์š”. DMG๋Š” ์žฌ์ƒ์„ฑ ์‹œ ํ•ด์‹œ๊ฐ€ ๋ฐ”๋€Œ๋ฏ€๋กœ ๋ฆด๋ฆฌ์Šค ๋นŒ๋”๋Š” ์ด ์Šคํฌ๋ฆฝํŠธ ํ•˜๋‚˜๋กœ ์ผ์›ํ™”ํ•ฉ๋‹ˆ๋‹ค. GitHub Actions(ci.yml)๋Š” ๋นŒ๋“œ๊ฐ€ ๊นจ์ง€์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ฒดํฌ ์ „์šฉ์ž…๋‹ˆ๋‹ค.


๐Ÿ”„ ์—…๋ฐ์ดํŠธ

์•ฑ์ด ์ƒˆ ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค (Sparkle ๊ธฐ๋ฐ˜ โ€” ๋‹ค์šด๋กœ๋“œยท์„ค์น˜ยท์žฌ์‹œ์ž‘๊นŒ์ง€ ํ•œ ๋ฒˆ์—).

  • ์ธ์•ฑ ์ž๋™ ์—…๋ฐ์ดํŠธ โ€” ์ƒˆ ๋ฒ„์ „์ด ๋‚˜์˜ค๋ฉด Pomopet์ด ์•Œ๋ ค์ฃผ๊ณ , ๋™์˜ํ•˜๋ฉด ์•ฑ ์•ˆ์—์„œ ๋ฐ”๋กœ ์„ค์น˜ยท์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ํ™”๋ฉด์˜ ์—…๋ฐ์ดํŠธ ํ™•์ธ์œผ๋กœ ์ˆ˜๋™ ํ™•์ธ๋„ ๊ฐ€๋Šฅ.
  • Homebrew ์‚ฌ์šฉ์ž โ€” brew upgrade --cask pomopet ๋กœ๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ๋Š” EdDSA ์„œ๋ช…์œผ๋กœ ๊ฒ€์ฆ๋˜๋ฉฐ(๋ฏธ์„œ๋ช… ๋นŒ๋“œ์—ฌ๋„ ์œ„ยท๋ณ€์กฐ ๋ฐฉ์ง€), ๋ฒ„์ „ ์ •๋ณด๋งŒ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค(๊ฐœ์ธ์ •๋ณด ์ „์†ก ์—†์Œ).


๐Ÿš€ ์‚ฌ์šฉ๋ฒ•

  1. ๋ฉ”๋‰ด๋ฐ” ์•„์ด์ฝ˜ ํด๋ฆญ โ†’ ํ‚ค์šธ ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€ ์„ ํƒ
    • ์•„๋ฌด ์‚ฌ์ง„์ด๋‚˜ ์˜ฌ๋ ค๋„ ๋ฉ๋‹ˆ๋‹ค. ๊ณ ๋ฅด๋ฉด ๋„ํŠธ์™€ ๋ฉ”๋‰ด๋ฐ” ํฌ๊ธฐ๋กœ ๋ฏธ๋ฆฌ ๋ณด์—ฌ์ฃผ๊ณ , ๋ฐฐ๊ฒฝ์ด ์žˆ๋Š” ์‚ฌ์ง„์€ ๋ฐฐ๊ฒฝ์„ ์ง€์šธ์ง€ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.
    • ํˆฌ๋ช… ๋ฐฐ๊ฒฝ PNG(๋ˆ„๋ผ)๋ผ๋ฉด ์†๋Œˆ ๊ฒŒ ์—†์–ด ๊ฐ€์žฅ ๋˜๋ ทํ•ฉ๋‹ˆ๋‹ค.
  2. ์ง‘์ค‘ ์‹œ์ž‘ โ†’ ๊ทธ ์ˆœ๊ฐ„๋ถ€ํ„ฐ ์บ๋ฆญํ„ฐ๊ฐ€ ๊นจ์–ด๋‚ฉ๋‹ˆ๋‹ค
  3. ์˜ค๋Š˜ ์ง‘์ค‘ํ•œ ๊ธฐ๋ก์ด ๋‚จ์œผ๋ฉด ์—ฐ์†์ผ์ด ์ด์–ด์ง‘๋‹ˆ๋‹ค ๐Ÿ”ฅ (์ค‘๋‹จํ•ด๋„ 5๋ถ„ ์ด์ƒ ํ–ˆ์œผ๋ฉด ์‹œ๊ฐ„์€ ๋‚จ์Šต๋‹ˆ๋‹ค)
  4. ๋งค์ผ ์ด์–ด๊ฐ€๋ฉด ์—ฐ์† ๊ธฐ๋ก๊ณผ ์ž”๋””๊ฐ€ ์Œ“์ž…๋‹ˆ๋‹ค

ํ™”๋ฉด ์•ˆ๋‚ด

๋ฒ„ํŠผ ๊ธฐ๋Šฅ
๐Ÿพ ์บ๋ฆญํ„ฐ ํ™”๋ฉด(ํ™ˆ)์œผ๋กœ
๐Ÿ“Š ํ†ต๊ณ„ ยท ์—ฐ์† ๊ธฐ๋ก ยท ํ™œ๋™ ์ž”๋””
๐Ÿ‘ฅ ์นœ๊ตฌ โ€” ์นœ๊ตฌ ํŽซยท์ง„ํ–‰ ์ƒํ™ฉ, ์ฟก ์ฐŒ๋ฅด๊ธฐ
โš™๏ธ ์„ค์ •

์„ค์ •

  • ํƒ€์ด๋จธ โ€” ์ง‘์ค‘ 560๋ถ„ ยท ํœด์‹ 130๋ถ„
  • ์บ๋ฆญํ„ฐ โ€” ์ด๋ฏธ์ง€๋ฅผ ๋ฐ”๊ฟ”๋„ ์—ฐ์† ๊ธฐ๋ก๊ณผ ์ง‘์ค‘ ์‹œ๊ฐ„์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€
  • ์ž‘์—… ์‹œ์ž‘ํ•˜๋ฉด ์ž๋™์œผ๋กœ โ€” ์ •ํ•ด๋‘” ์•ฑ์„ ์ผœ๋ฉด 3์ดˆ ๋’ค ์ง‘์ค‘์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค (๊ธฐ๋ณธ ๊บผ์ง)
  • ์–ธ์–ด โ€” ํ•œ๊ตญ์–ด / English ๋ฒ„ํŠผ์œผ๋กœ ์ฆ‰์‹œ ์ „ํ™˜

์นœ๊ตฌ ๊ด€๋ จ ์„ค์ •(๋‚ด ์ด๋ฆ„ยท์ฝ”๋“œยท์ž ์‹œ ๋ฉˆ์ถ”๊ธฐยท์—ฐ๋™ ๋„๊ธฐ)์€ ์นœ๊ตฌ ํƒญ ์•ˆ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ง‘์ค‘ ์ค‘ 5๋ถ„ ๋„˜๊ฒŒ ์•„๋ฌด ์ž…๋ ฅ์ด ์—†์œผ๋ฉด ์ค‘์ง€ํ• ์ง€ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค. ์ž๋ฆฌ๋ฅผ ๋น„์šด ์‹œ๊ฐ„์ด ์ง‘์ค‘ ๊ธฐ๋ก์— ์„ž์ด์ง€ ์•Š๊ฒŒ์š”.


๐Ÿ‘ฅ ์นœ๊ตฌ ์—ฐ๋™๊ณผ ๊ฐœ์ธ์ •๋ณด

์นœ๊ตฌ ์—ฐ๋™์€ ๊ธฐ๋ณธ์œผ๋กœ ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผœ๊ธฐ ์ „์—๋Š” ์„œ๋ฒ„๋กœ ์•„๋ฌด๊ฒƒ๋„ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ผœ๋ฉด ์ต๋ช… ๊ณ„์ •์ด ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ง€๊ณ  6์ž๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ๋„ ๋น„๋ฐ€๋ฒˆํ˜ธ๋„ ์†Œ์…œ ๋กœ๊ทธ์ธ๋„ ์—†์Šต๋‹ˆ๋‹ค.

์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ

ํ•ญ๋ชฉ ์˜ˆ
์ด๋ฆ„ ํ‘œ์‹œ์šฉ, ์ง์ ‘ ์ž…๋ ฅ
์˜ค๋Š˜ ์ง‘์ค‘ ์‹œ๊ฐ„ ยท ์™„๋ฃŒํ•œ ์„ธ์…˜ ์ˆ˜ 75๋ถ„, 3
ํŽซ์ด ๊นจ์–ด๋‚ฌ๋Š”์ง€ ยท ์—ฐ์†์ผ true, 12
์ง€๊ธˆ ์ง‘์ค‘ ์ค‘์ธ์ง€ focusing
ํŽซ ๊ทธ๋ฆผ 26ร—26 PNG, ๋ฐ”๋€” ๋•Œ๋งŒ

์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ

  • ๋ช‡ ์‹œ์— ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๊ฐ™์€ ์‹œ๊ฐ๋ณ„ ๊ธฐ๋ก
  • ์–ด๋–ค ์•ฑ์„ ์ผฐ๋Š”์ง€ โ€” ์ž‘์—… ์•ฑ ๊ฐ์ง€๋Š” ์ „๋ถ€ ๋งฅ ์•ˆ์—์„œ๋งŒ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค
  • ์นœ๊ตฌ ๊ทธ๋ฃน โ€” ์ด ๋งฅ์—๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค
  • ์›๋ณธ IP โ€” ๊ฐ€์ž… ๋„๋ฐฐ๋ฅผ ๋ง‰๋Š” ๋ฐ๋งŒ ์“ฐ๊ณ  ํ•ด์‹œ๋กœ ๋ฐ”๊ฟ” ํ•˜๋ฃจ ๋’ค ์ง€์›๋‹ˆ๋‹ค

์„œ๋ฒ„๋Š” server/์— ํ•จ๊ป˜ ๊ณต๊ฐœ๋ผ ์žˆ๊ณ , ๋ชป ๋ฏฟ๊ฒ ์œผ๋ฉด ์ง์ ‘ ๋„์›Œ์„œ ์•ฑ ์„ค์ •์— ๊ทธ ์ฃผ์†Œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ server/README.md๋ฅผ ๋ณด์„ธ์š”.

์•ฑ์ด ์„œ๋ฒ„์—์„œ ๋ฐ›๋Š” ๊ฑด ์ˆซ์ž์™€ PNG ํ•œ ์žฅ๋ฟ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—†์–ด์„œ, ์„œ๋ฒ„๊ฐ€ ์™„์ „ํžˆ ์žฅ์•…๋‹นํ•ด๋„ ์‚ฌ์šฉ์ž ๋งฅ์—์„œ ๋ญ”๊ฐ€๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

  • SwiftUI ยท MenuBarExtra (๋ฉ”๋‰ด๋ฐ” ์ „์šฉ ์•ฑ, Dock ์•„์ด์ฝ˜ ์—†์Œ)
  • SwiftData โ€” ์ผ์ผ ๊ธฐ๋กยทํ†ต๊ณ„ ์˜๊ตฌ ์ €์žฅ
  • Canvas โ€” ์™ธ๋ถ€ ์ด๋ฏธ์ง€ ์—†์ด ๋„ํŠธ ๋ Œ๋”๋ง (ImagePixelizer๊ฐ€ ์—…๋กœ๋“œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ‰ ๊ฒฉ์ž๋กœ ๋ณ€ํ™˜)
  • Sparkle โ€” ์ธ์•ฑ ์ž๋™ ์—…๋ฐ์ดํŠธ (EdDSA ์„œ๋ช… ๊ฒ€์ฆ)
  • NSWorkspace โ€” ์ž‘์—… ์•ฑ ๊ฐ์ง€ (๊ถŒํ•œ ๋ถˆํ•„์š”)
  • Vision โ€” ์—…๋กœ๋“œ ์‚ฌ์ง„์˜ ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ. macOS ์— ๋“ค์–ด ์žˆ์–ด ์•ฑ ์šฉ๋Ÿ‰์ด ๋Š˜์ง€ ์•Š๊ณ  ๊ธฐ๊ธฐ ์•ˆ์—์„œ๋งŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค
  • Cloudflare Workers + D1 โ€” ์นœ๊ตฌ ์—ฐ๋™ ์„œ๋ฒ„ (server/, ์„ ํƒ ๊ธฐ๋Šฅ)

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Pomopet/Sources/
โ”œโ”€ App/         ์•ฑ ์ง„์ž…์  (PomopetApp, ๋ฉ”๋‰ด๋ฐ” ๋ผ๋ฒจ)
โ”œโ”€ Core/        ํƒ€์ด๋จธยท์ŠคํŠธ๋ฆญ (PomopetController), ์„ค์ • (TimerSettings),
โ”‚               ์ €์žฅ์†Œ ๊ฒฝ๋กœ (StoreLocation), ์–ธ์–ด ์ „ํ™˜ (Localization),
โ”‚               ์ž๋™ ์—…๋ฐ์ดํŠธ (UpdaterManager)
โ”‚   โ”œโ”€ Friends/   ์นœ๊ตฌ ์—ฐ๋™ โ€” ํ†ต์‹ ยท์‹ ์›ยทํŽซ ์บ์‹œยท๊ทธ๋ฃน (๊ธฐ๋ณธ ๊บผ์ง)
โ”‚   โ””โ”€ AutoStart/ ์ž‘์—… ์•ฑ ๊ฐ์ง€ (WorkAppWatcher), ์ž๋ฆฌ ๋น„์›€ ๊ฐ์ง€ (IdleWatcher)
โ”œโ”€ Models/      SwiftData ๋ชจ๋ธ (DailyRecord, AppStats)
โ”œโ”€ Creatures/   ๋„ํŠธ ๋ Œ๋”๋ง (CustomPet, CharacterView, PetMenuBarIcon),
โ”‚               ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ (BackgroundRemover)
โ””โ”€ Views/       ํ™”๋ฉด (Popover, Stats/Settings, Friends, ์—…๋กœ๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ œ์•ˆ ์นด๋“œ)

server/         ์นœ๊ตฌ ์—ฐ๋™ ์„œ๋ฒ„ (Cloudflare Workers + D1)

โš ๏ธ ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€์— ๋Œ€ํ•˜์—ฌ

์—…๋กœ๋“œ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ณ ๋ฅธ ๋กœ์ปฌ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐœ์ธ์šฉ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํƒ€์ธ์˜ ์ €์ž‘๋ฌผ(์บ๋ฆญํ„ฐ ๋“ฑ)์„ ๋„ฃ์–ด ์“ฐ๋Š” ๊ฒฝ์šฐ, ๊ฐœ์ธ ์‚ฌ์šฉ ๋ฒ”์œ„๋ฅผ ์ง€์ผœ ์ฃผ์„ธ์š”. ์ด ์•ฑ์€ ์–ด๋–ค ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€๋„ ํฌํ•จยท๋ฐฐํฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License ยฉ 2026 kes02

์•ฑ ์ฝ”๋“œ์— ํ•œํ•ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•˜๋Š” ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€๋Š” ๊ฐ ์ €์ž‘๊ถŒ์ž์—๊ฒŒ ๊ถŒ๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋ณธ ๋ผ์ด์„ ์Šค ๋ฒ”์œ„์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

About

๐Ÿพ MacOS menu bar Pomodoro timer that wakes up the character I posted with study every day โ€” Activation, continuous recording (strick), activity grass

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages