-
[iOS] Swift Package Manager (SPM)iOS 2023. 5. 11. 13:36
Swift Package Manager๋?
Swift Package Manager๋ ์์ค ์ฝ๋ ๋ฐฐํฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋๊ตฌ๋ก, ์ฝ๋๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ๊ณ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ด ๋๊ตฌ๋ Swift ํจํค์ง ์ปดํ์ผ ๋ฐ ์ฐ๊ฒฐ, ์ข ์์ฑ ๊ด๋ฆฌ, ๋ฒ์ ๊ด๋ฆฌ, ์ ์ฐํ ๋ฐฐํฌ ๋ฐ ํ์ ๋ชจ๋ธ ์ง์ ๋ฑ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
Github์ ๊ฐ์ ์๋น์ค์์ ํจํค์ง๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ฟ๋ง ์๋๋ผ ํจํค์ง๋ ๊ฐ์ธ ๊ฐ๋ฐ, ํ ๋ด ์ฝ๋ ๊ณต์ ๋๋ ๊ธฐํ ์ธ๋ถํ๋ ์์ค์์๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
About Packages
ํจํค์ง๋ Package.swift manifest ํ์ผ์ ํฌํจํ Swift ์์ค ํ์ผ๋ก ๊ตฌ์ฑ๋์ด์์ต๋๋ค. manifest file (ํน์ package manifest)์ PackageDescription ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํจํค์ง์ ์ด๋ฆ๊ณผ ๋ด์ฉ์ ์ ์ํฉ๋๋ค. ํจํค์ง์๋ 1๊ฐ ์ด์์ ํ๊ฒ์ด ์์ต๋๋ค. ๊ฐ ํ๊ฒ์ product๋ฅผ ์ง์ ํ๊ณ , ํ๋ ์ด์์ ์ข ์์ฑ์ ์ ์ธํ ์ ์์ต๋๋ค.
About Modules
Swift๋ ์ฝ๋๋ฅผ ๋ชจ๋๋ก ๊ตฌ์ฑํฉ๋๋ค. ๊ฐ ๋ชจ๋์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ๊ณ ํด๋น ๋ชจ๋ ์ธ๋ถ์์ ํด๋น ์ฝ๋์ ์ด๋ค ๋ถ๋ถ์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ์ ๊ทผ ์ ์ด๋ฅผ ์ ์ฉํฉ๋๋ค.
ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์ฝ๋๋ฅผ ๋จ์ผ ๋ชจ๋์ ํฌํจํ ์๋ ์๊ณ , ๋ค๋ฅธ ๋ชจ๋์ dependencies๋ก import ํ ์๋ ์์ต๋๋ค. OS X์ Darwin์ด๋ Linux์ GLibc์ ๊ฐ์ด ์์คํ ์์ ์ ๊ณตํ๋ ์์์ ๋ชจ๋์ ์ ์ธํ๊ณ , ๋๋ถ๋ถ์ dependencies๋ ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ๋น๋ํด์ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฝ๋๋ฅผ ๋ณ๋์ ๋ชจ๋๋ก ์ถ์ถํ๋ฉด ํด๋น ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด, ๋คํธ์ํฌ ์์ฒญ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ชจ๋์ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ ๊ฐ์ ๊ณต์ ํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋ ๋์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ชจ๋์ด ๋ฑ์ฅํ๋ฉด, ์ต์ํ์ ๋ณ๊ฒฝ๋ง์ผ๋ก ์ฝ๊ฒ ๊ณ ์ฒดํ ์ ์์ต๋๋ค. ๋ชจ๋ํ๋ฅผ ์์ฉํ๋ฉด, ๋์ค์ ๋ง์ฃผ์น๋ ๋ฌธ์ ํด๊ฒฐ์ ์ฝ๋งค์ด์ง ์๊ณ ๋น๋ฉดํ ๋ฌธ์ ์ ํฅ๋ฏธ๋ก์ด ์ธก๋ฉด์ ์ง์คํ ์ ์์ต๋๋ค.
Building Swift Modules
Swift Package Manager์ ๋น๋ ์์คํ ์ ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ์ดํดํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ํ์ผ ์์คํ ์์ ์์ค ์ฝ๋์ organization์ ์ฌ์ฉํ์ฌ ์๋ฏธ๋ฅผ ํ์ ํ๋ ๊ท์น ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ง๋ง, ์ด๋ฌํ ์ธ๋ถ ์ฌํญ์ ์์ ํ ์ฌ์ ์ํ๊ณ ์ปค์คํฐ๋ง์ด์งํ ์ ์์ต๋๋ค. ๊ฐ๋จํ ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
foo/Package.swift foo/Sources/main.swift์ฌ๊ธฐ์ Package.swift๋ ํจํค์ง์ ๋ํ metadata๋ฅผ ํฌํจํ๋ ๋งค๋ํ์คํธ ํ์ผ์ ๋๋ค.
foo ๋๋ ํ ๋ฆฌ์์ swift build ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด, Swift๋ foo๋ผ๊ณ ๋ถ๋ฆฌ๋ ์คํ ๊ฐ๋ฅํ ํ์ผ์ ๋น๋ํ ๊ฒ์ ๋๋ค.
ํจํค์ง ๊ด๋ฆฌ์์๊ฒ๋ ๋ชจ๋ ๊ฒ์ด ํจํค์ง์ด๋ฏ๋ก, Package.swift์ ๋๋ค. ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ํด์ ์ํํธ์จ์ด๋ฅผ ๋ ๋์ ์ธ์์ ๊ณต๊ฐํด์ผ ํ๋ค๋ ์๋ฏธ๋ ์๋๋ฉฐ, ๋ค๋ฅธ ์ฌ๋์ด ๋ณด๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ ๊ณณ์ ๊ฒ์ํ์ง ์๊ณ ๋ ์ฑ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ๋ ๋ง์ ์ฌ๋๋ค์ด ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๊ณ ๊ฒฐ์ ํ๋ค๋ฉด, ์์ค๋ ์ด๋ฏธ ๊ฒ์ํ ์ ์๋ ํํ๋ก ์ค๋น๋์ด์์ต๋๋ค. ํจํค์ง ๋งค๋์ ๋ ํน์ ๋ฐฐํฌ ํํ์ ๊ตฌ์ ๋ฐ์ง ์์ผ๋ฏ๋ก, ๊ฐ์ธ ํ๋ก์ ํธ, ์ํฌ ๊ทธ๋ฃน, ํ ๋๋ ํ์ฌ ๋ด์์ ๋๋ ์ ์ธ๊ณ์ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฌผ๋ก ํจํค์ง ๋งค๋์ ๋ ์์ฒด ๋น๋์ ์ฌ์ฉ๋๋ฏ๋ก ์์ฒด ์์ค ํ์ผ๋ ์ด๋ฌํ ๊ท์น์ ๋ฐ๋ผ ๋ฐฐ์น๋ฉ๋๋ค.
About Products
ํ๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ์คํ ํ์ผ์ product๋ก ๋น๋ํ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค๋ฅธ Swift ์ฝ๋์์ importํ ์ ์๋ ๋ชจ๋์ด ํฌํจ๋์ด์์ต๋๋ค. ์คํ ํ์ผ์ ์ด์์ฒด์ ์์ ์คํํ ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
About Dependencies
๋ชจ๋ ๊ฐ๋ฐ์ (์ข์ ์๋ฏธ๋ ๋์ ์๋ฏธ๋) ์ธ๋ถ ์ข ์์ฑ์ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ์ํ๋ฉ๋๋ค. ์ด๋ ์งง์ ์๊ฐ์ ๋ ๋ง์ ์์ ์ ์๋ฃํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ํ๋ก์ ํธ์ ์ข ์์ฑ์ ์ถ๊ฐํ๋ ๋ฐ๋ ๊ด๋ จ ์กฐ์ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
๋ํ๋์์ ๋ํ ์์ค ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ๋น๋ํ๋ ๊ฒ ์ธ์๋ ์ ์ฒด ๋ํ๋์ ๊ทธ๋ํ๊ฐ ๋ง์กฑ๋ ๋๊น์ง ํด๋น ๋ํ๋์ ์์ฒด์ ๋ํ๋์๋ ๋ค์ด๋ก๋ํ๊ณ ๋น๋ํด์ผ ํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ๋์ฑ ๋ณต์กํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ํ๋์๊ฐ ๋ฒ์ ์๊ตฌ์ฌํญ์ ์ง์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋์ผํ ๋ํ๋์๋ฅผ ๊ฐ๋ ๋ชจ๋์ ๋ฒ์ ์๊ตฌ์ฌํญ๊ณผ ์ผ์นํด์ผ ํ ์ ์์ต๋๋ค.
ํจํค์ง ๋งค๋์ ์ ์ญํ ์ ํ๋ก์ ํธ์ ๋ชจ๋ ๋ํ๋์๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ๊ตฌ์ถํ๋ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๊ณ ์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ๊ด๋ จ๋ ์กฐ์ ๋น์ฉ์ ์ต์ํํ๋ ๊ฒ์ ๋๋ค.
Depedencies๋ Package.swift ๋งค๋ํ์คํธ ํ์ผ์ ์ง์ ๋ฉ๋๋ค.
Dependency Hell
“Dependency Hell”์ ํ๋ก์ ํธ์ ํ์ํ ๋ํ๋์ ๊ทธ๋ํ๋ฅผ ์ถฉ์กฑํ ์ ์๋ ์ํฉ์ ๊ตฌ์ด์ฒด๋ก ํํํ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์๋๋ฆฌ์ค๋ฅผ ํด๊ฒฐํด์ผ ํ๋๋ฐ, ์ด๋ ๋ณดํต ์ด๋ ค์ด ์์ ์ ๋๋ค.
- ์ถฉ๋์ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์์ฒญํ์ง ์์ ์ต์ํ์ง ์์ ๋ํ๋์ (๋๋ ๋ํ๋์ ๋ด์์)์์ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ ํน์ฑ ์, 2๊ฐ์ ๋ํ๋์ ๊ทธ๋ํ๊ฐ ๋์ผํ ๊ฒฝ์ฐ๋ ๋๋ญ ๋๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ์ฌ์ฉ์ (์ข ์ข ํจํค์ง ์์ฑ์)๊ฐ ์ ๊ณตํ ์ ์๋ ๋์์ ํ์ ์ ์ด๊ธฐ ๋๋ฌธ์, ์ธํฐ๋ท ๊ฒ์์ด ๋ฌด์๋ฏธํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ข์ ํจํค์ง ๋งค๋์ ๋ ์ฒ์๋ถํฐ dependency hell์ ์ํ์ ์ต์ํํ๋๋ก ์ค๊ณ๋์ด์ผ ํ๋ฉฐ, ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ํํ๊ณ ์ฌ์ฉ์๊ฐ ์ต์ํ์ ๋ฌธ์ ๋ง์ผ๋ก ์๋๋ฆฌ์ค๋ฅผ ํด๊ฒฐํ ์ ์๋๋ก ๋๊ตฌ๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ํจํค์ง ๋งค๋์ ์ปค๋ฎค๋ํฐ ์ ์์์๋ ์ด๋ฌํ ์ง์ฅ์ ์ผ๋์ ๋๊ณ ์ด๋ป๊ฒ ๋ฐ๋ณต ์์ ์ ์ํํ ๊ฒ์ธ์ง์ ๋ํ ๊ฒ์ด ๋ด๊ฒจ์์ต๋๋ค.
๋ค์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ “dependency hell” ์๋๋ฆฌ์ค๋ค์ ๋๋ค.
- ๋ถ์ ์ ํ ๋ฒ์ ์ง์
- ํจํค์ง๊ฐ ๋ฐฐํฌ์ ๋ถ์ ์ ํ ๋ฒ์ ์ ์ง์ ํ ์ ์์ต๋๋ค.
- ํธํ๋์ง ์๋ major ๋ฒ์ ์๊ตฌ์ฌํญ
- ํจํค์ง์ ๋์ผํ ํจํค์ง์ ๋ํด ํธํ๋์ง ์๋ ๋ฒ์ ์๊ตฌ์ฌํญ์ ๊ฐ์ง ๋ํ๋์๊ฐ ์์ ์ ์์ต๋๋ค.
- ex) Foo๊ฐ Baz ๋ฒ์ ์ ์์กดํ๋ค๊ณ ๊ฐ์ ํ ๋, Foo๋ ~> 1.0 ๋ฒ์ ์ Baz์, Baz๋ ~> 2.0 Baz ๋ฒ์ ์ ์์กดํ ๊ฒฝ์ฐ, ๋ ์๊ตฌ ์ฌํญ์ ๋ชจ๋ ๋ง์กฑ์ํฌ ์ ์๋ Baz ๋ฒ์ ์ ์์ต๋๋ค. ์ด๋ฐ ์ํฉ์ ์ฌ๋ฌ ํจํค์ง๊ฐ ๊ณต์ ํ๋ ๋ํ๋์๊ฐ ์๋ก์ด major ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๊ณ , ๋ชจ๋ ํจํค์ง๊ฐ ๋ํ๋์๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ์ ์์ฃผ ๋ฐ์ํฉ๋๋ค.
- ํธํ๋์ง ์๋ minor ๋๋ update ๋ฒ์ ์๊ตฌ์ฌํญ
- ํจํค์ง์ ์๊ฒฉํ๊ฒ ์ง์ ๋ ๋ํ๋์๊ฐ ์์ด์ ๋ฒ์ ์๊ตฌ์ฌํญ์ด ๋ค๋ฅธ minor ๋๋ update ๋ฒ์ ๊ณผ ํธํ๋์ง ์์ ์ ์์ต๋๋ค.
- ex) Foo๊ฐ Baz ๋ฒ์ 2.0.1์ ์์กดํ๊ณ , Bar๋ Baz ๋ฒ์ 2.0.2์ ์์กดํ๋ ๊ฒฝ์ฐ, ๋ ์๊ตฌ์ฌํญ์ ๋ชจ๋ ์ถฉ์กฑํ ์ ์๋ Baz ๋ฒ์ ์ ์์ต๋๋ค. ์ด๋ ๋ํ๋์์ patch release์์ ํ๊ท๊ฐ ๋ฐ์ํ์ฌ ํจํค์ง๊ฐ ํด๋น ๋ํ๋์๋ฅผ ํน์ ๋ฒ์ ์ ์ ๊ทธ๋ ๊ฒฐ๊ณผ๋ก ๋ํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋ค์์คํ์ด์ค ์ถฉ๋
- ํจํค์ง์ ์ด๋ฆ์ด ๊ฐ์ ๋ํ๋์๊ฐ 2๊ฐ ์ด์ ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Person ํจํค์ง๋ ์ฌ๋์๊ฒ ์ฐํธ ์ฃผ์๋ฅผ ํ ๋นํ๋ ํ๋กํ ์ฝ์ ์ ์ํ๋ Addressable ํจํค์ง์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๊ณต์์ ์ผ๋ก ๋งํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ ์ ์ํ๋ Addressable ํจํค์ง์ ์์กดํฉ๋๋ค.
- ์์๋ ์ํํธ์จ์ด
- ํจํค์ง์ ์ฌ์ฉ์ฑ, ๋ณด์ ๋๋ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ๋ฒ๊ทธ๊ฐ ์๋ ๋ํ๋์๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ ๋จ์ํ ํจํค์ง ๋งค๋์ ์ ์ ์์ฑ ๋ฌธ์ ์ผ ์๋ ์๊ณ , ํจํค์ง์ ๋ํ ๊ธฐ๋์น์ ๋ํ ๋น๋์์ผ ์๋ ์์ต๋๋ค.
- ์ ์ญ ์ํ ์ถฉ๋
- ํจํค์ง์ ๋์ผํ ์ ์ญ ์ํ์ ๋ํ ๋ ์ ์ ๊ทผ ๊ถํ์ ๊ฐ์ง ๊ฒ์ผ๋ก ์ถ์ ๋๋ ๋ํ๋์๊ฐ 2๊ฐ ์ด์ ์์ ์ ์์ต๋๋ค.
- ex) ํ ํจํค์ง๊ฐ ํน์ ํ์ผ ๊ฒฝ๋ก์์ ์ฝ๋ ๋์, ํน์ ํ์ผ ๊ฒฝ๋ก์ ์ฐ๋ ๋ค๋ฅธ ํจํค์ง๋ฅผ ์์ฉํ์ง ๋ชปํ ์ ์์ต๋๋ค.
- ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋จ
- ์ฌ์ฉํ ์ ์๊ฒ ๋ ํจํค์ง์ ๋ํ ๋ํ๋์๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ ์์ค URL์ ์ ๊ทผํ ์ ์๊ฑฐ๋ ๊ด๋ฆฌ์๊ฐ ๊ฒ์๋ ๋ฒ์ ์ ์ญ์ ํ์ฌ ๋ฐ์ํ ์ ์์ต๋๋ค.
Reference
https://github.com/apple/swift-package-manager/blob/main/Documentation/README.md
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