Xcode 6 在自定义 SDK 构建中缺少必需的架构,如何正确包含所有架构?
Xcode 6 missing required Architecture in custom SDK build, how to include all archs properly?
我有一个在Xcode6中继承和管理的框架文件,以及一个使用该框架文件的演示应用程序。我通常构建框架项目,将创建的 .framework 文件复制到所述演示应用程序中,然后编译该演示应用程序。
最近我 运行 遇到了据说框架没有所需架构的问题,导致我的演示应用程序无法构建。我一直在努力让 SDK 构建所有架构,但无论我做什么,演示应用程序都找不到它需要的东西。以前运行很好,但现在不行了。
我该怎么做才能确保此 SDK 构建时包含 Xcode 中消费者可能需要的任何架构?
另请参阅下面的更新。 运行 脚本似乎完成了大部分编译工作,我不确定它是否甚至使用这些设置?
演示应用构建中的错误:
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 上的构建设置。我已将 arch 值扩展到尽可能完整,但没有帮助。添加所有这些后,.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
您需要使用与项目相同的体系结构列表重新编译框架。它需要在框架中有一个 64 位切片才能链接到 64 位应用程序。听起来你只是用最新的编译器设置重建了框架,你应该可以开始了。
我调试了7个小时,睡觉的时候就彻底坏了。当我醒来时,它编译正常,没有任何架构错误。这不是第一次 XCode 未能更新设置,然后在数小时或一天后遵守更改。我想知道是否正在进行某种缓存、保留值等。我也没有在一夜之间重新启动甚至关闭 XCode。
我有一个在Xcode6中继承和管理的框架文件,以及一个使用该框架文件的演示应用程序。我通常构建框架项目,将创建的 .framework 文件复制到所述演示应用程序中,然后编译该演示应用程序。
最近我 运行 遇到了据说框架没有所需架构的问题,导致我的演示应用程序无法构建。我一直在努力让 SDK 构建所有架构,但无论我做什么,演示应用程序都找不到它需要的东西。以前运行很好,但现在不行了。
我该怎么做才能确保此 SDK 构建时包含 Xcode 中消费者可能需要的任何架构?
另请参阅下面的更新。 运行 脚本似乎完成了大部分编译工作,我不确定它是否甚至使用这些设置?
演示应用构建中的错误:
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 上的构建设置。我已将 arch 值扩展到尽可能完整,但没有帮助。添加所有这些后,.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
您需要使用与项目相同的体系结构列表重新编译框架。它需要在框架中有一个 64 位切片才能链接到 64 位应用程序。听起来你只是用最新的编译器设置重建了框架,你应该可以开始了。
我调试了7个小时,睡觉的时候就彻底坏了。当我醒来时,它编译正常,没有任何架构错误。这不是第一次 XCode 未能更新设置,然后在数小时或一天后遵守更改。我想知道是否正在进行某种缓存、保留值等。我也没有在一夜之间重新启动甚至关闭 XCode。