Bundle
์คํ ๊ฐ๋ฅํ ์ฝ๋(executble code) + ๋ฆฌ์์ค (Resources)๋ฅผ ๊ฐ์ง ๊ณ์ธต
์ด๋ป๊ฒ ๋ณด๋ฉด ์ด ๊ฐ๋
์ ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ฐ๋
์ด๋ค. ๊ฒฐ๊ตญ Package๋ด๋ถ๋ Bundle๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์๋ค. ๋จ์ง, ์ด๋ค ์ฌ๋์ ์ํด์์ธ๊ฐ (์ผ๋ฐ ์ฌ์ฉ์, ๊ฐ๋ฐ์)์ ๋ฐ๋ผ ํด๋น ๋ณธ์ง์ด ๋ค๋ฅธ ๋จ์ด๋ก ๋ถ๋ฆฐ๋ค๊ณ ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. package
๋ผ๋ ๋จ์ด๋ ์ผ๋ฐ ์ฌ์ฉ์ ์ฌ์ฉ, finder๋ฅผ ์์ด๊ธฐ ์ํจ์ด๋ผ๋ ๋ชฉ์ ์ฑ์ ๊ฐ์ง ๋จ์ด์ด๊ณ , Bundle์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๊ฐ์ธ๋ ๋จ์๋ก ๋ถ๋ฆฌ์ด๋ค.
๊ฐ์ฅ ํํ ์๋ก Application์ ๋ง๋ ๋ค๊ณ ์๊ฐํด๋ณด๋ฉด, ์ต์ข
ํ๋ก๋ํธ๋ ์ฐ๋ฆฌ์ ์์ค์ฝ๋๊ฐ ์ปดํ์ผ๋์ด ์คํ ํ์ผ๋ก ๋ง๋ค์ด์ง๊ณ , ๊ทธ ์คํ ํ์ผ์ด ๊ฐ์ ธ๋ค๊ฐ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ค๋ก ๊ตฌ์ฑ๋๋ค. ๊ทธ๋์ Application์ Package
์ด์ Bundle
์ ํ ์์ด๋ค. ๋๋ถ๋ถ์ Bundle
์ Package
์ ์ผ์ข
์ด์ง๋ง, ๋ชจ๋ ๊ทธ๋ ์ง๋ ์๋ค. Framework
์ ๊ฒฝ์ฐ์๋ ๋ฐํ์ ์ฌ์ฉ ํน์ ๋งํฌ๋ฅผ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋จ์ผ ๋ฒ๋ค์ด์ง๋ง, ๋ด๋ถ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณผ ์ ์๋๋ก ๋ง์๋ ๋จ์ผ ํจํค์ง๋ ์๋๋ค. (์ ์์ ์๋ .framework๋ ์ค์ ์ ํ์ผ๋ก ๋นผ๋ ๊ฒฝ์ฐ๋ผ ๋ค๋ฆ, Product์ ์ผ์ข
์. ์ฌ๊ธฐ์ ๋งํ๋ ๊ฒ์ ๋
ผ๋ฆฌ์ ์ธ ๊ฐ๋
์ธ ๋ฏ)
Bundle
์ ๊ตฌ์กฐ๋ ๊ฐ๊ฐ์ ์ ํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ๋ค์ ๊ธ์์ ์์๋ณด๋๋ก ํ์.
Bundle Display Names
๋งฅ๋ถ์ ์ฌ์ ํ๊ธ๋ก ์ธ์ด ์ค์ ์ ํ๊ณ ์จ๋ณด๊ณ , ์์ด๋ก ์ธ์ด ์ค์ ์ ํ๊ณ ์จ๋ณด์๋ค. ๊ทธ๋ฌ๋ฉด, ๊ฐ์ ์ฑ์ด๋ผ๋ ํํ๋๋ ์ธ์ด๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ ๊ฒ ์ธ์ด์ ์๊ด์์ด Finder์ ๋ํ๋๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ ์ ์๋๋ฐ, ๊ทธ ๊ธฐ๋ฅ์ ๊ฐ๋ฅ์ผ ํ๋ ๊ฒ์ด Bundle Display Names
์ด๋ค.
Finder๋ ์ด๋ ๊ฒ Bundle์ด .app
์ธ ๊ฒฝ์ฐ ํ์ฅ์๋ฅผ ์จ๊ธด๋ค. ๋ํ ๋ง์ฝ localized display names
๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ, ํ์ฌ ์ธ์ด ์ค์ ๊ณผ ์ผ์นํ๋ ์ด๋ฆ์ ํ์ํ๋ค.
Advantages
์คํ ํ์ผ๊ณผ ๋ฆฌ์์ค๊ฐ ๋ฌถ์ธ ๋จ์๋ก์ ์๋ํ๊ธฐ ๋๋ฌธ์, ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์ฎ๊ธฐ๋ ๊ฒ ๋ง์ผ๋ก๋ ์ค์น ๋ฐ ์ฌ๋ฐฐ์น, ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ๋งฅ์ ๊ฒฝ์ฐ ๋๋๊น ํด์ ์ค์นํ๋ ๊ฒ์ ๋ง์ด ๋ณด์์ ๊ฒ์ด๋ค.
๋ ๋ฌถ์ ๋จ์๋ก ์์ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์์ ์ ์ํฅ์ ๋ ๋ฐ๋๋ค. ์ด๋ Bundle
์ด์ Package
์ธ Application์ ๊ดํ ์ค๋ช
์ธ ๊ฒ ๊ฐ๋ค.
Bundle๋ก ๋ฌถ์ด๊ฒ ๋๋ฉด์ ๋ค์ํ CPU ์ํคํ ์ณ์ ์ฃผ์ ๊ณต๊ฐ ์๊ตฌ์ฌํญ์ ๋ง์ถ ์ ์๋ค. ์ถํ์ ์์๋ณด๊ฒ ์ง๋ง ์ค์ ๋ก Apple์ AppStore์์ BitCode๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ๋๋ฐ์ด์ค์ ์ต์ ํ๋ Bundle(์ฌ๊ธฐ์๋ .ipa)์ ๋ง๋ ๋ค. (App Thinning)
NSBundle
๋์คํฌ์ ์๋ Bundle directory์ Resource์ Code์ ๋ํ ํํ
์ฆ, Bundle
์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ์ ๊ณต๋๋ ๊ฐ์ฒด์ด๋ค. ์๊ฐ์ ํด๋ณด์. ์ผ๋จ Bundle
์ ์ ํ์ ๋ฐ๋ผ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๋ค๊ณ ํ๋ค. ๊ทธ๋ผ ์ด๋ ๊ฒ Bundle
๋ก ์ ๊ณต๋๋ ๊ฒ์ ์ ๊ทผํด์ ์์
์ ํ๋ ค๋ฉด ์๋นํ ๋ณต์กํ ๊ฒ์ด๋ค. ์ด๋ฐ ๋ถ๋ถ์ NSBundle
์ด ํด๊ฒฐํด์ค๋ค.
NS
ํค์๋๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง Objective C๋ก ๋ง๋ค์ด์ง Foundation Class์ด๋ค. ๊ทธ๋ผ Objective C์์๋ง ์ธ ์ ์๋? ๊ทธ๋ ๋ค. Swift๋ ์ด๋ฅผ ์ง์ํ๋ ๊ฐ์ฒด๊ฐ ์๋ค. ๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๋ ์ฌ๊ธฐ์ ๋ฐ์ํ๋ค. ์ด๋
์์ ์ด๋ฆ์ด ๋ฐ๋์๋ค๋ ๊ฒ์ด๋ค!!!! swift 3๋ถํฐ!
Bundle (Swift)
ใ
ใ
ํํ ์ด๋ฆ์ด ํท๊ฐ๋ฆฌ๊ฒ ๋๊ฐ์ด ๋ฐ๋์ด ๋ฒ๋ ธ๋ค.. ์ฌํผ, Bundle
์ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
- ํน์ Bundle ๋๋ ํ ๋ฆฌ๋ฅผ ์ํ NSBundle ๊ฐ์ฒด ์ฌ์ฉ(ex: main bundle)
- NSBundle์ ๋ฉ์๋๋ฅผ ํตํด ํ์ํ ๋ฆฌ์์ค๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ค๊ธฐ(ex: Bundle.main.url(resource:extension:))
- ๋ค๋ฅธ ์์คํ API์ ๋ฆฌ์์ค๋ฅผ ํตํ ์ธํฐ๋ ์
์ ์๋ฟ์ง ์์ง๋ง, ์ฌ์ค ์ฐ๋ฆฌ๊ฐ image์์ ์ด๋ฏธ์ง๋ฅผ init(named:)
๋ก ๊ฐ์ ธ์ค๋ ํ์๊ฐ Bundle
๋ก ๊ฐ์ ธ์ค๋ ๊ฑฐ๋ค. ๋ฌผ๋ก ๋ช
์์ ์ผ๋ก Bundle์ ์ฌ์ฉํ์ง๋ ์์์ง๋ง. ๊ฒฐ๊ตญ ๋ด๋ถ Asset Catalog๋ผ๋ ๋ฒ๋ค์์ ๊ฐ์ ธ์ค๋ ๊ฑฐ๋๊น.
Main Bundle
ํ์ฌ ์คํ์ค์ธ ์ฝ๋๊ฐ ํฌํจํ๋ Bundle directory์ ์ ๊ทผํ ์ ์๊ฒ ๋์์ฃผ๋ bundle
๋ง์ด ์ฐธ ์ด์ํ๋ค.. ์์ ๊ฒฝ์ฐ directory์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ , ๋ค์ ๊ฒฝ์ฐ code level์์ ์ ๊ณตํ๋ API๋ผ ์ดํดํ๋ฉด ๋๊ฒ ๋ค. ๋ณดํต์ ์ด๋ฌํ ์ฉ๋๋ก Bundle
์ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ด๋ค.
open class Bundle : NSObject {
/* Methods for creating or retrieving bundle instances. */
open class var main: Bundle { get }
}
// Usage
Bundle.main
Usage Of Main Bundle
๊ทธ๋ผ ์ผ๋จ Bundle์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ด ํ๋ก์ ํธ์ Resource๋ฅผ ๋ฃ์ด์ผ ํ ๊ฒ์ด๋ค. ์ด์ ์๋ ๋งํ์ง๋ง, image ๊ฐ์ ๊ฒ์ ์ด๋ฏธ ์๊ฒ๋ชจ๋ฅด๊ฒ Bundle์ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํ๋ค. ๊ทธ๋ผ Resource์ค์ ์์ฃผ ํํ๊ฒ ์ฌ์ฉํ๋ image๋ถํฐ ์ถ๊ฐํด๋ณด์.
์ด๋ฏธ์ง๋ฅผ ๋๋๊ทธํด์ ํ๋ก์ ํธ์ ์ฌ๋ ค๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฐฝ์ด ๋ฌ๋ค. ํ์ธ์ ๋๋ฅด๊ฒ ๋๋ฉด ํ๋ก์ ํธ์ ๋ฆฌ์์ค๊ฐ ์ถ๊ฐ๋์๊ณ , ์ฑ ์ ์ญ์์ Main Bundle์ ํตํด ์ด๋ฏธ์ง์ ์ ๊ทผํ ์ ์๋ค.
Bundle.main.url(forResource: "imageName", withExtension: ".png")
Main Bundle์ด ๊ฐ๋ฆฌํค๋ ์์น
๊ทธ๋ฅ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋, Bundle.main
์ด๋ผ๋ ๋
์์ด ์ ๋ง ๋ด Bundle(or Package.. ๋๊ฒ ํท๊ฐ๋ฆฌ๋ค)๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋์ง ํ์ธํด๋ณด์! Bundle.main.bundleURL
์ ์ถ๋ ฅํ๋ฉด ์์๋ณผ ์ ์๋ค. ์ถ๋ ฅํ๊ฒ ๋๋ฉด ํ์ฌ ์คํํ๊ณ ์๋ ์๋ฎฌ๋ ์ดํฐ์ Hash String์ ํด๋ ๋ด๋ถ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ํด๋น String์ ๋ค์ ๊ฒฝ๋ก์์ ํ์ธ ๊ฐ๋ฅํ๋ค.
- Xcode โ Window โ Devices and Simulator โ ๋น๋ํ ๊ธฐ๊ธฐ ํด๋ฆญ โ identifier
/Users/userName/Library/Developer/CoreSimulator/Devices/...Hash String.../data/Containers/Bundle/Application/...Application Hash.../test.app
์ฐพ์๋ค ์๋! ๊ฒฐ๊ตญ Main Bundle์ ๋ด๊ฐ ์คํํ๊ณ ์๋ Target Bundle์ ๊ฐ๋ฆฌํค๊ณ ์์๋ค. ์ฌ๊ธฐ์ ์ต์ข
์ ์ผ๋ก ์์ฑ๋ test.app
์ Package
์ด์ Bundle
์ธ ๋๋ ํ ๋ฆฌ์ด๋ค.
Copy Resources To Bundle
๊ทธ๋ผ ์ด์ ์์๋ค. โ์ ํ๋ก์ ํธ์ ๊ฐ์ข ๋ฆฌ์์ค๋ฅผ ๋ค ๋๋ ค๋ฃ๊ณ , ์ด๊ฑธ๊ฐ์ง๊ณ ์ ์ต์ข ํ๋ก๋ํธ๋ฅผ ๋ง๋ค์ด ๋ด๋ ๊ฑฐ๊ตฌ๋!โ ๋ง๋ค. ๊ทธ๋ฌ๋ฉด Resources๋ค์ ์ธ์ Bundleํ ๋ ๊น? ๋ต์ Buildํ ๋์ด๋ค.
Build Phase์ ๊ฐ๋ฉด, Copy Bundle Resources
๋ผ๋ ํญ์ด ์๋ค. ์ฌ๊ธธ ๋ณด๋ฉด, ๋ด๊ฐ ๋ฐฉ๊ธ ์ถ๊ฐํ ์ด๋ฏธ์ง์ ์ฃผ์๊ฐ Reference๋์ด ์๋๊ฑธ ํ์ธํ ์ ์๋ค. ๋ณด๋ฉด Launch Screenํ๊ณ Asset Catalog ๋ฑ๋ฑ์ด ๋ค์ด ์๋ค. ์? Storyboard๋ Resource์ธ๊ฐ? ์ด๊ฑด ๋ค์ ๊ธ์ ์์๋ณด์..
๊ทธ๋ผ ๋ฐ๋๋ก ๋งํ๋ฉด, ์ฌ๊ธฐ์ ์ถ๊ฐ๊ฐ ์๋์ด ์์ผ๋ฉด Project Navigator(์ผ์ชฝ ํ์ผ๋ค ๋์ด๋ ๊ฑฐ)์ ์ถ๊ฐ๋์ด ์์ด๋ Bundleํ๊ฐ ์๋๋ค๋ ์๊ธฐ์ธ๊ฐ? ๊ทธ๋ ๋ค. ๊ทธ๋์ ์ ๊ทผํ์ ๋ ๊ฐ์ด nil
์ด ๋จ๊ฒ ๋๋ค.
Main Bundle Sub Directory
๋ง์ฝ์ image๋ฅผ ๋ฐฉ๊ธ ๋๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ทธ๋ฅ ์ต์์์ ์ถ๊ฐํ์ง ์๊ณ , ํด๋๋ก ๋ฌถ์ธ ์์ ๊ฐ์ ์น๊ตฌ๋ฅผ ์ถ๊ฐํ๋ค๊ณ ์๊ฐํด๋ณด์.
๊ทธ ๋ค์์ ์ด ๊ทธ๋ฃน์์ ์๋ ๋ฆฌ์์ค์ ์ ๊ทผํด์ผ ํ๋ค๊ณ ์๊ฐํด์ ๋ค์๊ณผ ๊ฐ์ API๋ฅผ ํ์ฉํ๋ค.
Bundle.main.url(forResource: "wired_egg", withExtension: "jpg", subdirectory: "groupName", localization: nil)
ํ์ง๋ง ์๋ฌด๊ฒ๋ ๋จ์ง ์์๋ค. ์คํ๋ ค ํด๋๊ฐ ๋ค ํ๋ ค์ Bundle์ ๋ค์ด๊ฐ ์์๋ค! ํด๋น ์ฝ๋๋ nil
์ ๋ฆฌํดํ๋ค.
๋ฆฌ์์ค ํ์ผ์ด ์ด๋ป๊ฒ ๋ค์ด๊ฐ๋์ง ๋ณด์๋๋ ๋ค ํ๋ ค์ ๋ค์ด๊ฐ๋ค! ๋ด๊ฐ ์ํ๋ ๊ฑด ์ด๊ฒ ์๋๋ค.
์ด๋ด ๋, Create Group ์ต์ ๋ง๊ณ , Create Folder Reference ์ต์ ์ ์ ํํ๋ฉด ๋๋ค.
๊ทธ๋ผ ํด๋ ์ฑ๋ก ๋ค์ด๊ฐ๋ฉด์, Reference๋ก Copy Bundle Resources์ ๋ค์ด๊ฐ๋ค.
ํจํค์ง ํด๋์๋ ๋ด ์์๋ค์ด ์์๊ฒ ๋ค์ด๊ฐ๋ค.