Skip to content

Conversation

gargoyle92
Copy link
Contributor

@gargoyle92 gargoyle92 commented Jun 10, 2025

Type of change

  • Bug fix (non-breaking change which fixes an issue)

What does this change?

  • iOS NaverMap SDK 의 초기 설정값과 반대로 설정되는 코드 수정

Fixes #<issue_number_goes_here> 🎯
#129

@lazyflog
Copy link
Contributor

@gargoyle92 이부분은 더욱 쉬운 해결법이 있습니다.
src/spec/RNCNaverMapViewNativeComponent.ts 이부분의 isShowZoomControls 값을 WithDefault<boolean, true>;로 바꿔주면 됩니다.

@gargoyle92
Copy link
Contributor Author

@gargoyle92 이부분은 더욱 쉬운 해결법이 있습니다. src/spec/RNCNaverMapViewNativeComponent.ts 이부분의 isShowZoomControls 값을 WithDefault<boolean, true>;로 바꿔주면 됩니다.

근본적인 해결책은 아닌 것 같은데 괜찮을까요?
그리고 ShowZoom 을 비롯한 다른 초기화 값들도 상이해서요!

@lazyflog
Copy link
Contributor

@gargoyle92 말씀 주신것처럼 근본적인 해결책은 아니긴 합니다. 생각해보니 올려주신 내용으로 해도 좋을 것 같네요. 감사합니다 :)

@mym0404
Copy link
Owner

mym0404 commented Jun 22, 2025

이게 정확히 어떤 문제인지 알 수 있을까요? ios new arch에서 view recycle로 인해 초기값이 제대로 불러와지지 않는 현상인가요?

updateProps 함수에서 조건문을 하나하나 달아주는것은 코드가 지저분해져서 좋은 해결책이 아닌것같습니다.

@gargoyle92
Copy link
Contributor Author

@mym0404 말씀하시는게 맞습니다 . 리사이클 뷰가 이전 상태를 유지하고 있어서 발생하는 문제입니다.
다시 리뷰해보니 임시방편으로 보여지네요. 일부 코드를 개선해보겠습니다!

prepareForRecycle에서 명시적 초기화
- 모든 Boolean 설정들을 네이버 지도 SDK 기본값으로 리셋
- 레이어 그룹, 지도 타입, 제스처 설정 등 모든 상태 초기화
- 클러스터링 관련 데이터도 완전히 정리
@mym0404
Copy link
Owner

mym0404 commented Jun 27, 2025

기여 감사합니다. 이 방식이 근본적으로 문제를 해결할 수 있다면 좋은 방식이라고 생각합니다. 하지만 New Arch가 도입되면서 View들이 자동으로 recycle이 되며 다른 Native Component 라이브러리들도 동일한 현상을 겪었을 것이라 생각되는데, 다른 라이브러리들의 workaround와 문제 접근법을 조사를 해본뒤에 제대로된 고려를 해볼 예정입니다.

이 이슈가 naver map 컴포넌트를 사용하지 못할 정도로 큰 영향을 미치고 있는 것인가요?

@gargoyle92
Copy link
Contributor Author

네 안타깝게도 해당 문제는 제 경험에서 아주 크리티컬한 문제였습니다.

  • 최초 지도를 1회 초기화하고 해당 화면을 재진입하거나
  • 다른 화면에서 지도를 초기화하면 boolean 값들이 제대로 동작하지 않습니다.

지도상에서 사용할 수 있는 controller (줌 레벨 조정기, 내 위치로) 등의 boolean 이 모두 초기화 되지않아서
안드로이드 vs iOS 가 flag 가 반대로 동작하는 현상처럼 보여지는 크리티컬한 이슈가 있습니다

@qja0707
Copy link
Contributor

qja0707 commented Jul 7, 2025

저도 비슷한 문제로 디버깅을 했었던 적이 있어서 글을 남겨봅니다.

RNCNaverMapView 의 160 번 라인을 보면 상태가 기존과 다를때에만 view props 를 변경하도록 되어있는데 네이버 맵 sdk 에서는 true 이어서 지도에는 컨트롤러가 출력되지만 library native 셋팅은 false 로 되어있어 처음 RN 에서 false 로 넘겨주면 상태값이 같아 변경하지 않는 문제로 파악했습니다. (다른 이슈이면 말씀 부탁드립니다)

newArchitecture codeGen 에 의해 자동으로 생성된 cpp파일에 (ios/build/generated/ios/react/renderer/components/RNCNaverMapSpec/Props.cpp)
isShowZoomControls(convertRawProp(context, rawProps, "isShowZoomControls", sourceProps.isShowZoomControls, {false})), 와 같이 설정되어있었습니다.

스키마(스펙) 파일에서 단순히 boolean으로 선언하고 별도의 기본값을 지정하지 않으면, C++ 기본형의 특성상 false(또는 0)가 사용되는 것 같습니다. (c++ 은 잘 몰라서 혹시 여기서 오류가 있다면 말씀 해주셔도 좋을 것 같습니다 :))

그래서 WithDefault<boolean, true> 를 사용하여 codegen 을 다시 동작하니 Props.cpp 의 isShowZoomControls 기본값이 true 로 설정이 되고 정상동작하는 모습을 보여주었습니다.

그래서 저는 스펙파일 RNCNaverMapViewNativeComponent.ts 의 isSowZoomControls 정의 해주는 라인을
isShowZoomControls?: WithDefault<boolean, true>; 로 변경해서 사용하고 있습니다. 네이버 맵 sdk 기본 값이 true 인 값들은 추가적으로 WithDefault 를 사용해서 true 로 명시해주면 수정되지 않을까 제 생각을 말씀드려봅니다.

PR 을 올리려고 했었는데 벌써 같은 이슈로 올라온 것 같아서 댓글로 남깁니다

@mym0404
Copy link
Owner

mym0404 commented Jul 7, 2025

제가 알기로도 지정하지 않으면 false로 되는것으로 알고있습니다.

그 방법대로 WithDefault 를 통해 js단에서 해결될수있는 문제라면 그 방식대로 해결을 하면 좋을것같습니다.

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.

4 participants