オープンソースの電子メールクライアントにpdfアノテーションデモライブラリ(つまり、ソースコードを調べることはできません。フレームワークバイナリのみを使用できます)を含めたかったのです。問題は、電子メールクライアントが非ARCコードであったのに対し、pdfバイナリライブラリはそうであったことでした。通常の修正は、単純にとリンカーフラグを使用してそれを回避することです。-ObjC
-fobjc-arc
問題は、pdfバイナリの作成者がライブラリの周りにいくつかのARCラッパーコードをリリースしたことでした。これは私が使用するのにまだ重要です。そこで私がしたことは、xcodeプロジェクトを作成したことです。ラッパーコードをその中に挿入して作成しました。ラッパーコードはバイナリライブラリを使用します。次に、静的ライブラリとしてラッパーコードを含めました。
それから私はエラーを受け取り始めました: ..symbol(s) not found for architecture i386
エラーはラッパーライブラリがpdfフレームワークバイナリで定義されたオブジェクトを見つけることができないことに関するものでした。
同じコードをiPhoneでテストしたところsymbol(s) not found for architecture ARM
、ファイルアーキテクチャの問題ではないことがわかりました。また、ラッパーライブラリを単独でコンパイルすると、問題なく動作することもわかりました。
多くの髪の毛を引き裂き、壁を打ち抜いた後、pdfバイナリを親プロジェクト(およびラッパーの静的ライブラリ)に含めるだけで、物事は魅力のように機能することがわかりました。なぜこれが必要なのですか?ラッパーの静的ライブラリはスタンドアロンである必要があると思いました(親プロジェクトの一部としてコンパイルしたときに、それ自体で正常にコンパイルできるのに、含まれているフレームワークでオブジェクトを見つけることができないのはなぜですか)?