Skip to content

Latest commit

ย 

History

History
269 lines (186 loc) ยท 13.7 KB

File metadata and controls

269 lines (186 loc) ยท 13.7 KB
๋ฏธ๋Ÿฌ๋ง๋ถ€์Šค ์ธ๋„ค์ผ

๋‚ด ์† ์•ˆ์˜ ํฌํ† ๋ถ€์Šค

๊ฐ€์žฅ ์„ ๋ช…ํ•˜๊ฒŒ, ์šฐ๋ฆฌ๋‹ค์šด ์ˆœ๊ฐ„์„ ๊ธฐ๋กํ•˜๋‹ค.

ํฌํ† ๋ถ€์Šค๋ฅผ ์ฐพ์•„๊ฐˆ ํ•„์š” ์—†์ด, Apple ๊ธฐ๊ธฐ๋งŒ ์žˆ์œผ๋ฉด ์–ด๋””์„œ๋‚˜ ์‹œ์ž‘๋˜๋Š” ๋‚˜๋งŒ์˜ ํฌํ† ๋ถ€์Šค


๐Ÿ“ฅ ์•ฑ ๋‹ค์šด๋กœ๋“œ

TestFlight๋กœ ์„ค์น˜ (๊ถŒ์žฅ) | AppBox๋กœ ์„ค์น˜

TestFlight๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด โ†’ ์„ค์น˜ ๊ฐ€์ด๋“œ


๋ชฉ์ฐจ


๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๐Ÿ“ท ์ตœ์‹  ์Šค๋งˆํŠธํฐ์˜ ํ›„๋ฉด ์นด๋ฉ”๋ผ๋Š” ์„ฑ๋Šฅ์ด ์ •๋ง ์ข‹์ง€๋งŒ, ์…€์นด๋ฅผ ์ฐ์„ ๋•Œ ๋‚ด ๋ชจ์Šต์ด ๋ณด์ด์ง€ ์•Š์•„ ๊ฒฐ๊ตญ ํ™”์งˆ์ด ๋‚ฎ์€ ์ „๋ฉด ์นด๋ฉ”๋ผ๋ฅผ ์“ฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๋‚จ์ด ์ฐ์–ด์ค„ ๋•Œ๋„ ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณผ ์ˆ˜ ์—†์–ด "์ฐ๊ณ  ํ™•์ธํ•˜๊ณ  ๋‹ค์‹œ ์ฐ๋Š”" ๋ฒˆ๊ฑฐ๋กœ์šด ๊ณผ์ •์ด ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์กด Apple Watch ๋ฆฌ๋ชจ์ปจ ๊ธฐ๋Šฅ์€ ํ™”๋ฉด์ด ๋„ˆ๋ฌด ์ž‘์•„ ํ‘œ์ •์ด๋‚˜ ๊ตฌ๋„๋ฅผ ์žก๊ธฐ ๋ถˆํŽธํ•˜๊ณ , ์…”ํ„ฐ๋ฅผ ๋ˆ„๋ฅผ ๋•Œ ์‹œ์„ ์ด ๋ถ„์‚ฐ๋˜๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋Ÿฌ๋ง๋ถ€์Šค๋Š” ์ด๋ฏธ ๋ณด์œ ํ•œ iPhone, iPad, Mac ๋“ฑ Apple ๊ธฐ๊ธฐ๋“ค์„ ํ•˜๋‚˜๋กœ ์—ฐ๊ฒฐํ•ด ์–ธ์ œ ์–ด๋””์„œ๋“  ๋‚˜๋งŒ์˜ ํฌํ† ๋ถ€์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ์‚ฌ์ง„ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๊ธฐ๊ธฐ ๊ฐ„ ํ™”๋ฉด ๊ณต์œ ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ŠคํŠœ๋””์˜ค๊ธ‰ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ดฌ์˜ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

  • ๐Ÿ“ ์–ด๋””์„œ๋‚˜ ๋‚˜๋งŒ์˜ ์ŠคํŠœ๋””์˜ค : ์ง‘, ์นดํŽ˜, ์—ฌํ–‰์ง€ ๋“ฑ Apple ๊ธฐ๊ธฐ๋งŒ ์žˆ์œผ๋ฉด ๋‚˜๋งŒ์˜ ํฌํ† ๋ถ€์Šค
  • ๐Ÿ“ท ํ›„๋ฉด ์นด๋ฉ”๋ผ ํ™”์งˆ ์œ ์ง€ : ๊ณ ํ™”์งˆ๋กœ ์ดฌ์˜ํ•˜๋ฉด์„œ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅ
  • ๐ŸŽ Apple ์ƒํƒœ๊ณ„ ํ™œ์šฉ : ๋ณด์œ ํ•œ ๊ธฐ๊ธฐ๋“ค์ด ์—ฐ๋™๋˜์–ด ๋™์ž‘ํ•˜๋Š” ์žฌ๋ฏธ

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ’ป ๋‹ค์–‘ํ•œ ๊ธฐ๊ธฐ ์—ฐ๊ฒฐ

