Есть ли способ захватить вывод NSLog на iPhone, если он не подключен к отладчику?

Я регистрирую кучу данных с помощью NSLog(). Есть ли способ захватить данные журнала, когда мой iPhone не подключен к моей машине разработки и работает под отладчиком?

Например, можно ли перенаправить его в файл, а затем прочитать файл журнала обратно через Xcode на более поздний момент времени? Мне нужно сделать это, чтобы проверить мое приложение, когда Wi-Fi плохой, что требует от меня далеко от моего стола.

Ответы

Ответ 1

Я уверен, что вызовы NSLog() будут записаны в журнал системной консоли, поэтому, если вы подключите свой iPhone к компьютеру после выхода в автономный режим, вы сможете просмотреть консольный журнал в XCode Organizer. Единственное предостережение в том, что консольный журнал ограничен по размеру, поэтому старые записи могут быть отключены, если вы выполняете много протоколирования.

Ответ 2

В приведенном ниже методе в папке "Документы" вашего приложения будет создано имя файла "console.log", чтобы вы могли впоследствии его прочитать.

Вызвать этот метод в начале вашей программы:

- (void) redirectConsoleLogToDocumentFolder
{
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
  freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}

Журнал никогда не будет удален, поэтому используйте его с осторожностью.

Как только вы протестировали свое приложение в этом поле, снова подключите свой телефон к Mac, в Xcode откройте Организатор. На панели "Сводка" у вас есть список всех приложений на вашем телефоне. Разверните ту, которую вы отлаживаете, и вы увидите пакет с именем "Application Data".

Нажмите стрелку справа от ее имени и сохраните ее. Вы закончите с папкой с именем вашего идентификатора Bundle с последующей датой.

Внутри этой папки вы найдете свою папку документов, в которой должен быть console.log

Ответ 3

В App Store также есть приложение Console, но оно работает только для iOS 6 и более ранних версий.

Когда вышел iOS 7, он фактически прекратил работу. (Теперь он может читать только свои собственные журналы консоли, а не только всей системы.)

Ответ 4

Марк Новаковски прав. Выход на консоль регистрируется на телефоне, а когда вы подключаете свой Mac к своему телефону, вывод консоли доступен в окне органайзера.

Просто выберите свой телефон на панели устройств и выберите вкладку консоли. Недавний выход на консоль будет прямо там. Очень круто.

Я просто понял это. Это будет очень полезно в таких ситуациях, как вы описываете, где вам нужно быть вдали от вашего компьютера.

Кстати, у меня есть решение вашей потребности протестировать слабые сигналы Wi-Fi. Просто заверните телефон в алюминиевую фольгу, а USB-кабель торчит из фольги. Если вы работаете с ним, вы можете выполнить один шаг через код в отладчике. Вы не можете манипулировать пользовательским интерфейсом, но можете деградировать/исключить радиосигналы, такие как 3D, WiFi и GPS. Если вы хотите снизить уровень сигнала, но не полностью отменить его, вам может потребоваться поэкспериментировать, частично покрывая телефон фольгой, помещая небольшие отверстия в покрытие и т.д.

Осторожно: не оставляйте телефон, завернутый в фольгу, более чем на несколько минут за раз. Вероятно, он перегреется.