我有一个包含在捆绑包中的文件,其名称如下:
databaseX.sqlite
其中X是应用程序的版本。如果版本为2.8,则该文件应命名为database2.8.sqlite
。当应用程序提交给Apple时,我必须确保包含此文件。
是否可以创建编译器指令来检查文件是否在捆绑包中?
我试过这个,没有成功
#define fileInBundle [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"LoteriaMac%@.sqlite", [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"]]]
#if defined(fileInBundle)
#pragma message("file in bundle")
#else
#pragma message("file missing")
#endif
即使文件不在捆绑包中,也始终显示 file in bundle
。
答案 0 :(得分:0)
这是不可能的。您正尝试在编译指令中使用运行时检查。
通常,在编译时,您无法知道捆绑中是否存在文件,因为这些文件通常在编译后独立地添加到捆绑包中。
这与在编译时检查另一台计算机上的文件系统中是否存在文件相同。
要在构建期间检查,您可以在目标中创建自定义构建脚本(Build Phases => +
按钮),类似于:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
// there is probably some easier way to get the version than from the Info.plist
INFO_FILE="${APP_PATH}/Info.plist"
VERSION=`/usr/libexec/plistbuddy -c Print:CFBundleShortVersionString "${INFO_FILE}"`
// the file we want to exist
DB_FILE="${APP_PATH}/database${VERSION}.sqlite"
// if the file does not exist
if [ ! -f "${DB_FILE}" ]; then
// emit an error
echo "error: File \"${DB_FILE}\" not found!" >&2;
// and stop the build
exit 1
fi