iOS 报错Unsupported Architectures.The executable for xxxx/framework '[x86_64, i386

309 阅读1分钟

由于项目 接入其他SDK.Frameworks导致上架报错如下: Asset validation failed Unsupported Architectures. The executable for Runner.app/Frameworks/xxxxx.framework contains unsupported architectures '[x86_64, i386]'. (ID: f407a686-0ef1-459d-a76c-ac4c1fae6575) Asset validation failed The binary is invalid. The encryption info in the LC_ENCRYPTION_INFO load command is either missing or invalid, or the binary is already encrypted. This binary does not seem to have been built with Apple's linker. (ID: 8feffdca-e9b4-40ba-9d78-52fc1db00b30)

【解决方案如下】 第一步: image.png 第二步:

image.png 这一步需要 确保 【项目中的frameworks 必须在Embed Frameworks选项下引用】 第三步:

image.png 粘贴如下下代码

echo "Target architectures: $ARCHS"

APP_PATH="TARGETBUILDDIR/{TARGET_BUILD_DIR}/{WRAPPER_NAME}"

find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK

do

FRAMEWORK_EXECUTABLE_NAME=(defaultsread"(defaults read "FRAMEWORK/Info.plist" CFBundleExecutable)

FRAMEWORK_EXECUTABLE_PATH="FRAMEWORK/FRAMEWORK/FRAMEWORK_EXECUTABLE_NAME"

echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

echo (lipoinfo"(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"(lipo "FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then

    lipo -output "FRAMEWORKTMPPATH"remove"i386""FRAMEWORK_TMP_PATH" -remove "i386" "FRAMEWORK_EXECUTABLE_PATH"

    echo "i386 architecture removed"

    rm "$FRAMEWORK_EXECUTABLE_PATH"

    mv "FRAMEWORKTMPPATH""FRAMEWORK_TMP_PATH" "FRAMEWORK_EXECUTABLE_PATH"

    fi

    if (lipo"(lipo "FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then

    lipo -output "FRAMEWORKTMPPATH"remove"x8664""FRAMEWORK_TMP_PATH" -remove "x86_64" "FRAMEWORK_EXECUTABLE_PATH"

    echo "x86_64 architecture removed"

    rm "$FRAMEWORK_EXECUTABLE_PATH"

    mv "FRAMEWORKTMPPATH""FRAMEWORK_TMP_PATH" "FRAMEWORK_EXECUTABLE_PATH"

    fi

    ;;

esac

echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"

echo (lipoinfo"(lipo -info "FRAMEWORK_EXECUTABLE_PATH")

done