๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

iOS/TIL

22.07.04ใ…ฃ ์•ฑ์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ & iOS ์˜ ํŠน์ง• & Xcode ์ฃผ์š” ๊ธฐ๋Šฅ

 

 

 

์•ฑ์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘์›๋ฆฌ 

 

์•ฑ์€ ํฌ๊ฒŒ ํ™”๋ฉด(Scene), ๊ธฐ๋Šฅ(Logic), ๋ฐ์ดํ„ฐ(Data) ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. 'ํ™”๋ฉด'์€ ๋ง ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ณด๊ฒŒ ๋˜๋Š” ํ™”๋ฉด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. '๊ธฐ๋Šฅ'์€  <๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ> ์ด๋ผ๋Š” ์•ฑ์—์„œ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ๋‹ฌ์ด ๊ฐ€๋Šฅํ•œ ์Œ์‹์ ์„ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ์•ฑ์„ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ '๋ฐ์ดํ„ฐ'๋Š” ์•ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋Š”๋ฐ, ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๋ฐฉ์‹์—๋Š” ํ˜ผ์ž ์‚ฌ์šฉํ•˜๋Š” ์ผ๊ธฐ ์•ฑ๊ณผ ๊ฐ™์ด ์•ฑ ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ธ์Šคํƒ€๊ทธ๋žจ๊ณผ ์œ ํŠœ๋ธŒ์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

iOS ์˜ ํŠน์ง• 

iOS๋Š” 4๊ฐ€์ง€์˜ ๋…ํŠนํ•˜๋ฉด์„œ๋„ ์ฃผ์š”ํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

 

1. ํ์‡„์„ฑ (๋ณด์•ˆ) 

: '๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ' ๋Š” Apple ์˜ ํ•ต์‹ฌ ๊ฐ€์น˜ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, Safari ์˜ ์ง€๋Šฅํ˜• ์ถ”์  ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด๋‚˜ ์ง€๋„์•ฑ์—์„œ ์ง€๋‚œ ์œ„์น˜ ๊ธฐ๋ก์„ ๋ณด๊ด€ํ•˜์ง€ ์•Š๋Š” ๋“ฑ Apple ์€ ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ๋ฅผ ๊ทธ ์–ด๋–ค ๊ฐ€์น˜๋ณด๋‹ค๋„ ์šฐ์„ ์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— iOS๋Š” ํ์‡„์ ์ธ ํŠน์ง•์„ ๊ฐ€์กŒ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

2. ์—…๋ฐ์ดํŠธ 

: iOS๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํ‹€ ์ง€์›ํ•˜๋ฉฐ, ํ˜„์žฌ(2022/05/31 ๊ธฐ์ค€)๋Š” ์•„์ดํฐ ์‚ฌ์šฉ์ž์˜ 89%๊ฐ€ iOS 15 ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ํ†ต๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค์–‘ํ•œ iOS ๋ฒ„์ „์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐœ๋ฐœ ์‹œ๊ฐ„์€ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค ์ˆ˜ ์žˆ๊ณ  ๋ฐ˜๋Œ€๋กœ ๋‹ค์–‘ํ•œ iOS ๋ฒ„์ „์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ, ๋งŽ์€ ์‚ฌ์šฉ์ž ์ˆ˜ ํ™•๋ณด๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋”œ๋ ˆ๋งˆ์— ๋น ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

3. ๋ ˆ์ด์•„์›ƒ

 

- Human Interface Guidelines

: Apple์€ Human Interface Guidelines์„ ๊ทœ์ •ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ค‘์‹ฌ์ ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•จ์„ ๋ช…ํ™•ํžˆ ๊ทœ์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ์ด ๋ชจ๋ฒ”์ ์œผ๋กœ ์ ์šฉ๋œ ์‚ฌ๋ก€๋กœ๋Š” ํ™”๋ฉด ์ปจํŠธ๋กค์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๊ณ  ์ตœ์†Œํ•œ์˜ ์ƒํ˜ธ ์ž‘์šฉ์œผ๋กœ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ๋ณด์กฐ ์„ธ๋ถ€ ์ •๋ณด์™€ ์ž‘์—…์„ ๋งŒ๋“ค์–ด ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋ณธ ์ž‘์—…๊ณผ ์ฝ˜ํ…์ธ ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ฒฝ์šฐ์™€ ์žฅ์น˜ ๋ฐฉํ–ฅ, ๋‹คํฌ ๋ชจ๋“œ ๋ฐ ๋™์  ์œ ํ˜•๊ณผ ๊ฐ™์€ ๋ชจ์–‘ ๋ณ€๊ฒฝ์ด ์›ํ• ํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง€๋„๋ก ๋””์ž์ธํ•œ ๋ ˆ์ด์•„์›ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

 

- SF Symbols 

: SF Symbols๋Š” 4,000๊ฐœ ์ด์ƒ์˜ ๊ธฐํ˜ธ๊ฐ€ ์žˆ๋Š” SF Symbols๋Š” Apple ํ”Œ๋žซํผ์šฉ ์‹œ์Šคํ…œ ๊ธ€๊ผด์ธ San Francisco์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜๋„๋ก ์„ค๊ณ„๋œ ์•„์ด์ฝ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์•„์ด์ฝ˜์ด์ง€๋งŒ ํฐํŠธ์˜ ์ง€ํ–ฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Symbols์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ SF Symbols ๋Š” iOS 13 ์ด์ƒ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „ ๋Œ€์‘์ด ์ค‘์š”ํ•œ ์ ์„ ๊ผญ ๋ช…์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ดํ•˜ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์•„์ด์ฝ˜ ์ธ์‹์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ๋น„์–ด์žˆ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋œจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

