Cmake Xcode通过新的复制文件阶段添加扩展

时间:2018-02-22 08:36:08

标签: xcode cmake ios-app-extension macos-app-extension

我正在尝试使用cmake(3.8.0)构建一个Xcode 9项目。它由一个app目标和一个appex(扩展)目标组成,需要通过Build Phase中的“Copy Files Phase”(或“Embed App Extension Phase”)复制到app的PlugIns目录中。

我尝试了多次尝试,比如打电话 set_source_files_properties(${myFile} PROPERTIES MACOSX_PACKAGE_LOCATION PlugIns) 但到目前为止没有运气。

我认为难度(对于cmake)是在构建时创建了实际文件“myExtension.appex”,因此硬编码将其添加为源文件的路径似乎不起作用。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

我们设法以一种奇怪的方式解决了这个问题(如果你已经解决了这个问题,那么让这个问题成为其他人的解决方案 - 就像我一样 - 试图弄清楚它)

当你在项目中嵌入一个appex时,Xcode基本上改变了项目中的两件事:将appex添加为项目的依赖项并添加一个PBXCopyFilesBuildPhase以确保编译的.appex最终在PlugIns文件夹中结果包。

所以我们模仿了这两个步骤。将依赖项添加到appex非常简单:

add_dependencies("${_PROJECT_NAME}" ${APP_EXTENSION_TARGET})

在我们的例子中,$ {EXTENSION}实际上是一个包含我们所有扩展名的列表,所以你知道它也可以工作。 这将确保扩展是在主应用程序之前构建的。现在,为了确保它们放在正确的位置,我们在应用程序CMakeLists.txt中添加了一个自定义POST_BUILD命令,如下所示:

add_custom_command(TARGET "${target}" POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory "${PATH_TO_APPEX}" "$<TARGET_FILE_DIR:${target}>/PlugIns/${APPEX_FILE_BASENAME}" MAIN_DEPENDENCY "${APPEX_NAME}")

所有这些都有一些帮助代码,但这是它的要点。

希望有所帮助!

答案 1 :(得分:0)

在建立存档的情况下,您可以使用(57.786156, 14.096861) (57.786164, 14.098304) (57.784925, 14.096857) (57.784928, 14.098310) 而不是$(CONFIGURATION_BUILD_DIR)/$(CONTENTS_FOLDER_PATH)