如果文件丢失,使用编译器指令发出警告

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