๋ฐ์ํ
๐ก Before You Read
CocoaPods ๊ณต์๋ฌธ์
https://cocoapods.org/
ํ์ฌ CocoaPods์์ ์ฌ์ฉํ ์ ์๋ Pods๋ค์ ์ข ๋ฅ์ ๋ฒ์ ๋ค์ ๋ชจ๋ ํ์ธํ ์ ์๊ณ Guides์์ ์ค์น ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋ฌธ์ผ๋ก ์์ธํ๊ฒ ํ์ธํ ์ ์๋ค.
CocoaPods(์ฝ์ฝ์ํ) ์ด๋?
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 79 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.
Swift์ Objectivc-C Cocoa ํ๋ก์ ํธ๋ฅผ ์ํ Dependency Manager(์์กด์ฑ ๊ด๋ฆฌ์, ํจํค์ง ๊ด๋ฆฌ์)์ด๋ค. 2020๋ 12์ ๊ธฐ์ค, 79,000๊ฐ ์ด์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด 3๋ฐฑ๋ง ๊ฐ์ ์ฑ๋ค์์ ์ฌ์ฉ๋๊ณ ์๋ค. ๊ณต์ ์ฌ์ดํธ ์ค๋ช ์ ์ํ๋ฉด, ์ฝ์ฝ์ํ์ ํตํด ํ๋ก์ ํธ๋ฅผ ์ฐ์ํ๊ฒ ํ์ฅํ ์ ์๋ค๊ณ ํ๋ค.
iOS ํ๋ก์ ํธ์์ ๋น ์ง ์ ์๋ CocoaPods!
์ฃผ๋ง์ ์ด์ฉํด ์ฌ์ฉํ๊ณ ์๋ Pods ์คํ๋ค์ ์ ๋๋ก ์ดํด๋ณผ ๊ฒธ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค.
INDEX
Xcode Project์ CocoaPods ์ฝ์ฝ์ํ ์ค์นํ๋ ๋ฐฉ๋ฒ
Podfile.lock ์์๋ณด๊ธฐ
Pod ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ
Pod Commands ์ข ๋ฅ (Pod Install / Update / Outdated)
Xcode Project์ CocoaPods ์ฝ์ฝ์ํ ์ค์นํ๋ ๋ฐฉ๋ฒ
Step1. Terminal์ ์ด์ด Xcode ํ์ผ์ด ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ๋ค.
Step2. Terminal์์ ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
CocoaPods ์ฝ์ฝ์ํ์ Ruby๋ก ๋ง๋ค์ด์ก๋๋ฐ, MacOS์ ๊ฒฝ์ฐ the default Ruby๊ฐ ์ด๋ฏธ ์ค์น๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๋ ์ค์น ์์ ์ด ํ์ํ์ง ์๋ค.
$ sudo gem install cocoapods // ์ค์น ๋!
Step3. Terminal์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํด Podfile์ ์์ฑํ๋ค.
Install ์์ฒด๋ ํด๋น ๋๋ ํ ๋ฆฌ์์ ํ์ง ์์๋ ๋์ง๋ง, pod init ์คํ์ ๊ผญ Xcode ํด๋น ๋๋ ํ ๋ฆฌ ์์น์์ ์งํํด์ผ ํ๋ค.
$ pod init // Podfile ์์ฑ์ ์ํ ๋ช
๋ น์ด
Step4. ์์ฑ๋ Podfile์ ์ด์ด ํ์ํ Pods์ ์ถ๊ฐํ๋ค!
[์ฐธ๊ณ ] Podfile Syntax Reference (Podfile ๋ฌธ๋ฒ)
https://guides.cocoapods.org/syntax/podfile.html#podfile
(1) Podfile ์ฌ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ์ง๋ง, ๊ฐ์ธ์ ์ผ๋ก vim์ด ํธํด์ vim์ ์ด์ฉํ๋ค. (nano, vi ๋ฑ ๋ฐฉ๋ฒ์ ๋ค์!)
$ vim podfile // Podfile์ Pods ์ถ๊ฐํ๊ธฐ
(2) vim์ผ๋ก ์ด๋ฉด ์๋์ฒ๋ผ ๊ธฐ๋ณธ Podfile์ด ๋ฐํ ๋ฐ 'I'๋ฅผ ๋๋ฌ Insert ๋ชจ๋๋ก ์์ ์ ํ๋ฉด ๋๋ค.
'*Tests' Project๋ฅผ ์์ฑํ์ง ์์๋ค๋ฉด ๊ธฐ๋ณธ Podfile์๋ stayHomeTests์ ๊ฐ์ Target์ด ์์ ๊ฒ์ด๋ค.
์์ฑ ํ์ ํฌ๊ฒ ์ฐ์ง ์๋๋ค๋ฉด Pod์ ๊ตณ์ด ์ถ๊ฐํ์ง ์์๋ ๋๋ค.
์ฒซ๋ฒ์งธ ์ค์ ์ง์ํ๋ ํ๋ซํผ์ ์ต์ ๋ฒ์ ์ ์ ์ผ๋ฉด ๋๋ค.
๊ธฐ๋ณธ podfile์ ์ด๋ฏธ ์ ํ์์ผ๋ ์ฃผ์(#)์ ๋นผ๊ณ ๋ฒ์ ๋ง ์์ ํ๋ฉด ๋๋ค.
platform :ios, '13.0' // SwiftUI์ Combine์ ์ต์ ๋ฒ์ ์ iOS 13.0์ด๋ค.
๊ทธ ์๋์๋ ํด๋น ์ฑ(target)์ ์ฌ์ฉํ pod ์ด๋ฆ๋ค์ ์ด๊ฑฐํ๋ฉด ๋๋ค.
target 'stayHome' do
pod '$PODNAME1'
pod '$PODNAME2'
pod '$PODNAME3'
end
(3) ์์ ์ด ์๋ฃ๋๋ฉด 'esc'๋ฅผ ๋๋ฌ Insert ๋ชจ๋์์ ๋์ค๊ณ , ':wq' (=์ ์ฅ ํ ์ข ๋ฃ)๋ฅผ ์์ฑํ ๋ค ์ํฐ๋ฅผ ์ณ์ ๋น ์ ธ๋์ค๋ฉด ๋๋ค.
ํ์์๋ ์ฃผ์์ด๋ ๊ธฐ์กด Podfile์ ์๋ comment๋ค์ ์ง์ฐ๊ณ ํ์ํ ๋ถ๋ถ๋ง ๋จ๊ฒจ๋์.
Step5. ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํด Xcode์ Podfile ์ Pods์ ์ค์นํ๋ค.
$ pod install
Pod installation complete! There are 2 dependencies from the Podfile and 2 total pods installed.
= ์ฑ๊ณต์ ์ผ๋ก ์ค์น๊ฐ ๋์ด๋ถ๋ ๋ค!
[!] Please close any current Xcode sessions and use `stayHome.xcworkspace` for this project from now on.
= ํ์ฌ Xcode๊ฐ ์ผ์ ธ ์๋ค๋ฉด ๋๊ณ , ์์ผ๋ก๋ stayHome.xcworkspace ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ผ!
๋๋! ๋๋ ํ ๋ฆฌ์ xcworkspace ํ์ฅ์์ ํ์ผ์ด ์๋กญ๊ฒ ์๊ฒจ๋ฌ๋ค!
์ด ํ์ผ์ ์ฐ๋ฆฌ๊ฐ Podfile์ ์ ์ด๋ Pods์ด ์ค์น๋์ด์์ผ๋ ์์ผ๋ก ์ด ํ์ผ๋ก ์์
์ ํ๋ฉด ๋๋ค.
๋! ํ ๋ฒ ์ญ์ฑ- ๋ฐ๋ผ ํด๋ณด๋ฉด ๊ฝค ์ฝ๋ค.
[์ฐธ๊ณ ] ๋ฐ๋๋ก Pod์ ์ญ์ ํ๊ณ ์ถ๋ค๋ฉด?
1. vim podfile ๋ก podfile ์ด๊ณ insert ๋ชจ๋ ์ผ๊ธฐ
2. ์ญ์ ํ๊ณ ์ถ์ pod ์ญ์ ํ :wq
3. pod install
- ์ญ์ ๋ -
Podfile.lock ์์๋ณด๊ธฐ
Pod์ Xcode์ ์ค์นํ๋ฉด (pod install) podfile.lock ํ์ผ๋ ํจ๊ป ์์ฑ์ด ๋ ๊ฑธ ๋ณผ ์ ์๋ค.
vim ์ผ๋ก ์ด์ด๋ณด๋ฉด ์๋์ฒ๋ผ ์์ฑ๋์ด ์๋๋ฐ pod ์ด๋ฆ ์์ ์ซ์๊ฐ ์จ์๋ ๊ฒ ๋ณด์ธ๋ค.
์ ์ถํ ์ ์๋ฏ์ด, ์ซ์๋ ๊ฐ Pod๋ค์ ๋ฒ์ ์ด๋ค.
Podfile.lock ํ์ผ์ ์ค์น๋ ๋ชจ๋ Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ฒ์ ์ snapshot ์ฒ๋ผ ๊ธฐ๋กํด ๊ด๋ฆฌํ๋ ํ์ผ์ด๋ค.
pod install์ ํ๊ฒ ๋๋ฉด, Podfile์ ์ ํ Pod๋ค์ Podfile.lock์ ์ ํ ๋ฒ์ ์ผ๋ก install์ด ๋๋ค.
ํ ๋จ์๋ก Project๋ฅผ ์งํํ ๋ ์๋ก์ Pods Version Sync๋ฅผ ๋ง์ถฐ์ฃผ๋ ์ค์ํ ์ญํ ์ ํ๋ค.
Q. Podfile์ ์์ฑํ ๋ ๋ฒ์ ์ ๋ฐ๋ก ์ ์ง ์์๋๋ฐ, Podfile.lock์๋ ์ด๋ป๊ฒ ๋ฒ์ ์ด ์ ํ์์ง?
A. ๋ฒ์ ์ ์๋ตํด์ Podfile์ ์์ฑํ๋ฉด, ์ต์ ๋ฒ์ ์ผ๋ก ์ค์น๋๋ค.
Q. ์คํธ, ๊ทธ๋ ๋ค๋ฉด ํน์ Pod์ ๋ฒ์ ์ ๊ณ ์ ํ๊ณ ์ถ์ผ๋ฉด Podfile.lock ๋ฌธ์๋ฅผ ์์ ํ๋ฉด ๋๊ฒ ๋ค?
A. ์ํค์ด! ํฐ์ผ๋ ์๋ฆฌ. Podfile์ ์์ ํด์ผ์ง!
Podfile.lock์ ํ์ฌ ํ๋ก์ ํธ์์ ์ฌ์ฉ ์ค์ธ Pod Version๋ค์ ๊ธฐ๋กํ Snapshot์ผ ๋ฟ, ๋ฒ์ ์ ๋ช
์ํ๊ณ ์ถ๋ค๋ฉด Podfile์ ์์ ํด์ผํ๋ค.
Q. ์ด๋ป๊ฒ?
A. ์ด๋ ๊ฒ!
Pod ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ
Step1. Podfile์ ์ด๊ณ , ๊ฐ Pod ์์ ๋ฒ์ ์ ์จ์ค๋ค.
ํ์ํ๋ค๋ฉด operator๋ ํจ๊ป ์จ์ค๋ค. ํ์ฌ ๋ฆด๋ฆฌ์ฆ ๋ latest ๋ฒ์ ์ ์ค์นํ๊ณ ์ถ๋ค๋ฉด ๊ตณ์ด ๋ฒ์ ๋ช ์๋ฅผ ํ์ง ์์๋ ๋๋ค.
[์ฐธ๊ณ ] Pod Versions Operators
https://guides.cocoapods.org/using/the-podfile.html
#์์
'> 0.1' // 0.1 ์ด๊ณผ version ์ค lastest version
'>= 0.1' // 0.1 ์ด์ version ์ค lastest version
'< 0.1' // 0.1 ๋ฏธ๋ง version ์ค lastest version
'<= 0.1' // 0.1 ์ดํ version ์ค lastest version
'= 0.1' // 0.1 version (์๋ต๊ฐ๋ฅ)
'~> 0.1.2' // 0.1.2 <= lastest version < 0.2.0
'~> 0.1' // 0.1 <= lastest version < 1.0
'~> 0' // 0 <= lastest version < 1.0
Step2. pod install์ ์คํํด Pod์ ์ค์นํ๊ณ , Podfile.lock์ ํ์ธํด๋ณธ๋ค.
Pod Commands ์ข ๋ฅ
1. $ pod install
- podfile์ ์ ํ pod์ podfile.lock์ version์ ๋ง์ถฐ ์ค์นํ๋ค. ์๋ก์ด ๋ฒ์ ์ด ๋์๋์ง๋ ์ฒดํฌํ์ง ์๋๋ค.
- ์ต์ด ์ค์น ์์๋ podfile.lock ํ์ผ์ด ์๊ธฐ ๋๋ฌธ์ podfile์ ๋ช
์๋์ด ์๋๋๋ก ์ค์นํ๋ค.
- Podfile์ ์์ ํ๋ฉด ๋ฐ๋์ pod update๊ฐ ์๋ pod install์ ์คํํด์ผ ํ๋ค.
2. $ pod update ({PodName})
- podfile.lock์ ์ ํ ๋ฒ์ ์ ๊ณ ๋ คํ์ง ์๊ณ , podfile์ ์์ฑํ ๋ฒ์ ์กฐ๊ฑด์ ๋ง์ถฐ ์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธ ํ๋ค.
- ์
๋ฐ์ดํธ๋๋ฉด ์๋์ผ๋ก podfile.lock๋ ์์ ๋๋ค.
- version์ ์
๋ฐ์ดํธ ํด์ผํ๋ ์ํฉ ์ธ์๋ ์ฐ์ง ์๋๋ค.
3. $ pod outdated
- pod update ์คํ ์, pod ๋ณ๋์ฌํญ๋ค์ ๋ฆฌ์คํธ์ ํด์ ์ฌ์ ์ ์๋ ค์ค๋ค.
'์ฝ์ฝ์'๊ฐ ์์ง ๋ฏ์ ๋ถ๋ค์๊ฒ ๋์์ด ๋๋ ๊ธ์ด์์ผ๋ฉด ํ๋ค.
์ ์ฐ๋์ง, ์ด๋ป๊ฒ ์ฐ๋์ง์ ๋ํด ์์ธํ ์๊ฒ๋๋ฉด
์ ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Pod)๋ค์ ์ตํ๋๋ฐ์ ๊ฝค ๋์์ด ๋ ๊ฒ์ด๋ค.
๋!
๋ฐ์ํ