什么是预处理器宏来测试是否正在构建应用程序扩展?

San*_*aus 16 preprocessor ios ios8 ios-app-extension

此问题完全基于有关在iOS中引入应用程序扩展的公开发布的文档.

随着iOS 8中的应用扩展程序的推出,现在可以"扩展您的应用程序之外的自定义功能和内容,并在用户使用其他应用程序时将其提供给用户".

在我的扩展实现中,我在我的扩展(模型等)中包含了我的实际应用程序中的一些类.问题是这些类进行调用UIApplication,这在app扩展中是不可用的,编译器告诉我.

我认为一个简单的解决方案就是UIApplication#if指令中包含任何调用.

例如,如果我想在模拟器上运行时只包含代码,我会使用:

#if TARGET_IPHONE_SIMULATOR
    // Code Here
#endif
Run Code Online (Sandbox Code Playgroud)

当目标是应用程序扩展时,是否有类似的定义宏?

San*_*aus 17

您可以定义自己的宏.

在项目设置中,使用顶部栏中的下拉列表选择您的扩展目标: 在此输入图像描述

然后:

  1. 点击 Build Settings
  2. 查找(或搜索)Preprocessor MacrosApple LLVM 6.0 - Preprocessing
  3. TARGET_IS_EXTENSION在调试和发布部分中添加或您选择的任何其他名称.

然后在你的代码中:

#ifndef TARGET_IS_EXTENSION
    // Do your calls to UIApplication
#endif
Run Code Online (Sandbox Code Playgroud)