如果文件丢失,使用编译器指令发出警告
Using compiler directive to warn if a file is missing
我有一个包含在包中的文件,其名称如下:
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
始终显示,即使文件不在捆绑包中也是如此。
这是不可能的。您正在尝试在编译指令中使用运行时检查。
一般情况下,编译时无法知道bundle中是否有文件,因为文件通常是在编译后通过代码独立添加到bundle中的。
这与编译时检查另一台计算机的文件系统中是否存在文件相同。
要在构建期间检查,您可以在目标中创建自定义构建脚本(构建阶段 => +
按钮),类似于:
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
我有一个包含在包中的文件,其名称如下:
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
始终显示,即使文件不在捆绑包中也是如此。
这是不可能的。您正在尝试在编译指令中使用运行时检查。
一般情况下,编译时无法知道bundle中是否有文件,因为文件通常是在编译后通过代码独立添加到bundle中的。
这与编译时检查另一台计算机的文件系统中是否存在文件相同。
要在构建期间检查,您可以在目标中创建自定义构建脚本(构建阶段 => +
按钮),类似于:
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