λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
iOS 🍎/iOS

Module, Library, Framework, XCFramework

by yongmin.Lee 2023. 2. 3.

Module

  • ν•˜λ‚˜μ˜ μ½”λ“œ λ°°ν¬λ‹¨μœ„ ex) framework or application
  • Xcodeμ—μ„œ ν”„λ ˆμž„μ›Œν¬λ‚˜ μ•± λ²ˆλ“€κ°™μ€ λΉŒλ“œνƒ€μΌ“λ“€μ€ 각각 λͺ¨λ“ˆμ΄λ‹€
  • 각 λͺ¨λ“ˆμ€ 각자의 λ„€μž„μŠ€νŽ˜μ΄μŠ€ 및 μ•‘μ„ΈμŠ€ 컨트둀 가지고 있으며 λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ μž„ν¬νŠΈλ˜μ–΄ μž¬μ‚¬μš© 될 수 μžˆλ‹€

Bundle

  • 내뢀에 μžˆλŠ” 파일 디렉토리이닀.
  • iOS μ—μ„œ λ²ˆλ“€μ€ 앱에 κ΄€λ ¨λœ νŒŒμΌμ„ ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€λ‘œ 제곡

Object code

  • object code λŠ” 보톡, 컴파일러λ₯Ό 톡해 μƒμ‚°λœ κ²°κ³Όλ¬Ό

Object file

  • object code λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ” νŒŒμΌμ΄λ‹€.

Library

  • LibraryλŠ” νƒ€κ²Ÿμ—μ„œ μ‚¬μš©λ  νŒ¨ν‚€μ§•λœ Object νŒŒμΌλ“€μ˜ λͺ¨μŒ
  • νƒ€κ²Ÿμ— μ–΄λ–»κ²Œ λ§ν‚Ήν•˜λŠ”κ°€μ— 따라 2 νƒ€μž…μœΌλ‘œ λ‚˜λ‰œλ‹€
    • Static Library (.a) : 컴파일 μ‹œμ μ— νƒ€κ²Ÿμ— μ—°κ²°(링킹)
    • Dynamic Library (.dylib) : λŸ°νƒ€μž„ μ‹œμ μ— νƒ€κ²Ÿμ— μ—°κ²°(링킹)

Static Library

  • μ»΄νŒŒμΌλ λ•Œ μ‚¬μš©ν•  μ½”λ“œλ“€μ„ Execute file에 λ³΅μ‚¬ν•˜μ—¬ μ‚¬μš© 
  • .a νŒŒμΌ μ΅μŠ€ν…μ…˜μ„ 가지고 μžˆλ‹€
  • Execute file의 λͺΈμ§‘이 컀지고 μ•± μ‹œμž‘ μ‹œκ°„μ΄ 길어진닀

Dynamic Library

  • 컴파일 μ‹œμ μ— executable file 에 λ³΅μ‚¬λ˜μ§€ μ•ŠλŠ”λ‹€.  LinkerλŠ” 라이브러리의 reference만 μ €μž₯
  • .dylib μ΅μŠ€ν…μ…˜μ„ 가지고 μžˆλ‹€
  • ν•„μš”ν•œ μ‹œμ μ— λ™μ μœΌλ‘œ λ‘œλ“œλ˜μ„œ μ‚¬μš©ν•˜λ―€λ‘œ 맀번 컴파일 ν•  ν•„μš” μ—†λ‹€
  • μ•± 컴파일 μ‹œμ μ— λ©”λͺ¨λ¦¬μ— λ‘œλ“œν•΄ 놓지 μ•Šμ•˜κΈ° λ•Œλ¬Έμ—, μƒλŒ€μ μœΌλ‘œ Static Library λ³΄λ‹€λŠ” μ½”λ“œ μ ‘κ·Ό 속도가 λŠλ¦¬μ§€λ§Œ μ•± μ‹œμž‘ μ‹œκ°„μ΄ 짧닀

Framework

  • 라이브러리 ν—€λ”νŒŒμΌ, localizable파일, λ¦¬μ†ŒμŠ€κΉŒμ§€ 이 λͺ¨λ“  것을 ν•˜λ‚˜μ˜ Bundle둜 묢어놓은 것
  • μ•±μ—μ„œ Framework 을 μ‚¬μš©ν• λ•ŒλŠ” μ•± ν•΄λ‹Ή ν”„λ ˆμž„μ›Œν¬λ₯Ό μ•± λ²ˆλ“€μ•ˆμ— 포함 μ‹œμΌœμ•Ό ν•œλ‹€.

