Google Play Services for iOS は Chocolate Sweeper でユーザーデータをバックアップ(機種変更時のデータ移行用)するのに使ってるんですが、もうサポートを終了していて、Googleさんは新規プロジェクトでは使うなとまで言っている代物です。
以前もバージョン違いの Open SSL がリンクされちゃって課金処理がうまく行かなくなるという問題(こちら参照)があったんですが、また別のバグが発覚しました。
以前はちゃんと動いていたのに、急にクラッシュするようになったので、Google+のサービスが終了したのが原因じゃないかと思うんですが、ちゃんとは調べてません。
クラッシュした箇所はなんとstrlen関数のなか。NULLポインタにアクセスしてクラッシュしてるので strlen に NULL ポインタを渡していると思われます。
もうサポートも終了していて、ライブラリの内部で起きているので、根本的な解決は難しいところですが、とりあえず strlen でクラッシュするのは回避してみようと思い、NULL チェックをする strlen 関数を定義してみました。
1 2 3 4 5 6 7 8 9 |
extern "C" size_t strlen(const char* p) { if (p == NULL) { return 0; } (以下略) : } |
そしたら、あら不思議、無事クラッシュを回避して、何事もなかったように普通に動いてくれました。めでたしめでたし。
しかし、Google Play Servicesなんて外部のサービスは使わないで、自前のサーバーでバックアップ機能を持たせた方がいいですね。