opendoor_life

'๊ฐœ๋ฐœ์ž์˜ ์„ฑ์žฅ์ผ๊ธฐ'๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ?

Dev/iOS

Xcode :: CocoaPods(์ฝ”์ฝ”์•„ํŒŸ) ์„ค์น˜/์‚ญ์ œ ๋ฐ ์‚ฌ์šฉ๋ฒ• (Podfile ๋งŒ๋“ค๊ธฐ, Podfile ๋ฌธ๋ฒ•/๋ฒ„์ „๊ด€๋ฆฌ, Podfile.lock)

opendoorlife 2021. 6. 30. 11:26
๋ฐ˜์‘ํ˜•

 

๐Ÿ’ก 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)๋“ค์„ ์ตํžˆ๋Š”๋ฐ์— ๊ฝค ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

๋—!

 

 

 

๋ฐ˜์‘ํ˜•

'Dev > iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํŒ€ ์›Œํฌ์ƒต์„ ์œ„ํ•ด iPad ์•ฑ์„ ๋งŒ๋“ค์–ด๋ดค๋‹ค! (์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€, ํ˜ผ์ž ํž˜์œผ๋กœ ๋งŒ๋“ค์–ด๋ณธ ์†Œ์†Œํ•œ iOS ์•„์ดํŒจ๋“œ ์•ฑ ๊ฐœ๋ฐœ ์ด์•ผ๊ธฐ)  (1) 2022.11.21
RxSwift :: ์ค‘๋ณต ํด๋ฆญ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ Throttle vs Debounce ์ฐจ์ด์™€ ๊ฐœ๋…, ์‚ฌ์šฉ๋ฒ• ์•Œ์•„๋ณด๊ธฐ (iOS ๊ฐœ๋ฐœ)  (0) 2022.01.07
์ง„๋•€๋บ๋˜ iOS ๊ธด๊ธ‰ ์‹ฌ์‚ฌ ๋ฐฐํฌ ๊ฒฝํ—˜ ๊ณต์œ  (+) ์•ฑ์Šคํ† ์–ด ๋น ๋ฅธ ์•ฑ ์‹ฌ์‚ฌ ์š”์ฒญ ๋ฐฉ๋ฒ• (Apple AppStore Expedited Review), ์œ ๋ฃŒ ์•ฑ ์•ฝ๊ด€ ๋™์˜  (7) 2021.12.10
Xcode :: ์‹ค์ œ ๋””๋ฐ”์ด์Šค ๋นŒ๋“œ ์‹คํŒจ ํ•ด๊ฒฐ (Invalid code signature, inadequate entitlements or its profile has not been explicitly trusted by the user)  (0) 2021.03.18
Xcode ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ :: UI ๋…ธ๋ž€์ƒ‰์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฒ„๊ทธ ์ดˆ๊ฐ„๋‹จ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• (Simulator with Yellow Navigation Bar, Status Bar, Tool Bar, Dock, Alert Popup)  (0) 2021.01.21