본문 바로가기
Xcode/Swift - PlayGround

PlayGround) Framework 생성 모듈화 작업 #2

by 후르륵짭짭 2022. 12. 4.
728x90
반응형

대한민국 어딘가

안녕하세요. 후르륵짭짭입니다.

벌써 12월이네요 ㅋㅋㅋㅋㅋㅋ.

시간이 참 빨라요 ㅠ ㅠ. 내 나이도 점점 많아지고 후우,,,

회사에서 처음으로 제 능력에 대한 평가를 받았는데, 사실 만족하지는 못 했지만

1년 동안 그래도 많은 것을 시도해보고 배워가는 것은 많았던거 같아요.

회사는 저를 제 기대치 만큼 평가 하지 못 했지만 저는 제 자신에 좋은 평가를 줄 수 있어서 다행이에요.

이번에는 저번까지 해결하지 못 한 Framework 생성에 대한 내용을 담아 보려고 해요!

그리고 내가 모듈화를 시작하게 된 계기두요!

 

** 모듈화 작업을 시작하게 된 계기 **

사실, 이전 포스팅에도 도입부에 살짝 언급 했어요 ㅋㅋㅋ.

2022.11.27 - [Xcode/Swift - PlayGround] - PlayGround) Framework를 통해 모듈화 작업하기

 

PlayGround) Framework를 통해 모듈화 작업하기

안녕하세요. 후르륵짭짭입니다. 최근에 사내 업무를 진행 중 신규 장기 프로젝트를 진행 중인데, 메인 프로젝트에서는 Build 속도, Indexing 모두 너무 느려져서 빠르게 개발하기 어렵다고 판단! Fram

hururuek-chapchap.tistory.com

근데 좀 더 자세히 글을 작성해보려고 합니다.

사실 계기는 메인 프로젝트에서 작업하는데 너무 오래 걸리기 시작한 겁니다.

저희는 하나의 앱에 총 30명 정도의 인원이 투입되어 iOS앱을 개발하고 있어요.

그렇기 때문에 빌드 속도, Indexing을 개선한다 하더라도 앱 사이즈가 크다 보니깐 느려질 수 밖에 없습니다.

만약 프로젝트를 처음 받고 Build를 하면 최소 10분 이상은 걸리게 됩니다.

뿐만 아니라 Indexing까지 완벽하게 완성 시키려면 더 오래 걸려요.

따라서 모듈화 작업을 통해서 우리 팀의 로직 부분에 대한 개발에는 빠르게 진행 될 수 있었으면 좋겠다는 생각을 했어요.

 

메인 프로젝트에 사내 Util을 사용해야하기 때문에 View는 메인 프로젝트에서 개발을 하고

로직적인 부분은 Framework를 통해 관리하는게 좋다고 판단 했습니다. 

보통 로직이 80%이고 View가 20%를 차지하기 때문이에요.

 

** 모듈화로 작업하면 장단점 **

일단 Framework로 모듈화를 할 경우 장/단점이 있다고 생각합니다.

- 장점 - 

1 . 빌드 속도 + Indexing이 빨라져서 개발 속도가 정말 속편하게 빨라집니다.

2. 큰 프로젝트에서 역할에 대한 분리가 확실해 집니다. 

3. Unit Test 빌드 속도 및 개발 속도 및 개발 방식 빨라짐

 

- 단점 - 

1. 메인 프로젝트에 의존성이 필요한 부분이 있을 경우, 100% 분리하기 힘들다.

 => 욕심이기는 하지만 메인 프로젝트에 사용하는 Util이 있을 경우 이를 사용하기 쉽지 않습니다.

2. 호출부에 두번 개발을 해야한다.

 => 안정적인 검증을 위해서 Framework Test App에서 뿐만 아니라 Main App에서도 개발을 해줘야 합니다.

3. Main App에서 잘 작동하는지 추가적인 검증이 필요합니다.

 

** XCFramework 내부 코드 공개로 변경하는 방법 **

https://stackoverflow.com/questions/74590076/how-to-make-visible-internal-source-code-of-xcframework

 

How to make visible internal source code of XCFramework

We are developing a framework for work efficiency. The framework has a dependency on RxSwift. So, App has RxSwift in the form of a Dynamic Framework. So I created XCFramework. But if I create a fra...

stackoverflow.com

예전에 내부 소스코드를 공개로 만들고는 싶은데 방법을 몰라서 StackOverFlow에 글을 올렸습니다.

그런데 방법은 Universal Framework와 Xcframework 생성한 방법을 합치면 됐습니다. ㅋㅋㅋㅋ

######################
# Build Frameworks
######################

xcodebuild -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -sdk iphonesimulator -configuration ${CONFIGURATION} OBJROOT="${OBJROOT}/DependentBuilds" CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator 2>&1

xcodebuild -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -sdk iphoneos -configuration ${CONFIGURATION} OBJROOT="${OBJROOT}/DependentBuilds" CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos 2>&1


######################
# On Release, copy the result to release directory
######################

xcodebuild -create-xcframework -framework ${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework -framework ${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework -output ${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.xcframework


open "${BUILD_DIR}"

( 이렇게 간단한 방법이 있었는데,,, 이걸로 몇시간을 ㅠ ㅠ )

이전에 글을 포스팅 했을 때 Archive 파일로 만든 다음 Archive 파일 내부의 Framework를 찾아서 XcFramework를 생성 했습니다.

https://stackoverflow.com/a/23253165/20580592

위의 내용을 포면 Build를 했을 경우 project를 수행하기 위해 소스 코드의 컴파일 입니다.

반면 Archive는 Package 입니다. 따라서 내부 소스 코드가 감춰지게 됩니다. 

 

** 참고 사이트 **

Create XCFramework : 

https://www.gfrigerio.com/creating-an-xcframework/

 

Creating an XCFramework – Gualtiero Frigerio

If you follow me you know I like sharing code on GitHub and distribute small utilities via Swift Package Manager (by the way this is my article about SPM). Sometimes though, we cannot share our source code and need our customers to integrate our package. W

www.gfrigerio.com

https://medium.com/@MdNiks/no-more-lipo-for-create-universal-framework-18b4d3aafb4f

 

No more ‘Lipo’ for create universal framework

iOS, iOS Simulator, macOS binaries together, Using XCFramework

medium.com

 

기타 : 

http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/

 

Daniel Kennett - Stripping Unwanted Architectures From Dynamic Libraries In Xcode

We could compile the library from source each time, generating a new dynamic library with only the needed architectures for each build. A couple of things bother me about this - first, it seems wasteful to recompile all this non-changing code all the time,

ikennd.ac

 

Tuist : 

https://ios-development.tistory.com/1006

 

[iOS - swift] 4. 모듈화 개념 - Tuist로 프로젝트 관리 방법

1. 모듈화 개념 - Library vs Framework (static library, dynamic library, static framework, dynamic framework) 2. 모듈화 개념 - Binary File 개념 (Mach-O, CPU Architectures, Universal binary, lipo command) 3. 모듈화 개념 - XCFramework 생성

ios-development.tistory.com

 

728x90
반응형

댓글