์์ํ๋ฉฐ
Swift ์์ DEBUG, RELEASE์ ๊ฐ์ ํ๋๊ทธ๋ฅผ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉํ๋ค๊ฐ ์ปค์คํ ํ๊ฒ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ด ์์๋ณด๋ Other Swift Flags์ Active Compilation Conditions ๊ฐ ๋์ค๋๋ฐ, ์ด์ ๋ํด ์์๋ณผ ๊ฒธ ์ ๋ฆฌํ๊ฒ ๋์์ต๋๋ค.
์ ์ฒ๋ฆฌ๊ธฐ Preprocessor
์ปดํ์ผ ์ ์ ์ฒ๋ฆฌ๋๋ ์์ ์ ์ ์ฒ๋ฆฌ๋ผ๊ณ ํฉ๋๋ค.
์ปดํ์ผ๋ฌ ์ ์ด๋ฌธ Compiler Control Statements
๊ทธ๋ฌ๋ Swift์์๋ ์ปดํ์ผ๋ฌ ์ ์ด๋ฌธ์ ์ฌ์ฉํ์ฌ ์ปดํ์ผ๋ฌ ๋์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. Swift์๋ ์กฐ๊ฑด๋ถ ์ปดํ์ผ ๋ธ๋ก, ๋ผ์ธ ์ ์ด ๋ฌธ, ์ปดํ์ผ ํ์ ์ง๋จ ๋ฌธ ๋ฑ ์ธ ๊ฐ์ง ์ปดํ์ผ๋ฌ ์ ์ด๋ฌธ์ด ์์ต๋๋ค.
# if : ์กฐ๊ฑด๋ถ ์ปดํ์ผ ๋ธ๋ก Conditional Compilation Block
๊ทธ๋ฌ๋ Swift ์์๋ ์ ์ฒ๋ฆฌ๋ผ๊ธฐ๋ณด๋ค๋ ์ ํํ๋ ์กฐ๊ฑด๋ถ ์ปดํ์ผ๋ธ๋ก์ด๋ผ๊ณ ๋ช ์๋ฉ๋๋ค.
์ปดํ์ผ ์กฐ๊ฑด์ ๋ฐ๋ผ์ ์ปดํ์ผ์ด ๋๋ ๊ฒ์ผ๋ก, ์ปดํ์ผ ์กฐ๊ฑด์ ํ๋์ผ ์๋ ์๊ณ ์ฌ๋ฌ ๊ฐ์ผ ์๋ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ ํ๋์ฉ ์กฐ๊ฑด์ ๊ฑธ ์๋ ์๊ณ
#if compiler(>=5)
print("Swift 5 ์ปดํ์ผ๋ฌ ์ด์์ผ๋ก ์ปดํ์ผ ๋์์ต๋๋ค.")
#endif
#if canImport(ModuleA)
print("ModuleA๊ฐ import๊ฐ ๊ฐ๋ฅํฉ๋๋ค.")
#endif
#if os(macOS) && swift(>5)
print("OS๊ฐ macOS์ด๊ณ Swift ๋ฒ์ ์ด 5 ์ด์์ผ ๊ฒฝ์ฐ ์คํ๋ฉ๋๋ค")
#endif
์ฌ๋ฌ๊ฐ์ ์กฐ๊ฑด์ ๊ฒ์ฌํ์ฌ ๋ถ๊ธฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
#if <#compilation condition 1#>
// ์กฐ๊ฑด 1์ด ์ฐธ์ผ ๊ฒฝ์ฐ ์คํ๋๋ ๋ฌธ์ฅ
#elseif <#compilation condition 2#>
// ์กฐ๊ฑด 2๊ฐ ์ฐธ์ผ ๊ฒฝ์ฐ ์คํ๋๋ ๋ฌธ์ฅ
#else
// ์กฐ๊ฑด 1,2๊ฐ ๋ชจ๋ ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ ์คํ๋๋ ๋ฌธ์ฅ
#endif
Active Compilation Conditions
์กฐ๊ฑด๋ถ ์ปดํ์ผ ํํ์์ ์ํํ๊ธฐ ์ํ ์ปดํ์ผ ์กฐ๊ฑด ๋ชฉ๋ก์ ๋๋ค.
Setting์์ ์ด๋ฆ์ SWIFT_ACTIVE_COMPILATION_CONDITIONS ๋ก ๋์ด์์ต๋๋ค.
1) Build Settings ์์ Custom Flags ๋๋ Active compilation์ ๊ฒ์ํ์ฌ Other Swift Flags์์ ์ปค์คํ ํ๋๊ทธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
2) ํด๋ฆญํ ๋ค์ +๋ฅผ ๋๋ฌ์ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
3) ์ด์ ์ฝ๋ ์์์ ์๋์ ๊ฐ์ด #If ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
#if DEBUG
print("DEBUG")
#elseif KIMDEE
print("ํด๋์
๋๋ค.")
#endif
Other Swift Flags
Swift ์ปดํ์ผ๋ฌ์ ์ ๋ฌ๋๋ ์ถ๊ฐ์ ์ธ ํ๋๊ทธ ๋ชฉ๋ก์ ๋๋ค.
Setting์์ ์ด๋ฆ์ OTHER_SWIFT_FLAGS ๋ก ๋์ด์์ต๋๋ค.
์ถ๊ฐ์ ์ธ ํ๋๊ทธ ๋ชฉ๋ก์ ๋ฐ๋์ ์ฌ์ฉํ ํ์๋ ์์ง๋ง ์ปค์คํ ํ๋๊ทธ๋ฅผ ๋ ์ ๊ตฌ์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ACTIVE COMPILATION CONDITIONS์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋์ผํฉ๋๋ค.
1) Build Settings ์์ Custom Flags๋ฅผ ๊ฒ์ํ์ฌ Other Swift Flags์์ ์ปค์คํ ํ๋๊ทธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
2) ๋จ, Active Compilation Conditions์ ๋ค๋ฅด๊ฒ ํ๋๊ทธ๋ฅผ ์ธ ๋ -D๋ฅผ ์์ ๋ถ์ฌ์ฃผ์ด์ผํฉ๋๋ค.
+ ๊ทธ ์ธ์ ํ์ฌ ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ๋ณด๋ค ์ค์ ์ ํ์ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ์, ์๋ฅผ ๋ค์ด ๊ธฐ์กด ํ๋๊ทธ๋ฅผ ๋์ฒดํ์ง ์๊ณ ์ปดํ์ผ๋ฌ์ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ ๊ฒฝ์ฐ, $(inherited) ํค์๋๋ฅผ ์ค์ ๊ฐ ์์ ๋ถ์ฌ์ค๋๋ค.
OTHER_SWIFT_FLAGS = $(inherited) -v
๋ง๋ฌด๋ฆฌ
์ฒ์ iOS ๊ฐ๋ฐํ์ ๋, ๋จ์ os๋ง ์ ์ฒ๋ฆฌ๋ฌธ์ ์ฌ์ฉํ๊ณ , DEBUG๋ชจ๋์ ๋ํด์๋ ๊ทธ๊ฑธ ๋ชฐ๋ผ์ ์ผ์ผํ ์ฃผ์์ฒ๋ฆฌํ๋ ์์ผ๋ก ํ๋๋ฐ์.
๊ทธ๋ ๊ฒ ์ฃผ์์ ๋ฃ์๋ค ๋บ๋ค ํ๋ค๋ณด๋ฉด ์ค์๋ ์์, ์ด๋ ์๊ฐ ๋๊ฒ ํท๊ฐ๋ฆฌ๊ณค ํ๋๋ฐ, ๋น์ ์๊ฒ ๋ ํ๋๊ทธ๋ฅผ ์ด์ ์ผ ์ ๋ฆฌํด๋ด ๋๋ค.
์ด์ Swift์ Macro๊ฐ ์๊ฐ ๋ ๊ฒ์ด ์๋ WWDC์๋๋ฐ์. ๋ค์์๋ Macro๋ฅผ ์ข ๋ ์ ํ์ฉํ๊ณ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์จ๋ณด๊ฒ ์ต๋๋ค.
๋ง์น๋ฉฐ
์ค๋๋ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด ๋๊ธ๋ก, ๋์์ด ๋์ จ๋ค๋ฉด ๊ณต๊ฐ ๋ถํ๋๋ฆฝ๋๋ค.
ํน์ ์์ ํ๊ฑฐ๋ ํผ๋๋ฐฑํ์ค ๋ด์ฉ ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ๋ถํ๋๋ฆฝ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
๐ ์ฐธ๊ณ ๋งํฌ
๋๊ธ