4. ํ•˜๋“œ์›จ์–ด 

: ํ•˜๋“œ์›จ์–ด๋ž€ iOS์—์„œ ์‚ฌ์šฉํ•˜๋Š” GPS, ์นด๋ฉ”๋ผ, ์กฐ๋„ ์„ผ์„œ ๋“ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

Xcode ์ฃผ์š” ๊ธฐ๋Šฅ

 

์šฐ์„  Xcode์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ ์ „์—, compile ๊ณผ build ์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ณ  ๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

  • compile : ์•ฑ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 
  • build : ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ • ๋ฐ ๊ฒฐ๊ณผ๋ฌผ์ธ ์•ฑ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ด ๋‘ ๊ฐ€์ง€ ์ค‘์—์„œ๋Š” compile ๊ณผ์ •์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. 

 

 

- Create a new Xcode project

 

Xcode ์—์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, Organization Identifier ๊ณผ Bundle Identifier ์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ๋งž๋‹ฅ๋“œ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์šฐ์„  Organization Identifier ๋Š” Bundle Identifier์— ์กฐํ•ฉ๋˜๋Š” ์‹๋ณ„์ž๋กœ com.nickname ๊ณผ ๊ฐ™์ด ์›น์˜ ๋„๋ฉ”์ธ์„ ๊ฑฐ๊พธ๋กœ ์ ๋Š” ํ˜•ํƒœ๋ฅผ ๋•๋‹ˆ๋‹ค. Bundle Identifier๋Š” ์•ฑ์˜ ๊ณ ์œ ํ•œ ์ฃผ์†Œ๋กœ ๋‹ค๋ฅธ ์•ฑ๊ณผ ์ค‘๋ณต๋˜๋Š” ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถœ์‹œ ํ›„์— ์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์‹๋ณ„์ž๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ์•„์˜ˆ ๋‹ค๋ฅธ ์•ฑ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ ์„ ๊ผญ ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Bundle Identifier๋Š” ์ฃผ๋ฏผ๋ฒˆํ˜ธ์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹๋ณ„์ž๋กœ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 

 

๋˜ํ•œ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์ง€์› ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ๋ฒ„์ „๊ณผ ์ง€์› ๊ฐ€๋Šฅํ•œ ๊ธฐ๊ธฐ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Deployment Info ๋ถ€๋ถ„์„ ๊ผญ ์ฒดํฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, iphone ๊ณผ ipad ์— ๋ชจ๋‘ ์ ํ•ฉํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๊ฐ–์ถ˜ ์•ฑ์„ ๋‚˜์ค‘์— iphone์šฉ์ด๋‚˜ ipad์šฉ์œผ๋กœ ์•ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ ์„ ๊ผญ ์ฒดํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

- UIKit & Interface Builder 

 

UIKit ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ iOS ์™€ tvOS์— ๋“ค์–ด๊ฐ€๋Š” ์•ฑ์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ core objects ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ UIKit ๋Š” object๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์ด๋‚˜ ์ฝ˜ํ…์ธ  ์š”์†Œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

Interface Builder๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ์ ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘์ ์ž„์„ ์•Œ๋ฆฌ๋Š” Entry Point ๋ผ๋Š” ํ™”์‚ดํ‘œ์ž…๋‹ˆ๋‹ค. Entry Point ์„ค์ •์ด ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, view controller๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—๋Š” ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ Entry Point ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, View Controller ์— ์žˆ๋Š” Is Initial View Controller ๋ฅผ ์ฒดํฌํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

Xcode ๋ฅผ ํ†ตํ•ด ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด, ์ฃผ๋กœ main๊ณผ launch screen์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ launch screen ์ด๋ž€ ์•ฑ์ด ์‹คํ–‰๋˜๊ธฐ 1~2์ดˆ ์ „์— ๋œจ๋Š” ํ™”๋ฉด์„ ์˜๋ฏธํ•˜๋ฉฐ ์ด ์Šคํฌ๋ฆฐ์—๋Š” ์ธํ„ฐ๋ ‰์…˜์ด ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.  main ์—์„œ๋Š” launch screen์„ ์ œ์™ธํ•œ ๋ถ€๋ถ„์„ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

โ€ป ๊ฐ™์€ ์•ฑ์ด๋ผ๋„ ๊ธฐ๊ธฐ๋ณ„๋กœ ์•ฑ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ์ด์œ  

 

์•ฑ์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ๋””๋ฐ”์ด์Šค ๋ณ„๋กœ ์•ฑ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•ฑ ์‹œ๋‹(App Thinning) ์ด๋ผ๋Š” ๊ธฐ์ˆ  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์•ฑ์ด ๋””๋ฐ”์ด์Šค์— ์„ค์น˜๋  ๋•Œ, ์•ฑ์Šคํ† ์–ด์™€ ์šด์˜์ฒด์ œ๊ฐ€ ๋””๋ฐ”์ด์Šค์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ์„ค์น˜๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด ๋””๋ฐ”์ด์Šค์˜ ํ•ด์ƒ๋„ ๋ณ„๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์•„์ด์ฝ˜์„ ์„ ํƒํ•  ๋•Œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.