CMake компиляция xib to nib для целевой iOS - PullRequest
3 голосов
/ 18 сентября 2011

Я нацеливаюсь на 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. Но мой вопрос ... где я могу добавить скомпилированные файлы пера?

Теперь я делаю это в 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 Ответ

2 голосов
/ 08 ноября 2012

Он должен «просто работать» с генератором CMake Xcode, чтобы добавить файлы * .xib в качестве источников к add_executable , а затем установить целевое свойство RESOURCE в список *.xib файлы.

Как показано в файле CMake / Tests / iOSNavApp / CMakeLists.txt .

Этот метод должен работать с CMake 2.8.5 и выше, иXcode 4 и выше.

...