既存の C++ ライブラリを iPhone アプリケーションに統合できますか?
3 に答える
Objective-C で C++ クラスを混在させることはできませんが、iPhone でもサポートされていると思われる Objective-C++ と混在させることはできます。C++ コードを iPhone アプリに統合することは問題ではありませんが、安全を確保したい場合は、コードをライブラリとしてビルドし、iPhone アプリからリンクする必要があります。そうすれば、Obj-C コードと C++ クラスの混在について心配する必要がなくなります。
Apple の承認に関しては、Apple はプロセス全体についてかなり閉鎖的であるため、アプリをストアに含める資格があるかどうかについて、誰もあなたに決定的な答えを与えることはできません. ただし、特定の種類のアプリケーションがうまくいかないことは明らかです。すなわち:
- Apple が好まない方法で iPhone SDK を「悪用」またはねじ曲げるアプリ。IE、デバイスの明るさの設定
- 帯域幅またはシステム リソースの使用量が多すぎる (バッテリ寿命が不必要に消耗する)
- Apple の機能をどこかに複製する (つまり、メール クライアント、Web ブラウザなどを作成する)
- 価格帯とスキームの悪用
実際には、禁止されたアプリの例をグーグルで検索して、それをよりよく理解することをお勧めします. しかし肝心なのは、アプリが何かを行う方法ではなく、アプリが何をしているかが禁止につながるということです。
Objective C++ は、Apple の gcc によって明確に定義され、サポートされています。
しかし、C++ と目的の C クラスを混在させることはできません。C++ と Objective C を深刻な程度まで混合しているプロジェクトは、世の中にあまりないと思います。
これはライブラリに大きく依存しますが、(現実的に) 実行可能であれば、すべての実際の機能に extern "C" エントリポイントを使用して C ライブラリ内に C++ をラップし、iPhone アプリの目的の C コード内からリンクします。
iPhone の開発を始めたばかりですが、既存の C++ ライブラリを変更せずにうまく使用することができました。iPhone の gl ライブラリはすべて C であり、Obj-C ではないため、既に作成したいくつかの OpenGL クラスを持ち込んで問題なく動作します。たとえば、Obj-C を使用して GLubyte 配列にテクスチャをロードしてリソースやサイズなどを取得し、それらの値を C++ コードに渡します。C++ コードは gl 呼び出しを実行してテクスチャを作成します。同じことがジオメトリのロードにも当てはまります。
.m ファイルを .mm に変更するだけで、すべてが機能するように見えます。目的の C++ クラスは、C++ クラスであるメンバーを持つことができます (ただし、他の方法が適用されるとは思いませんが、これは問題になる可能性があります)。