【问题标题】:iOS 14, lipo error while creating library for both device and simulatoriOS 14,为设备和模拟器创建库时出现 lipo 错误
【发布时间】:2020-09-23 06:35:34
【问题描述】:

我们一直在使用 lipo 命令来创建一个框架,该框架在集成到其他项目时可以在设备和模拟器上运行。 以下是用于生成设备和模拟器构建的构建命令

xcodebuild -target SampleSDK ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" OBJROOT="${OBJROOT}/DependentBuilds"
xcodebuild -target SampleSDK ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" OBJROOT="${OBJROOT}/DependentBuilds"

在此之后,我们将 swift 模块从 iphonesimulator(如果存在)复制到复制的框架目录

cp -R "$BUILD_DIR/${CONFIGURATION}-iphonesimulator/${PRODUCT_NAME}/Modules/SampleSDK.swiftmodule/" "${UNIVERSAL_OUTPUTFOLDER}/${PRODUCT_NAME}/Modules/${PROJECT_NAME}.swiftmodule/"

然后是 lipo 命令

lipo -create "$BUILD_DIR/${CONFIGURATION}-iphonesimulator/${PRODUCT_NAME}/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PRODUCT_NAME}/${PROJECT_NAME}" -output "${UNIVERSAL_OUTPUTFOLDER}/${PRODUCT_NAME}/${PROJECT_NAME}"

上述命令失败并出现以下错误

fatal error: lipo: /path/to/Library/Developer/Xcode/DerivedData/Sample-bhfmlauxsdympmdjkjyvujaljevg/Build/Products/Debug-iphonesimulator/SampleSDK.framework/SampleSDK and /Users/rramshettysiddaraju/Library/Developer/Xcode/DerivedData/Sample-bhfmlauxsdympmdjkjyvujaljevg/Build/Products/Debug-iphoneos/SampleSDK.framework/SampleSDK have the same architectures (arm64) and can't be in the same fat output file

我尝试了 stackoverflow 中的一个答案,即添加用户定义的设置 VALID_ARCHS 然后将其删除。但这没有用

【问题讨论】:

    标签: xcodebuild ios14 xcode12 lipo


    【解决方案1】:

    错误的原因是 Xcode 12 在为模拟器构建时包含“arm64”架构的切片(除了 Xcode lipo 不知道您想要两个“arm64”切片中的哪一个,并拒绝创建组合的胖二进制框架。

    作为一种解决方法,您可以通过附加 EXCLUDED_ARCHS 构建变量从模拟器构建中排除“arm64”架构:

    xcodebuild -target SampleSDK ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" OBJROOT="${OBJROOT}/DependentBuilds" EXCLUDED_ARCHS="arm64"
    

    或者,在将模拟器和设备框架合二为一之前,使用lipo -remove 从模拟器构建中删除“arm64”架构:

    lipo -remove arm64 "$BUILD_DIR/${CONFIGURATION}-iphonesimulator/${PRODUCT_NAME}/${PROJECT_NAME}" -output "$BUILD_DIR/${CONFIGURATION}-iphonesimulator/${PRODUCT_NAME}/${PROJECT_NAME}"
    

    从长远来看,您最好构建一个XCFramework,它应该支持设备和模拟器,而无需使用lipo。但我还没有测试过。

    【讨论】:

    • 感谢 styv,这对我们有帮助,也会研究 XCFramework
    • 感谢上帝!最后,我在 iOS 14 的 2 天后找到了这个解决方案。
    • 如果有的话,请先删除项目中的VALID_ARCHS 构建设置。
    【解决方案2】:

    styv 是对的。

    您还可以在 Xcode Build Settings 中设置 Excluded Architectures

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2013-07-09
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2014-08-12
      相关资源
      最近更新 更多