То, что вы делаете здесь, очень неправильно. _COREDATADEFINES_H
определяет, что вы видите в CoreDataDefines.h, известен как часовое значение, старый метод C, чтобы избежать множественных включений одного и того же заголовочного файла.
Вы, конечно, не должны использовать это в своем собственном коде, и присутствие часового только говорит вам, что заголовок уже был включен где-то еще. Если часовой не определен, это просто означает, что заголовок содержит , а не , а не то, что сам фреймворк не существует.
Я не уверен, что именно вы пытаетесь сделать, но похоже, что вы хотите использовать макросы для выбора между кодом, использующим каркас, и кодом, который не использует каркас. Если вы хотите сделать это во время компиляции, ваш единственный выбор - определить свои собственные макросы и настроить их в своей цели с некоторыми опциями компилятора. Например, чтобы включить код, использующий библиотеку ресурсов, вы можете определить это в параметре сборки «Другие флаги C»:
-DUSE_ASSETS_FRAMEWORK
А затем используйте это в своем коде:
#ifdef USE_ASSETS_FRAMEWORK
#import <AssetsLibrary/AssetsLibrary.h>
// code that uses assets framework
#else
// code that does not use assets framework
#endif
Если вы хотите иметь возможность во время выполнения определять, связано ли приложение с платформой и существует ли фреймворк в текущей версии iOS, вам следует использовать стандартный подход, рекомендованный Apple, который заключается в проверке существования любых классов или функции, которые вам нужны:
if (NSClassFromString(@"ALAsset")) {
// ALAsset is available }
} else {
// ALAsset not available
}