A. 지향하는 것
- third party lib를 사용하고 있는 framework를 xcframework로 build할 수 있어야 함.
- cocoapod에 배포할 때 이 xcframework가 의존하고 있는 종속성들을 자동으로 설치할 수 있어야 함.
B. 해결방안
2번은 너무 쉬웠음. 배포할 프레임워크의 podspec을 아래와 같이 작성하면 됨.
Pod::Spec.new do |s| s.name = "SampleFramework" s.version = "0.1.5" s.summary = "A brief description of XCFrameworkTest project." s.description = <<-DESC An extended description of XCFrameworkTest project. DESC s.homepage = "<https://github.com/유저명>" s.license = { :type => 'Copyright', :text => <<-LICENSE Copyright 2018 Permission is granted to... LICENSE } s.author = { '이름' => '이메일' } s.source = { :git => "깃 주소", :tag => s.version.to_s } s.vendored_frameworks = "SampleFramework.xcframework" s.dependency 'Alamofire' s.platform = :ios s.swift_version = "4.2" s.ios.deployment_target = '13.0' s.frameworks = 'UIKit', 'Foundation' s.static_framework = trueend
기존과 달라진 점은 다음과 같음
- s.dependency 'Alamofire' : 이 프레임워크가 의존하고 있는 종속성을 이 곳에 작성해주면 됨.
- s.frameworks = 'UIKit', 'Foundation' : 확실하게 필요한지 모름
- s.static_framework = true : 확실하게 필요한지 모름
1번 해결방안은 다음과 같음.
- xcframework를 만들기 위해 archive 빌드 시 -workspace 옵션을 주어야 함. 바뀐 배시에서 수행해야 될 코드는 아래와 같음.
- // simulator xcodebuild archive -scheme SampleFramework \\ -workspace SampleFramework.xcworkspace \\ -destination "generic/platform=iOS Simulator" \\ -archivePath './build/iphone-simulator.xcarchive' \\ -sdk iphonesimulator \\ VALID_ARCHS="i386 x86_64" \\ SKIP_INSTALL=NO \\ BUILD_LIBRARY_FOR_DISTRIBUTION=YES // iphone os xcodebuild archive -scheme SampleFramework \\ -workspace SampleFramework.xcworkspace \\ -destination "generic/platform=iOS" \\ -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/SampleFramework.framework" \\ -framework "./build/iphone-simulator.xcarchive/Products/Library/Frameworks/SampleFramework.framework" \\ -output "./SampleFramework.xcframework"
- code signing을 해주어야 함. (이건 엄밀히 따지면 배포된 xcframework를 설치할 때 문제가 발생하지 않기 위해 해줘야될 부분임)
- pod 종속성 설치할 때 dynamic으로 해주어야 함.
Z. 레퍼런스
- Issue with third party dependencies inside a XCFramework through SPM
- nam-sdk-ios/NAMSDK.podspec at main · naver/nam-sdk-ios → NAMSDK podspec. dependency, framework 참고. xcframework
- Specs/KakaoSDKCommon.podspec.json at master · CocoaPods/Specs → KakaoSDK podspec. dependency 실제로 alamofire 사용하고 있는 것 참고.
- Specs/KakaoOpenSDK.podspec.json at master · CocoaPods/Specs → KakaoSDK podspec.
- Kakao Developers → KakaoSDK guide
- Generate framework with grpc-swift fails · Issue #1391 · grpc/grpc-swift → workspace 옵션 넣어야 되는 것 참고
- Specs/Alamofire.podspec.json at master · CocoaPods/Specs → Alamofire podspec.
'CS > iOS, Swift' 카테고리의 다른 글
[iOS] Framework, Library RnD (0) | 2023.04.07 |
---|---|
[iOS] static framework to xcframework, cocoapod 배포 (0) | 2023.04.07 |
[iOS] 1st party framework에서 3rd party framework 사용 (0) | 2023.04.07 |
[iOS] Framework에 종속성 추가 시 작업환경 세팅 (0) | 2023.04.06 |
[iOS] framework 작업환경 만들기 (0) | 2023.04.06 |