iOS 앱 디버깅: 시스템 로그 수집 7가지 방법
iOS 로그는 앱 내부 이벤트(네트워크 요청, 오류, UI 멈춤, 크래시)를 기록합니다. 시각적 표시 없이 문제를 정확히 파악하는 데 도움이 됩니다. 예를 들어 Pokemon GO의 EXC_BAD_ACCESS, Console의 메인 스레드 I/O, log collect의 CFNetwork 타임아웃 등이 있습니다.
로그는 크래시 보고서(EXC_BAD_ACCESS, SIGSEGV)와 진단 로그(성능, 네트워크, 메모리)로 나뉩니다. 테스터들은 이를 통해 함수 호출을 확인하고, 서버 상호작용을 분석하며, 숨겨진 버그를 찾아냅니다.
.ips 파일: sysdiagnose를 통해
자동 생성된 보고서는 Settings → Privacy & Security → Analytics & Improvements → Analytics Data에서 확인할 수 있습니다. 형식: event_type_date_time.ips, 예: AtiClient-2024-08-14-152242.ips.
보고서 유형:
- CrashReport: 예외와 신호(번들 ID 기준, 예: VKClient).
- JetsamEvent: RAM 부족으로 인한 언로딩(메모리 누수).
- Watchdog: 앱 시작 타임아웃 또는 멈춤.
- SpinReport: 응답 없는 높은 CPU 사용(데드락).
- NotificationServiceExtension: 푸시 알림 실패.
수동 생성: 볼륨 버튼 + 측면 버튼을 동시에 누름(1~1.5초), 파일 stacks.
AirDrop으로 내보내기. 파일은 자동 삭제되니 즉시 수집하세요.
사용 사례: Xcode 없이 실패 분석, 메모리/네트워크 분석.
log collect CLI: 아카이브용 명령줄 도구
Xcode Command Line Tools, USB 연결, Terminal 필요. libimobiledevice로 UDID 확인.
최대 10일 로그 수집(sysdiagnose는 순간 스냅샷과 달리). 더 빠르고 자동화 가능하며 크기 조절 가능.
기본 명령어:
sudo log collect --device-udid <UDID> --last 10m --output iphone_logs.logarchive
주요 매개변수:
--output ~/Desktop/iphone_logs.logarchive— 저장 경로.--last 30m / 2h / 1d— 기간.--start "2025-08-20" --end "2025-08-20 14:30:00"— 날짜.--size 100m— 크기 제한.--device-udid A1B2C3D4R5F8G8H8I1J0— UDID 기준(권장).
분석:
log show --archive system_logs.logarchive --predicate 'process == "AtiClient" AND messageType == "error"'
필터: 프로세스, 오류, 기간.
sysdiagnose와 비교:
| 항목 | log collect | sysdiagnose |
|-----------|----------------|---------------|
| 기간 | 최대 10일 | 생성일 |
| 자동화 | CLI | 수동 |
| 크기 | 조절 가능 | 큼 |
| 속도 | 빠름 | 10~15분 |
사용 사례: 불안정한 버그, 성능 추이, 크래시 맥락.
Console: 실시간 모니터링
Xcode → Window → Devices and Simulators → Open Console. 프로세스별 필터(예: AtiClient). 실시간 표시: 메인 스레드 Hang Risk, libRPAC.dylib 실패.
예시 로그:
Hang Risk com.apple.runtime-issues
message: This method does I/O on the main thread...
libRPAC.dylib failure 19:12:18.350727+0300 AtiClient
오프라인 분석을 위해 .logarchive로 내보내기.
4~7번 방법: 고급 수집
- Xcode Devices and Simulators: UDID별 로그, 서브시스템 필터(CFNetwork, Jetsam).
- libimobiledevice: Xcode 없이 로그 스트리밍
idevicesyslog.
idevicesyslog -u <UDID>
- 코드 내 os_log:
os_log_t와os_logAPI로 커스텀 로그. 레벨: debug, info, error.
- Instruments: 로그와 프로파일링(Time Profiler, Leaks).
주요 요점
- 즉시 실패: .ips (CrashReport, Jetsam).
- 장기 추이: log collect (최대 10일, CLI).
- 실시간 디버깅: Console (메인 스레드 I/O).
- 정확한 디바이스 타겟팅: UDID 필요.
- 전체 분석: sysdiagnose + log show 조합.
— Editorial Team
아직 댓글이 없습니다.