最近、iOS 7とiOS 8をターゲットとするアプリにGoogle Cloud Messagingを統合しました。iOS9のサポートを開始するためにXcode 7ベータ4を取得したところ、リンカーからエラーが発生しました。
ld: warning: object file (.../Pods/GoogleInterchangeUtilities/Libraries
/libProtocolBuffers.a(Descriptor.pb.o)) was built for newer iOS version (8.3)
than being linked (7.0)
そして、libProtocolBuffers.aの一部のための、そのような少数の一握り。
これは、GCMライブラリを使用するにはiOS 8.3が必要であることを意味していますか?もしそうなら、なぜXcode 6は問題なくiOS 7.3にプッシュ通知を配信したコードを(iOS 7デバイスでの私のテストでのすべての外観によって)吐き出しましたか?
それらが単なる警告であることを考えると、私はそれでもうまくコンパイルできますが、間違ったコードを出荷したくないのです。
編集:私はグーグルにメールを送ったが、彼らはトップの人々がそれを調べるだろうと言った。とりあえず、これを読んでいて警告に悩まされている場合は、電子メールを送って対処するように奨励することもできます。
これは、GCMが依存するライブラリの1つ(ここではプロトコルバッファー)が8.3用に構築されていることを意味しますが、GCMの最小SDKバージョン7.0と互換性があります。 XCode 7はさらに深刻で、警告として報告しますが、以前のバージョンでは報告されていなかったため、常に存在していました。
全体的にこれは無害であり、すべて正常に動作するはずです。また、Googleがmin sdkバージョン(7.0)で依存関係をすべて構築してGCMにパッチを適用しない限り、できることはあまりありません。
実際には、含まれているライブラリのMinimum Deployment Targetが8.3であり、それをより低いMinimum Deployment Targetとリンクすると、この警告が生成されます。
この場合、ライブラリは8.3よりも低いターゲットを公式にサポートしません。このライブラリをower Minimum Deployment Targetでターゲットにリンクしても動作しますが、8.3のみのコードが実行されると、実行時にクラッシュする可能性があります8.3よりも古いシステムを実行するデバイス。
開発者が8.3を最小ターゲットとして設定し、この警告should NOTを無視する理由があります。このケースでは無害かもしれませんが、他のケースでは必ずしも無害ではありません!
これらの警告を修正するには、ライブラリの古いバージョンを使用するか、最小展開ターゲットを8.3に設定します。
私の修正方法:
追伸必要に応じてさらに情報を追加できます。
targets/Build Settings/Linking/Other Linker Flags、add
-w
警告を黙らせます。
参考までに、関連するポッドの最新バージョンはこの問題を修正したようです。
具体的には、GoogleInterchangeUtilitiesの1.0.0から1.1.0へのアップグレードがトリックを実行したようです。
これが表示されている場合は、「ポッドアップデート」ですべてが改善されるはずです。
私の場合、その理由は、pods
を更新してからdeployment target
を以前よりも低く変更し、そのような警告を受け取ったからです。 pod
updateを再度実行すると、問題が解決します。