Warm tip: This article is reproduced from serverfault.com, please click

其他-将文件嵌入iOS应用(C ++ / Qt / cmake)

(其他 - Embedding files in an iOS app (C++/Qt/cmake))

发布于 2020-11-20 14:50:57

在iOS c ++ / Qt应用程序中,我需要提供一些文件并将其保留在目录结构中。

对于Android版本,我们捆绑了一个zip文件,该文件在创建QApplication之前已在目标上解压缩。

在iOS上,似乎CMake无法将文件捆绑在树中:https : //cmake.org/cmake/help/latest/prop_tgt/RESOURCE.html#prop_tgt : RESOURCE https://cmake.org/cmake/ help / latest / prop_sf / MACOSX_PACKAGE_LOCATION.html

我不确定这是cmake的限制还是iOS上的全局限制。有关iOS捆绑包文档中

它使用相对平坦的结构,几乎没有多余的目录,以节省磁盘空间并简化对文件的访问。

首选的方法是什么?

  1. 是否有解决方案可以直接从CMake传送文件?
  2. 如果没有,我如何实现此目标,以便在创建QApplication之前可以使用它们?

xcode命令

感谢@ Cy-4AH,我在Xcode中添加了该文件夹,并且可以获取执行此操作的命令:

CpResource _PATH_TO_DIRECTORY_ _APP_BUNDLE_DIRECTORY_/_RESOURCE_DIR_NAME_
cd /Users/denis/opt/qfield/ios/QField
export PATH="....."
builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -strip-debug-symbols -strip-tool /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip -resolve-src-symlinks _PATH_TO_DIRECTORY_ _APP_BUNDLE_DIRECTORY_

但是我怎么能从cmake创建这个呢?builtin-copy是一个xcode命令。


简单的系统复制命令

从一个古老的(2008年)讨论中,我们可以使用简单的cp命令。这可以进行签名,但是随后出现错误unsealed contents present in the bundle root

从这个答案看来,似乎不能简单地在资源目录中添加文件夹。框架包的文档剖析中Nonlocalized resources reside at the top level of the Resources directory

Questioner
Denis Rouzaud
Viewed
11
183k 2020-11-28 04:56:51

因此,显然CMake方法也适用于目录。

target_sources(${QT_IOS_TARGET} PRIVATE ${_resource})
set_source_files_properties(${_resource} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)

它将仅添加到分发包的根目录中,而不是添加到中Resources