Как создать новую цель в Xcode для расширения приложения с помощью CMake?

Я хочу использовать расширение содержимого уведомлений в моем Xcode проект. Я использую CMake для генерации моего проекта. Теперь у проекта есть только одна цель.

Я могу добавить расширение как новую цель вручную в Xcode используя меню Файл - Новый - Цель - Notification Расширение контента.

Не могли бы вы привести пример, как создать новый Xcode проект с дополнительной целью для расширения приложения с помощью CMake?

2 ответа

Решение

Начиная с CMake 3.8, вы можете использовать XCODE_PRODUCT_TYPE свойство target, позволяющее CMake генерировать конкретный тип приложения.

Минимальный пример, который должен помочь вам:

# add app bundle
add_executable(MyApp MACOSX_BUNDLE ${APP_SOURCE_FILES})

# add app extension bundle
add_library(MyAppExtension MODULE ${APPEX_SOURCE_FILES})
set_target_properties(MyAppExtension PROPERTIES
    BUNDLE YES
    XCODE_PRODUCT_TYPE com.apple.product-type.app-extension)

# link extension bundle with UserNotifications frameworks
find_library(UN_LIB UserNotifications)
find_library(UNUI_LIB UserNotificationsUI)
target_link_libraries(MyAppExtension PRIVATE ${UN_LIB} ${UNUI_LIB})

Я тестировал cmake3.23 на Mac, расширение приложения — это исполняемый файл, а не библиотека. Это должно быть так:

      add_executable(MyAppExtension MACOSX_BUNDLE ${APPEX_SOURCE_FILES})
set_target_properties(MyAppExtension PROPERTIES
    XCODE_PRODUCT_TYPE com.apple.product-type.app-extension)

Затем вы можете встроить расширение приложения в приложение:

      set_target_properties(MyApp PROPERTIES
        XCODE_EMBED_APP_EXTENSIONS MyAppExtension)
Другие вопросы по тегам