iOS03 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 1 - แ„ƒแ…กแ„‹แ…ฃแ†ผแ„’แ…กแ†ซ แ„€แ…ตแ„€แ…ต แ„‹แ…งแ†ซแ„€แ…งแ†ฏ@3x

๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๊ธฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ฐ๊ฒฐํ•˜์„ธ์š”.



๐Ÿ“ท ์ดฌ์˜ ๋ฐฉ์‹ ์„ ํƒ

iOS03 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2 - แ„Žแ…ชแ†ฏแ„‹แ…งแ†ผ แ„‡แ…กแ†ผแ„‰แ…ตแ†จ แ„‰แ…ฅแ†ซแ„แ…ขแ†จ@3x

์›ํ•˜๋Š” ์ดฌ์˜ ๋ฐฉ์‹์„ ์„ ํƒํ•˜์„ธ์š”.

ํƒ€์ด๋จธ ์ดฌ์˜: 8์ดˆ ์นด์šดํŠธ๋‹ค์šด ํ›„ 8์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ 10์žฅ ์ž๋™ ์ดฌ์˜
๋ฆฌ๋ชจํŠธ ์ดฌ์˜: ์—ฐ๊ฒฐ๋œ ๊ธฐ๊ธฐ์—์„œ ์ง์ ‘ ์ดฌ์˜ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์›ํ•˜๋Š” ์ˆœ๊ฐ„ ์ดฌ์˜



๐Ÿคณ ์ดฌ์˜ ๋ฐ ํฌ์ฆˆ

iOS03 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 3 - แ„Žแ…ชแ†ฏแ„‹แ…งแ†ผ แ„†แ…ตแ†พ แ„‘แ…ฉแ„Œแ…ณ แ„Žแ…ฎแ„Žแ…ฅแ†ซ@3x

iPhone ์นด๋ฉ”๋ผ ํ™”๋ฉด์„ iPad, Mac ๋“ฑ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•˜์„ธ์š”.

ํฌ์ฆˆ ๊ฐ€์ด๋“œ๋กœ ๋‹ค์–‘ํ•œ ํฌ์ฆˆ๋ฅผ ์ถ”์ฒœ ๋ฐ›์•„๋ณด์„ธ์š”.



๐ŸŽจ ํ”„๋ ˆ์ž„๊ณผ ๋ ˆ์ด์•„์›ƒ ์„ ํƒ

iOS03 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 4 - แ„‘แ…งแ†ซแ„Œแ…ตแ†ธ@3x

์ดฌ์˜ํ•œ ์‚ฌ์ง„ ์ค‘ ์›ํ•˜๋Š” ์‚ฌ์ง„์„ ์„ ํƒํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์Šคํƒ€์ผ์˜ ํ”„๋ ˆ์ž„์— ํ•ฉ์„ฑํ•˜์„ธ์š”.



๐ŸŽ‘ ๊ฒฐ๊ณผ ์ €์žฅ ๋ฐ ๊ณต์œ 

iOS03 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 5 - แ„€แ…งแ†ฏแ„€แ…ช แ„†แ…ตแ†พ แ„€แ…ฉแ†ผแ„‹แ…ฒ@3x

์™„์„ฑ๋œ ์‚ฌ์ง„์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ํ•˜์„ธ์š”.



