I want to see what happens in the iOS Simulator if I\'m not testing the app in Xcode.
For example, if I open a link in the Safari simulator, see what happens in the
If you are using Swift, remember that println
will only print to the debug log (which appears in xCode's debug area). If you want to print to system.log, you have to use NSLog
as in the old days.
Then you can view the simulator log via its menu, Debug > Open System Log... (cmd + /)
No NSLog
or print
content will write to system.log
, which can be open by Select Simulator -> Debug -> Open System log
on Xcode 11.
I figure out a way, write logs into a file and open the xx.log
with Terminal.app
.Then the logs will present in Terminal.app
lively.
I use CocoaLumberjack achieve this.
Add DDFileLogger
DDOSLogger
and print logs path. config()
should be called when App lunch.
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
}
Replace print
or NSLog
with DDLogXXX
.
$ tail -f {path of log}
Here, message will present in Terminal.app lively.
One thing more. If there is no any message log out, make sure
Environment Variables
->OS_ACTIVITY_MODE
ISNOT disable.
iOS Simulator > Menu Bar > Debug > Open System Log
Old ways:
iOS Simulator prints its logs directly to stdout, so you can see the logs mixed up with system logs.
Open the Terminal and type: tail -f /var/log/system.log
Then run the simulator.
EDIT:
This stopped working on Mavericks/Xcode 5. Now you can access the simulator logs in its own folder: ~/Library/Logs/iOS Simulator/<sim-version>/system.log
You can either use the Console.app to see this, or just do a tail (iOS 7.0.3 64 bits for example):
tail -f ~/Library/Logs/iOS\ Simulator/7.0.3-64/system.log
EDIT 2:
They are now located in ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log
tail -f ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log
XCode > 6.0 AND iOS > 8.0 The below script works if you have XCode version > 8.0
I use the below small Script to tail the simulator logs onto the system console.
#!/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
You can pass in the simulator type used in the Grep as an argument. As mentioned in the above posts, there are simctl and instruments command to view the type of simulators available for use depending on the Xcode version. To View the list of available devices/simulators.
xcrun instruments -s
OR
xcrun simctl list
Now you can pass in the Device code OR Simulator type as an argument to the script and replace the "iPhone 6 (8.2 Simulator)" inside grep to be $1
I can open the log directly via the iOS simulator: Debug -> Open System Log...
Not sure when this was introduced, so it might not be available for earlier versions.
Under iOS 8 and iOS 9 this location is now:
~/Library/Logs/CoreSimulator/<DEVICE_CODE>
So, the following will work:
tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log
The DEVICE_CODE
value can be found via the following console command:
instruments -s devices