NSLog を使用して iOS 8 拡張機能をデバッグするにはどうすればよいですか?
-
21-12-2019 - |
質問
- (void)viewDidLoad
{
NSLog(@"%s", __func__);
// ...
}
で viewDidLoad
iOS 8の 拡大. 。の NSLog
Xcodeでは何も出力されません。 NSLog
ただし、コンテナアプリでは通常どおり動作します。
拡張機能からデバッグ メッセージの出力を取得するにはどうすればよいですか?
解決
- デバッグアプリケーションの機能。
- シミュレータでも機能します。
- あなたのApp Extがシミュレータ内でクラッシュした場合は、App Extを再起動するのは簡単ではないことがあります。シミュレータを再起動するのは迅速な解決策です。
-
アプリの拡張子をデバッグする手順:
-
コンテナアプリを実行します。このステップでは、Xcodeはコンテナアプリとアプリケーション拡張機能をデバイスまたはシミュレータにアップロードします。
-
-
コンテナアプリを停止します。シミュレータでデバッグするとき、この手順は重要です。できない場合は、Xcodeが使用中のシミュレータが表示されます。
-
Xcodeでメニューデバッグ - >プロセスへの添付 - >プロセス識別子(PID)または名前...、App Extの識別子を入力します。 Debuggingを起動するために、com.abc.containerapp.MyExtension。ブレークポイントを設定することを忘れないでください。 (2014年8月25日更新:あなたの拡張子の名前)を直接入力することができます。)
-
デバイスまたはシミュレータで、アプリケーションの内線番号を開きます。
- シミュレータで拡張子を実行します。
- Xcodeメニューデバッグ - >プロセスへの添付 - >メニューの[システム]セクションの[MyExtension(拡張子名)]を選択します。
2014年8月23日の更新:
私は上記のデバッグ手順を見つけたが、シミュレータ上のiOS 8 SDKベータ5でXcode 6 Beta 6ではうまく機能しないことがわかりません。
溶液:
ブレークポイントが機能します。しかし、ログが出力ウィンドウに表示されない理由はわかりません。
他のヒント
私もこの問題を抱えています。メニューデバッグ - > System Log ...
の下でシミュレータに入った場合は働きます。ここからiPhoneシミュレータのすべてのログを見ることができます(拡張子のログが含まれています)。
NSLog
は働いている 完璧に.
Xcode デバッガーが拡張機能にアタッチされていないため、Xcode のデバッグ領域に何が記録されているかが表示されないだけです。拡張機能は ほぼ 含まれているアプリから完全に独立しています。たとえば、これらは個別のバンドル識別子を持ち、OS 上の個別のプロセスでもあります。
私は Xcode を拡張機能にアタッチすることにさまざまな成功を収めてきました。おそらく自動的にアタッチされるようで、デバッグナビゲーターには「アタッチを待機しています」と表示されますが、アタッチされません。
場合によっては、Xcode で拡張ターゲットを実行できることがあります。
そして、拡張機能を実行するアプリケーションを選択するオプションがあります。この場合、通知センターである「今日」の推奨を選択します。
そしてそうなるだろう 時々 デバッガーを拡張機能にアタッチします。この方法は物理デバイスでのみ機能するようであることに注意してください。
添付されない場合は、@VinceYaun の回答にある手動添付方法を使用できます。
私はまた、他の取り付け方法を使用してさまざまな成功を収めてきました。ほとんどは失敗に終わり、後日修正される単なるバグのようです。
ログ メッセージを表示するには、次の場所に移動します Window
-> Devices
上部のバーでデバイスを選択します。そのウィンドウの下部からデバイス ログを表示できます。シミュレーターでテストしている場合は、@BalestraPatrick の 答え.
いくつかのバグは Beta 2 で修正されており、最終的には拡張機能の起動時にデバッガーが自動的にアタッチされるようになるのではないかと思います。
アップデート: iOS 8 ベータ 4 では リリースノート:
拡張機能
ベータ 4 で修正されました
- Xcode からデバッグするときに拡張機能の起動に失敗することがあります。
- UI を備えた拡張機能が強制終了されると、再起動され、終了されません。
- 場合によっては、共有拡張機能またはアクション拡張機能がハングすることがあります。
- 拡張機能を再デプロイすると、通知センターで拡張機能が無効になる場合があります。
私もこの問題を抱えています。Xcodeはデバッガを拡張子に絶対に添付したり、NSLOGメッセージを表示したりしません。拡張プロセスにXcodeデバッガを手動で添付する場合は、少なくともブレークポイントがチャームのように機能します。
Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")
. - あなたの拡張子のスキームを作成する
- 実行方式
- ダイアログでコンテナapp を選択します。
- を楽しんでください
IT 私のために働く :)
Xcode 8は拡張機能をデバッグできるようになります。
- 停止ボタンの横にあるコンボの拡張方式を選択して実行します。
- 表示されたダイアログで親アプリケーションを選択します。
結果:ブレークポイントとログ作業は通常通りです。
実際にはXcode 6.3に単に実行されるログを持っています。まず、包含アプリを構築して実行します。含めるアプリがデバイス上で実行されていると、スキームをApp Extensionに変更してアプリの拡張子を作成して実行します。
私のために働くトリックは(かなり醜いものですが)私の延長の下隅にダミーのUILabel
をどこかに配置することです。私は通常それをlogLabel
と呼びます。その後、ログに入手する任意のログステートメントでこのラベルのテキストを更新することが可能です。そのようなアプローチは、さまざまなクラスのインスタンスからステートメントを記録する必要がある場合はあまり良くありません。そして明らかに、それはあなたのUIを隠します。
しかし、あなたがかなり単純なウィジェットを持っていて、あなたが軽く雑然としていることを気にしないでください。これはトリックです。私はこの議論で概説されている他のすべての解決策を試して、悲しいことに、それらのどれも私のために働いていませんでした。
唯一の方法は、PIDまたは名前でDebug-> Processへの添付ファイルを選択することです。 その後、 pid を入力してください。 PIDはデバイス上で拡張子を実行して、ウィンドウ - >デバイスに移動して見つけることができます。デバイスを見つけてコンソールを表示します。拡張子の名前が表示されたら、その後5桁の数字です。 PID
PIDを見つけるために、拡張子に束を延ばします。 これはXcode 7
上にありますの拡張子についても同じ問題が発生します NSLog
, 、ブレークポイント。私はそれと何日も戦いました。
Device log
次の画像のように見つけることができます。それは、 XCode -> Window -> Devices and Simulators
.
を入力した後、 Open Console
, 、ダイアログの右上に検索フィールドがあります。そこでフィルタールールを適用できます。たとえば、プロセス名には次のものが含まれます。 Notification
キーワードまたはプロセス名は、拡張ターゲットの名前と同じである必要があります。例:に等しい MyNotificationServiceExtension
プロセス名。
明らかに何かがXcode6-B5で壊れています。
シミュレータで写真拡張子を実行しようとすると、拡張接続プロセスのオプションとして任意のproktionが表示されません。
実際の装置で実行されているのと同じことが、正しい行動を与えてください。
最初のケースでは、ブレークポイントは任されていません。後者の場合、ブレークポイントは魅力のように機能します。
LLVMがタイムのスレッドのみをデバッグしている間、コンテナアプリと拡張子は完全に2つの差分プロセスであることを知っておく必要がありますので、デバッグしている場合、コンソールは拡張子を記録することはなく、ブレークポイントで停止しないでください。
@ vince Yuanの方法でほとんどの問題を解決できます。
しかし、私の問題は、7-8の実行で1回のIOSシミュレータとデバイスの両方でXcodeデバッガの拡張をほとんどフックしませんが、それは完全に確率の問題です。@ vince yuanの方法も時々働きます。
私の小さな経験は、デバッグ方式を実行すると、左側のパネルのデバッグセッションが「デバッグセッションなし」を示す場合、拡張子を開いてテストする必要はありません。デバッガはフックしませんでした。、ラッキーのためにもう一度走るだけです。
しかしcom.xxx.xxx.xxxが添付を待っているのを見ると、拡張機能は間違いなくデバッグすることができます。
これは、iOS拡張子、特にキーボード拡張をデバッグできないのは少しトリックです。
Xcode 6 Beta 5以降、私はIOS8を実行している実際のデバイスを使用して拡張機能をデバッグできました。デバイスで実行してみて、Safariを選択して
に起動します。IDEを変更することによって引き起こされたすべての状態を克服するために、私はLemonjar.comによってiOSコンソールを使用しています - プロセスIDに関係なく、接続されているiOSデバイスのレンダリングのConseDowerウィンドウが表示されます。ここに一度にアプリケーションと拡張デバッグログメッセージの両方を見ることができます。
I could debug my extension with the way I describe below:
- Xcode :
Debug
->Attach to process by PID or Name
. Your extension scheme name. - Then select your
main app target
and run.
I hope it also works for you guys.