美文网首页
如果你的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