【问题标题】:Xcode 6 missing required Architecture in custom SDK build, how to include all archs properly?Xcode 6 在自定义 SDK 构建中缺少必需的架构,如何正确包含所有拱门?
【发布时间】:2015-01-26 09:02:47
【问题描述】:

我有一个我在 Xcode6 中继承和管理的框架文件,以及一个使用该框架文件的演示应用程序。我一般构建框架项目,将创建的 .framework 文件复制到所述演示应用程序中,然后编译该演示应用程序。

最近我遇到了一些问题,据说框架没有所需的架构,导致无法构建我的演示应用程序。我一直在努力尝试让 SDK 与所有架构一起构建,但无论我做什么,演示应用程序都找不到它需要的东西。以前可以正常运行,现在不行了。

我可以做些什么来确保使用 Xcode 中消费者可能需要的任何拱门构建此 SDK?

另请参阅下面的更新。看来运行脚本完成了大部分编译,我不确定它是否使用了这些设置?

演示应用构建中的错误:

missing required architecture x86_64 in file 
Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_BeaconManager", referenced from:
      objc-class-ref in StartViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

SDK 上的构建设置。我已将拱门值扩展为尽可能完整,但它没有帮助。添加所有这些之后,.framework 文件也从 1mb 膨胀到了 8mb。

更新:

有一个构建脚本似乎可以自行进行更多编译。我尚未确定此脚本是否自行确定架构,或者它是否仍然尊重我尝试在 Xcode 中更新的所有设置。我了解到,SDK 在构建后无法在模拟器中运行,但在将演示应用程序 + SDK 放在实际的 Iphone 设备上时确实可以使用。

xcodebuild -configuration ${CONFIGURATION} -target BeaconSDK -sdk iphoneos -SYMROOT=${SYMROOT} -OBJROOT=${OBJROOT}

xcodebuild -configuration ${CONFIGURATION} -target BeaconSDK -sdk iphonesimulator -SYMROOT=${SYMROOT} -OBJROOT=${OBJROOT}

INSTALL_DIR=${SRCROOT}/${TARGET_NAME}
BUILD_DIR=${SRCROOT}/build

DEVICE_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}
SIMULATOR_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}

# Create and renews the final product folder.
rm -rf "${INSTALL_DIR}"
mkdir -p "${INSTALL_DIR}"
mkdir -p "${INSTALL_DIR}/Versions/A/Headers"

xcrun -sdk iphoneos lipo -create ${SIMULATOR_DIR}/BeaconSDK ${DEVICE_DIR}/BeaconSDK -o ${INSTALL_DIR}/Versions/A/BeaconSDK

# Copy the header files to the final product folder.
cp -r "${SIMULATOR_DIR}/Headers/" "${INSTALL_DIR}/Versions/A/Headers/"

mkdir -p "${INSTALL_DIR}/Versions/A/Resources"

cp -r "${DEVICE_DIR}/" "${INSTALL_DIR}/Versions/A/Resources/"

#create relative symbolic link.
cd ${INSTALL_DIR}

#link
ln -s A Versions/Current
ln -s Versions/A/BeaconSDK BeaconSDK
ln -s Versions/A/Resources Resources
ln -s Versions/A/Headers Headers

【问题讨论】:

  • 您继承的这个框架文件——它是仅以二进制形式提供的,还是作为源代码提供的?如果它仅以二进制形式提供,那么它可能没有为您的应用程序使用正确的架构进行编译。 (如果是这种情况,并且您无法控制该原始二进制文件,则可以考虑从支持的列表中删除有问题的架构)
  • 我有这个框架的源代码和 XCode 项目;这都是我公司内部的,但我没有创建它。在这种情况下,我需要 x86_64 才能在 Iphone6 的 XCode 模拟器中运行它,我相信。

标签: ios xcode architecture


【解决方案1】:

您需要使用与您的项目相同的架构列表重新编译框架。它需要在框架中有一个 64 位切片才能链接到 64 位应用程序。听起来您只需使用最新的编译器设置重新构建框架,就可以开始了。

【讨论】:

  • 架构设置在这里似乎没有帮助,即使完全填写相同。我发现了一个似乎更相关的运行脚本,包含在上面的更新中。
【解决方案2】:

调试了 7 小时后我睡觉时彻底坏掉了。当我醒来时,它编译正常,没有任何架构错误。这不是 XCode 第一次未能更新设置,然后几个小时或一天后尊重这些更改。我想知道是否存在某种缓存、保留值等。我也没有在一夜之间重新启动甚至关闭 XCode。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2015-04-23
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多