Можете ли вы перенаправить выход журнала консоли Xcode на терминал при запуске iPhone Simulator?
Мне не нравится использовать окно вывода консоли Xcode при отладке приложения iPhone в симуляторе (или на устройстве, если на то пошло). Я хотел бы иметь возможность использовать панель инструментов Unix и делать такие вещи, как фильтрацию вывода журнала с помощью grep. Но для этого мне нужно, чтобы Xcode отправил вывод журнала для приложения iPhone на терминал.
Есть ли способ сделать это?
Ответы
Ответ 1
Не могу сказать, как это работает в симуляторе, но перенаправление stdout не очень сложно. Скажите, что вы хотите передать его в свой собственный вид:
#include <unistd.h>
stderr->_write = RedirectOutputToView;
stdout->_write = RedirectOutputToView;
И используйте прототип:
int RedirectOutputToView(void *inFD, const char *buffer, int size);
Ответ 2
В XCode 6 журналы записываются здесь: /Users/<username>/Library/Logs/CoreSimulator/<app guid>/system.log
. имя пользователя - это, конечно же, имя пользователя вашей системы, а приложение guid - это то, что генерирует XCode для симулятора.
Самый простой способ определить, что такое руководство для приложения, - это создать приложение для симулятора и посмотреть, какой каталог был изменен последним:
~ ❯❯❯ cd ~/Library/Logs/CoreSimulator
~/L/L/CoreSimulator ❯❯❯ ls -latr
total 64
-rw-r--r-- 1 x staff 519 27 Aug 21:54 iOS Simulator.log
drwxr-xr-x 13 x staff 442 27 Aug 21:54 D283605A-0BA9-43B3-AB6B-F4858BE6E45E
drwxr-xr-x 15 x staff 510 8 Oct 03:56 425D8E41-0842-4F2D-BC22-8C3695E350EF
Очевидно, что 425D8E41-0842-4F2D-BC22-8C3695E350EF - последний измененный каталог, так что теперь вы можете сделать tail -f ~/Library/Logs/CoreSimulator/425D8E41-0842-4F2D-BC22-8C3695E350EF/system.log | grep keyword
или что-то еще, что вы можете захотеть сделать с живым журналом.
Ответ 3
Я нашел этот ответ, чтобы хорошо работать для моей цели, хотя для этого требуется запуск симулятора, чтобы передать его в реальном времени в терминал:
Я удалил проверку симулятора и добавил инструкцию NSLog непосредственно перед перенаправлением, поэтому консоль XCode выплевывает местоположение файла:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
NSLog(@"redirecting STDERR: %@", logPath);
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
Я думаю, что наиболее надежным решением было бы использовать библиотеку протоколирования (например, CocoaLumberjack) и настройте его в любом месте, которое вам нравится.
Ответ 4
Я могу получить вывод устройства в терминале, но не смог подключить сеанс отладки в xcode одновременно (я думаю, потому что терминал имеет отладочное соединение).
Запустите приложение с терминала с помощью idevicedebug.
idevicedebug -u <device uuid> run com.myco.apps.myapp
Где com.myco.apps.myapp - это идентификатор пакета, который можно увидеть на панели "установленные приложения" в окне устройств.
Я думаю, что idevicedebug установлен с ideviceinstaller и может быть выполнен с помощью brew
brew install ideviceinstaller
Но я рекомендую только искать ideviceinstaller и libimobiledevice (библиотека, которая использует это).
Это небольшое раздражение, но лучший способ найти выход программы в терминале.
Ответ 5
В Xcode 6 он уже делает это. Откройте файл System.log, связанный с созданием имитаторов, которые вы используете в настоящее время. Для меня он находится здесь:/Users/josh.lang/Library/Logs/CoreSimulator/3BB4CBFB-5A67-4E93-91B5-78E6E3658A16/system.log
Он сохранит все, но я заметил, что если я открою его во время работы моего сима, он также перезагрузится сам по себе.
Ответ 6
Почему бы не использовать Console.app
? Хороший способ просмотра и grep-журналов, а не для отладочного окна xCode или терминала. Это часть макроса по умолчанию.
![введите описание изображения здесь]()
Если у вас есть инструкции C printf, то в следующем SO содержится много полезной информации:
Получить printf на Console.app