所以我尝试使用Shopify API。当我存档并验证应用程序时,就没有问题了,但当我将其提交到应用程序商店时,它就会给我以下问题。

ERROR ITMS-90087: "Unsupported Architecture. Your executable contains unsupported architecture '[x86_64, i386]'." ERROR ITMS-90209: "Invalid segment Alignment. The App Binary at SJAPP.app/Frameworks/Buy.framework/Buy does not have proper segment alignment. Try rebuilding the app with the latest Xcode version." (I am already using the latest version.) ERROR ITMS-90125: "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." WARNING ITMS-90080: "The Executable Payload/..../Buy.framework is not a Position Independent Executable. Please ensure that ur build settings are configured to create PIE executables."


当前回答

对我来说最简单的解决方法是

1-从嵌入式框架中移除框架。 2-添加框架作为链接框架

完成了!

其他回答

如果您正在使用Carthage,请确保您的嵌入框架构建步骤在Carthage复制框架之前


在一些不寻常的情况下(例如:Lottie-iOS框架):

你可以像往常一样在“链接库”中找到它。 然而,你还必须显式地在“嵌入框架”中添加它(即使这看起来毫无意义,因为当你只在“嵌入框架”中添加它时,它会完美地工作), 然后把它放到复制框架中 确保copy-frameworks在“Embed Frameworks”后面

我从构建设置-有效架构-发布中删除了i386和x64_86架构,一切都工作得很好。

现在唯一的问题是您不能为了测试目的在模拟器上运行RELEASE版本。但是,如果你想的话,你可以很容易地把它们加回来。

通过稍微修改pAky88答案中的运行脚本并在嵌入框架后执行,这个问题为我解决了。还要确保取消“仅在安装时运行脚本”的复选框。

/usr/local/bin/carthage copy-frameworks

#!/usr/bin/env bash

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"

if [ ! -f "${FRAMEWORK_EXECUTABLE_PATH}" ]; then
continue
fi

if xcrun lipo -info "${FRAMEWORK_EXECUTABLE_PATH}" | grep --silent "Non-fat"; then
echo "Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME"
continue
fi

echo "Thinning framework $FRAMEWORK_EXECUTABLE_NAME"

EXTRACTED_ARCHS=()

for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
xcrun lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done

echo "Merging extracted architectures: ${ARCHS}"
xcrun 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

问题是Buy框架包含模拟器(x86_64)和实际设备(ARM)的构建。

当然,你不允许向App Store提交不受支持的架构的二进制文件,所以解决方案是在提交之前“手动”从最终二进制文件中删除不需要的架构。

Daniel Kennett提出了一个很好的解决方案,并提供了这个脚本添加到构建阶段:

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

我用过,效果很好。

编辑:请务必查看Varrry发布的修改后的脚本,因为这个脚本有一些小问题。

使用下面的步骤从框架中删除[x86_64, i386]。[x86_64, i386]用于模拟器。

打开终端 打开你的项目拖动路径各自的框架到终端 例如:cd /Users/MAC/Desktop/MyProject/Alamofire.framework 在下面的命令中设置你的框架名称并运行

lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire

现在再次打开您的项目,清洁,构建和运行,并创建存档…