Подтвердить что ты не робот

Можете ли вы перенаправить выход журнала консоли Xcode на терминал при запуске iPhone Simulator?

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

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

4b9b3361

Ответ 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