Bundle - Foundation
์ฐธ๊ณ ์๋ฃ : developer.apple.com/documentation/foundation/bundle
์ฐพ์๋ณด๊ฒ ๋ ์ด์
Apple ์์ ์ ๊ณตํ๋ Food Tracker ์ฑ์ ๊ตฌํํ๋ ๋์ค @IBDesignable ์ ์ฌ์ฉํ์ฌ custom control์ Interface Builder๊ฐ ์คํํ ์์๊ฒ ํด์ฃผ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ Asset Catalog ์ ์ ์ฅํ ์ด๋ฏธ์ง๋ฅผ Interface Builder๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ถ๋ฌ์ฌ ์ ์๊ฒ ํ๋ ค๋ฉด Catalog์ ๋ฒ๋ค์ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ฃผ์ด์ผ ํ๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋์ UIImage(named:) ๋์ UIImage(named:in:compatibleWith:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ฌ๊ธฐ์ Bundle ์ ๊ฐ๋ ์ ๋ชฐ๋ผ์ ์ ๋ฆฌํ๊ฒ ๋์์ต๋๋ค.
Overview
๋์คํฌ ๋ด์ Bundle directory ์ ์ ์ฅ๋ ์ฝ๋์ ์์๋ค์ ๋ํ ํํ๋ฐฉ์ ์ ๋๋ค.
์ ํ์ ์ฑ, ํ๋ ์์ํฌ, ํ๋ฌ๊ทธ์ธ ๋ฑ์ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก Bundle ์ ์ฌ์ฉํฉ๋๋ค.
Bundle ์ ์์ ์ด ํฌํจํ๊ณ ์๋ ์์๋ค์ ์ ์ ์๋ ์๋ธ ๋๋ ํ ๋ฆฌ์ ์ ๋ฆฌํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Bundle ์ ๊ตฌ์กฐ๋ Bundle ์ ํ์ ์ด๋ ํ๋ซํผ์ ๋ฐ๋ผ ๋ค์ํฉ๋๋ค.
Bundle ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์, ์ด๋ค Bundle์ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๊ทธ Bundle์ ์์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๋ฒ๋ค์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋๊ฒ ๋ค์!
Bundle ์ค๋ธ์ ํธ๋ ์์ดํ ์ ์์น๋ฅผ ์์๋ด๊ณ , Bundle ์ ๊ตฌ์กฐ, ์ฌ์ฉ์ ์ค์ , localization ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๊ด๋ จ๋ ์์๋ค์ ์์๋ด๋๋ฐ ๋จ ํ๋์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ ํ ์คํ ํ์ผ ์ด๋ Bundle ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ Bundle ๋ด๋ถ ํน์ ๋ค๋ฅธ ๊ณณ์ ์์นํ ์๋ ค์ง Bundle ์ ์๋ ์์์ ์์น๋ฅผ ์์๋ผ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ๋๋ ํฐ๋ฆฌ๋ ํ์ผ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์๋ ํ์ผ๋ค์ ์ฐพ๋๋ฐ์๋ Bundle ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์ปจํ ์ด๋ ๋๋ ํฐ๋ฆฌ๊ฐ ๋ฌด์์ ๋งํ๋์ง ์์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค..
Bundle ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ํจํด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ์๋ํ Bundle ๋๋ ํฐ๋ฆฌ ์ Bundle ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ธฐ
Food Tracker ์์๋ Bundle.main ์ผ๋ก ์ฑ ๋ฒ๋ค ์ธ์คํด์ค๋ฅผ ์ป์์ต๋๋ค.
2. ํ์ํ ์์์ ์์น๋ฅผ ์ฐพ๊ฑฐ๋ ๋ถ๋ฌ์ค๊ธฐ ์ํ์ฌ Bundle ์ค๋ธ์ ํธ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ
3. ์์๊ณผ ์ํธ์์ฉํ๊ธฐ ์ํ์ฌ ๋ค๋ฅธ ์์คํ API ๋ฅผ ์ฌ์ฉํ๊ธฐ
Food Tracker์์๋ UIImage(named:in:compatibleWith:) ์ in ํ๋ผ๋ฏธํฐ์ Bundle์ ๋ฃ์์ต๋๋ค.
์์ฃผ ์ฌ์ฉ๋๋ ๋ช๋ช ์์๋ค์ Bundle ์ ํตํ์ง ์๊ณ ์์น๋ฅผ ์ฐพ์๋ด๊ฑฐ๋ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ฌ ๋, ์ฐ๋ฆฌ๋ Asset catalog ์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ UIImage(named:) ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ถ๋ฌ์ต๋๋ค.
FoodTracker์์๋ @IBDesinable์ ์ฌ์ฉํ custom control ์ Interface builder ๊ฐ ์ฌ๋ฐ๋ฅธ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๊ฒ ํ๊ธฐ ์ํด ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฌธ์์ด ์์์ ๋ถ๋ฌ์ฌ๋, .string ํ์ผ์ ๋ถ๋ฌ์ค๋ ๋์ ์ NSLocalizedString ์ ์ฌ์ฉํด ๊ฐ๋ณ ๋ฌธ์์ด์ ๋ถ๋ฌ์ต๋๋ค.
Finding and Opening a Bundle
์์์ด ์ด๋์๋์ง ์ฐพ๊ธฐ ์ ์, ์ฐ๋ฆฌ๋ ๋จผ์ ์ด๋ค Bundle์ด ์์์ ๊ฐ์ง๊ณ ์๋์ง ๋ฐ๋์ ๋ช ์ํด์ผ ํฉ๋๋ค.
Bundle ํด๋์ค๋ ๋ง์ ์์ฑ์๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, ๊ฐ์ฅ ์์ฃผ ์์ฉํ๋ ๊ฒ์ Bundle.main ์ ๋๋ค.
Main Bundle ์ ํ์ฌ ์คํ๋๊ณ ์๋ ์ฝ๋๋ฅผ ํฌํจํ๊ณ ์๋ Bundle ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ํ๋ ๋๋ค.
๊ทธ๋์ ์ด๋ค ์ฑ์ Main bundle ์ค๋ธ์ ํธ๋ ์ฑ๊ณผ ํจ๊ป ๋ธ๋ ค์ค๋ ์์๋ค์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํฉ๋๋ค.
๋ง์ฝ ์ฐ๋ฆฌ์ ์ฑ์ด ํ๋ฌ๊ทธ์ธ์ด๋ ํ๋ ์์ํฌ ํน์ ๋ค๋ฅธ ๋ฒ๋ค ์ฝํ ์ธ ์ ์ํธ์์ฉํ๋ค๋ฉด, Bundle ํด๋์ค์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ํญ์ ์๋ ค์ง URL ์ด๋ ๊ฒฝ๋ก๋ฅผ ํตํด์ Bundle ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ์ ์์ง๋ง, ๋ค๋ฅธ ๋ฉ์๋๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์๋ Bundle์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค.
์๋ฅผ ๋ค์ด ๋ง์ฝ ์ฐ๋ฆฌ์ ์ฑ์ ํ๋ ์์ํฌ์ ์ฐ๊ฒฐํ ๋, ์ฐ๋ฆฌ๋ ๊ทธ ํ๋ ์์ํฌ์ ์ ์๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ ํ๋ ์ ์ํฌ ๋ฒ๋ค์ ์ฐพ๊ธฐ ์ํด init(for:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
// Get the app's main bundle
let mainBundle = Bundle.main
// ํน์
let mainBundle = Bundle(for: type(of: self))
// Get the bundle containing the specified private class.
let myBundle = Bundle(for: NSClassFromString("MyPrivateClass")!)
Locating Resources in a Bundle
์ฐ๋ฆฌ๋ Bundle ์์ ์๋ ํน์ ์์์ ์์น๋ฅผ ์ป๊ธฐ ์ํด Bundle ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์์ ์ฐพ์๋, ์ฐ๋ฆฌ๋ ์์์ ์ด๋ฆ๊ณผ ์์์ ํ์ ์ ์ต์ํ์ผ๋ก ์ ๋ฌํฉ๋๋ค.
ํน์ ์๋ธ๋๋ ํฐ๋ฆฌ์ ์๋ ์์์ ๊ฒฝ์ฐ, ์ฐ๋ฆฌ๋ ๊ทธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ํ ์ง์ ํ ์ ์์ต๋๋ค.
์์์ ์์น๋ฅผ ์ฐพ์ ํ์๋, ๋ฒ๋ค ๋ฃจํด์ด ์ฐ๋ฆฌ๊ฐ ํ์ผ์ ์ด ์ ์๋๋ก๊ฒฝ๋ก ๋ฌธ์์ด์ด๋ URL ์ ๋ฐํํฉ๋๋ค.
Bundle ์ค๋ธ์ ํธ๊ฐ ์์์ ์ฐพ๋ ํจํด์ด ์์ต๋๋ค.
ํญ์ ์ธ์ด์ ์ข ์์ ์ด์ง ์์ Global resources ๋จผ์ ์ฐพ์์ ๋ฐํํฉ๋๋ค.
์ธ์ด๊ฐ ์ ํด์ ธ์๋ ์์์ .lproj ๋๋ ํฐ๋ฆฌ์ ์์นํฉ๋๋ค.
์ฑ๋ฅ์์ ์ด์ ๋ก Global ์ Localized ๊ฐ ์กด์ฌํ๋ค๋ฉด ํญ์ Global ์ ๋ฐํํ๋ฏ๋ก, ๊ฐ์ ์์์ ๋ํด ๋ ๊ฐ์ง ๋ฒ์ ์ ๋์์ ๋๋ฉด ์๋ฉ๋๋ค.
๋!
๋ค์ ๊ธ: