안녕하세요. 후르륵짭짭입니다.
벌써 12월이네요 ㅋㅋㅋㅋㅋㅋ.
시간이 참 빨라요 ㅠ ㅠ. 내 나이도 점점 많아지고 후우,,,
회사에서 처음으로 제 능력에 대한 평가를 받았는데, 사실 만족하지는 못 했지만
1년 동안 그래도 많은 것을 시도해보고 배워가는 것은 많았던거 같아요.
회사는 저를 제 기대치 만큼 평가 하지 못 했지만 저는 제 자신에 좋은 평가를 줄 수 있어서 다행이에요.
이번에는 저번까지 해결하지 못 한 Framework 생성에 대한 내용을 담아 보려고 해요!
그리고 내가 모듈화를 시작하게 된 계기두요!
** 모듈화 작업을 시작하게 된 계기 **
사실, 이전 포스팅에도 도입부에 살짝 언급 했어요 ㅋㅋㅋ.
2022.11.27 - [Xcode/Swift - PlayGround] - PlayGround) Framework를 통해 모듈화 작업하기
근데 좀 더 자세히 글을 작성해보려고 합니다.
사실 계기는 메인 프로젝트에서 작업하는데 너무 오래 걸리기 시작한 겁니다.
저희는 하나의 앱에 총 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
예전에 내부 소스코드를 공개로 만들고는 싶은데 방법을 몰라서 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를 생성 했습니다.
위의 내용을 포면 Build를 했을 경우 project를 수행하기 위해 소스 코드의 컴파일 입니다.
반면 Archive는 Package 입니다. 따라서 내부 소스 코드가 감춰지게 됩니다.
** 참고 사이트 **
Create XCFramework :
https://www.gfrigerio.com/creating-an-xcframework/
https://medium.com/@MdNiks/no-more-lipo-for-create-universal-framework-18b4d3aafb4f
기타 :
http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/
Tuist :
https://ios-development.tistory.com/1006
'Xcode > Swift - PlayGround' 카테고리의 다른 글
PlayGround) Combine 체험기#2 (0) | 2023.01.08 |
---|---|
PlayGround) Framework UnitTest 생성 해보기 (0) | 2022.12.17 |
PlayGround) Framework를 통해 모듈화 작업하기 (5) | 2022.11.27 |
PlayGround) Swift Combine 적응기 #1 (Custom Publisher) (0) | 2022.11.05 |
PlayGround) Objective-C (상속, 카테고리, 프로토콜, 구조체) 정리 (1) | 2022.09.26 |
댓글