コードをExtensionと共有する方法は、色々あります。
Frameworkを使ったり、それぞれのファイルをコンパイル時に含めてしまうように設定したり、今のところ簡単な方法で出来るなら何でもいいかなと思って色々試してみています。
でも、extensionではUIApplicationを使うことができないので、その辺りを使うコードは共有しにくいのが現状です。
ぼくはこういう場合は、以下の記事に書かれているようにマクロを使って対処しています。
uiapplicationdelegate – iOS 8 Extension How To Detect Running – Stack Overflow
最初に、Extensionの設定でマクロを登録しておきます。
Preprocessor Macrosで、検索してDebugとReleaseのTARGET_IS_EXTENSION=1
を両方に追加しています。
#ifdef TARGET_IS_EXTENSION
// ここにExtension用のコード
#else
// 通常のコード
UIApplication *app = [UIApplication shareApplication];
#endif
こんな感じで、使います。
それほど多くの場所では使わないのと、他のアプリでも流用するようなコードでは使わないと決めていますが、お手軽なのでとりあえずこれで解決しています。