手短に
C++ iOS コードをコンパイルして Amazon AWS SDK にリンクするには、AWS フレームワーク ディレクトリの構造を変更する必要がありました。私は自分が間違ったことを理解しようとしています。
詳細に
Amazon の AWS SDK と統合する必要がある iOS 用の Xcode C++ プロジェクトがあります。SDK の最新バージョンをダウンロードしました。SDK はフレームワークとして配布されます。Amazon の記事Getting Started with the AWS SDK for iOSによると、私がしなければならなかったのは次のことだけでした。
Control キーを押しながらフレームワーク グループをクリックし、[ファイルを < プロジェクト名 > に追加] をクリックします。
他のインターネット リソースと私の個人的な知識から、このフレームワークをプロジェクトの "Build Binary With Libraries" ビルド フェーズに追加しても機能するはずであることがわかりました。
2 つの方法のいずれも機能しませんでした。コンパイラはヘッダー ファイルを見つけることができず、リンカーはバイナリを見つけることができませんでした。さらに、フレームワークがプロジェクトナビゲーターに表示されたとき、ノードを展開しても何も表示されませんでしたが、他のフレームワークには通常、リソースとインクルードファイルが含まれていました。
フレームワークのディレクトリ構造が次のようになっていることに気付きました。
AWSiOSSDK.framework/
Versions/
A/
Headers/
Resources/
AWSiOSSDK
私が理解している限りでは、これはApple が要求するものとまったく同じではありません。それで、必死になってVersions/A
部品を取り外しました。AWSiOSSDK.framework
つまり、フレームワークのすべてのコンテンツをディレクトリの直下に置きます。
驚くべきことに、これですべての問題が解決されました。ヘッダーが見つかり、バイナリがリンクされ、すべてが機能します。なぜだろう。Amazon のような尊敬されている会社によって配布されたフレームワークは、正しい形式を持つべきだと思います。では、なぜうまくいかなかったのでしょうか。変更した構造が機能するのはなぜですか? 異なる構造のフレームワークはありますか? コンパイラとリンカーに元の形式を受け入れるように指示するにはどうすればよいですか? それとも、Amazon は壊れたバンドルを配布していますか?