A. Umbrella Framework ๋ถ๊ฐ๋ฅ
Technical Note TN2435: Embedding Frameworks In An App
Umbrella framework : ํ๋ ์์ํฌ๊ฐ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ฅผ ํฌํจํ๋ ํํ. macOS์์๋ ๊ฐ๋ฅํ์ง๋ง ์ง์๋๋ ๊ตฌ์กฐ. iOS, watchOS, tvOS์์๋ ๋ถ๊ฐ๋ฅํจ. ๋ฐ๋ผ์ ํ๋ ์์ํฌ ์์ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ฅผ ๋ฃ์ง ๋ง๊ณ Embedding a framework ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํจ.
B. ์ผ๋ฐ 3rd party framework ํฌํจํ๋ ๋ฐฉ๋ฒ ์ ์ฒด ๊ณผ์
์๋ ๋จ๊ณ๋ framework project, test project, ๊ฐ๋ฐ workspace(framework project, test project๊ฐ ๋ค์ด์๋ ๊ฐ๋ฐํ๊ฒฝ)๊ฐ ๋ชจ๋ ์ธํ ๋์ด ์๋ค๋ ๊ฐ์ ํ์ ์์ฑํ์์ต๋๋ค.
- [optional] test project, framework project์ pod๊ณผ ๊ด๋ จ๋ ํ์ผ์ด ์๋ค๋ฉด ์๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํจ.
- pod์ด ์ค์น๋ ํ๋ก์ ํธ์์ cmd open
- pod deintegrate
- rm Podfile
- rm Podfile.lock
- framework project์์ cmd open → pod init
- 2๋ฒ์ผ๋ก ์์ฑ๋ Podfile์ ์ด๊ณ ์ข ์์ฑ ์ถ๊ฐ
- 2๋ฒ์ ์์น์์ ๋ค์ cmd open → pod update
- ๊ฐ๋ฐ workspace(framework project, test project๊ฐ ๋ค์ด์๋ ๊ฐ๋ฐํ๊ฒฝ)์์ project navigator ์ฐํด๋ฆญ ํ add files to “…” ์ ํ → ์ค์น๋ Pods ํด๋์ Pods.xcodeproj ํ์ผ ๋ฃ๊ธฐ
- framework project build
- test project build
C. ๊ฐ ๊ณผ์ ์์ธ - 1
[optional] test project, framework project์ pod๊ณผ ๊ด๋ จ๋ ํ์ผ์ด ์๋ค๋ฉด ์๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํจ.pod์ด ์ค์น๋ ํ๋ก์ ํธ์์ cmd open -> pod deintegrate -> rm Podfile -> rm Podfile.lock
framework project์์๋ง pod ์ด๊ธฐํ, ์ ๊ฑฐํ๋ ๊ณผ์ ์ ํด๋ ๋์ง๋ง ๊น๋ํ๊ฒ ์ญ์ ํ๊ณ ์์ํ๋๊ฒ ์ถฉ๋ ์ค๋ฅ๋ฅผ ํผํ๋ ๊ฒ ๊ฐ์์ framework project, test project ๋ชจ๋ ์ด๊ธฐํ
D. ๊ฐ ๊ณผ์ ์์ธ - 2, 3, 4
framework project์์ cmd open → pod init → 2๋ฒ์ผ๋ก ์์ฑ๋ Podfile์ ์ด๊ณ ์ข ์์ฑ ์ถ๊ฐ → 2๋ฒ์ ์์น์์ ๋ค์ cmd open → pod update
์ข ์์ฑ ์ถ๊ฐํ๋ ๋ถ๋ถ์ ์๋์ ๊ฐ์.
workspace 'workspace_์๋๊ฒฝ๋ก'
target 'test_ํ๋ก์ ํธ๋ช
' do
# Comment the next line if you don't want to use dynamic frameworks
# use_frameworks!
pod 'lib_์ด๋ฆ1'
pod 'lib_์ด๋ฆ2'
# Pods for PointHomeDummyProject
target 'framework_ํ๋ก์ ํธ๋ช
' do
xcodeproj 'framework_ํ๋ก์ ํธ_์๋๊ฒฝ๋ก'
pod 'lib_์ด๋ฆ1'
pod 'lib_์ด๋ฆ2'
end
end
- workspace_์๋๊ฒฝ๋ก : ๊ธฐ์กด์ ๋ง๋ค์ด๋ ์ํฌ์คํ์ด์ค์ ๊ฒฝ๋ก๋ฅผ cmd openํ ์์น๋ก๋ถํฐ ์๋ ๊ฒฝ๋ก๋ก ์ ์ด์ค
- test_ํ๋ก์ ํธ๋ช : ํ๋ ์์ํฌ๋ฅผ ํ ์คํธํ๋ ค๋ ํ๋ก์ ํธ์ ์ด๋ฆ์ ์ ์ด์ค
- lib_์ด๋ฆ : ์ข ์์ฑ์ ์ถ๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ
- framework_ํ๋ก์ ํธ๋ช : ๊ฐ๋ฐํ๋ ํ๋ ์์ํฌ์ ํ๋ก์ ํธ ์ด๋ฆ์ ์ ์ด์ค
- framework_ํ๋ก์ ํธ_์๋๊ฒฝ๋ก : ๊ฐ๋ฐํ๋ ํ๋ ์์ํฌ์ ํ๋ ์์ํฌ.xcodeproj ํ์ผ์ด ์๋ ๊ฒฝ๋ก๋ฅผ cmd openํ ์์น๋ก๋ถํฐ ์๋ ๊ฒฝ๋ก๋ก ์ ์ด์ค.
์ฌ์ฉํ ์์๋ ๋ค์๊ณผ ๊ฐ์.
<์๋ต>
E. ๊ฐ ๊ณผ์ ์์ธ - 5, 6, 7
๊ฐ๋ฐ workspace(framework project, test project๊ฐ ๋ค์ด์๋ ๊ฐ๋ฐํ๊ฒฝ)์์ project navigator ์ฐํด๋ฆญ ํ add files to “…” ์ ํ → ์ค์น๋ Pods ํด๋์ Pods.xcodeproj ํ์ผ ๋ฃ๊ธฐ→ framework project build → test project build
5๋ฒ ์ํํ๊ณ ๋๋ฉด workspace์๋ framework project, test project, pods project ์ธ ๊ฐ์ง๊ฐ ๋ชจ๋ ๋ค์ด์์ด์ผ ํจ.
F. ๋ฐ์ํ๋ ์๋ฌ
- workspace์์ test๋ฅผ ํ๊ธฐ ์ํด ๊ฐ๊ฐ ๋น๋๋ฅผ ํ๋ ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์๋ ๋ถ๋ถ์ ์ฐธ๊ณ ํ๋ฉด ๋จ.
- framework project → target → Build Settings → Library Search Paths, Framework Search Paths, Runpath Search Paths. ์ด ์ธ ๊ฐ์ง ํญ๋ชฉ ๋ณด๋ฉด ๋จ.
- ๋ชจ๋์ ์ฐพ์ง ๋ชปํ๋ค๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด Framework Search Paths, Library Search paths๋ฅผ ์ดํด๋ณด๊ณ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด Runpath Search Paths๊ฐ ์๋ชป ๋์ด์์ ์ ์์.
- ์๋ฎฌ๋ ์ดํฐ๋ก ๋๋ฆด ๋ Could not find module '๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ช
' for target 'x86_64-apple-ios-simulator'๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์๋ ์ฌํญ ์ฒดํฌ
- workspace์์ pods ํด๋ฆญ → Targets ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ → Build Settings → architecture ๊ฒ์ → Build Active Architectures Only๊ฐ Yes๋ก ๋์ด์๋์ง ๊ทธ๋ฆฌ๊ณ Excluded Architectures๊ฐ iOS simulator์ ๋ํด์๋ arm64๊ฐ ์ ์ธ๋์ด ์๋์ง ์ฒดํฌ ํด์ค์ผ ํจ. ์๋ ์ฌ์ง ์ฐธ๊ณ .
Z. ์ฐธ๊ณ ์๋ฃ
- How can you use cocoapod framework into another cocoapod created locally?
- How to add a framework inside another framework (Umbrella Framework)
- create xcframework · Issue #3580 · Alamofire/Alamofire
- Adding a third party framework inside a first party framework in Xcode
- Cocoapods for an existing multi-project workspace
'CS > iOS, Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] static framework to xcframework, cocoapod ๋ฐฐํฌ (0) | 2023.04.07 |
---|---|
[iOS] pod dependency trouble shooting (0) | 2023.04.07 |
[iOS] Framework์ ์ข ์์ฑ ์ถ๊ฐ ์ ์์ ํ๊ฒฝ ์ธํ (0) | 2023.04.06 |
[iOS] framework ์์ ํ๊ฒฝ ๋ง๋ค๊ธฐ (0) | 2023.04.06 |
[iOS] XCFramework build script (0) | 2023.04.06 |