Library์ ๋ํด์๋ ์์๋ณด์๋ค. ๊ทธ๋ผ Framework๋ ๋ฌด์์ผ๊น?
Framework
Shared Resources(
dynamic shared library
, nib, image)๋ฅผ Package ํํ๋ก ๋ด๊ณ ์๋ ๋๋ ํ ๋ฆฌ
๋ํ์ ์ธ Framework๋ก๋ UIKit
, Foundation
๋ฑ์ด ์๋ค. import
๋ฅผ ํตํด์ Framework์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ฌ๊ธฐ๊น์ง๋ง ์ฝ์ผ๋ฉด library์ ๋น์ทํ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ ์ ์๋ค. ์ค์ ๋ก Framework๋ library + resources๋ผ ์๊ฐํด๋ ๋ฌด๋ฐฉํ๋ค. ํ์ง๋ง Resource๋ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฐฐํฌ์ ์์ด์ ๋ ๋ง์ด ํ์ฉ์ด ๊ฐ๋ฅํ๋ค. library์์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํจ์จ์ ๋ฆฌ์์ค ๊ด๋ฆฌ
- ์์ค์ฝ๋์ ๋๋ถ์ด ๋ฆฌ์์ค ์ญ์ ํจํค์งํ์ฌ ์ ๊ณต
- ์ฌ๋ฌ ๋ฒ์ ์ ๋์ผํ Bundle์ ํฌํจํ์ฌ ํ์ ํธํ์ฑ ์ง์
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ํ ๊ตฐ๋ฐ์์๋ง read-only ํํ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ผ ์ ์์
Bundle์ ํ ์ข ๋ฅ
์ด์ ์ Bundle์ ๋ํด์ ๊ณต๋ถํ์ ๋, ๊ฐ๋ฐ์๋ฅผ ์ํ Package๋ผ ํ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก Framework๋ ์ด ๋ถ๋ฅ์ ์ํ๋ค. ์์ค์ฝ๋ ๋ ๋ฒจ์์๋ NSBundle
, Bundle
ํด๋์ค๋ก ์ ๊ทผํ ์ ์๋ค. ๋ค๋ง ์ด์ ๋ ์คํํ๋ ํ๋ก์ ํธ ๋ด๋ถ Bundle์ ์ ๊ทผํด์ Resource๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ, Framework ๋ด๋ถ์ Resource๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ Custom Bundle์ ์ฌ์ฉํ์ฌ ์ ๊ทผํด์ผ ํ๋ค. (main Bundle์ด ์๋๋ ์๊ธฐ)
Not Opaque Data Type
์ด์ ๊ธ์์ Bundle์ Opaque Data Type์ด๋ผ ํ์๋ค. ์ฆ directory์ด์ง๋ง Finder์์ ์คํ ํ์ผ์ฒ๋ผ ์ทจ๊ธ๋จ์ ์๋ฏธํ๋ค.(Package์ ์๋ฏธ) Bundle์์ .app
์ ๊ฒฝ์ฐ finder์์ ์คํํ์ผ๋ก ์ธ์๋์ด ํด๋ฆญํ๋ฉด ์ฑ์ด ์คํ๋๋, โํจํค์ง ๋ด์ฉ ๋ณด๊ธฐโ๋ฅผ ํตํด ์ ๊ทผํ์ฌ ๋ด๋ถ ํ์ผ์ ๋ณผ ์ ์๋ค๊ณ ํ๋ค. ์ด๋ ๊ฒ finder์์ ๋๋ ํ ๋ฆฌ์ง๋ง ๋จ์ผ ํ์ผ์ฒ๋ผ ์ธ์ํ๋ ๊ฒ์ Opaque Data Type์ด๋ผ ํ๋๋ฐ, framework์ ๊ฒฝ์ฐ ์ผ๋ฐ ๋๋ ํ ๋ฆฌ๋ก ์ทจ๊ธ๋์ด Opaque Data Type์ด ์๋๋ค.
Framework์ ๊ตฌ์กฐ
Binary file
Framework ํ๋ก์ ํธ์ ์ด๋ฆ์ด ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๋งํ๋ค. Library์ ํน์ฑ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, Static ํน์ Dynamic library๋ฅผ ์ ํ ์ ์๋ค.
- Build Setting โ Mach-O Type์์ ์ค์ ํ ์ ์๋ค.
Header
Header ํด๋ ์์ ์์ฑ๋๋ ํ์ผ์, ํด๋น Framework์ ์ด๋ค file์ด ์๋๋์ ๋ฐ๋ผ ๋ค๋ฅธ ํ์ผ์ด ํฌํจ๋๋ค. ๋ง์ฝ Objective C ํ์ผ์ด ์์๋ค๋ฉด testFramework.h
ํ๋๋ง ์์ฑ๋๋ค. ํ์ง๋ง swift ํ์ผ๋ ์์๋ค๋ฉด, testFramework-Swift.h
์ญ์ ์์ฑ๋๋ค.
ํด๋น Framework์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ ๊ทผ ์ ์ด์๊ฐ ํ์ํ๋ค. Swift์ ๊ฒฝ์ฐ ์ ๊ทผ ์ ์ด ๊ท์น์ ๋ฐ๋ผ ์ธ๋ถ Framework์์ ์ฌ์ฉ๊ฐ๋ฅ ์ฌ๋ถ๊ฐ ์ ํด์ง๋ค. Objective-C์ ๊ฒฝ์ฐ ๊ด๋ จ header๋ฅผ public์ผ๋ก ์ ํํด์ฃผ์ด์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
modulemap
swift๋ code๋ฅผ module๋ก ์ ๋ฆฌํ๋ค. ๊ฐ module์ namespace๋ฅผ ์ง์ ํ๊ณ , ํด๋น ์ฝ๋์ ์ด๋ค ๋ถ๋ถ์ module ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํด ์ ๊ทผ ์ ์ด๋ฅผ ์ง์ ํ๋ค. (์์ header ์ค๋ช
) import
ํค์๋๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ๋ค์ด๋ค.
module ์ด์ ์ framework๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ header๋ฅผ ์ฝ๋๋ก ์ง์ ๊ฐ์ ธ์์ผ ํ๋ค. Xcode๋ด์์ framework์ binary๋ฅผ ์๋์ผ๋ก ์ฐ๊ฒฐํ๋ ์์
์ญ์ ์๊ตฌ๋์๋ค. #import
๋งคํฌ๋ก๋ ๋ง ๊ทธ๋๋ก ๋ชจ๋ ํด๊ฒฐ๋ ์ข
์์ฑ ๊ตฌ์กฐ๋ฅผ ์ฝ๋์ ๋ณต์ฌํ ํ ์ปดํ์ผ๋ฌ๊ฐ ๊ทธ ํฐ ์์ค ํ์ผ์ ์์
์ ํ๋ค. ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
- Macro ์ ์์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
- ํ Framework๋ฅผ ์ฝ๊ฒ ๋ง๊ฐํธ๋ฆด ์ ์์๋ค. (Macro ์ด๋ฆ ์ค์ฒฉ..)
์ด๋ฐ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ
์ผ๋ก ๋์จ ๊ฒ์ด modulemap์ด๋ค. module๊ณผ header์ ์ฐ๊ฒฐ๊ณ ๋ฆฌ ์ญํ ์ ํ๋ ํ์ผ๋ก, module์ ํฌํจ๋๋ header๊ฐ ๋ฌด์์ธ์ง ์ ์ํ๊ณ , ์ด๋ค implementation(.a
(static), .dylib
(dynamic))์ด module์ ํฌํจ๋๋์ง ์๋ ค์ฃผ๋ ํ์ผ์ด๋ค. ์๋์ ๊ฐ์ด ์๊ฒผ๋ค.