Xcodeでアプリをテストしていない場合、iOSシミュレーターで何が起こるかを確認したいと思います。
たとえば、Safariシミュレーターでリンクを開いた場合は、コンソールで何が起こるかを確認します。または、Webアプリをインストールした場合は、コンソールで押しているリンクを確認します。
これどうやってするの?
Xcodeまたはターミナルで表示したいのですが、別のソフトウェアを使用する必要がある場合は問題ありません。
Xcodeでアプリをテストしていない場合、iOSシミュレーターで何が起こるかを確認したいと思います。
たとえば、Safariシミュレーターでリンクを開いた場合は、コンソールで何が起こるかを確認します。または、Webアプリをインストールした場合は、コンソールで押しているリンクを確認します。
これどうやってするの?
Xcodeまたはターミナルで表示したいのですが、別のソフトウェアを使用する必要がある場合は問題ありません。
回答:
iOSシミュレーター>メニューバー>デバッグ>システムログを開く
古い方法:
iOSシミュレータはログを直接stdoutに出力するため、システムログと混ざったログを確認できます。
ターミナルを開き、次のように入力します。 tail -f /var/log/system.log
次に、シミュレーターを実行します。
編集:
これにより、Mavericks / Xcode 5での動作が停止しました。これで、独自のフォルダーにあるシミュレータログにアクセスできます。 ~/Library/Logs/iOS Simulator/<sim-version>/system.log
これを確認するには、Console.appを使用するか、または単に尾を引く(iOS 7.0.3 64ビットなど)ことができます。
tail -f ~/Library/Logs/iOS\ Simulator/7.0.3-64/system.log
編集2:
彼らは今に位置しています ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log
tail -f ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log
console.log
使用して、これらのログの中tail
かConsole.app
デスクトップのSafariを介してiOSシミュレーターのコンソールを表示できます。これは、デスクトップSafariを使用して物理iOSデバイスのコンソールを表示する方法に似ています。
シミュレーターが実行されていて、Webページが開いている場合は常に、デスクトップサファリの[開発]メニューの下に、iOSシミュレーターコンソールを表示するためのオプションがあります。
開発-> iPhoneシミュレータ-> サイト名
iOS 8およびiOS 9では、この場所は次のとおりです。
~/Library/Logs/CoreSimulator/<DEVICE_CODE>
したがって、以下が機能します:
tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log
このDEVICE_CODE
値は、次のコンソールコマンドで確認できます。
instruments -s devices
instruments -s devices
コンソールに入力できます
に頼るべきではありませんinstruments -s
。コマンドラインからシミュレータを操作するために公式にサポートされているツールはxcrun simctl
です。
デバイスのログディレクトリは、で見つけることができますxcrun simctl getenv booted SIMULATOR_LOG_ROOT
。場所が変わっても、これは常に正しいでしょう。
状況が移行したos_log
ので、ホストMacでConsole.appを開くのが簡単になりました。起動したシミュレータは、物理デバイスと同様に、左側にログソースとして表示されます。起動したシミュレータでログコマンドを実行することもできます。
# os_log equivalent of tail -f
xcrun simctl spawn booted log stream --level=debug
# filter log output
xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "myapp"'
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "error" and messageType == info'
# a log dump that Console.app can open
xcrun simctl spawn booted log collect
# open location where log collect will write the dump
cd `xcrun simctl getenv booted SIMULATOR_SHARED_RESOURCES_DIRECTORY`
シミュレーターのWebページでSafari開発者ツール(JSコンソールを含む)を使用する場合:シミュレーターの1つを起動してSafariを開き、MacのSafariに移動すると、メニューにシミュレーターが表示されます。
SafariのアドレスバーからURLをドラッグし、シミュレーターウィンドウにドロップすることで、シミュレーターでURLを開くことができます。も使用できますxcrun simctl openurl booted <url>
。
log help predicates
詳細情報を提供します。述語の形式はNSPredicateに従います。
Console
Mac のアプリケーション([デバイス]でデバイスを選択)を使用して、を使用して送信されたログメッセージを表示NSLog
できます(print
関数のログは表示されません)。
ログを表示したいWebView
場合は、Safary -> Develop -> device
cmd
then
space bar
タイプ「Console
」を押しますenter
。ところで それが今日の正解です。
XCode> 6.0およびiOS> 8.0 以下のスクリプトは、XCodeバージョン> 8.0がある場合に機能します
以下の小さなスクリプトを使用して、シミュレーターのログをシステムコンソールに記録します。
#!/bin/sh
sim_dir=`xcrun instruments -s | grep "iPhone 6 (8.2 Simulator)" | awk {'print $NF'} | tr -d '[]'`
tail -f ~/Library/Logs/CoreSimulator/$sim_dir/system.log
引数としてGrepで使用されるシミュレータータイプを渡すことができます。上記の投稿で述べたように、Xcodeのバージョンに応じて使用可能なシミュレーターのタイプを表示するためのsimctlおよびInstrumentsコマンドがあります。使用可能なデバイス/シミュレーターのリストを表示します。
xcrun instruments -s
または
xcrun simctl list
これで、スクリプトへの引数としてデバイスコードまたはシミュレータタイプを渡し、grep内の「iPhone 6(8.2シミュレータ)」を$ 1に置き換えることができます。
いいえ、NSLog
またはprint
コンテンツはに書き込みますsystem.log
。これは、選択で開くことができますSimulator -> Debug -> Open System log
Xcode 11ので。
方法xx.log
をTerminal.app
見つけて、ログをファイルに書き込んでからを開きます。その後、ログはTerminal.app
活気のある形で表示されます。
CocoaLumberjackを使用してこれを実現します。
DDFileLogger
DDOSLogger
ログのパスを追加して印刷します。config()
アプリランチ時に呼び出す必要があります。
static func config() {
#if DEBUG
DDLog.add(DDOSLogger.sharedInstance) // Uses os_log
let fileLogger: DDFileLogger = DDFileLogger() // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
fileLogger.logFileManager.maximumNumberOfLogFiles = 7
DDLog.add(fileLogger)
DDLogInfo("DEBUG LOG PATH: " + (fileLogger.currentLogFileInfo?.filePath ?? ""))
#endif
}
print
またはNSLog
で置き換えDDLogXXX
ます。
$ tail -f {path of log}
ここでは、Terminal.appにメッセージが生き生きと表示されます。
もう一つ。ログアウトしているメッセージがない場合は、必ず
Environment Variables
->OS_ACTIVITY_MODE
ISNOTを無効にしてください。