Hotwire Native Version Gate는 이러한 모바일 앱 버전 관리 문제를 해결하기 위해 개발된 Ruby Gem입니다. 이 Gem은 앱의 User Agent 문자열에서 플랫폼(iOS 또는 Android)과 시맨틱 버전 번호(예: 1.2.0)를 파싱하여 버전 정보를 추출합니다.
주요 작동 방식
-
User Agent 파싱: 모바일 앱은 User Agent에 “Hotwire Native App iOS/1.2.0;”와 같이 플랫폼 및 버전 정보를 추가하도록 설정됩니다. Gem은 이 정보를 파싱하여 현재 요청의 앱 버전과 플랫폼을 식별합니다.
-
기능 정의:
ApplicationController에서native_feature메서드를 사용하여 특정 기능에 대한 버전 요구사항을 정의할 수 있습니다. 예를 들어,native_feature :native_tab_bar, ios: '1.3.0', android: '1.1.0'와 같이 설정하면 iOS 1.3.0 이상 및 Android 1.1.0 이상 버전에서 해당 기능이 활성화됩니다. -
조건부 렌더링: 뷰나 컨트롤러에서
native_feature?(:feature_name)헬퍼를 사용하여 특정 기능의 활성화 여부를 확인하고, 이에 따라 다른 UI 요소나 로직을 적용할 수 있습니다. 예를 들어,<% unless native_feature?(:native_tab_bar) %>와 같이 사용하여 구버전 앱에만 HTML 탭 바를 표시할 수 있습니다.
설치 및 설정
-
모바일 앱 설정: iOS (Swift) 및 Android (Kotlin) 앱에서
Hotwire.config.applicationUserAgentPrefix를 설정하여 User Agent에 앱 버전 정보를 포함시킵니다. -
Gem 설치: Rails 앱의
Gemfile에bundle add hotwire_native_version_gate를 추가하여 Gem을 설치합니다. -
Concern 포함:
ApplicationController에include HotwireNativeVersionGate::Concern을 추가하여 Gem의 기능을 활성화합니다. 여러 기능이 있다면 별도의 Concern으로 분리하여 관리할 수 있습니다.
추가 헬퍼 메서드
-
native_ios?: 현재 요청이 Hotwire Native iOS 앱에서 왔는지 확인합니다.native_ios?('1.2.3')와 같이 특정 버전 이상인지도 확인할 수 있습니다. -
native_android?: 현재 요청이 Hotwire Native Android 앱에서 왔는지 확인합니다.native_android?('1.2.3')와 같이 특정 버전 이상인지도 확인할 수 있습니다.
이러한 헬퍼들은 플랫폼별 조건부 로직 구현에 유용합니다.