web-dev-qa-db-ja.com

Xcode 7の警告:オブジェクトファイルは、リンクされるよりも新しいiOSバージョン用に作成されました

最近、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デバイスでの私のテストでのすべての外観によって)吐き出しましたか?

それらが単なる警告であることを考えると、私はそれでもうまくコンパイルできますが、間違ったコードを出荷したくないのです。

編集:私はグーグルにメールを送ったが、彼らはトップの人々がそれを調べるだろうと言った。とりあえず、これを読んでいて警告に悩まされている場合は、電子メールを送って対処するように奨励することもできます。

50
Jony Thrive

これは、GCMが依存するライブラリの1つ(ここではプロトコルバッファー)が8.3用に構築されていることを意味しますが、GCMの最小SDKバージョン7.0と互換性があります。 XCode 7はさらに深刻で、警告として報告しますが、以前のバージョンでは報告されていなかったため、常に存在していました。

全体的にこれは無害であり、すべて正常に動作するはずです。また、Googleがmin sdkバージョン(7.0)で依存関係をすべて構築してGCMにパッチを適用しない限り、できることはあまりありません。

35
evanescent

実際には、含まれているライブラリのMinimum Deployment Targetが8.3であり、それをより低いMinimum Deployment Targetとリンクすると、この警告が生成されます。

この場合、ライブラリは8.3よりも低いターゲットを公式にサポートしません。このライブラリをower Minimum Deployment Targetでターゲットにリンクしても動作しますが、8.3のみのコードが実行されると、実行時にクラッシュする可能性があります8.3よりも古いシステムを実行するデバイス。

開発者が8.3を最小ターゲットとして設定し、この警告should NOTを無視する理由があります。このケースでは無害かもしれませんが、他のケースでは必ずしも無害ではありません!

これらの警告を修正するには、ライブラリの古いバージョンを使用するか、最小展開ターゲットを8.3に設定します。

34
Legoless

私の修正方法:

  1. 「展開ターゲット」がPodfile「プラットフォーム」に等しいことを確認します
  2. DerivedData(/ Users/yourUser/Library/Developer/Xcode)を削除します
  3. ポッドインストール(ターミナル)
  4. プロジェクトのクリーン/ビルド

追伸必要に応じてさらに情報を追加できます。

21
OMGHaveFun

targets/Build Settings/Linking/Other Linker Flags、add

-w

警告を黙らせます。

8
wj2061

参考までに、関連するポッドの最新バージョンはこの問題を修正したようです。

具体的には、GoogleInterchangeUtilitiesの1.0.0から1.1.0へのアップグレードがトリックを実行したようです。

これが表示されている場合は、「ポッドアップデート」ですべてが改善されるはずです。

3
Codiak

私の場合、その理由は、podsを更新してからdeployment targetを以前よりも低く変更し、そのような警告を受け取ったからです。 pod updateを再度実行すると、問題が解決します。

1
Injectios