我的目标是iOS(设备和模拟器)并设置CMake以添加捆绑包中所需的不同资源。 “xib”文件给了我一些问题。如果我不采取进一步行动,则iPhone / iPad模拟器运行失败并显示错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Could not load NIB in bundle:
'NSBundle </Users/danieldekkers/Library/Application Support/iPhone Simulator/4.3.2/Applications/1C29638B-7593-4311-8F94-C8051AF90AD7/Discs.app>
(loaded)' with name 'MainWindow''
捆绑包中缺少NIB文件。 一个示例(http://www.vtk.org/Wiki/CMake:OSX_InterfaceBuilderFiles)显示,对于OSX,您必须将xib文件编译为nib文件,并将这些文件作为构建后步骤添加到包中。 所以我的猜测是类似的东西也适用于iOS。 但我的问题是,...我在哪里添加已编译的nib文件?
我现在在CMakeLists.txt中执行此操作:
# We need to compile the interface builder *.xib files to *.nib files to add to the bundle
# Make sure we can find the 'ibtool' program. If we can NOT find it we skip generation of this project
FIND_PROGRAM( IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin" )
if ( ${IBTOOL} STREQUAL "IBTOOL-NOTFOUND" )
MESSAGE( SEND_ERROR "ibtool can not be found" )
ENDIF()
# Compile the .xib files using the 'ibtool' program with the destination being the app package
FOREACH( xib ${RSRC_IOS_XIB_FILES} )
ADD_CUSTOM_COMMAND( TARGET ${RT_APP_NAME} POST_BUILD
COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text
--compile
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${RT_APP_NAME}.app/Contents/Resources/${xib}.nib
${RT_APP_ROOT}/rsrc/apple/ios/${xib}.xib
COMMENT "Compiling ${RT_APP_ROOT}/rsrc/apple/ios/${xib}.xib")
ENDFOREACH()
但是我并不真正信任编译步骤的“目的地”,特别是对于模拟器。
有没有人有这个工作或看到我做错了什么?
答案 0 :(得分:2)
应该“正常工作”使用CMake Xcode生成器将* .xib文件作为源添加到 add_executable ,然后将 RESOURCE 目标属性设置为列表* .xib文件。
如CMake/Tests/iOSNavApp/CMakeLists.txt文件所示。
此技术适用于CMake 2.8.5及更高版本,以及Xcode 4及更高版本。