[英]Embedding files in an iOS app (C++/Qt/cmake)
在 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 包的文檔:
它使用相對扁平的結構,很少有無關目錄,以節省磁盤空間並簡化對文件的訪問。
什么是首選方法?
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
(免責聲明:我不是 CMake 用戶,可能有更多的 CMake-ey 方法來做到這一點)
如果您可以設置構建后操作,以下終端腳本可以有效地將文件從另一個位置同步到您的包中。 我在我的游戲引擎中使用它,因為它只在后續構建時復制更新或新文件,並保留目錄結構:
mkdir -p PATHTO/ORIGINFOLDERNAME
mkdir -p PATHTOBUILDFOLDER/PROJECTNAME.app/Contents/Resources/DESTINATIONFOLDERNAME
rsync -avu --delete --exclude=".*" PATHTO/ORIGINFOLDERNAME/ PATHTOBUILDFOLDER/PROJECTNAME.app/Contents/Resources/DESTINATIONFOLDERNAME
mkdir
命令僅用於確保生成文件夾(如果它們被刪除)。
所以顯然 CMake 方法也適用於目錄。
target_sources(${QT_IOS_TARGET} PRIVATE ${_resource})
set_source_files_properties(${_resource} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
它只會被添加到包的根目錄中,而不是在Resources
。
如果嵌入的文件不是太大,您可以考慮:
在您的源代碼樹中,生成一個 C++ 文件,將該文件嵌入為一個常量數組。 例如,如果你的文件只包含hello, world
和一個新行,你可以有類似的東西
/// file contents.cc const char file_contents[] = "hello, world\\n";
並在您的程序開始時(可能在您的main
函數中,在您的QApplication
之前)調用一個 C++ 函數來編寫這樣一個文件(可能在/tmp/
)。
Makefile
或你的 qmake 東西)中,有一些東西可以從真正的源代碼中生成C++ contents.cc
文件這是從 POSIX/Linux 的角度來看的,根據您的 iOS 調整我的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.