IOS앱을 개발하다 보니 Android와 마찬가지로 에러 추적 및 성능을 분석하기 위해 Sentry를 적용시키는게 좋을거 같아 이 글을 작성하게 되었습니다. 저는 이미 Android 앱에 Sentry를 적용시켜 서비스를 하고 있으며 sentry를 사용하면 어떤 이점이 있는지에 대해 알려드리겠습니다.
(Android 기준이며 주니어 개발자 입장에서 편한걸 말씀드리겠습니다 ..^^)
Sentry는 에러 모니터링 및 어플리케이션의 성능 분석 도구입니다. 저희 회사에선 이미 백엔드 , 웹 ,Androi 등 다양한 플랫폼에서 이미 적용시키고 있었습니다.
실시간 에러 추적 가능
성능 모니터링
사용자별 태그도 추가 가능하다
알림 기능도 있어서 특정 에러 발생 시 슬랙이나 이메일(우린 하이웍스쓰는데 가능)에도 알림을 쓸수 있다.
여기까지가 제가 직접 써본 Sentry의 장점들입니다.
앱의 특성상 에러 추적이 어렵고 사용자가 crash일어난 곳을 특정하기 어려운데 view계층에서 어디서 에러가 났는지를 알수있어 매우 편함..심지어 위에 말한 기능을 써도 onPremise로 사용해도 무료임!!
제가 개발하고 있는 IOS의 개발 환경은 Swift언어를 사용하고 있으며 SwiftUI로 앱을 개발하고 있습니다. cocoapod으로 의존성을 관리하고 있습니다. 이번 포스팅에서는 어떻게 센트리를 도입하는지에 대해 알려드리겠습니다.

IOS 선택 후 -> 원하는 프로젝트 이름 선택 -> Create Project클릭

Create 를 누르면 다음과 같이 Install부분에서 설치마법사라고 있는데 이걸 프로젝트에서 입력하게 되면 자동으로 sentry에 필요한 부분을 설정해준다! (편리함 ㅎㅎ)

brew install getsentry/tools/sentry-wizard && sentry-wizard -i ios
다음과 같이 복붙을 하게 되면

이렇게 질문리스트가 나옴
Q.프로젝트가 깃허브 저장소 안에 있지 않은데 그냥 계속 진행해도 괜찮겠냐?
A. Yes
Q. Are you using Sentry SaaS or self-hosted Sentry? (센트리가 saas인지 아니면 onPremise인지?)
A. 저는 테스트를 위해 Saas환경에서 진행했기 떄문에 SentrySaaS 선택
Q. Do you already have a Sentry account? (센트리 계정이 있는지?)
A. 있다고 누르면 자동으로 링크가 열리고 만약 안열리면 빨간색 선이 그어져있는 링크를 타고 들어가면 됨 . 그 다음 내가 생성한 프로젝트로 로그인을 해주면 끝-
1번까지 완료를 하면

이렇게 자동으로 Sentry library가 추가됨.
또한 
이렇게 App 메인에서 자동으로 DSN과 설정들을 추가를 해준다.(매우 편함ㅎㅎ)
만약 수동으로 하실거면 1번의 기능을 생략하시고 cocoapod에 sentry추가하고
sentry-cli upload-dsym을 입력하여 dSYM(디버그 심볼파일)을 추가해줘야 됩니다.
**(만약 디버스 심볼 파일 추가 안하면 sentry가 앱의 크래시 로그를 제대로 볼수가 없습니다)
그 다음 Xcode에서 TARGETS -> Build Phases -> +버튼 누른 뒤 New Run Script Phase로 생성을 해주고 아래의 코드를 추가해줍니다.
# This script is responsable to upload debug symbols and source context for Sentry.
if [[ "$(uname -m)" == arm64 ]]; then
export PATH="/opt/homebrew/bin:$PATH"
fi
if which sentry-cli >/dev/null; then
export SENTRY_ORG=AccountNAME
export SENTRY_PROJECT=YOUR-PROJECT-NAME
export SENTRY_AUTH_TOKEN=YOUR_TOKEN
sentry-cli upload-dif "$DWARF_DSYM_FOLDER_PATH"
ERROR=$(sentry-cli debug-files upload --include-sources "$DWARF_DSYM_FOLDER_PATH" 2>&1 >/dev/null)
if [ ! $? -eq 0 ]; then
echo "warning: sentry-cli - $ERROR"
fi
else
이제 앱을 실행해보면 SentrySDK.capture(message: "This app uses Sentry! :)")가 뜨게 되는걸 볼수 있습니다. 정상적으로 ㅎㅎ
