ios symbolication에서 필요한 것들.
IOS Symbolication을 하기 위해선 lipo, otool, atos 요 3개가 꼭 필요하다.
lipo는 symbol에서 지원하는 cpu architecture를 가지고 오는데 쓰이고,
otool은 symbol의 uuid를 꺼내오는데 쓰이고,
atos는 실제 load address를 가지고 코드라인을 찾는다.
mac에선 XCode를 깔면 기본적으로 저 명령어들을 다 쓸 수 있기 때문에 자신의 앱을 symbolication 하려면 mac의 symbolicatecrash만 가지고도 충분하다.
근데 crash report를 서비스하려면 mac은 너무 고가 장비다...
(IDC에서도 따로 관리되어야 하는.. 뭐 그런 존재.. mac workstation은 가격이 후덜덜 하니..)
그래서 리눅스에서 symbolication을 해야 하는게 좋고.. 싼 머신을 여러개 두는게 더 나은 편인데.. 일단 리눅스에선 lipo도 otool도 없다. 물론 atosl은 있으니까 코드라인 찾는 건 된다.
(atosl을 이용한 심볼리케이션 참조)
그럼 나머지 lipo에서 하는 것과 otool에서 하는 걸 좀 살펴보자.
lipo -info : symbol이 지원하는 architecure 확인
otool : symbol이 가진 architecure의 uuid를 확인 (dwarfdump -u로 해도 됨)
저 두개의 명령어로 하는 일은 crash가 났을 때 어떤 symbol이 진짜 소스코드가 들어있는 녀석인지 찾기 위함이다.
처음에는 저 두개가 없어서 이래저래 매칭되는 dSYM을 찾는게 힘들었다. 근데 atosl source code를 보다 보니.. (C로 되어 있어서 올만에 머리가 아팠네..;;) dwarf를 이용해서 dsym의 정보를 읽어오는 부분이 있는 것을 확인해서 요기를 고치기 시작했고.. 테스트 해보니 잘 동작한다.
만든 버전은 https://github.com/5dolstory/atosl 요기에 있고 명령어는 다음과 같다.
UUID 정보 확인하기
atosl -u -A armv7s -o /8.4 (12H143)/Symbols/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
-> b0f9be4f9a9b385eae69b5253766c059
Symbol 지원 Architecure 확인하기
atosl -a -o /8.4 (12H143)/Symbols/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
-> armv7s
정리하면
otool = atosl -u -A -o
lipo = atosl -a -o
atos = atosl -A -o -l
이렇게 된다.
이제 여기까지 했으니 match 로직을 개선해서 system usr library까지 모두 심볼리케이션 해보자.