2013-08-13 13 views
11

アーカイブされたアプリを調べると、アプリのバイナリにいくつかのソースコードファイルのフルパスが表示されます。すべてのソースコードファイルがリストされているわけではありません。iOSアプリにデベロッパーパス情報が含まれています

strings - the_binary_app | grep "\.m"

/Users/bbarnhart/myPath/myPath/App/path/path/SourceCodeFile.m

だけでなく、いくつかの他の人を明らかにする。いくつかのソースコードファイルの完全なパスがアプリバイナリにどのように埋め込まれているかを判断することはできません。私はそれらを削除したいと思います。何か案は?これはビルド設定ですか、あるいはプロジェクトファイルが少し壊れていますか?

一部はlibに属し、その他はプロジェクトに属するファイルです。

+1

「デバッグ」モードで構築していますか?その場合、バイナリにはパス情報を含むデバッグシンボルが含まれています。 (私はちょうどそのことを推測しています) – bdesham

+0

アップルに提出されたアーカイブを使用しました。 – bbarnhart

+0

必ずしもあなたがまだデバッグモードではないとは思わない。 [製品]> [スキーム]に移動し、[リリース]または[配布]スキームが選択されていることを確認します。 – bdesham

答えて

8

__FILE__マクロは、現在のファイルのフルパスに展開されます。これは、実行可能ファイルへのパスを取得している可能性があります。たとえば、assertマクロの展開には、__FILE__マクロが含まれています。

strings | grepパイプラインの出力を見てください。それらのファイルごとに、Xcodeでプロジェクトに行き、そのファイルを開きます。次に、ファイルのパスのためのプリプロセッサの出力を検索

related files doodad

を:次に関連ファイルあのものに移動し、「前工程」を選択します。 #の行番号/パス・ディレクティブがたくさんあるため、多くの誤検出があります。これらは無視してもかまいません。デバッグ出力は、実行可能ファイルには含まれていません(ビルド設定で何か変わったことがない限り)。プリプロセッサの出力をファイルに保存してからそのファイルを開き、grepにパイプするか、正規表現の検索/置換を使用して#で始まるすべての行を削除する方が速いかもしれません。

パスが文字列定数として表示される他のインスタンスを検索します。パスが実行可能ファイルに埋め込まれてしまいますケースだ

(__builtin_expect(!(argc > 0), 0) ? __assert_rtn(__func__, "/Volumes/b/Users/mayoff/TestProjects/textViewChanged/textViewChanged/main.m", 16, "argc > 0") : (void)0); 

:あなたはassertマクロを使用する場合たとえば、あなたはこのような何かを見つけるでしょう。

パスが埋め込まれている場所がすべて見つからない場合は、関連ファイルの予定表から[アセンブリ]を選択してみてください。アセンブリには、パスを含むコメントがいっぱいになります。 @の後のすべてがアセンブリ出力のコメントですので無視してください。

パスは.fileディレクティブにも表示されます。私はこれらがあなたの実行ファイルには入っていないデバッグシンボルの出力しか生成しないと思うので、それらも無視することができます。

.section DWARF,...の直後に.ascizディレクティブのパスが表示されます。これはあなたが無視できるデバッグシンボルのものです。

パスがアセンブリ出力に表示される残りのケースを探します。これらのケースを排除する方法を理解する必要があります。どのようにするかは、パスが表示されるコンテキストによって異なりますので、さらに役立つ必要がある場合は、検索した内容で質問を更新してください。

+0

問題のファイルで "assert"を探して、これが原因だとわかりました。詳細な答えをありがとう。 – bbarnhart

+0

@bbarnhartあなたの提案にしたがって、assert.Howでファイルパスを確認できましたか?ちょうどコードの行をコメントすることができますか? – dreamdeveloper

+0

@dreamdeveloperアサートとNSAssertを削除またはコメントアウトすると、それらを削除する必要があります。 – bbarnhart

2

あなたのコードのようなサウンドには、__FILE__マクロが含まれています。