美文网首页
如果你的Xcode 在打包,或者编译是出现 “Command P

如果你的Xcode 在打包,或者编译是出现 “Command P

作者: dxin_101 | 来源:发表于2023-02-05 15:07 被阅读0次

请尝试修改 run script ,这个是将动态库转换为静态库的

xcode14移除了armv7的原因。Pod在xcode13上导出的framework是Fat binary(armv7 arm64),在xcode14上导出的是Single binary(arm64),只需要修改下脚本,增加个判断,避免对Single binary执行lipo -extract。

原来xcode14以前写的是:

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

# This script loops through the frameworks embedded in the application and

# removes unused architectures.

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"

    EXTRACTED_ARCHS=()

        for ARCH in $ARCHS

    do

        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"

        lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"

        EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")

    done

    echo "Merging extracted architectures: ${ARCHS}"

    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"

    rm "${EXTRACTED_ARCHS[@]}"

    echo "Replacing original executable with thinned version"

    rm "$FRAMEWORK_EXECUTABLE_PATH"

    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done

Xcode 14 修改为:

strip_invalid_archs() {

    binary="$1"

    echo "current binary ${binary}"

    # Get architectures for current file

    archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"

    stripped=""

    for arch in $archs; do

        if ! [[ "${ARCHS}" == *"$arch"* ]]; then

            if [ -f "$binary" ]; then

                # Strip non-valid architectures in-place

                lipo -remove "$arch" -output "$binary" "$binary" || exit 1

                stripped="$stripped $arch"

            fi

        fi

    done

    if [[ "$stripped" ]]; then

        echo "Stripped $binary of architectures:$stripped"

    fi

}

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

# This script loops through the frameworks embedded in the application and

# removes unused architectures.

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

do

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

    if [ ! -n $FRAMEWORK_EXECUTABLE_NAME  ];then

        #如果framework文件不存在info.plist则直接取frmeworl名为二进制文件名

        FRAMEWORK_EXECUTABLE_NAME=$FRAMEWORK

    fi

    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"

    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

    strip_invalid_archs "$FRAMEWORK_EXECUTABLE_PATH"

done

相关文章

网友评论

      本文标题:如果你的Xcode 在打包,或者编译是出现 “Command P

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