티스토리 뷰
iOS Swizzling 기능 이해하기
Firebase Swizzling이란?
iOS 개발에서 말하는 Method Swizzling은 “메서드 동적 교체”라고 번역할 수 있는데, 이는 특정 메서드의 동작을 런타임에 바꿔치기하는 기술을 의미한다. iOS 앱 개발에서 Firebase를 활용하면 푸시 알림, 애널리틱스, 딥링크 등 다양한 기능을 쉽게 구현할 수 있다. 이러한 편리함의 핵심 기술 중 하나가 Method Swizzling이다. 이번 포스트에서는 Firebase Swizzling이 무엇인지, 왜 활성화되어 있는지, 그리고 이를 비활성화하는 방법에 대해 알아보겠다.
Firebase에서 Swizzling을 사용하는 이유
Swizzling은 iOS의 Objective-C 런타임 기능을 활용하여 특정 메서드를 런타임에 동적으로 교체하는 기술이다. Firebase는 이 기법을 사용하여 앱의 코드 수정 없이도 자동으로 특정 기능을 활성화할 수 있도록 돕는다. 따라서 개발자가 직접 여러 가지 설정을 하지 않아도 Firebase가 자동으로 필요한 작업을 수행하도록 하며 대표적인 예는 다음과 같다:
1. 푸시 알림(APNs) 자동 등록
Firebase Cloud Messaging(FCM)은 앱이 실행될 때 자동으로 APNs 토큰을 등록하고 Firebase 서버로 전송한다. Swizzling이 활성화되어 있으면 개발자가 didRegisterForRemoteNotificationsWithDeviceToken을 직접 구현하지 않아도 된다.
2. Firebase Analytics 자동 이벤트 수집
Firebase Analytics는 Swizzling을 이용하여 화면 이동이나 특정 이벤트를 자동 감지하고 데이터를 수집한다. 이를 통해 개발자가 별도로 코드 추가 없이도 사용자 행동을 분석할 수 있다.
3. Firebase Dynamic Links 자동 처리
Firebase Dynamic Links는 Swizzling을 통해 앱이 특정 URL을 통해 실행될 경우 자동으로 관련 정보를 가져와 처리한다. 이를 통해 딥링크 관련 추가 코드를 최소화할 수 있다.
Firebase Swizzling 비활성화 방법
Swizzling이 편리하지만, 특정한 이유로 직접 제어하고 싶다면 비활성화할 수 있다. Swizzling을 끄는 방법은 Firebase 서비스별로 다르다.
1. FCM Swizzling 비활성화
푸시 알림에서 Swizzling을 끄려면 Info.plist에 아래 설정을 추가하면 된다.
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
이렇게 하면 Firebase가 자동으로 푸시 알림을 설정하지 않으며, 직접 UNUserNotificationCenterDelegate와 UIApplicationDelegate의 didRegisterForRemoteNotificationsWithDeviceToken을 구현해야 한다. 이번에 테스트한 케이스에서 FirebaseApp.configure() 함수를 선언하고 이후에 registerForRemoteNotifications를 호출하면 swizzling이 발생하는 것을 확인하였다.
2. Firebase Analytics Swizzling 비활성화
애널리틱스 이벤트 자동 추적을 비활성화하려면 Info.plist에 다음 키를 추가한다.
<key>FIREBASE_ANALYTICS_COLLECTION_ENABLED</key>
<false/>
이렇게 하면 Firebase가 자동으로 애널리틱스 데이터를 수집하지 않으며, 개발자가 수동으로 Analytics.logEvent를 호출해야 한다.
3. Firebase Dynamic Links Swizzling 비활성화
Dynamic Links Swizzling을 비활성화하려면 Info.plist에 아래 설정을 추가한다.
<key>FirebaseDeepLinkAutomaticRetrievalEnabled</key>
<false/>
이렇게 하면 Firebase가 자동으로 딥링크를 처리하지 않으며, 개발자가 직접 handleOpenURL 또는 continueUserActivity를 구현해야 한다.
결론
Firebase Swizzling은 개발자의 편의를 위해 자동화된 기능을 제공하지만, 프로젝트에 따라 불필요하거나 원치 않는 동작을 할 수도 있다. 앱의 동작을 더욱 세밀하게 제어하고 싶다면 Swizzling을 비활성화하고 필요한 기능을 직접 구현하는 것이 좋다. Swizzling을 끄는 경우, 반드시 관련된 기능을 수동으로 설정해야 한다는 점을 잊지 말자.
'Solution Engineering' 카테고리의 다른 글
[iOS 앱 개발의 핵심 이해] SceneDelegate와 AppDelegate의 차이점 (0) | 2024.05.28 |
---|
- Total
- Today
- Yesterday
- 데이터전처리
- GA4
- Python
- google sheet
- GA API
- google sheet api
- Google Analytics
- Ga
- 데이터분석
- googletagmanager
- ChatGPT
- 구글애널리틱스
- 구글애널리틱스4
- 업무자동화
- 구글시트API
- GTM
- Google Tag Manager
- GCP
- IOS
- Martech
- bigquery
- googleanalytics
- AWS
- 마테크
- 빅쿼리
- 오블완
- GA4 강의
- 구글태그매니저
- 파이썬
- 구글클라우드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |