美文网首页
iOS 打包报错 x86_64 i386 问题

iOS 打包报错 x86_64 i386 问题

作者: _浅墨_ | 来源:发表于2018-05-10 19:17 被阅读46次

项目中既使用了 cocoapods 又使用了 Carthage,我使用 Carthage 集成了 box/box-ios-sdk 和 AzureAD/microsoft-authentication-library-for-objc,打包成功后,上传到 App Store 报错如下信息:

报错信息

网上查询了下资源,感觉大概是因为两个第三方的framworks 包含非 64 位架构,而现在 apple 要求新上传的包都要是64位了。

解决方法如下,在 Xcode 中的 Run Script 下添加脚步:

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
Run Script setting

重新打包,问题解决。

附:

iOS app需要在许多不同的CPU架构下运行:

arm7: 在最老的支持iOS7的设备上使用
arm7s: 在iPhone5和5C上使用
arm64: 运行于iPhone5S的64位 ARM 处理器 上
i386: 32位模拟器上使用
x86_64: 64为模拟器上使用
每个CPU架构都需要不同的二进制数据,当你编译一个应用时,无论你目前正在使用那种架构,Xcode都会正确地依照对应的架构编译。例如,如果你想跑在虚拟机上,Xcode只会编译i386版本(或者是64位机的x86_64版本)

Apple will stop supporting Apps which have only 32-bit architecture. In other words, apps need to have 64-bit slices. Our framework actually has:
- arm7 32 bit - for iPhone 4 and 4s
- arm7s 32 bit - for iPhone 5
- arm64 64 bit - for iPhone 5S and newer
- x86 - for simulator
- x86_64 for the 64-bit simulator.

参考:

  1. http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/
  2. 打包framework教程
  3. https://spin.atomicobject.com/2011/12/13/building-a-universal-framework-for-ios/

相关文章

网友评论

      本文标题:iOS 打包报错 x86_64 i386 问题

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