fix: iOS 좌측 스와이프를 뒤로가기 버튼이 있는 화면으로 제한 + 장소 카드 스피너 - #149
Merged
Conversation
게시물 카드(CollectionCard)는 이미 고쳤는데 장소 카드가 남아 있었다. Icon14Processing 사용처는 이 둘뿐이라 이제 정지된 처리 중 아이콘은 없다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
제품 규칙은 "헤더 좌상단에 뒤로가기 버튼이 있는 화면에서만 좌측 스와이프"인데, 셸의 allowsBackForwardNavigationGestures 는 WebView 전역이라 웹에서 화면별로 못 막는다. 대신 iOS 는 돌아갈 백리스트가 없으면 제스처를 인식조차 하지 않는다 — 탭 루트가 늘 스택 맨 아래에 있게 만들면 별도 판정 없이 규칙이 성립한다. - BottomMenu 의 NavLink 를 replace 로. 탭 사이 이동이 히스토리를 쌓지 않는다. 탭 루트 위의 드로어·바텀시트는 원래도 엔트리를 만들지 않아 함께 무반응이 된다. 상세·편집·약관은 그대로 push 라 스와이프가 살아 있다. - 그러면 Android 백이 어느 탭에서든 곧장 앱을 내리므로, MainTabPageLayout 에 인터셉터를 달아 홈이 아닌 탭은 홈(/map)으로 먼저 보낸다. 인터셉터는 BACK_REQUESTED(Android) 전용 경로라 iOS 스와이프에는 영향이 없다. 게시글 → 장소로 지도에 딥링크한 경우는 스택이 이미 깊어 스와이프가 온 곳으로 되돌아간다 — 웹에서는 뒤에 쌓인 히스토리를 지울 수 없어 그대로 둔다(제품 확인). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
히스토리 스택만으로는 규칙을 완전히 맞출 수 없다(딥링크로 깊이 들어간 지도 등).
셸의 allowsBackForwardNavigationGestures 를 화면마다 켜고 끌 수 있게 계약을 미리
넣어둔다 — 다음 빌드가 나가면 별도 작업 없이 그대로 동작한다.
- bridge-contracts: SET_BACK_GESTURE { enabled } (web→native). 구버전 셸은 파서의
default 분기에서 null 로 떨어뜨려 무시하므로 웹만 먼저 배포해도 안전하다.
- shared/lib/backGesture: 판정 레지스트리. 규칙이 곧 "헤더 좌상단 뒤로가기 버튼의
존재"라, 공용 BackButton 이 마운트되어 있는 동안 켜지게 했다 — 화면 목록을 따로
관리할 필요가 없고, 그 버튼을 쓰지 않는 드로어·바텀시트·메인 탭은 저절로 빠진다
(PlaceSheet 스티키 헤더가 raw 버튼인 것도 그래서 그대로 둔다).
- 공용 버튼을 못 쓰는 전체화면 오버레이 셋(사진 뷰어·게시물 미리보기·프로필 편집)은
AllowBackGesture 로 직접 선언한다.
- 전송은 app/native-back 이 맡는다 — shared 는 브리지를 모른다(backInterceptors 와
같은 구조: 등록은 shared, 디스패치는 app).
- 셸은 받은 값을 그대로 prop 에 흘린다. 초기값 true 라 이 메시지를 보내지 않는
구버전 웹이 실려도 지금까지의 동작이 유지된다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
0. 링크
1. 요약
2. 작업 내용
최근 저장한 공간 카드 스피너 (
PlaceCard)CollectionCard는 #146에서 고쳤는데 장소 카드가 남아 있었다.Icon14Processing사용처는 이 둘뿐이라 이제 정지된 처리 중 아이콘은 없다.iOS 스와이프 — 웹만으로 적용되는 부분
셸의
allowsBackForwardNavigationGestures(#64에서 도입)는 WebView 전역 prop이라 웹에서 화면별로 막을 수 없다. 대신 iOS는 돌아갈 백리스트가 없으면 제스처를 인식조차 하지 않는다는 성질을 쓴다.BottomMenu의NavLink를replace로. 탭 사이 이동이 히스토리를 쌓지 않아 탭 루트가 늘 스택 맨 아래에 남는다. 탭 루트 위의 드로어·바텀시트는 원래도 엔트리를 만들지 않아 함께 무반응이 된다. 상세·편집·약관은 그대로 push라 스와이프가 살아 있다.MainTabPageLayout에 인터셉터를 달아 홈이 아닌 탭은 홈(/map)으로 먼저 보낸다. 인터셉터는BACK_REQUESTED(Android) 전용 경로라 iOS 스와이프에는 영향이 없다.iOS 스와이프 — 다음 빌드에 자동 반영되도록 심어둔 부분
bridge-contracts에SET_BACK_GESTURE { enabled }(web→native) 추가. 구버전 셸은 파서의default분기에서null로 떨어뜨려 무시하므로 웹만 먼저 배포해도 안전하다.shared/lib/backGesture가 판정을 모은다. 규칙이 곧 "헤더 좌상단 뒤로가기 버튼의 존재"라, 공용BackButton이 마운트되어 있는 동안 켜지게 했다 — 화면 목록을 따로 관리할 필요가 없고, 그 버튼을 쓰지 않는 드로어·바텀시트·메인 탭은 저절로 빠진다(PlaceSheet스티키 헤더가 raw 버튼인 것도 그래서 그대로 둔다).AllowBackGesture로 직접 선언한다.app/native-back이 맡는다 —shared는 브리지를 모른다(backInterceptors와 같은 구조: 등록은 shared, 디스패치는 app).true라 이 메시지를 보내지 않는 구버전 웹이 실려도 지금까지의 동작이 유지된다.3. 확인 필요
apps/mobile이 바뀌었다. 화면 단위 토글은 새 빌드를 설치해야 동작한다. 웹만 배포하면 위 "웹만으로 적용되는 부분"까지만 반영된다.MapPage에useAllowBackGesture()한 줄이면 된다.idx가 탭 이동 내내 0에 머무는 것으로 확인했다.