CMake xib到iOS目标的nib编译

时间:2011-09-18 14:29:14

标签: ios xcode cmake xib nib

我的目标是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()

但是我并不真正信任编译步骤的“目的地”,特别是对于模拟器。

有没有人有这个工作或看到我做错了什么?

1 个答案:

答案 0 :(得分:2)

应该“正常工作”使用CMake Xcode生成器将* .xib文件作为源添加到 add_executable ,然后将 RESOURCE 目标属性设置为列表* .xib文件。

CMake/Tests/iOSNavApp/CMakeLists.txt文件所示。

此技术适用于CMake 2.8.5及更高版本,以及Xcode 4及更高版本。