私は99.9%の純粋なCコードとその上にわずかなObjective CレイヤーからなるCocoa Touchフレームワークを持っています。フレームワークは、mytestsymbol
という名前の単一のシンボルをエクスポートするだけです。これを行うために、私はこの行を含むエクスポートされたシンボルファイルを作成します。ココアタッチフレームワークを剥がす方法
_mytestsymbol
私は、「ビルドの設定/リンク」の「エクスポートされたシンボルファイル」のエントリにそれを追加することによって、このファイルを使用するようにリンカに伝えますXcodeでしかし
void mytestsymbol(void)
{
start_the_whole_shebang();
}
、フレームワークを構築し、バイナリエディタを使用して実行可能ファイルの内容を調べるとき、私は私のCに定義されているほとんどすべてのグローバルシンボルを見ることができます:Cコードの面では
、mytestsymbol
次のようになりますソースはまだそこにありますが、私はそれらを公開したくありません!
私はアプリケーションを構築するとき、それは、デフォルトでは「すべてのシンボル」に設定されているのに対し、デフォルトでは、これは単なる「デバッグシンボル」に設定されていることを見ることができますXcodeでCocoaのタッチフレームワークのストリッピングオプションをチェックします。そこで、私はフレームワークの "ストリップスタイル"モードを "すべてのシンボル"に変更し、それをアーカイブしようとしました。
しかし、それはどちらも機能しません。プロジェクトをアーカイブするときに今strip
は、次のエラーが返されます。
Symbols referenced by indirect symbol table entries that can't be stripped in: ...
そして、シンボルのリストを以下に示します。これらはすべて、私のフレームワークが他のフレームワークからインポートするすべてのシンボルです。 printf
、fopen
などのようなCランタイムからのものだけでなく、CFBundleCopyBundleURL
のようなアップルのフレームワークからのものなどです。
strip
はこれらのシンボルを削除しようとしているのでこのエラーが発生すると思いますが、これは私のフレームワークで必要とされているため、これはもちろん禁止されています。
それでは、どのように私は他のフレームワークからのみ(mytestsymbol
除く)私のフレームワークによって定義されたグローバルシンボルではなく、他の輸入を取り除くためのXcodeを伝えることができますか?現在、Cocoa Touch Frameworkのストリッピングスタイルを「すべてのシンボル」に設定することはできません。私は唯一のグローバルCシンボルをストリッピングについて話している
Symbols referenced by indirect symbol table entries that can't be stripped in: ...
注:これは、「すべてのシンボル」に設定されているときはいつでも、(Xcodeのによって呼び出される)strip
は、常に次のエラーを返します。私はObjective CをCのように剥がすことはできないことを知っていますが、それは私にとっては問題ありません。私は本当にCのシンボルだけを心配しています。すべてのCグローバルを削除するにはmytestsymbol
というシンボルを除いてください。
アイデア?