1. CPU Architecture
- ์์ดํฐ์ ๊ธฐ์ข ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ํคํ ์ฒ์ CPU๋ฅผ ์ฌ์ฉํจ.
- ๋น๋๋ฅผ ํ๋ฉด Execute file์ด ์์ฑ๋๊ณ ์ด ํ์ผ์ CPU์์ ์ฝ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ง๋ ์ํคํ ์ฒ ์์ฑ์ด ํ์ํจ.
- ๊ธฐ์ข
๋ณ ์ํคํ
์ฒ
- armv7 : ~ iPhone 5s
- arm64 : iPhone 5s ~
- x86_64 : 64bit ๊ธฐ๊ธฐ์ ๋์ํ๋ simulator, mac
- ์ฐ๋ฆฌ๋ iOS 13๋ถํฐ ์์ํ๋ฏ๋ก 13 ๋ฒ์ ์ iPhone SE, 6s๋ถํฐ ์์์ด๋ฏ๋ก arm64๋ก๋ง ๋น๋ํ๋ฉด ๋ ๊ฒ ๊ฐ์.
- Build Active Architecture Only
- Release : Yes < arm64
- Debug : No < simulator๋ ์ง์ํด์ผ ํจ.
2. Framework
- Static Framework
- ๊ตฌ์ฑ : source file + static lib + static linker
- static linker๋ฅผ ํตํด static lib์ ์ฝ๋๊ฐ execute file๋ก ๋ค์ด๊ฐ heap ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผ
- static lib์ด ๋ณต์ฌ๋๋ฏ๋ก static framework๋ฅผ ์ฌ๋ฌ ํ๋ ์์ํฌ์์ ์ฌ์ฉํ๋ฉด ์ฝ๋ ์ค๋ณต ๋ฐ์
- ์ฅ์ : ๋ฐํ์ ์๋๊ฐ ๋น ๋ฆ, inline ๊ฐ๋
- ๋จ์ : ๋ฉ๋ชจ๋ฆฌ ๋ง์ด ์ฌ์ฉ, ์ฌ๋ฌ ๋ชจ๋์์ ๋์ผํ static lib์ ์ํฌํธํ๋ฉด ๊ทธ ํ์๋งํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ณต์ฌ๋๊ธฐ ๋๋ฌธ์ app size ์ธก๋ฉด์์์ ์ฉ๋ ๋์ด๋๊ฒ ๋จ, ์ปดํ์ผ ์๋ ์ค๋ ๊ฑธ๋ฆผ
- Dynamic Framework
- ๊ตฌ์ฑ : source file + dynamic lib references + dynamic lib + static linker
- ํ์ผ์ด ์๋ ์ฃผ์๋ฅผ execute file์ ์ ์ฅํ๊ณ static linker๋ฅผ ํตํด์ stack์ผ๋ก ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ ํํ
- ์ฃผ์ ์ ๋ณด๋ค๋ง heap์ ์์ฃผ (์คํํฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๊ฐ ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผ)
- ์ฅ์ : ์ปดํ์ผ ์๋๊ฐ ์๋์ ์ผ๋ก ๋น ๋ฅด๊ณ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ฌ์ฉ
- ๋จ์ : ๋ฐํ์ ์๋๊ฐ ๋๋ฆผ(์๋ ๋ฐํ์์ ํ๋ ์์ํฌ๋ฅผ ๋ก๋ํ๊ธฐ ๋๋ฌธ)
3. embeded ์ค์
- dynamic lib์ ๊ฒฝ์ฐ Targets > General > Frameworks, Libraries, and Embedded Content์ ๊ฐ ํญ๋ชฉ์ ๋ํด Do Not Embeded๋ก ์ค์ ํ๋ฉด ์ ๋จ. ์๋ dynamic lib๋ค์ ๋์ ์ผ๋ก ๋ฐํ์์ ๋ก๋ฉ๋๊ธฐ ๋๋ฌธ์ embeded ๋ ํํ๋ก ์ฌ์ฉํด์ผ ํจ.
- static lib์ ๋ ๊ฐ์ง๋ก ๋๋๊ฒ ๋จ. ๋น๋ํ ๋ ์ด๋ฏธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด ์ฝ๋๋ค์ด ๋ณต์ฌ๋๋ ํํ์ด๋ฏ๋ก do not embedํด๋ ์๊ด์ด ์์ง๋ง! ๋ฆฌ์์ค ๋ฒ๋ค์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ embeded ๋ฐฉ์์ผ๋ก ์ ํํด์ผ ํจ. embeded ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ฝ๋ ๋ณต์ฌ๋ณธ์ด ๋ ๊ฐ ์๊น. ํ๋๋ ๋น๋ ์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ importํ์ฌ ์ฌ์ฉํ๋ ๊ณณ์์ ํ ๋ฒ ๋ณต์ฌ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ํจํค์ง ๋ด์ ํ๋ ์์ํฌ ํํ๋ก ํ๋ ๋ ์กด์ฌํจ.
4. XCFramework ?
- ๊ธฐ์กด์ fat framework (x86_64 + armv7 + arm64) ํํ๋ ํ๋์ ํ๋ ์์ํฌ ์์ ๋ชจ๋ ๋น๋ ์ํคํ
์ฒ๊ฐ ๋ค์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฉ๋๋ ์ปค์ง๊ณ ๋ถํ์ํ ์์
๋ ๋ค์ด๊ฐ
- ์ฝ๊ฐ ๋ค๋ฅธ ์๊ฒฌ์ ๋๋ฆฌ์๋ฉด fat framework ์์ ์ฉ๋์ด ํฐ ๋ฌธ์ ๋ xcframework๋ ๋๊ฐ์ด ๊ฐ์ง๊ณ ์์ต๋๋ค.
fat framework๋ก ๋น๋ํ๋๋ผ๋ ๋น๋ํ์์ ํ์ํ ์ํคํ ์ณ ๋ฐ์ด๋๋ฆฌ๋ง ์ถ์ถํ์ฌ ๋น๋ํ๊ธฐ ๋๋ฌธ์ ๋จ์ ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค.
๊ธฐ์กด์๋ fat ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋์ ํ์ผ์์๋ armv7, arm64๋ iOS์ฉ, x86(i386), x86_64๋ macOS์ฉ์ผ๋ก ๊ตฌ๋ถ์ด ๋์์ต๋๋ค.
๊ธฐ์กด์๋ ํ๋์ ํ์ผ์ด์๊ณ , iOS์ฉ๊ณผ ์๋ฎฌ๋ ์ดํฐ์ฉ ํ์ผ์ด ๋ณ๋๋ก ์กด์ฌํ๋ ๊ฒ์ ์๋์์ต๋๋ค.
(๋ณ๋๋ก ์กด์ฌํ ๊ฒฝ์ฐ iOS ๋๋ฐ์ด์ค์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ x86, x86_64๊ฐ ํฌํจ๋์ง ์์์ต๋๋ค.)
xcframework๊ฐ ๋์จ ๋ฐฐ๊ฒฝ์ ์ค๋ฆฌ์ฝ ๊ธฐ๋ฐ์ ๋งฅ ์ถ์์ ๊ด๋ จ์ด ์์ต๋๋ค.
์ค๋ฆฌ์ฝ ๊ธฐ๋ฐ์ ๋งฅ์ด ์ถ์๋๋ฉด์ arm64 ์ํคํ ์ณ๊ฐ iOS์ ์๋ก ๊ฒน์น๊ธฐ ๋๋ฌธ์ ํ๋์ fat ํ์ผ๋ก ๋ง๋ค์ง ๋ชปํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ฝ๊ฐ ๋ค๋ฅธ ์๊ฒฌ์ ๋๋ฆฌ์๋ฉด fat framework ์์ ์ฉ๋์ด ํฐ ๋ฌธ์ ๋ xcframework๋ ๋๊ฐ์ด ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๋ฐ๋ฉด XCFramework๋ ๊ฐ๊ฐ์ ์ํคํ ์ฒ๋ฅผ ๋ถ๋ฆฌํจ.
5. XCFramework ๊ตฌํํ๊ธฐ
- XCode์์ create > Framework๋ก ํ๋ ์์ํฌ ํ๋ก์ ํธ ์์ฑ
- ๋ง๋ค์ด์ง ํ๋ก์ ํธ ์ค์
- Targets > Build Settings > Build Options > Build Libraries for Distribution > Yes
- Targets > Build Settings > Linking > Mach-O Type > ์ํ๋ ๋์ /์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ค์
- Targest > Signing & Capabilities > Automatically manage signing ์ฒดํฌ ํด์ , Bundle Identifier ์ง์ฐ๊ณ ์ํฐ
- ๋ง๋ค ํจ์ ๋ง๋ ํ cmd ์ฐฝ์์ ๋ด ํ๋ก์ ํธ ์์น๋ก ์ด๋
- ์๋ ์ฝ๋ ์ธ ๊ฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฐ๊ฐ ์คํํด์ค. ์ฒซ ๋ฒ์งธ๋ archiving์ ํ์ฌ ์๋ฎฌ๋ ์ดํฐ์ฉ ๋ฐ์ด๋๋ฆฌ ํ์ผ(.xcarchive)๋ฅผ ๋ง๋ ๊ฒ์ด๊ณ ๋ ๋ฒ์งธ๋ ์ค์ ์์ดํฐ์ฉ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๋ง์ง๋ง์ ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ค์ ํฉ์ณ์ ํ๋์ XCFramework๋ก ๋ฌถ์ ๊ฒ์.
// simulator
xcodebuild archive -scheme ํ๋ก์ ํธ๋ช
\
-archivePath './build/iphone-simulator.xcarchive' \
-sdk iphonesimulator \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
// iphone os
xcodebuild archive -scheme ํ๋ก์ ํธ๋ช
\
-archivePath './build/iphone.xcarchive' \
-sdk iphoneos \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
// xcframework
xcodebuild -create-xcframework \
-framework "./build/iphone.xcarchive/Products/Library/Frameworks/ํ๋ก์ ํธ๋ช
.framework" \
-framework "./build/iphone-simulator.xcarchive/Products/Library/Frameworks/ํ๋ก์ ํธ๋ช
.framework" \
-output "./xcframework/๋ง๋ค_ํ๋ ์์ํฌ๋ช
.xcframework"
- ๋ง๋ค์ด์ง "./xcframework/ํ๋ ์์ํฌ๋ช .xcframework" ํ์ผ์ ๋ณต์ฌํด์ ํ ์คํธํ๊ธฐ ์ํ ํ๋ก์ ํธ์ Frameworks ํด๋๋ฅผ ์์ฑํ๊ณ ํ์์ ํ๋ ์์ํฌ๋ช .xcframework ํด๋๋ง ๋ฃ์ด์ค.
- xcode์๋ ๋ฃ์ด์ฃผ๊ณ ํ ์คํธ์ฉ ํ๋ก์ ํธ > Targets > General > Frameworks, Libraries and Embeded Content์์๋ ์ถ๊ฐํด์ค. Embeded & Sign์ผ๋ก ์ค์ ํด์ค. (์์ง dynamic framework์ด๊ธฐ ๋๋ฌธ)
6. static framework ๋ง๋ค๊ธฐ
- ์ ์ฝ๋๋ก ๋ง๋ ํ๋ ์์ํฌ ํ๋ก์ ํธ์์ Targets > Build Settings > Mach - O > static ์ผ๋ก ๋ณ๊ฒฝ.
7. ํ ๊ณณ์์ ์์ ํ๊ธฐ
- File > New > Workspace > ์ด๋ฆ ์ง์ > ์์ฑ (ํด๋๋ ํ๋ ์์ํฌ, ํ๋ ์์ํฌ๋ฅผ ํ ์คํธํ ํ๋ก์ ํธ ์๋ ํด๋์์ ์์ฑ)
- ํ๋ ์์ํฌ, ํ๋ ์์ํฌ๋ฅผ ํ ์คํธํ ํ๋ก์ ํธ ๋ชจ๋ ๋ซ๊ธฐ
- ๋ง๋ ์ํฌ์คํ์ด์ค ์ด๊ณ File > Add File to “workspace ์ด๋ฆ” > ํ๋ ์์ํฌ, ํ๋ ์์ํฌ๋ฅผ ํ ์คํธํ ํ๋ก์ ํธ์ .xcodeproj ํ์ผ ์ถ๊ฐ
- ๊ทธ ๋ค์ ์ผ์ชฝ hierarchy ์ฐฝ์์ ํ๋ ์์ํฌ๋ฅผ ํ ์คํธํ ํ๋ก์ ํธ ๋๋ฅด๊ณ Targets > General > Frameworks, Libraries, and Embeded Content์์ ํ๋ ์์ํฌ ์ถ๊ฐ ํ Do not Embed๋ก ์์ฑ ์ค์
- ํด๋น ์ฐฝ์ ์๋จ์์ Build Phases > Link Binary With Libraries > ํ๋ ์์ํฌ ์ถ๊ฐ
- framework ๋ด๋ถ์ .xib ํ์ผ์ด ์๋ค๋ฉด ๊ทธ๋๋ก ๋ณต์ฌํด์ ํ๋ ์์ํฌ๋ฅผ ํ ์คํธํ ํ๋ก์ ํธ์ ๋ฃ์ด์ฃผ๊ณ ํ๋๊ฒ ํจ์ฌ ๋์. ์ฐพ์๋ณด๋ ๋ฒ๋ค์ ๋ง๋ค์ด์ ๊ทธ๊ฑธ ๋ ํ๋ก์ ํธ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ฐ ์ ๋ ์ ๋์ต๋๋ค… ์ฐจ๋ผ๋ฆฌ xib ํ์ผ์ ์ต์ํํ๊ณ ์ฐ๋ํ ๋ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ๋์ ๊ฒ ๊ฐ์ต๋๋ค. (๋ฒ๋ค ๋ฐฉ์ : iOS static library)
8. code signing
framework์ ๊ฒฝ์ฐ signing ํด ์ค ํ์๊ฐ ์๋ ๊ฒ ๊ฐ์.
ํ๋ ์์ํฌ > Targets > Signing & Capabilities ์์ Automatically manage signing ์ฒดํฌ ํด์ ํ ํ Bundle Identifier ์ง์ฐ๊ณ Team์ none์ผ๋ก ๋ณ๊ฒฝ
https://github.com/Carthage/Carthage/issues/1378
'CS > iOS, Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [iOS] XCFramework build script (0) | 2023.04.06 |
|---|---|
| [iOS] XCFramework private repository์ cocoapod์ผ๋ก ๋ฐฐํฌํ๊ธฐ (0) | 2023.04.06 |
| [iOS] Private Repository์ CocoaPod Framework ์ฌ๋ฆฌ๊ธฐ (0) | 2023.04.06 |
| [iOS] xcode, bitbucket ์ฐ๋ (0) | 2023.02.14 |
| [iOS] IDFA ๊ฐ ๋ฐ์์ค๊ธฐ (0) | 2023.02.14 |