본문 바로가기
Xcode/IOS

IOS) XCFramework로 쉽게 UniversalFramework 만들기

by 후르륵짭짭 2023. 4. 22.
728x90
반응형

** 관련 링크 **

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

 

Multiple commands produce error with XCFramework · Issue #10106 · CocoaPods/CocoaPods

I've read and understood the CONTRIBUTING guidelines and have done my best effort to follow. Report What did you do? Hello we started to use xcframework recently in our project . I am having an iss...

github.com

 

Lipo Framework 생성 방법 :

https://stackoverflow.com/questions/64568241/lipo-error-while-creating-universal-frameworks-in-xcode-12

 

Lipo Error while creating Universal frameworks in xcode 12

I am facing problem while making universal frameworks in xcode 12. following is the command that i ran:- lipo -create build/simulator/FrameworkName.framework/FrameworkName build/devices/FrameworkName.

stackoverflow.com

 

Shell Script : 

https://devconnected.com/how-to-copy-directory-on-linux/

 

https://m.blog.naver.com/cjh226/220997193796

 

Bash script - if statements

리눅스 운영체제 위에서 프로그램을 작성하고 실행하는 사람이라면, bash script를 활용할 줄 아는 것이 매...

blog.naver.com

 

Cocoapod Platform Framework 오류 해결을 위해 찾아 본거 (해결하고 싶다 ㅠㅠ ) : 

https://andresalla.com/en/cocoapods-how-to-deal-with-device-only-dependencies/

 

Cocoapods: how to deal with device-only dependencies - André Salla

This week I had to face a problem that I had been postponing for a long time. Since Apple released its first MacBook with M1 processors, we developers had to start thinking about creating simulator frameworks with arm64 architecture. That was the death sen

andresalla.com

 

https://github.com/CocoaPods/Xcodeproj/issues/503

 

How to add custom static library file .a to Link Binary With Libraries · Issue #503 · CocoaPods/Xcodeproj

I need to add a binary library with '.a' extension to Link Binary With Libraries in Build Phase as below I tried to use target.add_file_references but it doesn't work.It just add my .a file to Comp...

github.com

 

https://stackoverflow.com/questions/28944104/dynamically-link-binaries-with-library-in-xcode

 

Dynamically link binaries with library in xcode

To link binaries to you framework you can from build phase add your needed libraries to your project .. but what if I need to make some thing specific for example I need to customise my framework by

stackoverflow.com

 

https://www.telerik.com/blogs/how-to-use-a-third-party-framework-in-a-private-cocoapod

 

How to Use a Third Party Framework in a Private CocoaPod

See how to use Telerik UI for iOS in a private CocoaPod.

www.telerik.com

 

728x90
반응형

댓글