๐Ÿ“ฑ ์ง€์› ๊ธฐ๊ธฐ

๋ณด์œ ํ•œ Apple ๊ธฐ๊ธฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์„ธ์š”!

์—ญํ•  ๊ธฐ๊ธฐ ์ตœ์†Œ ๋ฒ„์ „
์ดฌ์˜ (์นด๋ฉ”๋ผ) iPhone
๋ฏธ๋Ÿฌ๋ง (์‹ค์‹œ๊ฐ„ ํ™•์ธ) iPhone, iPad, Mac
๋ฆฌ๋ชจํŠธ (์ดฌ์˜ ๋ฒ„ํŠผ) iPhone, iPad, Mac, Apple Watch

์กฐํ•ฉ ์˜ˆ์‹œ

  • iPhone(์นด๋ฉ”๋ผ) + iPhone(๋ฏธ๋Ÿฌ๋ง)
  • iPhone(์นด๋ฉ”๋ผ) + iPad(๋ฏธ๋Ÿฌ๋ง)
  • iPhone(์นด๋ฉ”๋ผ) + Mac(๋ฏธ๋Ÿฌ๋ง) + Watch(๋ฆฌ๋ชจํŠธ)

์›ํ™œํ•œ ๋™์ž‘์„ ์œ„ํ•ด Bluetooth์™€ Wi-Fi๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ผœ์ ธ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


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

๊ตฌ๋ถ„ ์Šคํƒ
Language
UI
Connectivity
Media
Concurrency
Tools
CI/CD

๐Ÿ’ก ํ•ต์‹ฌ ๊ฒฝํ—˜

๊ฒฝํ—˜ ์„ค๋ช… ๋งํฌ
์—ฐ๊ฒฐ ๋Š๊น€ ๋Œ€์‘ Multipeer Connectivity ํ™˜๊ฒฝ์—์„œ Heartbeat์™€ ์žฌ์—ฐ๊ฒฐ ๋กœ์ง์œผ๋กœ ์—ฐ๊ฒฐ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ ๊ฒฝํ—˜์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. Wiki
๊ถŒํ•œ ์š”์ฒญ ์นด๋ฉ”๋ผ, ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ, ์•จ๋ฒ” ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋‹จ๊ณ„๋ณ„๋กœ ์š”์ฒญํ•˜๊ณ  ๊ฑฐ๋ถ€ ์‹œ ์„ค์ • ์œ ๋„๊นŒ์ง€ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. Wiki
Connectivity ํ†ต์‹  ๊ณผ์ • Multipeer Connectivity์™€ Watch Connectivity๋กœ ๊ธฐ๊ธฐ ๊ฐ„ ํ†ต์‹  ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•œ ๊ณผ์ •์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. Wiki
์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๋Œ€์‘ TestFlight์™€ ์„ค๋ฌธ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์„ ์ˆ˜์ง‘ํ•˜๊ณ  UX ๊ฐœ์„ ์— ๋ฐ˜์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. Wiki
๋™์  UI GeometryReader๋ฅผ ํ™œ์šฉํ•ด iPhone, iPad, Mac์—์„œ ๋ฐ˜์‘ํ˜• UI๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒฝํ—˜์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. Wiki
AI PR ์ž๋™ ๋ฆฌ๋ทฐ n8n์„ ํ™œ์šฉํ•ด PR ์ƒ์„ฑ ์‹œ AI๊ฐ€ ์ž๋™์œผ๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. Wiki
CI/CD ์ž๋™ํ™” GitHub Actions๋กœ ๋นŒ๋“œ ์ž๋™ํ™”, ์—์…‹ ์ž๋™ ๋ณ‘ํ•ฉ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. Wiki
App Store ์‹ฌ์‚ฌ ๋Œ€์‘ App Store ์‹ฌ์‚ฌ ๊ณผ์ •์—์„œ์˜ ๋ฆฌ์  ์‚ฌ์œ ์™€ ๋Œ€์‘ ๊ฒฝํ—˜์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. Wiki

๐Ÿ› ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

image