Static Framework 

  • Source File + Static Library + Static Linker
  • Static Linkerλ₯Ό 톡해 Static Library μ½”λ“œκ°€ Execute file(= appliccation file) λ‚΄λ‘œ λ“€μ–΄κ°€ Heap λ©”λͺ¨λ¦¬μ— 상주
  • λŸ°νƒ€μž„ 속도가 λΉ λ₯΄μ§€λ§Œ λ©”λͺ¨λ¦¬κ°€ 많이 μ‚¬μš©λ˜κ³  컴파일 속도가 였래 κ±Έλ¦°λ‹€

Dynamic Framework

  • Source File + Dynamic Library References + Dynamic Library + Static Linker
  • 파일이 μ•„λ‹Œ μ£Όμ†Œλ₯Ό execute file (= application file)에 μ €μž₯ν•˜κ³ , Static Linkerλ₯Ό ν†΅ν•΄μ„œ Stack으둜 ν•„μš”ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ λΆˆλŸ¬μ™€μ„œ μ‚¬μš©ν•˜λŠ” ν˜•νƒœ
  • μ£Όμ†Œ 정보듀은 Heap에 상주
  • 컴파일 속도가 적게 걸리고 μ‚¬μš©λ˜λŠ” λ©”λͺ¨λ¦¬ 크기가 μ μ§€λ§Œ λŸ°νƒ€μž„ 속도가 λŠλ¦¬λ‹€

XCFramework

  • iOS, macOS, tvOS, and watchOS λ©€ν‹°ν”Œλž«νΌλ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄ Xcodeκ°€ λ§Œλ“€μ–΄λ‚΄λŠ” λ°”μ΄λ„ˆλ¦¬ νŒ¨ν‚€μ§€
  • XCFrameworkλŠ” μ—¬λŸ¬ ν”„λ ˆμž„μ›Œν¬λ“€μ„ ν¬ν•¨ν• μˆ˜ 있음
  • XCFrameworkλŠ” Static Frameworkμ΄κ±°λ‚˜ Dynamic Framework λ‘˜ λ‹€ κ°€λŠ₯
  • μ—¬λŸ¬ 개의 architecture 용 framework 듀을 λ¬Άμ–΄ ν•˜λ‚˜μ˜ xcframework 을 λ§Œλ“€μ–΄μ£Όλ©΄, λΉŒλ“œμƒν™©μ— λ§žλŠ” framework 을 λ³„λ„λ‘œ μ„€μ •ν•΄ 쀄 ν•„μš”μ—†μ΄ ν•˜λ‚˜μ˜ xcframework 만 가지고 μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— 맀우 편리.

XCFramework λ§Œλ“œλŠ” 법

  • ν”„λ ˆμž„μ›Œν¬λ‘œ λ§Œλ“€ ν”„λ‘œμ νŠΈμ—μ„œ μ—¬λŸ¬ λ””λ°”μ΄μŠ€ νƒ€κ²ŸμœΌλ‘œ μ„€μ • (XCFrameworkλŠ” λ©€ν‹°ν”Œλž«νΌμ„ 지원)
  • Archiving을 ν•˜μ—¬ λ°”μ΄λ„ˆλ¦¬ 파일(.xarchive)둜 생성 (νƒ€κ²Ÿμ΄ μ—¬λŸ¬κ°œμ΄λ―€λ‘œ λ°”μ΄λ„ˆλ¦¬ νŒŒμΌλ„ μ—¬λŸ¬κ°œκ°€ 생성)
  • μœ„μ—μ„œ λ‚˜μ˜¨ λ°”μ΄λ„ˆλ¦¬ νŒŒμΌλ“€μ„ XCFramework둜 묢음 (μ™„λ£Œ)

 

 

 

 

 

 

 

 

μ°Έκ³ 

https://showcove.medium.com/library-framework-%EA%B7%B8%EB%A6%AC%EA%B3%A0-xcframework-15387031964b

https://ios-development.tistory.com/1004

https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html

https://medium.com/delightroom/ios-library-framework-swift-package-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-%EC%B0%A8%EC%9D%B4%EC%A0%90-1f42c7848771

https://www.swift.org/package-manager/

 

.