대상과 발표 개요
게임엔진·React Native·Flutter 등으로 개발해 Xcode를 빌드·배포 용도로만 쓰던 초보 iOS 개발자를 대상으로 한다고 밝힌다. 외부 플랫폼 연동 시 겪는 오류 해결 시간을 줄이는 팁을 주고, 개발자 실수와 오류 분리·원인 파악 방법을 순서대로 다루겠다고 안내한다.
빌드 전 설정해야 할 Xcode 항목들의 누락 사례를 짚는다. Capability(Sign in with Apple 등), 앱 간 통신용 URL Scheme, Info.plist의 ATS와 프라이버시 권한 문구, 링크·임베디드 라이브러리, Copy Bundle Resources, Other Linker Flags의 `-ObjC` 등을 빠뜨리면 빌드·런타임 오류나 크래시가 난다고 설명한다.
프로젝트가 타겟이라는 레이어를 거쳐 하나의 빌드(산출물)를 만든다는 구조를 설명한다. 타겟은 소스·라이브러리·리소스와 각 설정을 포함하며, 한 프로젝트에 여러 타겟을 두고 다른 설정으로 여러 산출물을 빌드할 수 있다. 프로비저닝 프로파일과 아키텍처(i386·x86_64 포함 시 오류) 이슈도 언급한다.
오류가 발생한 위치를 먼저 파악하는 이유를 설명한다. 앱 개발 관계자가 많으므로 어디서 오류가 났는지 확인하는 것은 곧 어느 개발자가 봐야 하는지를 정하는 것이다. 빌드·코드사인·심사·실행·특정기능 등 단계로 구분해 리소스 낭비를 막을 수 있다고 강조한다.
Foundation의 NSError 구조를 파헤친다. 오류 소속을 나타내는 domain, 고유 식별 정수 code, 여러 정보를 담은 userInfo가 있고, 그중 underlyingError로 원인 오류를 중첩해 최초 발생 지점까지 추적할 수 있다. SDK가 서버 오류까지 포함시켜 운영 중 오류에 효율적으로 대처하는 사례를 든다.
Xcode가 제공하는 디버깅 기능을 소개한다. 빌드 로그로 컴파일러·링커 옵션과 오류(Undefined symbol 등)를 확인하고, 콘솔로 런타임 로그를 필터링하며, 브레이크포인트에서 lldb 명령으로 변수 값을 확인·변경한다. 연결 단말기·시뮬레이터 정보와 네트워크·발열 상태 지정 기능도 다룬다.
크래시 덤프 확인법을 설명한다. Bad Access 같은 크래시 유형, 트리거된 스레드, 백트레이스 콜스택을 통해 오류 원인을 추정한다. 주소값만 표시되는 심볼리케이트되지 않은 상태를 개발자가 읽을 수 있는 심볼명으로 치환하는 심볼리케이션 과정과, 실패할 수 있음을 함께 짚는다.
웹뷰에 로딩된 웹페이지를 Safari로 디버깅하는 방법(단말기 웹 속성 활성화, 브레이크포인트·성능·쿠키 확인)을 소개한다. 이어 바이너리 내 문자열을 찾는 strings, 클래스·메서드 구조를 보는 otool, 아키텍처를 확인하는 file 등 터미널 명령을 소개하며 발표를 마무리한다.