アドホックにインストールした場合にのみ再現されるアプリに問題がありますが、Xcodeからアプリを実行しただけでは再現されません。この問題をデバッグしたいのですが、今のところ運がありません。 Xcode5.1.1を使用しています。これが私がしたことです:
1)[製品]-> [スキーム]-> [スキームの編集]-> [アーカイブ]に移動し、ビルド構成を[デバッグ]に設定します。
2)コード署名IDがiPhoneDeveloperに設定されています。
3)[デバッグシンボルの生成]が[はい]に設定されています。
4)[製品]-> [アーカイブ]に移動し、アーカイブ後、[配布]をクリックして、[エンタープライズまたはアドホック展開用に保存]を選択します。
5)開発プロビジョニングプロファイルが選択されています。
6)[エクスポート]をクリックして、.ipaファイルをエクスポートします。
7)iPhone構成ユーティリティを使用して、アプリをデバイスにインストールします。
8)デバイスでアプリを実行します。
9)Xcodeで、[デバッグ]-> [プロセスにアタッチ]-> [PIDまたは名前で]に移動し、アプリ名を入力します。 Xcodeは正常に接続され、iPadでアプリを実行すると表示されます。
10)ただし、アプリで特定のアクションを実行したときにヒットするはずのブレークポイントをヒットできません(代わりに、Xcodeからアプリをインストールして実行すると、すべてのブレークポイントがヒットします)。
私は何かが足りませんか?
ジム・インガム、あなたの答えに感謝します。
静的ライブラリにデバッグできなかった理由を見つけました。各Xcodeプロジェクトでは、「展開」セクションの下に「ストリップリンク製品」と呼ばれる設定があります。私のすべてのプロジェクトで、この設定は「はい」に設定されていました。
アーカイブによってビルドされたアプリの静的ライブラリにデバッグするために、各依存ライブラリプロジェクト(およびメインプロジェクト)でこの設定を「いいえ」に設定しました。これは、デバッグ/リリースモードに対して異なる方法で設定することもできます。この後、アーカイブ中に作成されたライブラリシンボルが表示され、ライブラリコードにデバッグできます。これが誰かに役立つことを願っています。
残念ながら(またはおそらく幸運なことに)、ライブラリシンボルが削除されていないと、デバッグしようとしていたバグが再現されなくなりました。シンボルが削除されたときに何かが起こるかもしれません、私はさらに調査する必要があります。
この時点では、アプリのデバッグ情報はありません。ほとんどのアプリはかなり完全に削除されているため、lldbがフックするシンボルすらありません。したがって、ブレークポイントを正常に設定することはできません。
アプリをビルドすると、Xcodeはデバッグ情報を含むdSYMファイル(MyApp.app.dSYM)を生成したため、すべてが失われることはありません。問題は、デバイス上のランダムなアプリに接続すると、Xcodeがデバッグ情報の場所を知る方法がないことです。
次のコマンドを使用して、lldbのデバッグセッションにデバッグ情報を追加できます。
(lldb) add-dsym <PathTo.dSYM>
アタッチした後、これを行う必要があります。
lldbはSpotLightを使用してdSYMも検索するため、SpotLightが検索を認識している場所(デスクトップやユーザーディレクトリの下のフォルダーなど)にdSYMを配置すると、lldbが自動的に取得します。
次の手順を実行することで、lldbがdSYMを正常に読み取ったかどうかを確認できます。
(lldb) image list <AppName>
LldbがdSYMを見つけた場合、AppNameバイナリへのパスをリストした後、別の行にdSYMへのパスをリストします。
私は同じ問題に苦しんでおり、Xcodeからアプリを起動するだけでは選択肢がありませんでした。IPAをビルドし、iOSデバイスにサイドロードしてから、デバッグする必要がありました。最終的に、次の手順でそれを機能させることができました。
1)スキームアーカイブターゲットをデバッグに設定します
2)デバッグビルドの次の設定を変更します
3)結果のIPAファイルを再構築、アーカイブ、およびiOSデバイスにデプロイします。
4)アプリを起動し、Xcodeで[デバッグ]/[プロセスにアタッチ]/YourAppName(id)を選択します
5)デバッガーに侵入します-コードを表示したり、ブレークポイントを設定して使用したりできるはずです。
コードを最初からデバッグする場合は、1〜2秒間スリープするループを配置してから、メイン関数の上部にあるフラグを確認します。デバッガーに侵入したら、フラグを変更して許可します。ループをエスケープします。