반응형
iOS 네이버맵 SDK 추가 후 앱스토어에 배포할 때 i386, x86_64 아키텍쳐를 지원하는 문제가 있었습니다.
i386, x86_64는 시뮬레이터 아키텍쳐로 아카이브 시 불필요한 아키텍쳐입니다.
NMapsMap.framework 파일로 타고 들어가 아래 명령어로 지워줄 수 있지만
lipo -remove x86_64 NMapsMap -o NMapsMap
lipo -remove i386 NMapsMap -o NMapsMap
시뮬레이터에서는 실행할 수 없게되는 문제가 발생합니다.
아래 스크립트를 통하여 아카이브 시 i386, x86_64 아키텍쳐를 지원하지 않도록 제거 후 문제 해결하였습니다.
echo "Target architectures: $ARCHS"
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
find "$APP_PATH" -name 'NMapsMap.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")
FRAMEWORK_TMP_PATH="$FRAMEWORK_EXECUTABLE_PATH-tmp"
# remove simulator's archs if location is not simulator's directory
case "${TARGET_BUILD_DIR}" in
*"iphonesimulator")
echo "No need to remove archs"
;;
*)
if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then
lipo -output "$FRAMEWORK_TMP_PATH" -remove "i386" "$FRAMEWORK_EXECUTABLE_PATH"
echo "i386 architecture removed"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
fi
if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then
lipo -output "$FRAMEWORK_TMP_PATH" -remove "x86_64" "$FRAMEWORK_EXECUTABLE_PATH"
echo "x86_64 architecture removed"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
fi
;;
esac
echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")
done
Build Phase -> Run Script -> For install Builds only
"For install Builds only" 체크 시 Archive를 만들때에만 스크립트 내용이 실행됩니다.
반응형