スクリーンショット_2019-05-14_23

Swiftでタイピングアプリ制作(4)〜Firebaseを導入する②〜

前回の記事では、Firebaseのために必要なファイルを導入させるところまで記事にしました。ターミナルその他の使い方がわからないと若干厳しくもありましたが、ひとまず、必要なファイルは入れられたはずです。

さて、前回実はインストールできていたようで、エラーメッセージが出ており、インストールはできていませんでした。

XCode 10, iOS 12.2, Swift 5で開発していますが、

下のようなエラーコードを吐いていたので、修正をしました。

[!] The platform of the target `typelab macOS` (macOS 10.14) is not compatible with `Firebase/Core (6.0.0)`, which does not support `osx`.

[!] Automatically assigning platform `ios` with version `12.2` on target `typelab iOS` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

[!] Automatically assigning platform `osx` with version `10.14` on target `typelab macOS` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

ということで、macOSには対応していないとのこと。macOSのFirebaseインストールをPodfileから取り除いて下記のようにしたら、無事、インストールが始まりました。

target 'typelab iOS' do
  platform :ios, '12.2'
  use_frameworks!
  pod 'Firebase/Core'
end

target 'typelab macOS' do
  use_frameworks!
end

インストールが完了!!

macOS用のアプリは別途考えます。ひとまず、Swift x Firebaseが動くか検証します。

installation complete!と出たので、これでひと安心、なはずです。

初期化コードの追加

Firebaseのチュートリアルを進めると、下記のように出てきます。

太字になっている行をクリックすると、勝手にコピーされるので、AppDelegate.swiftのファイルに入れていきましょう。

入れて実行!!!!となったのですが・・・

早速エラーを返されてしまいました。

Objective-Cのモジュール、Firebaseは使えないよーとのことです。

残念。このインストールの仕方では上手く行かなかったようです。

原因を突き止める(1)

原因は「Swiftのバージョンが5である」という仮説を立てました。

4.2のSwiftバージョンであれば、5でも活用できるようで、それがQiitaの記事に書かれているのを発見しました。

この方法を実行してみました。下のコードでPodsをインストールし直しましたが、動作はしませんでした。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '4.2'
    end
  end
end

target 'typelab iOS' do
  use_frameworks!
  pod 'Firebase/Core'
end

target 'typelab macOS' do
  use_frameworks!
end

結果:動きませんでした。Swiftのバージョンが5だからといって、関係がないようです。

原因を突き止める(2)

原因を「Firebaseのバージョンが6.0.0はSwiftをサポートしていない」という仮説を立てました。Firebaseのリリースノートをみると、6.0.0の前のバージョンは、5.19.0なので、そのバージョンをインストールします。

Podfileはこんな感じ。

target 'typelab iOS' do
  use_frameworks!
  pod 'Firebase/Core', '5.19.0'
end

target 'typelab macOS' do
  use_frameworks!
end

結果:また同じエラーがでました。バージョンが問題ではないようです。


原因を突き止める(3)

今までのFirebase v6.0.0も、v5.19.0もいずれも、podでインストールされるファイルには、「Firebase.h」のファイルしかできませんでした。

そして、これは「Objective-C」で活用するコンパイルされたファイルなので、そこに問題があるかもしれません。つまりエラーメッセージを読見とくとこんなふうになっていることに気づきます。

Could not build Objective-C module 'Firebase'
Objective-C言語のモジュールFirebaseは使えないよ。

ここに活路がありそうです。つまりpodで何らかのオプションが足りておらず、Swift用のモジュールではなく、Objective-C用のモジュールが作られてしまっている。

という仮説を立てることができるではありませんか!

ということで、cocoapodsのドキュメントを見てみます。すると、

こんな記事に出会いました。私はxcodeprojを開いてしまっていましたが、開くべきは、「typelab.xcworkspace」だったのです!!

無事ビルドも、アプリとの接続も成功しました!!!やったー!!

ということで、紆余曲折ありましたが、Firebaseとの接続はこれで成功です。

次回はデータベースにキーのログを保存するプログラムを書きたいと思います。


ただ続けることを目的に、毎日更新しております。日々の実践、研究をわかりやすくお伝えできるよう努力します。