ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] About App Development with UIKit (UIKit 으둜 μ•± κ°œλ°œν•˜κΈ°)
    iOS/πŸ€– App 2021. 6. 16. 01:01

    1μ°¨ μˆ˜μ •: 21.08.02

     

     

    μ•ˆλ…•ν•˜μ„Έμš”πŸΆ

     

    μ˜€λŠ˜μ€  'About App Development with UIKit' λΌλŠ” λ¬Έμ„œλ₯Ό μ€‘μš”ν•œ λ‚΄μš© μœ„μ£Όλ‘œ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€


     

    import UIKit

     

    UIKit 의 μ—­ν• 

    UIKit ν”„λ ˆμž„μ›Œν¬λŠ” iOS 앱을 μ œμž‘ν•  λ•Œ ν•„μš”ν•œ ν•„μˆ˜ μ˜€λΈŒμ νŠΈλ“€μ„ μ œκ³΅ν•΄μ€λ‹ˆλ‹€.

     

    예λ₯Ό λ“€μ–΄μ„œ μš°λ¦¬κ°€ λ§Œλ“  컨텐츠λ₯Ό 화면에 ν‘œμ‹œν•΄ 쀄 수 μžˆλŠ” μ˜€λΈŒμ νŠΈλΌλ˜κ°€,

    μ½˜ν…μΈ μ™€ μƒν˜Έμž‘μš©μ„ ν•˜λŠ” κΈ°λŠ₯을 ν•  수 μžˆλŠ” μ˜€λΈŒμ νŠΈλΌλ˜κ°€,

    λ§ˆμ§€λ§‰μœΌλ‘œ μ‹œμŠ€ν…œκ³Όμ˜ μƒν˜Έμž‘μš©μ„ 관리할 수 μžˆλŠ” 였브젝트λ₯Ό μ œκ³΅ν•΄μ€λ‹ˆλ‹€.

     

    앱듀은 UIKit ν”„λ ˆμž„μ›Œν¬μ— μ˜μ‘΄ν•΄μ„œ μœ„μ™€ 같이 κΈ°μ΄ˆκ°€ λ˜λŠ” λ™μž‘λ“€μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

     

    UIKit 은 μ΄κ²ƒλΏλ§Œ μ•„λ‹ˆλΌ

    λ™μž‘μ„ μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆ ν•  수 μžˆλŠ” 방법도 μ œκ³΅ν•©λ‹ˆλ‹€.

     

    UIKit κ³Ό Foundation 을 ν•©ν•˜μ—¬ Cococa Touch Framework 라고 ν•©λ‹ˆλ‹€


     

    μ•± λ²ˆλ“€μ΄λž€?

    App bundle 은 Xcode κ°€ ν”„λ‘œμ νŠΈλ₯Ό μ»΄νŒŒμΌν•˜κ³  λ§Œλ“€μ–΄λ‚Έ κ²°κ³Όλ¬Όμž…λ‹ˆλ‹€.

     

    μ•± λ²ˆλ“€μ€ ꡬ쑰화 된 디렉터리 ν˜•νƒœμž…λ‹ˆλ‹€.

     

    그리고 μ†ŒμŠ€ μ½”λ“œ 와 앱에 ν•„μš”ν•œ λͺ¨λ“  λ¦¬μ†ŒμŠ€λ“€μ„ μ „λΆ€ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

     

    μ—¬κΈ°μ„œ λ¦¬μ†ŒμŠ€λž€ λ””μŠ€ν¬μ— μ €μž₯λ˜λŠ” ν˜•νƒœμ˜ νŒŒμΌλ“€λ‘œ

     

    image assets, storyboard νŒŒμΌλ“€, string files,

    그리고 μ•±μ˜ 메타데이터 (info.plist) 등을 ν¬ν•¨ν•©λ‹ˆλ‹€.


     

    μ•± 싀행에 ν•„μš”ν•œ 메타데이터: Info.plist

     

    Xocde μ—μ„œλŠ” Property List λΌλŠ” 파일 ν˜•μ‹ (.plist ) 을 μ§€μ›ν•˜λŠ”λ°,

     

    κ°„λ‹¨νžˆ λ§ν•˜μžλ©΄ μœ„μ˜ 사진 처럼

    Key : Value 쌍으둜 이루어진 ν…Œμ΄λΈ”μž…λ‹ˆλ‹€.

     

    μ•± λ²ˆλ“€μ—λŠ” μ•±μ˜ 메타데이터λ₯Ό λ‹΄κ³  μžˆλŠ” Info.plist 파일이 ν”„λ‘œμ νŠΈ μƒμ„±μ‹œμ— 기본적으둜 ν¬ν•¨λ©λ‹ˆλ‹€.

     

    그리고 이 info.plist λŠ” ν•„μš” ν•˜λ‹€λ©΄ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μ†Œν”„νŠΈμ›¨μ–΄ 뿐만 μ•„λ‹ˆλΌ ν•˜λ“œμ›¨μ–΄ μš”κ΅¬μ‚¬ν•­λ„ μΆ”κ°€ν•  수 μžˆλ„€μš”.. μ •λ¦¬ν•˜λ©΄μ„œ μ²˜μŒμ•ˆ μ‚¬μ‹€πŸ€”

     

    iOS λŠ” 앱을 κ΅¬λ™μ‹œν‚¬ λ•Œ 이 Info.plist λ₯Ό ν†΅ν•΄μ„œ μ•±μ˜ μ„€μ •κ³Ό κ°€λŠ₯ν•œ λ™μž‘λ“€μ„ νŒŒμ•…ν•©λ‹ˆλ‹€.

     

    μœ„μ²˜λŸΌ ν•˜λ“œμ›¨μ–΄ μ œμ•½μ„ μΆ”κ°€ν•˜λ©΄ App Store🍎 κ°€ μœ„ μ œμ•½μ„ μΆ©μ‘±μ‹œν‚€μ§€ μ•ŠλŠ” 기기듀이 앱을 μΈμŠ€ν†¨ν•˜λŠ”κ²ƒμ„ λ§‰μ•„μ€λ‹ˆλ‹€.


     

    UIKit μ•±μ˜ μ½”λ“œ ꡬ쑰

    λŒ€λΆ€λΆ„μ˜ 앱은 μ½”μ–΄ν•œ λ™μž‘λ“€μ„ UIKit 에 μ˜μ‘΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

    :: μ‹œμŠ€ν…œκ³Ό μƒν˜Έμž‘μš©, μ•±μ˜ main event loop μ‹€ν–‰, μ½˜ν…μΈ λ₯Ό ν™”λ©΄ 상에 ν‘œμ‹œν•˜κΈ° λ“±

     

    κ·Έλž˜μ„œ μš°λ¦¬λŠ” 이런 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” UIKit 의 μ˜€λΈŒμ νŠΈλ“€μ„ κ·ΈλŒ€λ‘œ (as-is) μ‚¬μš©ν•˜κ±°λ‚˜,

    ν—ˆμš©λœ λ²”μœ„μ—μ„œ μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

     

    이 λ•Œ μ–΄λ–€ 였브젝트λ₯Ό λ³€κ²½ν•΄μ•Ό ν•˜λŠ”μ§€ μ•„λŠ” 것,

    그리고 μ–΄λ–€ μ‹œμ μ— λ³€κ²½ν•΄μ•Ό ν•˜λŠ”μ§€ μ•„λŠ” 것이 앱을 κ°œλ°œν•˜λŠ”λ°μ— μžˆμ–΄μ„œ κ°€μž₯ μ€‘μš”ν•œ λΆ€λΆ„μž…λ‹ˆλ‹€.

     

    UIKit μ•±μ˜ κ΅¬μ‘°λŠ” MVC λͺ¨λΈμ— κΈ°μ΄ˆν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

     

    >> [iOS] MVC νŒ¨ν„΄μ΄λž€? <<

     

     

     

     

    Model λ ˆμ΄μ–΄λŠ” 보톡 μš°λ¦¬κ°€ 앱에 ν•„μš”ν•œ 자료ꡬ쑰λ₯Ό μ •μ˜ν•˜μ—¬ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

     

    Data Objects λŠ” 말 κ·ΈλŒ€λ‘œ μš°λ¦¬κ°€ μ •μ˜ν•œ class, struct , enum λ“±

    Document λŠ” 파일 ν˜•νƒœμΈ 것을 λ³΄λ‹ˆ Storyboard, plist, assets λ“± 을 ν‘œν˜„ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€.

     

     

    Controller λ ˆμ΄μ–΄λŠ” λŒ€λΆ€λΆ„μ˜ 였브젝트λ₯Ό UIkit μ—μ„œ μ œκ³΅ν•©λ‹ˆλ‹€.

     

    μ•± μ‹€ν–‰κ³Ό λ™μ‹œμ— μƒμ„±λ˜λŠ” UIApplication 였브젝트, UIApplicationDelegate 였브젝트 λ“±...

     

    UIApplication 은 μ‹€ν–‰ 쀑인 μ•±μ˜ 전체 생λͺ…μ£ΌκΈ°λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

    즉, μ•± μ‹€ν–‰ μ€‘μ—λŠ” 항상 μ‘΄μž¬ν•˜λŠ” μ˜€λΈŒμ νŠΈμž…λ‹ˆλ‹€.

     

    UIApplication κ³Ό 연관관계 (UML ν‘œν˜„μ΄λΌκ³  κ°€μ •ν–ˆμŠ΅λ‹ˆλ‹€) 둜 ν‘œν˜„λ˜μ–΄μžˆλŠ” Event Loop λŠ” μ•±μ˜ main event loop λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€. 이 뢀뢄은 κ΄€λ ¨ κ³΅μ‹λ¬Έμ„œμ—μ„œ μ’€ 더 닀루어야할 것 κ°™μŠ΅λ‹ˆλ‹€.

     

    Application Delegate 와 μ˜μ‘΄κ΄€κ³„μΈ

    View Controller λŠ” 보톡 UIVIewController 클래슀λ₯Ό μ»€μŠ€ν…€(μ„œλΈŒν΄λž˜μ‹±) ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

     

    MVC μ•„ν‚€ν…μ²˜μ—μ„œ Controller의 역할은 Model κ³Ό View μ‚¬μ΄μ—μ„œ 데이터λ₯Ό μ „λ‹¬ν•΄μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

     

    View Layer λŠ” UIWindow λ₯Ό ν¬ν•¨ν•˜κ³  μž‡λŠ”λ°,

    UIWindow 였브젝트 μœ„μ—μ„œ λ·° μ˜€λΈŒμ νŠΈλ“€μ΄ 화면에 ν‘œν˜„λ©λ‹ˆλ‹€.

    &nbsp;λ©€ν‹° μœˆλ„μš°, SwiftUI 와 κ΄€λ ¨λœ SceneDelegate λŠ” 곡뢀 μš°μ„ μˆœμœ„μ— μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€

    μ½˜ν…μΈ  ν‘œμ‹œλ₯Ό λ‹΄λ‹Ήν•˜λŠ” UIView μ˜€λΈŒμ νŠΈλ“€, λ·° μ˜€λΈŒμ νŠΈλ“€λ„ μ»€μŠ€ν…€ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

     

    λ˜ν•œ Metal κ³Ό λ‹€λ₯Έ μ‹œμŠ€ν…œ ν”„λ ˆμž„μ›Œν¬λ“€λ‘œλ„ μ½˜ν…μΈ λ₯Ό λ Œλ”λ§ν•˜μ—¬ 화면에 ν‘œμ‹œν•  수 μžˆλ‹€κ³  ν•©λ‹ˆλ‹€.

    이 λΆ€λΆ„κ³Ό κ΄€λ ¨ν•˜μ—¬, CALayer 와 Core Animation 에 λŒ€ν•΄ μš°μ„  κ³΅λΆ€ν•΄λ³΄μ‹œλŠ” 것을 μΆ”μ²œν•©λ‹ˆλ‹€.

     

     

     

    πŸ”₯πŸ”₯πŸ”₯πŸ”₯πŸ”₯πŸ”₯

    이 λ¬Έμ„œλ₯Ό μ½μ–΄λ³΄λ‹ˆ, λ‹€μŒμ— 정리해야 ν•  것듀이 λˆˆμ— λ°Ÿνžˆλ„€μš”!!

    UIApplication (정리 μ™„λ£Œ)

    UIWindow (정리 μ™„λ£Œ),

    Main event loop,

    App Launching Sequence(정리 μ™„λ£Œ) λ₯Ό μ‚΄νŽ΄λ΄μ•Όκ² μŠ΅λ‹ˆλ‹€.

     

    계속 μ •λ¦¬ν•΄λ‚˜κ°ˆκ²Œμš”~

     

     

     

    끝!


    πŸ€–πŸŸ’[우짱의 iOS λΈ”λ‘œκ·Έ]πŸ”΅πŸ’»

    iOSλ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

     

    λŒ“κΈ€

μ–΄μ œλ³΄λ‹€ λ°œμ „ν•œ λ‚˜