Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the preprocessor macro to test whether an application extension is being built?

This question is based purely on publicly released documents regarding the introduction of application extensions in iOS.

With the introduction of app extensions in iOS 8, it is now possible to "extend custom functionality and content beyond your app and make it available to users while they’re using other apps".

In my implementation of my extension, I am including some classes from my actual app in my extension (models, etc). The problem is that these classes make calls to UIApplication, which is not available in an app extension, and the compiler tells me so.

I thought an easy solution to this would to be enclose any calls to UIApplication in an #if directive.

For example, if I wanted to only include code if I was running on a simulator, I would use:

#if TARGET_IPHONE_SIMULATOR
    // Code Here
#endif

Is there a similar defined macro when the target is an application extension?

like image 486
Andrew Avatar asked Jun 03 '14 14:06

Andrew


1 Answers

You can define your own macro.

In the project settings use the dropdown in the topbar to select your extension target: enter image description here

Then:

  1. Click Build Settings
  2. Find (or search) Preprocessor Macros under Apple LLVM 6.0 - Preprocessing
  3. Add TARGET_IS_EXTENSION or any other name of your choice in both the debug and release sections.

Then in your code:

#ifndef TARGET_IS_EXTENSION
    // Do your calls to UIApplication
#endif
like image 150
Andrew Avatar answered Sep 22 '22 14:09

Andrew