Есть ли способ захватить вывод 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. Если вы хотите снизить уровень сигнала, но не полностью отменить его, вам может потребоваться поэкспериментировать, частично покрывая телефон фольгой, помещая небольшие отверстия в покрытие и т.д.
Осторожно: не оставляйте телефон, завернутый в фольгу, более чем на несколько минут за раз. Вероятно, он перегреется.