Module Stability๋ ๋ฌด์์ผ๊น? ๊ณต์๋ฌธ์๋ฅผ ํตํด ์์๋ณด์.
Module
Swift์์ Module์ ๋ฌด์์ ๋งํ ๊น? Swift๋ ์ ๊ทผ ์ ์ด์ ๊ธฐ์ค์ผ๋ก Module์ ์ฌ์ฉํ๋ค. ์ฝ๋ ๋ฐฐํฌ์ ๋จ์๋ก์จ import
ํค์๋๋ฅผ ํตํด ์ฌ์ฉํ๋ ๊ฒ๋ค์ด ๋ชจ๋ ๋ชจ๋์ด๋ค.
Xcode์์ buildํ ์ ์๋ ํ๊ฒ (App Bundle, Framework etc) ๋ค์ ๋ชจ๋ Swift์์ Module๋ก ์ทจ๊ธํ๋ค.
Module Stability
Compile Time์ ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ Swift๋ก ์์ฑ๋ Module(framework)๋ฅผ ์์ด ์ฌ์ฉํ ์ ์์
์ด์ ์ ๋ฐฐ์ด ABI Stability๋ Runtime์ ๊ด๋ จ๋ ๊ฒ๋ค์ด์๋ค. ์ฆ, ์ด๋ฏธ Compile์ด ์๋ฃ๋ binary file๋ค์ ๋ํด ํธํ์ด ๊ฐ๋ฅํ์ง์ ๋ํ ๋ด์ฉ์ด์๋ค. ์ด๋ฒ์๋ Compile์์ ํธํ๋๋ ๊ฐ๋ ์ ๋ํด ๋งํ๊ณ ์๋ค.
์๋ก ๋ค๋ฅธ Swift version์ด ์์ ๊ฒฝ์ฐ, compile์ ๋ด product์ Swift version๊ณผ ๋ง์ง ์๋ค๋ฉด, ๊ธฐ์กด์๋ ๋ค๋ฅธ library์ ์ฝ๋๋ฅผ migrationํ ๋ค์ compile์ด ๊ฐ๋ฅํ์๋ค. ํ์ง๋ง Module Stability๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉด์ ์ด์ Swift version์ผ๋ก ์์ฑ๋ module์ ์ดํ Swift version์์ ์ฝ์ ์ ์๋ค.
- Swift 5.0 ์ดํ
- Module์ interface๋ฅผ ์ ์ํ๋
.swiftmodule
format(์ผ์ข ์ header~~?~~)์ด compiler version์ ์์กด์ฑ์ ๊ฐ๋๋ค. - ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฒ์ ์ swift๋ก compile๋ module์ ์์ด์ linkํ ์ ์๋ค.
- Swift version์ด ์ฌ๋ผ๊ฐ ๋๋ง๋ค ๋ชจ๋ framework๋ฅผ ๋ค์ compile ํด์ผ ํ๋ค.
- Module์ interface๋ฅผ ์ ์ํ๋
- Swift 5.1์์ Module Stability ํ๋ณด๋จ
- Xcode > Build Settings > Build Options > Build Libraries For Distribution: Yes
.swiftinterface
๋ผ๋ ์๋ก์ด format์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋๊ฐ์ link ์ํ- compiler version์ ์์กด์ฑ์ ๊ฐ์ง ์์
Module Stability์ Trade-off
.swiftmodule | .swiftmoduleinterface |
---|---|
Compiled Module Format | Swift Module Interface |
Serialized, binary format | Textual listing of public API |
Internal compiler data structure | |
Changes between compiler version | Compatible across compiler versions |
โBuild Libraries For Distributionโ OFF | โBuild Libraries For Distributionโ ON |
Trade Off๊ฐ ์์ ์ ๋ฐ์ ์๋ค. ํด๋น ๊ธฐ๋ฅ์ Test๋ก ํ ๊ฒฝ์ฐ, ์ต์ ํ๋ณด๋ค๋ ์ ์ฐ์ฑ์ ์ด์ ์ด ๋ง์ถฐ์ง๊ฒ ๋๋ค๊ณ ํ๋ค.