ねこ島

iOSのこととか、日常について雑に書きます

GoogleMaps+CarthageをXcodeGenで扱う

いつの間にかGoogleMaps SDKをCarthage経由でいれられるようになっていました。
個人的にCocoaPodsで管理するライブラリを減らしたいと思っていたところなのでこれは助かりますね。

developers.google.com

上記リンクに書いてあるとおりにプロジェクトファイルをいじればOKなのですが、XcodeGenを使っている場合はプロジェクトファイルではなく設定ファイルを書き換える必要があります。

追記した内容としてはこんな形です。

targets:
  HogeHogeApp:
    type: application
    platform: iOS
    sources:
      - path: HogeHogeApp
      - path: Carthage/Build/iOS/GoogleMaps.framework/Resources/GoogleMaps.bundle
        optional: true
        type: folder
    dependencies:
      - carthage: GoogleMaps
        embed: false
      - carthage: GoogleMapsBase
        embed: false
      - carthage: GoogleMapsCore
        embed: false
      - sdk: libc++.tbd
      - sdk: libz.tbd
    settings:
      base:
        OTHER_LDFLAGS: $(inherited) $(OTHER_LDFLAGS) -ObjC

それぞれ追記した内容の説明。

1. GoogleMaps, GoogleMapsBase, GoogleMapsCoreのリンク

    dependencies:
      - carthage: GoogleMaps
        embed: false
      - carthage: GoogleMapsBase
        embed: false
      - carthage: GoogleMapsCore
        embed: false

Carthageでビルドするとこれらのフレームワークを吐き出すので、dependenciesに指定します。
プレミアムプランを利用している場合はGoogleMapsM4Bの追加も必要です。

2. libc++.tbd, libz.tbdのリンク

    dependencies:
      ...
      - sdk: libc++.tbd
      - sdk: libz.tbd

依存関係の解決として必要になるのでこれも指定します。

3. Other Linker FlagsにObjCを追加

    settings:
      base:
        OTHER_LDFLAGS: $(inherited) $(OTHER_LDFLAGS) -ObjC

ドキュメントに記載があったのでそのまま追加。

4. GoogleMaps.bundleをワークスペースに追加

    sources:
      - path: HogeHogeApp
      - path: Carthage/Build/iOS/GoogleMaps.framework/Resources/GoogleMaps.bundle
        optional: true
        type: folder

こちらもドキュメントに記載がありますが、この作業を行わないとビルドは通っても起動時にGoogle Maps SDKが例外を吐いて落っこちますので必ずやりましょう。