CS/iOS, Swift
[iOS] pod dependency trouble shooting
dongdong216
2023. 4. 7. 14:47
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 = true
end
기존과 달라진 점은 다음과 같음
- 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.