Skip to content

fix: iOS 좌측 스와이프를 뒤로가기 버튼이 있는 화면으로 제한 + 장소 카드 스피너 - #149

Merged
bsy1141 merged 3 commits into
mainfrom
fix/qa-followup-4
Aug 20, 2026
Merged

fix: iOS 좌측 스와이프를 뒤로가기 버튼이 있는 화면으로 제한 + 장소 카드 스피너#149
bsy1141 merged 3 commits into
mainfrom
fix/qa-followup-4

Conversation

@bsy1141

@bsy1141 bsy1141 commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

0. 링크

1. 요약

  • 최근 저장한 공간 카드의 처리 중 표시를 실제로 도는 스피너로 바꿨다.
  • iOS 좌측 엣지 스와이프를 "헤더 좌상단에 뒤로가기 버튼이 있는 화면"으로 제한한다. 웹만으로 되는 부분은 이번에 적용되고, 나머지는 다음 앱 빌드에 자동 반영되도록 브리지에 미리 심었다.

2. 작업 내용

최근 저장한 공간 카드 스피너 (PlaceCard)

  • CollectionCard는 #146에서 고쳤는데 장소 카드가 남아 있었다. Icon14Processing 사용처는 이 둘뿐이라 이제 정지된 처리 중 아이콘은 없다.

iOS 스와이프 — 웹만으로 적용되는 부분

셸의 allowsBackForwardNavigationGestures(#64에서 도입)는 WebView 전역 prop이라 웹에서 화면별로 막을 수 없다. 대신 iOS는 돌아갈 백리스트가 없으면 제스처를 인식조차 하지 않는다는 성질을 쓴다.

  • BottomMenuNavLinkreplace로. 탭 사이 이동이 히스토리를 쌓지 않아 탭 루트가 늘 스택 맨 아래에 남는다. 탭 루트 위의 드로어·바텀시트는 원래도 엔트리를 만들지 않아 함께 무반응이 된다. 상세·편집·약관은 그대로 push라 스와이프가 살아 있다.
  • 그러면 Android 백이 어느 탭에서든 곧장 앱을 내리므로, MainTabPageLayout에 인터셉터를 달아 홈이 아닌 탭은 홈(/map)으로 먼저 보낸다. 인터셉터는 BACK_REQUESTED(Android) 전용 경로라 iOS 스와이프에는 영향이 없다.

iOS 스와이프 — 다음 빌드에 자동 반영되도록 심어둔 부분

  • bridge-contractsSET_BACK_GESTURE { enabled }(web→native) 추가. 구버전 셸은 파서의 default 분기에서 null로 떨어뜨려 무시하므로 웹만 먼저 배포해도 안전하다.
  • shared/lib/backGesture가 판정을 모은다. 규칙이 곧 "헤더 좌상단 뒤로가기 버튼의 존재"라, 공용 BackButton이 마운트되어 있는 동안 켜지게 했다 — 화면 목록을 따로 관리할 필요가 없고, 그 버튼을 쓰지 않는 드로어·바텀시트·메인 탭은 저절로 빠진다(PlaceSheet 스티키 헤더가 raw 버튼인 것도 그래서 그대로 둔다).
  • 공용 버튼을 못 쓰는 전체화면 오버레이 셋(사진 뷰어·게시물 미리보기·프로필 편집)은 AllowBackGesture로 직접 선언한다.
  • 전송은 app/native-back이 맡는다 — shared는 브리지를 모른다(backInterceptors와 같은 구조: 등록은 shared, 디스패치는 app).
  • 셸은 받은 값을 그대로 prop에 흘린다. 초기값 true라 이 메시지를 보내지 않는 구버전 웹이 실려도 지금까지의 동작이 유지된다.

3. 확인 필요

  • apps/mobile이 바뀌었다. 화면 단위 토글은 새 빌드를 설치해야 동작한다. 웹만 배포하면 위 "웹만으로 적용되는 부분"까지만 반영된다.
  • 빌드 뒤 동작이 하나 바뀐다. 게시글 → 장소 클릭으로 지도에 딥링크한 경우, 지금은 스와이프가 게시글 상세로 돌아가지만(스택이 이미 깊어 웹에서는 뒤에 쌓인 히스토리를 지울 수 없다) 빌드 뒤에는 무반응이 된다. 지도엔 헤더 뒤로가기가 없어 규칙상 그렇게 되는 것인데, 되돌아가는 쪽을 유지하려면 MapPageuseAllowBackGesture() 한 줄이면 된다.
  • iOS 제스처가 실제로 죽는지는 코드로 증명할 수 없다 — "스택이 한 칸이면 제스처가 인식되지 않는다"는 전제에 기대고 있어 시뮬레이터/실기기 확인이 필요하다. 히스토리 스택 자체는 Chrome에서 idx가 탭 이동 내내 0에 머무는 것으로 확인했다.

bsy1141 and others added 3 commits August 21, 2026 01:50
게시물 카드(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>
@vercel

vercel Bot commented Aug 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nook-client-web Ready Ready Preview Aug 20, 2026 4:52pm

@bsy1141
bsy1141 merged commit f04e76a into main Aug 20, 2026
5 checks passed
@bsy1141
bsy1141 deleted the fix/qa-followup-4 branch August 21, 2026 15:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant