通知
本站点除 Legacy 产品与方案外,已迁移至 声网新文档中心 ,当前页面不再维护
文档中心
全部产品
Console 官网 社区 技术支持

为什么使用 Unity 4.x SDK 开发的 iOS app 上传到 App Store 会报错?

分类: 集成类    平台: Unity   最后更新时间: 2022/11/03 19:41:44

问题描述

将使用 Unity 4.x SDK 开发的 app 直接打包上传至 App Store 时,你可能会收到如下错误信息:

问题原因

Unity 4.x SDK 内部的 iOS 动态库带有模拟器架构,但 App Store 不允许上架 app 的 SDK 里带有模拟器架构,因此,为了 app 正常上架和测试,需要将 SDK 里的模拟器架构给删除。

解决方案

  1. 在 Xcode 中,选择添加 New Run Script Phase

  2. 添加下列脚本,在打包时自动将 SDK 里的模拟器架构删除。

    #!/bin/sh
    
    # Strip invalid architectures
    
    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)
    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
    
    strip_invalid_archs "$FRAMEWORK_EXECUTABLE_PATH"
    done