jarinosuke blog

about software engineering, mostly about iOS

grpc-swift を Carthage 経由でインストールする方法

grpc-swift

grpc-swift は現時点(2018/2/2)では Carthage には対応していない

https://github.com/grpc/grpc-swift/issues/13

このブログではどうにかして、Carthage 経由でそれをインストールするための方法を説明する

動機としてはサポートされている SPM でのインストールがとても辛かったからというのが大きい

SPM のあれこれはこの手順を読んでもらえるといくつか雰囲気をつかめるかも

また下記の内容はタベリーのライセンスページをみて、grpc-swift を使っていたので ishkawa さんにコンタクトを取って教えてもらった。感謝!

手順

1.別で管理する

何はともあれ grpc-swift をフォークもしくは、

何かしら本流とは別のバージョン管理をする必要がある

これからいくつかの変更を加えるのが理由

2.xcodeproj の生成

以下のコマンドを grpc-swift で実行する

swift package generate-xcodeproj

これを実行すると SwiftGRPC.xcodeproj というファイルが生成されるので開く

こちらのファイルもバージョン管理に入っていない場合はこれ以降で編集するので追加するといい

3. modulemap のパスの相対化

どうやら Swift Package Manager で設定された modulemap の header パスは実行環境の絶対パスが指定されるようなので、これを別環境でも動くように相対パスにする

以下を参考に BoringSSL と Czlib のそれを修正する

https://github.com/ishkawa/grpc-swift/blob/carthage-0.2.3/SwiftGRPC.xcodeproj/GeneratedModuleMap/BoringSSL/module.modulemap https://github.com/ishkawa/grpc-swift/blob/carthage-0.2.3/SwiftGRPC.xcodeproj/GeneratedModuleMap/Czlib/module.modulemap

4.zlib-example を消す

zlib-example というビルドターゲットならびにスキームがあるので両方消す

これがあると依存関係で Carthage 実行時にこれもビルドされてしまい、エラーを吐き出す

5.SPM でインストールされた zlib を Git 管理下に置く

.build/checkoutsにあるので追加する

また指定されている zlib の URL は以下が指定されているが

https://github.com/Zewo/zlib.git

こちらは変わっていて以下になっている

https://github.com/ZewoGraveyard/CZlib.git

これが原因でエラーになった場合は一度書き換えるのがいい

6.それぞれのフレームワークのbundle identifierを正しく設定する

これを行わないと実機インストールができないので、適当に com.grpc.swift などを以下のターゲットにつける

  • gRPC
  • CgRPC
  • BoringSSL
  • Czlib

終わりと補足

上記手順を踏むことでおそらく grpc-swift を Carthage でインストールすることが

できるようになるはず。残りやることはいつもの Carthage の手順のみ。

また直近のバージョンだと以下のエラーが頻発するので、現状だと 0.1.x 系を使うことがオススメ。

https://github.com/grpc/grpc-swift/issues/82