komeの備忘録

東大理系大学院生の技術ブログ。たまに趣味。

OneSignalとFirebaseとSVProgressHUDでビルドすると「Error “‘sharedApplication’ is unavailable:」が出たので解決した話

f:id:komee:20180519221119p:plain

タイトルそのまま。

Xcode上で特定のライブラリを用いて実装していたら、謎のエラーが出てきて悲しくなったがなんとか解決できた話。

環境
Xcode 9.3
Swift 4
iOSネイティブアプリ開発

目次

背景

プッシュ通知ライブラリのOneSignalと、GoogleのBaaSであるFirebaseのiOS用SDK、iOSで人気のプログレスポップアップ表示ライブラリSVProgressHUDを併用してビルドしたら、下記のエラーメッセージと共にビルドが失敗してしまった。

Error “‘sharedApplication’ is unavailable:

stackoverflow.com

調べた所、上記のリンクのエラーと同様であった。

原因

OneSignalを導入する場合、AppExtensionという形式でプッシュ通知拡張機能を実装する必要がある。

その際ライブラリがAppExtensionでの動作をサポートしていない場合にこのようなビルドエラーが出る場合があるらしい。

解決策

OneSignalとFirebaseの場合

Firebaseの最新のSDKのバージョンが5.0.0だが、これだとビルドエラーになるので、動作をサポートしているバージョンである4.3.1を指定してインストールする。

Podfileを以下のように編集する。

pod 'Firebase/Core', '~>4.13.0'
pod 'Firebase/Auth', '~>4.13.0'

次にターミナルで以下のコマンドを入力する。

$ pod update

OneSignalとSVProgressHUDの場合

Xcode上で、左のファイル選択カラムから、Pod -> Build Settings -> Preprocessor Macrosを開く。

その中にあるDebug, Releaseの中身に,SV_APP_EXTENSIONS=0を追記する。

f:id:kaz02251994:20180517174247p:plain

これでビルドが通るようになる。嬉しい。

ビルドが通ってもSVProgressHUDが表示されない場合

Swiftの各ViewControllerのファイル内にSVProgressHUD.setViewForExtension(self.view)を追記することで表示できるようになる。

まとめ

依存関係を気にして楽しいXcodeライフを送りましょう。