【问题标题】:ERROR ITMS-9000: "Unsupported architectures. Your executable contains unsupported architectures '[x86_64, i386]'"错误 ITMS-9000:“不支持的架构。您的可执行文件包含不支持的架构 '[x86_64, i386]'”
【发布时间】:2014-11-11 06:11:27
【问题描述】:


无法在itunesconnect 中发送新版本的应用程序。尽管上周发生了相同的版本发送。在代码中,我只是更改了一个按钮的名称,没有更多的更改没有在哪里进行。
但总是报错:

错误 ITMS-9000:“不支持的架构。您的可执行文件包含不支持的架构 '[x86_64, i386]'”

在我的项目中 -> 构建设置: ARCHS = $(ARCHS_STANDARD_32_BIT)
//:配置 = 调试
ONLY_ACTIVE_ARCH = 是
//:配置 = 发布
ONLY_ACTIVE_ARCH = 否

VALID_ARCHS = armv7 armv7s

【问题讨论】:

  • 确保在 Xcode 窗口顶部选择了“iOS 设备”作为目标 - 您正在尝试提交模拟器构建
  • @Paulw11 它设置了我的 iPhone。我正在上面建立一个项目,一切顺利。然后做存档并尝试发送一个itunescoonect,结果是一样的。
  • 您需要仔细检查您的构建设置或从版本控制回滚并重试 - 出于某种原因,您正在生成 x86 构建
  • 检查产品 -> 方案 -> 编辑方案... -> 存档。它必须说构建配置:“发布”。

标签: ios objective-c app-store-connect xcode6


【解决方案1】:

在 Daniel Kennett 的博客上查看这个巧妙的解决方案 - 它与我遇到类似问题的 SpritzSDK 完美配合。

他提供了一个脚本,您可以将其放入构建阶段,以在最后一步去除不需要的架构 - 不会破坏模拟器,iTunesConnect 在第一次尝试时也批准了我的上传。

http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/

【讨论】:

  • 只在安装时运行脚本?还是没有?
  • 脚本进入构建阶段,所以只有在构建时
  • 为什么有些框架不需要这个脚本,仍然可以在模拟器和实际设备中构建和运行?
【解决方案2】:

您可以通过在 Build Phase 中将 Shell Script 置于下面来从 IPA 中删除不需要的 ARCHS --> RUN Script 此脚本从 IPA 中删除所有模拟器 ARCHS,并从嵌入式框架中删除 ARCH 问题。 资源 : http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/

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

【讨论】:

  • 请不要把它当成个人。如果您正在处理他人的知识产权,请善意地将功劳归还给原始创作者。在这种情况下,ikennd.ac/blog/2015/02/…
  • @Goppinath 已编辑。我的答案。感谢您的建议。
  • @arpen_techisavy 祝你好运。
【解决方案3】:

如果您的项目中有手表应用,则需要编辑上述两个答案中的脚本。将 /Frameworks 添加到 $APP_PATH 以避免构建项目时出错。

【讨论】:

    【解决方案4】:

    如果您直接使用 LiveSDK 或通过 ShareKit 使用,您将遇到此问题。就我而言,我直接使用 LiveSDK。

    在 Apple Developer Forum 上查看此答案

    https://devforums.apple.com/message/1037603#1037603

    【讨论】:

    • 我遇到了同样的问题,我没有使用 LiveSDK 或 ShareKit。似乎没有任何帮助。
    • 我的问题是由 Urban Airship SDK 引起的。 ://
    • @Mohan 谢谢。确实一切都很好,只要我删除了 LiveSDK!
    • 嗨,你是如何为 live sdk 解决这个问题的。链接中没有答案帮助
    • 如果我使用 Urban Airship @Pax 如何解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2017-07-27
    • 2018-02-26
    • 2014-11-14
    • 2013-12-10
    相关资源
    最近更新 更多