06-30 00:00
Notice
Recent Posts
Recent Comments
06-30 00:00
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Archives
Today
Total
관리 메뉴

pear

3rd part framework project 3 - XCFramework(Fat Framework) 본문

iOS/swift

3rd part framework project 3 - XCFramework(Fat Framework)

pearlab 2021. 11. 15. 13:34

결론부터 먼저 이야기하면 XCFramework로 변경하자.

XCFramework

Swfit 3rd party Framewrok를 기존 Object C에서 사용해 왔던 Fat Framwork 방식으로 만들어가다가 다양한 빌드 이슈에 직면하였고

오류의 내용들을 보면 문제가 발생한 원인이 버전 호환(swfitmodule) 및 다양한 지원에 대한 XCFramwork 추가로 인한 호환성 이슈로 판단.

 

 

Project  생성 방법

Other - > Aggregate -> New Run Script

 

Add Fat Framework Project

 

ADD Script(New Run Script)

XCFramework Fat Framework Tyep 구버전
FRAMEWORK_PATH="${SRCROOT}/../Framework/simplelib.xcframework"
rm -rf "${FRAMEWORK_PATH}"


xcodebuild archive -scheme simplelib -archivePath './build/ios.xcarchive' -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES


xcodebuild archive -scheme simplelib -archivePath './build/ios_sim.xcarchive' -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES




xcodebuild -create-xcframework \
    -framework "./build/ios.xcarchive/Products/Library/Frameworks/simplelib.framework" \
    -framework "./build/ios_sim.xcarchive/Products/Library/Frameworks/simplelib.framework" \
    -output ${FRAMEWORK_PATH}




FRAMEWORK_NAME=${PROJECT_NAME}


SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"


DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"


UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"


UNIVERSAL_LIBRARY_PATH="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"


FRAMEWORK_PATH="${SRCROOT}/../Framework"


Xcodebuild -target ${PROJECT_NAME} -UseNewBuildSystem=0 -scheme ${FRAMEWORK_NAME} -sdk iphonesimulator -configuration ${CONFIGURATION} clean build
Xcodebuild -target ${PROJECT_NAME} -UseNewBuildSystem=0 -scheme ${FRAMEWORK_NAME} -sdk iphoneos -configuration ${CONFIGURATION}


mkdir -p "${UNIVERSAL_LIBRARY_DIR}"
mkdir "${FRAMEWORK}"
cp -r "${DEVICE_LIBRARY_PATH}" "${UNIVERSAL_LIBRARY_DIR}"




lipo "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}" "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -create -output "${UNIVERSAL_LIBRARY_PATH}/${FRAMEWORK_NAME}"


#fat framework 생성 후 원하느 경로로 복사
#after copy
rm -rf "${FRAMEWORK_PATH}"
cp -R "${UNIVERSAL_LIBRARY_DIR}" "${FRAMEWORK_PATH}"
#open "${FRAMEWORK_PATH}"




*Fat Framewok 에서 특정 Architecture 추출 

lipo libName -thin arm64 -output libName64 
공통 이슈 Fat Framework 사용시 만나게 되는 다양한 오류 들

*M1 arm chip 관련 이슈 

<unknown>:0: error: no such file or directory: '/Users/.../Documents/Work/study/simplelib/@/Users/.../Library/Developer/Xcode/DerivedData/simplelib-gkowiiclxpowsidwcchxahtgybwn/Build/Intermediates.noindex/simplelib.build/Debug-iphoneos/simplelibU.build/Objects-normal/arm64/simplelibU.SwiftFileList'
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1


해결책
Simulator excluded arm64 duplication


UseModernBuildSystem defacted

error(xcode11)
defacted(xcode9)
UseModernBuildSystem=0 * defacted*
변경된 옵션
UseNewBuildSystem=0

UseNewBuildSystem=1 로 설정시 path I/O build Error 발생.


Build Library For Distribution Isssue

Build Library For Distribution setting
Build Library For Distribution은 기본이 NO이며 이후 Fat Framework 빌드시 ProjectName.SwiftFileList 파일을 찾지 못하는 오류를 발생 시킴


YES 설정하여 오류 해결 하였으나 import 하여 사용 시 다음 문제 발생.

target 'x86_64-apple-ios-simulator' Issue

Could not find module 'simplelib' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios

이 이슈는  Swifte의 버전 호환과 XCFramwork지원을 하게 되면서 발생하는 오류로 보이며 여러 사이트에서 VALID_ARCHS을 추가하여 해결하는 것을 가이드 하고 있으나 Apple이 추구 하는 방향을 역행 하는 것 같아서 XCFramwork 변경 결정.