Можете ли вы перенаправить вывод журнала консоли Xcode на терминал при запуске iPhone Simulator? - PullRequest
16 голосов
/ 15 декабря 2009

Мне не нравится использовать окно вывода консоли Xcode при отладке приложения для iPhone в симуляторе (или в этом отношении на устройстве). Я хотел бы иметь возможность использовать инструментарий Unix и делать такие вещи, как фильтрование вывода журнала с помощью grep. Но для этого мне нужно, чтобы Xcode отправлял вывод регистрации для запущенного приложения iPhone в Терминал.

Есть ли способ сделать это?

Ответы [ 6 ]

5 голосов
/ 08 октября 2014

В XCode 6 журналы размещаются здесь: /Users/<username>/Library/Logs/CoreSimulator/<app guid>/system.log. username - это, конечно, системное имя пользователя, а appid - это то, что XCode генерирует для симулятора.

Самый простой способ определить, что такое guid приложения , - это создать приложение для симулятора и посмотреть, какой каталог был последний изменен:

~ ❯❯❯ 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 или все, что вы захотите сделать с живым журналом.

4 голосов
/ 15 декабря 2009

Не могу сказать, как это будет работать в симуляторе, но перенаправление stdout не очень сложно. Скажем, вы хотели передать это на ваш собственный взгляд:

#include <unistd.h>

stderr->_write = RedirectOutputToView;
stdout->_write = RedirectOutputToView;

И использовать прототип:

int RedirectOutputToView(void *inFD, const char *buffer, int size);
2 голосов
/ 27 сентября 2013

Я обнаружил, что этот ответ хорошо работает для моей цели, хотя для его потоковой передачи в терминале требуется симулятор:

Я удалил проверку симулятора и добавил оператор 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 ) и настройте его по своему усмотрению.

1 голос
/ 13 декабря 2017

Почему бы не использовать Console.app? Хороший способ просмотра и просмотра журналов, вместо окна отладки или терминала xCode. Это часть macOS по умолчанию.

enter image description here

Если у вас есть операторы C printf, то следующая SO содержит много полезной информации: Получить printf на Console.app

1 голос
/ 12 января 2017

Я могу получить вывод устройства в терминале, но не смог подключить сеанс отладки в xcode одновременно (я полагаю, потому что терминал имеет соединение для отладки).

Запустите приложение из терминала, используя idevicedebug.

idevicedebug -u <device uuid> run com.myco.apps.myapp

Где com.myco.apps.myapp - идентификатор пакета, который можно увидеть на панели «Установленные приложения» в окне устройств.

Я думаю idevicedebug устанавливается вместе с ideviceinstaller и может быть сделан с помощью brew

brew install ideviceinstaller

Но я рекомендую поискать ideviceinstaller и libimobiledevice (библиотеку, которую он использует) просто для уверенности.

Это немного раздражает, но я нашел лучший способ получить вывод программы в терминале.

0 голосов
/ 15 марта 2017

В Xcode 6 это уже делает это. Откройте файл System.log, связанный со сборкой симуляторов, которую вы сейчас используете. Для меня это здесь: /Users/josh.lang/Library/Logs/CoreSimulator/3BB4CBFB-5A67-4E93-91B5-78E6E3658A16/system.log

Он сохранит все это, но я заметил, что если он открыт во время работы моего сима, он также сам перезагружается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...