【发布时间】: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