2017-02-21 57 views
0

У меня есть файл, который входит в расслоении, который имеет следующее название:Используя директиву компилятора, чтобы предупредить, если файл отсутствует

databaseX.sqlite 

, где Х представляет собой версию приложения. Если версия 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

Это невозможно. Вы пытаетесь использовать проверку времени выполнения внутри директивы компиляции.

В общем, при компиляции вы не можете знать, есть ли файл в пакете или нет, потому что файлы обычно добавляются в комплект независимо от кода после компиляции.

Это то же самое, что проверка того, есть ли файл, присутствующий в файловой системе на другом компьютере при компиляции.

Чтобы проверить, что во время сборки, вы можете создать сценарий пользовательские сборки (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 
+0

Поскольку это раньше «представления», это могло быть сделано в скрипте при компиляции? Конечно, другой мог удалить его. – Larme

+0

@ Larme Вы можете делать все, что угодно, в сценариях построения или пост-сборки. – Sulthan

+0

@Sulthan - зная, что файл есть перед отправкой ... – SpaceDog