์ฃผ์š” ์ปดํฌ๋„ŒํŠธ

  • Camera Device: iPhone ํ›„๋ฉด ์นด๋ฉ”๋ผ๋กœ ์ดฌ์˜, H.264 ์ธ์ฝ”๋”ฉ ํ›„ ์ŠคํŠธ๋ฆฌ๋ฐ
  • Mirroring Device: ์ŠคํŠธ๋ฆผ ์ˆ˜์‹  ๋ฐ ๋””์ฝ”๋”ฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋Ÿฌ๋ง ํ™”๋ฉด ํ‘œ์‹œ
  • Remote Device: ์›๊ฒฉ ์ดฌ์˜ ๋ช…๋ น ์ „์†ก

ํ†ต์‹  ๋ฐฉ์‹

  • MultipeerConnectivity: iPhone โ†” iPad โ†” Mac ๊ฐ„ P2P ํ†ต์‹  (์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ + ์ดฌ์˜ ๋ช…๋ น)
  • WatchConnectivity: iPhone โ†” Apple Watch ๊ฐ„ 1:1 ํ†ต์‹  (์ดฌ์˜ ๋ช…๋ น ์ „์šฉ)

Apple Watch๋Š” MultipeerConnectivity๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ WatchConnectivity๋กœ iPhone๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

mirroringBooth/
โ”œโ”€โ”€ App/                          # ์•ฑ ์ง„์ž…์  ๋ฐ ๋ฃจํŠธ ๊ตฌ์„ฑ
โ”‚   โ”œโ”€โ”€ mirroringBoothApp.swift   # @main ์•ฑ ์—”ํŠธ๋ฆฌ
โ”‚   โ”œโ”€โ”€ AppDelegate.swift         # ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ RootView.swift            # ๋ฃจํŠธ ๋ทฐ
โ”‚   โ””โ”€โ”€ RootStore.swift           # ๋ฃจํŠธ ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚
โ”œโ”€โ”€ Core/                         # ๊ณตํ†ต ์ธํ”„๋ผ
โ”‚   โ”œโ”€โ”€ StoreProtocol.swift       # MVI ์•„ํ‚คํ…์ฒ˜ ํ”„๋กœํ† ์ฝœ
โ”‚   โ”œโ”€โ”€ Router.swift              # ํ™”๋ฉด ์ „ํ™˜ ๋ผ์šฐํŒ…
โ”‚   โ”œโ”€โ”€ AppLogger.swift           # ๋กœ๊น… ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”‚   โ””โ”€โ”€ PlistRepository.swift     # Plist ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
โ”‚
โ”œโ”€โ”€ Device/                       # ๊ธฐ๊ธฐ๋ณ„ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ
โ”‚   โ”œโ”€โ”€ Camera/                   # ์ดฌ์˜ ๊ธฐ๊ธฐ
โ”‚   โ”œโ”€โ”€ Mirroring/                # ๋ฏธ๋Ÿฌ๋ง ๊ธฐ๊ธฐ
โ”‚   โ”œโ”€โ”€ Remote/                   # ๋ฆฌ๋ชจํŠธ ๊ธฐ๊ธฐ
โ”‚   โ””โ”€โ”€ Common/                   # ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ
โ”‚
โ””โ”€โ”€ Resources/                    # ๋ฆฌ์†Œ์Šค ํŒŒ์ผ

๐Ÿ“š ๊ด€๋ จ ๋ฌธ์„œ

๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ํ”„๋กœ์ ํŠธ ์œ„ํ‚ค์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ ๋งํฌ
๊ทธ๋ผ์šด๋“œ ๋ฃฐ Wiki
๊ธฐํš์„œ Wiki
์„ค๊ณ„์„œ Wiki
ํ”„๋กœ๋•ํŠธ ๋ฐฑ๋กœ๊ทธ Wiki

๐Ÿ‘ฅ ํŒ€์› ์†Œ๊ฐœ

S022 ์œค๋Œ€ํ˜„ S024 ์ด์ƒ์œ  S029 ์ „๊ท€๋กœ S038 ์ตœ์œค์ง„
S022 S024 S029 S038
์œ„ํ‚ค ๋ฆฌ๋” UI/UX ๋ฆฌ๋” ํŒ€ ๋ฆฌ๋” ํ…Œํฌ ๋ฆฌ๋”