Skip to content

Day 32 개발일지 iOS

정재명(Jae-Myeong) edited this page Dec 20, 2020 · 2 revisions

32 목요일

inactive 갔다 오면 무조건 메인으로 갔던 것 수정

Navigation in SwiftUI

엄청나게 많은 문제들의 원인이었다. 카메라 권한 설정 후 바로 메인화면으로 가는 것도 이 문제였다. rootview를 갈아 끼우는 방식으로 구현했기 때문에 이런 문제가 발생한 것이었다. 그래서 다른 방법을 고민하고 적용해보았다.

NavigationLink를 사용하는 것이었다. tag를 사용하면 tag 번호의 지정만으로도 쉽게 화면 이동이 가능했다. 이것을 그동안 몰랐어서 fullScreen, sheet, NavigationFlow와 같은 것들을 사용했었다.

이제 루트 뷰를 갈아끼우는 것이 아니라, 메인 화면에서 inactive일 때 다른 tag값을 지정하여 다른 화면으로 이동하도록 바꾸었다. 이렇게 하니, 메인 화면이 아닌 상황에서는 inactive일 때 다시 메인 화면으로 돌아오는 일을 방지 할 수 있었다. 다른 화면들의 tag값을 메인뷰가 관리하기 때문이다.

여기에 그치지 않고 MainViewLinkManager라는 클래스를 만들어, tag 관리를 추상화해주었다. 만들어 나서 다른 자료를 찾다가 우연히 이런 방식으로 화면 전환 로직을 관리하는 방법이 많이 쓰인다는 것을 알게 되었다. UIKit에서 코디네이터 패턴을 사용하듯, 이 기능을 활용하여 라우터 라는 이름으로 널리 사용되고 있던 것이다.

토큰 에딧 뷰

토큰 에딧 뷰에서 키보드를 올리고 화면을 터치하면 다시 메인뷰로 돌아오는 문제가 있었다. 정확한 이유는 모른다. 하지만 키보드가 올라오면서 inactive로 가고, 다시 active로 돌아올 때 main 뷰로 가는 문제로 추정된다. 그래서 위에 네비게이션 링크를 추가한 뒤 이 문제도 깔끔하게 해결되었다.

멀티디바이스 백업 기능 시 싱크잡기

한 디바이스에서 변경하면 이 변경 내용이 백업 기능을 켠 전체 디바이스에 반영되어야 한다는 점이 우릴 힘들게했다.. 그래서 가장 최신 시간으로 작업한 디바이스의 토큰들만 유지할 수 있도록 했는데, 이때 서버와의 시간비교가 핵심이었다. 그런데 자꾸 로컬값이 최신이라고 읽는 것이다.. 분명 서버의 값이 최신인데! 알고보니, 로컬 값은 9시간을 뺀 값이었고, 서버에서 보내주는 값은 현재 시간 값이었기 때문에 이 차이가 발생했다. 이를 고쳐주어 싱크를 어느정도 잡을 수 있었다.

UDID

UDID는 개인정보 때문에 사용할 수 없는 값이었는데, 우리 앱에서 하마터면 사용할 뻔했다. 그래서 이를 대체하기 위해, UUID를 생성해 이를 키체인에 넣고 UDID처럼 사용했다.


개인 회고

(솔직히 쓰기 - 현재 파트너 또는 누군가가 본다고 생각하지 말고 미래의 내가 본다고 생각하며 쓰면 어떨까요??😏)

어진

  • 부스트캠프 처음에 JK님이 보여주셨던 사진이 한 장 있었다. 하나고치면 하나터지는 ...그림..과 함께 이상하게 생긴 이층집ㅎㅎㅎ 그거 우리같다.ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
  • 그래도 버그없는 소프트웨어는 없다고한다. 하나하나 잘 잡아나가야지!!!

재명

  • 하나의 앱을 완성하는 것이 얼마나 어려운 것인지 실감하는 한 주였던 것 같다. 앱이 완성될 수록 각 기능의 연관성이 복잡하게 얽히게 되고, 이에 따라 생기는 사이드 이펙트가 상당했다. 어떤 기능을 고치면 어떤 기능이 고장나는 상황이 계속 반복되었다. 점점 지쳐가지만 끝까지 포기하지 않을 거다.
  • 어제 배포해보길 잘했다. iOS 캠퍼님들이 치명적인 버그들을 알려주셨다. 우리가 알고 있는 것도 있었지만, 우리 디바이스, 우리 시뮬레이터에서는 일어나지 않았던 버그들도 발견할 수 있었다.
Clone this wiki locally