** 관련 링크 **
2022.11.27 - [Xcode/Swift - PlayGround] - PlayGround) Framework를 통해 모듈화 작업하기
2022.07.17 - [Xcode/IOS] - IOS)XCFramework로 통합 Framework Package를 만들어보자
안녕하세요. 후르륵짭짭입니다.
사내 프로젝트를 진행하다가 직면한 문제입니다 .
여러개의 팀에서 하나의 프로젝트를 작업하다 보니 프로젝트를 복사하고
링킹하는 작업을 통해서 프로젝트 마다 번들 아이디가 다릅니다.
그런데 이렇게 작업하는 환경에서 XCFramework를 추가하였는데,
XCFramework는 어떤 이유에서인지 잘은 모르겠으나 하나의 Framework를 링킹하는 작업을 하는 것 같습니다.
(확실한 이유를 알아봐야겠습니다.)
따라서 "Multiple commands produce error" 가 발생했습니다.
그런데 Universal Framework를 넣었을 때는 해당 오류가 발생안하더라구요.
이제 Universal Framework를 siwftmoudle 이런거 복사하지 않고 쉽게 만들 수 있게 되어
Universal Framework를 통해서 해당 문제를 해결 했습니다.
** XCframework로 쉽게 Univesal Framework 만들기 **
XCFramework를 arm64와 x86으로 생성하면 다음 처럼 구성이 되어 있을 겁니다 .
아래 순서대로 작업을 하면 쉽게 만들 수 있습니다.
1. ARM64 framework 복사하고 tbd 파일 삭제하기
2. 각각의 Framework의 exec 파일을 lipo로 생성하기
lipo -create ./XXX.xcframework/ios-arm64/XXX.framework/XXX ./XXX.xcframework/ios-x86_64-simulator/XXX.framework/XXX -output ./XXX
예를 들어 위와 같이 작성합니다 .
lipo create <Framework가 존재하는 Path> <Framework가 존재하는 Path> -output <생성 Frmaework Path>
여기서 주의 해야할 것은 마지막에 -output에 /XXX로 한거 처럼 이름을 꼭 붙여주세요!
3. 아키텍처 확인하기
그리고 마지막에 lipo -info를 통해서 적용된 아키텍처들을 확인해볼 수 있습니다.
lipo -info ./XXX.framework/XXX
4. 새로운 Exec 파일을 이제 복사한 Arm64 framework에 복사해서 넣주세요!
** 개인 취향 **
좀 더 쉽게 하기 위해서 프로젝트에 runScript를 생성해도 되고 Shell Script 파일을 만들어서 작업해주셔도 됩니다
rm -rf ./XXX.framework
cp -R ./XXX.xcframework/ios-arm64/XXX.framework ./
rm -rf ./XXX.framework/XXX.tbd
rm -rf ./XXX.framework/XXX
#Create Universal Framework with x86 and arm64
lipo -create ./XXX.xcframework/ios-arm64/XXX.framework/XXX ./XXX.xcframework/ios-x86_64-simulator/XXX.framework/XXX -output ./XXX
mv ./XXX ./XXX.framework
#print lipo framework Architectures
lipo -info ./XXX.framework/XXX
** 참고 사이트 **
Mutiple commands produce 에러 :
https://github.com/CocoaPods/CocoaPods/issues/10106
Lipo Framework 생성 방법 :
Shell Script :
https://devconnected.com/how-to-copy-directory-on-linux/
https://m.blog.naver.com/cjh226/220997193796
Cocoapod Platform Framework 오류 해결을 위해 찾아 본거 (해결하고 싶다 ㅠㅠ ) :
https://andresalla.com/en/cocoapods-how-to-deal-with-device-only-dependencies/
https://github.com/CocoaPods/Xcodeproj/issues/503
https://stackoverflow.com/questions/28944104/dynamically-link-binaries-with-library-in-xcode
https://www.telerik.com/blogs/how-to-use-a-third-party-framework-in-a-private-cocoapod
댓글