iOS

iOS) XCFramework를 생성해보자

kangwook 2022. 8. 20. 12:27

XCFramework란?

  • 애플의 프레임워크 포장을 위한 새로운 형식이라고 할 수 있겠다.
  • 개발자가 편리하게 하나의 번들에 여러 플랫폼 및 아키텍처에 대한 바이너리 라이브러리를 배포할 수 있다.
  • 더 이상 여러 아키텍처를 단일 바이너리로 병합할 필요가 없다!

XCFramework 구축 방법

  • Build Options에서 Build Libraries for Distribution 빌드 설정 → Yes
    • 모듈의 공개 API를 보여주는 모듈 인터페이스 파일을 만들어 준다.

1. 지원하려는 각 플랫폼에 대한 슬라이스를 보관(Archive) → 여러 환경에 맞는 프레임워크의 변형을 만드는 과정이라 할 수 있겠다.

  • ex) iOS, iOS Simulator, macOS ...
  • 이제 커맨드를 통해 archive를 빌드해보자. 생각보다 복잡한데 또 그렇지도 않다.
$ xcodebuild archive -scheme [Scheme 명] -archivePath [Archive 출력 경로] -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES

# ex) iOS, iOS Simulator, macOS
$ xcodebuild archive -scheme FlightKit -archivePath "./build/ios.xcarchive" -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES

$ xcodebuild archive -scheme FlightKit -archivePath "./build/ios_sim.xcarchive" -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES

$ xcodebuild archive -scheme FlightKit -archivePath "./build/mac.xcarchive" -sdk macosx SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
  • 요런식으로 빌드를하면 각 플랫폼에 맞는 archive가 생성이 된다.
  • xcode에서 지원하는 sdk목록은 다음과 같은데 여기서 알아서 잘 골라서 만들면 되겠다.
$ xcodebuild -showsdks

iOS SDKs: iOS 13.2                                          -sdk iphoneos13.2

iOS Simulator SDKs: Simulator - iOS 13.2                    -sdk iphonesimulator13.2

macOS SDKs: DriverKit 19.0                                  -sdk driverkit.macosx19.0

            macOS 10.15                                     -sdk macosx10.15

tvOS SDKs: tvOS 13.2                                        -sdk appletvos13.2

tvOS Simulator SDKs: Simulator - tvOS 13.2                  -sdk appletvsimulator13.2

watchOS SDKs: watchOS 6.1                                   -sdk watchos6.1

watchOS Simulator SDKs: Simulator - watchOS 6.1             -sdk watchsimulator6.1

2. 이렇게 생성한 모든 아카이브를 포함하는 XCFramework를 생성한다.

  • 우리는 위에서 iOS, iOS Simulator, macOS용 아카이브를 만들었으니 이들을 포함하는 xcframework를 만들어보도록 하자
$ xcodebuild -create-xcframework \
-framework "./build/ios.xcarchive/Products/Library/Frameworks/FlightKit.framework" \
-framework "./build/ios_sim.xcarchive/Products/Library/Frameworks/FlightKit.framework" \
-framework "./build/macos.xcarchive/Products/Library/Frameworks/FlightKit.framework" \
-output "./build/FlightKit.xcframework"
  • 요약하자면 Build Libraries for Distribution 빌드 설정을 활성화 하고, 프레임워크를 만든 후 xcodebuild -create-xcframework를 실행하여 통합 프레임워크로 만드는 명령어라고 할 수 있겠다.
  • 근데 M1은 항상 말이 많은게 가끔씩 충돌이 일어나는 경우가 있다고 한다ㅠ