- Published on
๐ Swift - ๋ผ์ด๋ธ๋ฌ๋ฆฌ-ํ๋ ์์ํฌ-ํจํค์ง ๋ฌด์จ ์ฐจ์ด์ธ๋ฐ?
- Authors
- Name
- ์ด์ฐฝ์ค
- ๋ฐฐ๊ฒฝ
- ๊ณผ์
- Static๊ณผ Dynamic
- Static Library vs Dynamic Library
- Library
- Static Library
- Dynamic Library
- Static Framework vs Dynamic Framework
- Framework
- Package
- ๊ฒฐ๊ณผ
- ์ฐธ๊ณ ๋ฌธ์
๋ฐฐ๊ฒฝ
ํค์๋: Library, Framework, Package
๋ญ๊ฐ ๊ต์ฅํ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์๋ ๊ฒ ๊ฐ์ ์ด ์ .. ๋ฌด์จ ์ฐจ์ด๊ฐ ์์๊น?
๊ณผ์
Static๊ณผ Dynamic
์ด ๋์ ๋งํฌ ๋ฐฉ์์ ์ฐจ์ด์ ๋ํ ๊ตฌ๋ถ์ด๋ค.
Link: ๋ชจ๋๊ณผ ์ฑ์ ์ฝ๋๋ฅผ ํ๋๋ก ํฉ์น๋ ๊ณผ์
์ฑ์ ์คํ ํ์ผ (executable)์ ๋ชจ๋์ ์ฝ๋๊ฐ ํฌํจ๋๋ฉด Static
- ์ฑ ์คํ ํ์ผ ํฌ๊ธฐ ์ฆ๊ฐ
- ์คํ ์๊ฐ ์ฆ๊ฐ
- ๋ฐํ์ ์ฑ๋ฅ ์ฆ๊ฐ
- ์ปดํ์ผ ์๋ ํ๋ฝ
์ฑ์ ์คํ ํ์ผ (executable)์ ๋ชจ๋์ ์ฝ๋๊ฐ ํฌํจ๋์ง ์๊ณ
๋ชจ๋์ ์คํ ํ์ผ (executable)์ ์ฐธ์กฐ๊ฐ ํฌํจ๋๋ฉด Dynamic
- ์ฑ ์คํ ํ์ผ ํฌ๊ธฐ ๊ฐ์
- ์คํ ์๊ฐ ๊ฐ์
- pre-main ์๊ฐ ์ฆ๊ฐ
- ์ปดํ์ผ ์๋ ์ฆ๊ฐ
Static Library vs Dynamic Library
Library
Xcode Target์ ์ผ๋ถ๋ก ๋น๋๋์ง ์์ ์ฝ๋ ๋ฐ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ์ ์ํ ๊ฒ
โ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฆฌ์์ค ํ์ผ์ ํฌํจํ ์ ์์ต๋๋ค. (์ด๋ฏธ์ง, ์์ ๋ฑ)
Static Library
์ปดํ์ผ ๋ ํ์ํ ์ฝ๋๋ค์ ๋ชจ๋ Execute ํ์ผ๋ก ๋ณต์ฌํด ์ฌ์ฉํ๋ค.
.a
ํ์์ ํ์ผ๋ก ์ฌ์ฉ
Dynamic Library
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐธ์กฐ ๊ฐ๋ง ์ ์ฅํ๊ณ , ์ค์ ์ฝ๋๋ Execute ํ์ผ์์ ์ ์ธํ๋ค.
๋ฐํ์์ Dynamic Linker๊ฐ Dynamic Library๋ค์ ๋งํฌํ๋ค.
.dylib
ํ์์ ํ์ผ๋ก ์ฌ์ฉ
๐ก CoreData, CoreBlutooth์ ๊ฐ์ Apple ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ์ธ์๋ ํ๋ ์์ํฌ ์ธ๋ถ์ ๋ ๋ฆฝ๋ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. Static Library๋ง ์์ฃ ?
Static Framework vs Dynamic Framework
Framework
์์คํ์ผ ์ธ์๋ ์ถ๊ฐ ๋ฆฌ์์ค๊น์ง ๋ชจ๋ ๊ฒ์ ํ๋์ Bundle๋ก ๋ฌถ์ด๋์ ๊ฒ
โ Nib, ์ด๋ฏธ์ง, ํค๋ ํ์ผ, Localization ํ์ผ ๋ฑ์ ํฌํจํ ์ ์์ต๋๋ค.
ํ๋ ์์ํฌ๋ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํฉ๋๋ค.
ํ๋ ์์ํฌ๋ ๋ฐํ์ ์ค ๋ฉ๋ชจ๋ฆฌ์ ์ค์ง ํ๋๋ง ์ฌ๋ผ๊ฐ๋๋ค.
๐ก ํ๋ ์์ํฌ์ Static / Dynamic ์ค์ ๋ฐฉ๋ฒ
Build Settings์
Mach-O Type
์ ์ง์ ํด ์ค์ ํด์ค ์ ์์ต๋๋ค.โ Mach-O ํ์ ์ ๋ํด ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ฏ ์ถ์ต๋๋ค.
Framework๊ฐ Static ์ผ ๋๋ Embed ์ค์ ์ โDo not Embedโ๋ก ๋ฐ๊ฟ์ค ์ ์์ต๋๋ค.
์ด๋ฏธ ์คํ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ํฌํจ๋ ์ฝ๋๊ฐ ์ค๋ณต๋์ด ์์ฑ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋ฐ๋๋ก Dynamic์ผ ๋๋ ์คํ ํ์ผ์ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ Embed & Sign์ผ๋ก ์ค์ ํด์ค์ผ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด..?
dyld[63497]: Symbol not found
์.. ์ด ์๋ฌ ๋ณด์ค ์ ์์ต๋๋ค ๐
Package
Package๋ ์์ค ํ์ผ, ๋ฐ์ด๋๋ฆฌ ํ์ผ, ๊ทธ๋ฆฌ๊ณ ๋ฆฌ์์ค๋ฅผ ๋ฒ๋ค๋งํ๋ WWDC18์์ ์๋กญ๊ฒ ๊ณต๊ฐ๋ ์ฝ๋ ๊ณต์ ๋ฐฉ์์ ๋๋ค.
๊ธฐ์กด xcframework์ ์ ์ฌํ์ง๋ง, ์์ฃผ ํฐ ์ฐจ์ด์ ์ด ํ๋ ์์ต๋๋ค.
๋ฐ๋ก ๋ฒ๋ค์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์๋๋ผ, ์์ค์ฝ๋๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๋ ์ ์ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Package๋ ์คํ์์ค์ ๋ ์ด์ธ๋ฆฌ๋ ๋ฐฉ์์ ๋๋ค.
์ค์ ๋ก SPM์ ์ง์ํ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ณด๋ฉด Package.swift
ํ์ผ๊ณผ Sources
์์ ์์ค ํ์ผ๋ค์ด ์จ์ ํ Swfit ํ์ผ๋ก ๋ค์ด์์ฃ .
๊ทธ๋ฆฌ๊ณ Package์ ํฐ ์ฅ์ ์ค ํ๋๋ ๋ฒ๋ค์ ๋ํ ์ค์ ์ ๋ฌด๋ ค Swift ์ธ์ด๋ก ํ ์ ์๋ค๋ ์ ์ ๋๋ค.
์์ ์ธ๊ธํ๋ Package.swift
ํ์ผ์ด ์ผ์ข
์ manifest ํ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
ํด๋น ํ์ผ์๋ ํจํค์ง์ ์ด๋ฆ, ์์กด์ฑ, ๋ฆฌ์์ค ๋ฑ์ ๋ํ ๋ช ์๋ฅผ ํฌํจ๋ฉ๋๋ค.
SPM์ GitHub์ ์ฌ๋ผ๊ฐ์๋ remote ํจํค์ง๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๋ง์ด ์ฐ์ด์ง๋ง, ๋ก์ปฌ์ ์๋ ํจํค์ง๋ฅผ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
Package๋ก ํ๋ก์ ํธ๋ฅผ ์ ๋ ฌํ๋ ๊ฒ์ ์ ํ์ด ๊ถ์ฅํ๋ ๋ฐฉ์์ด๊ธฐ๋ ํฉ๋๋ค.
Organizing your code with local packages | Apple Developer Documentation
๊ฒฐ๊ณผ
MusicSpot ํ์ ๋ชจ๋ํ์ Swift Package Manager์ Package๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๊ฒฐ์ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- GitHub์ ๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ๋ก ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ๊ณต์ ํ๋ xcframework์ ๋ฐฉ์์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค๋ ์
- ํจํค์ง์ ๋ํ ์ค์ ์ Swift ์ธ์ด๋ก ํ๊ธฐ ๋๋ฌธ์, xcodeproj ํ์ผ์์ ์ผ์ด๋๋ ํ๊ฒจ์ด ์ปจํ๋ฆญํธ ๋์ Swift ์ธ์ด๋ก ์ปจํ๋ฆญํธ์ ๋์ํ ์ ์๋ค๋ ์
- Package๋ ๋ด๋ถ์ Library, Framework๋ฅผ ํฌํจํ์ฌ ์ฌ์ฉ๋๋ค๋ ์