美文网首页
Code signing "xxx.framework" fai

Code signing "xxx.framework" fai

作者: 幸运者_Lucky | 来源:发表于2019-11-12 15:14 被阅读0次

    如果不使用模拟器,直接:

    lipo 文件夹/可执行文件 -remove x86_64 -output 文件夹/可执行文件
    

    在不删除 framework 中的 x86_64i386 指令集的情况下,
    删除 archive 包中 frameworkx86_64i386, 这样依然可以支持模拟器.

    framework 去除不支持的指令集
    Build Phases -> Embed Frameworks 下面添加一个新的 Script, 内容如下:

    两段 Script 任选其一

    Script 1

    echo "Target architectures: $ARCHS"
    
    APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
    
    find "$APP_PATH" -name '*.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
    

    Script 2

    如果有引用 framework 但没使用也会删除掉 removes unused architectures.

    # This script loops through the frameworks embedded in the application 
    # and removes unused architectures.
    
    find "${TARGET_BUILD_DIR}/${WRAPPER_NAME}" -name '*.framework' -type d | while read -r FRAMEWORK; do
        FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
        FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
        for arch in $(lipo -archs $FRAMEWORK_EXECUTABLE_PATH); do
            if ! printf '%s\n' ${ARCHS[@]} | egrep -q "^$arch$"; then
                lipo -remove $arch "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH" 
            fi
        done
    done
    
    Reference: https://stackoverflow.com/questions/30547283/submit-to-app-store-issues-unsupported-architecture-x86
    Reference: https://stackoverflow.com/questions/42641806/check-and-remove-unsupported-architecture-x86-64-i386-in-ipa-archive

    相关文章

      网友评论

          本文标题:Code signing "xxx.framework" fai

          本文链接:https://www.haomeiwen.com/subject/eiqqictx.html