반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

Cherish) 버그 수정.. SwiftUI TextEditor issue 해결 본문

오뚝이 개발자/앱 출시 ( Cherish )

Cherish) 버그 수정.. SwiftUI TextEditor issue 해결

rriver2 2023. 4. 28. 21:07
반응형

이번 버그 이슈를 통해서 얻은 게 많아서 짧게라도 공유하고픈 맘에 블로그를 적었다.

 

중간고사 시험을 준비하던 그 어느 시점... 앱에 버그 신고 리뷰가 달렸다... (쿠쿵 !)

ㅎr... 넘 눈물이 주르륵 흐르는 리뷰였는데, 시험이 1주일 정도 남았을 때였어서... 버그 픽스를 하는 게 쉽지 않았다. 처음엔 간단한 건줄 알고 시험 기간에 xcode를 열어서 작업을 해봤는데,, 잘 안돼서 시험 끝나고 하자! 하며 계속 마음 속으로 슬픈 마음에 끙끙 거렸던... 이슈....

(스마일이 그려준 나..) == (이번 버그를 고칠 때의 내 모습..)

 


 🚨 앱 리뷰에 달린 버그 신고 

처음에 cherisher의 PM이 신고를 해줬고, 후에 앱스토어에도 리뷰가 달렸다. 그냥 어떤 버그가 있습니다가 아닌,  어느 트리거로 문제가 생기는 지 명확하게 적어주셔서 문제의 근원을 빠르게 찾을 수 있었다. 너무너무 감사드립니다 ! 🙌🏻😭 

진짜 너무 친절하신 거 아니냐구요 ㅠㅠ 


🐞 버그 문제 

아래 gif와 같이

일기를 작성하다 글이 길어지면 커서가 오락가락 하면서 스크롤도 오락가락하는... 이슈이다.

(cherish 사용자가 적어주신 내용 그 잡채...)


🐞 버그 발견 이후 cherisher의 반응 ..  

처음 이 문제를 알게 되었을 때 너무 당황스러웠다.. 너무 크리티컬한 이슈인데 이걸 이제 확인했다는 것도 좀 부끄러웠기도 하고, 이 정도면 앱을 지울 만도 하겠다는 생각과 함께 반성을 하게 되었다. 그래서 이 앱을 만든 사람이라는 책임감을 안고 시험 1주일 전인데도 노트북을 잡고 전전긍긍했는데, 이슈의 트리거를 발견하지 못했다..

 

그렇지만, 우리 cherisher와 나눈 이야기에서

유저가 이 이슈를 발견해서 리뷰를 남겼다는 것사람들이 우리가 의도한 대로 집중력 있게 일기를 쓰고 있다는 반증이었고,

이 자체 만으로도 너무 감사했고 나의 동력이 되어주었다.


 👀 버그 인식..  

처음에는 코드가 잘못된 줄 알고, 코드를 계속해서 수정했다. 그러다가 문제를 발견하지 못해서 지금 내가 고군분투 중인 영역을 작게 쪼개어서 바라봐야겠다는 생각을 했고, test라는 project 파일을 파서 textEditor 영역만 빼내어 코드를 짰다.

 

그런데 쿠쿵... 

OMG,,, 이 swiftUI의 textEditor 자체에 문제가 있었다.... 

 

이 이슈와 관련해서 찾아보니까 나와 비슷한 이슈를 마주한 사람을 찾을 수 있었다. (도와주신 촬리님께 감사합니ㄷr...)

그렇지만 아직 개선된 코드가 나왔다는 글은 발견하지 못했고, 나는... 고뇌에 빠지게 되었다.


 👀  chatGPT..?! 

그러다 문득... chatGPT가 생각났다.

그래서 이 이슈에 대해 물어봤는데 !! 아주 똑똑하게 알려줬다 ! 내가 빠져 있는 문제 뿐만 아니라 TextEditor에 다른 문제도 있는 듯했다. 

하지만 지금 또 물어보니까 살짝.. 원하는 답을 주지 않았다. ㅎㅎ 

이럴 때면 개발자로서 어떻게 chatGPT를 현명하게 사용해야할지에 대한 고민을 많이 하게 된다. 방금과 같이 매번 물어볼 때마다 답이 다른데, 이에 대한 책임을 chatGPT에게 물어볼 수도 없는 노릇이고, 또 이 녀석이 내린 판단이 무조건 옳지도 않으니 말이다. 처음 ChatGPT를 알게 되고, AI의 시대에 살고 있음을 뼈져리게 느꼈다. 개발자가 되고 싶은 나는 AI라는 과도기 사이에서 어떻게 해야할까 고뇌를 하다보니 자연스럽게 여러 글이나 영상들을 찾아보게 되었고, 이런 저런 생각에 잠기기 시작했다. 어떤 시각으로 바라보느냐에 따라 각자 자신의 예상대로 다르게 이야기하고 해석하고.. 그리고 문득, 그 안에서 직업을 상실하면 어떡하지라는 불안감을 안기도 했다. (시험 칠 때 챗 GPT를 사용해도 된다는 교수님도 있는가 하면, GPT의 한계에 대해 토론하는 유튜브부터, AI가 세상을 씹어 먹을 거라는 사람들까지..)

그리고 나는 지금은 우선 "chat GPT"를 어떻게 잘 활용할지에 대해 고민하고 고뇌하기로 마음을 먹었다.

시대의 흐름을 타는 직업을 선택했기에 이렇게 급변하는 이슈들에 민감해져야 하는 필요성을 많이 느끼는 것 같다. 그리고 재미지기도 하다. 챗 GPT가 뭔지도 모르는 타과 친구들을 만나면 내가 시대의 흐름을 타는 직업을 골라 성장중에 있음을 느낀다. 언젠가는 좀 더 앞으로 나아가 사람들의 반응이 어떨지 궁금해하는 개발자 오타쿠가 되어보고 싶은 마음도 생긴다..ㅎㅎ


 👀 버그 해결..  

다시 본론으로 돌아와서, SwiftUI TextEditor 그 자체의 문제를 발견하게 되었다.

사실 예전부터 주변 사람들한테 "아직 SwiftUI는 안정화되지 않았어."라는 말을 듣곤 했는데, 그냥 그렇구나 하고 넘어갔었다. 하지만 그걸 몸소 체험하니까 왜 아직 현업에서는 UIKit을 사용하는지, 왜 UIKit을 공부해야만 하는지 오랫동안 추상적이게만 다가왔던 생각이 UIKit을 공부해야겠다는 욕구로 변하게 되었다.

 

그리고 내 머릿속에 이 문제를 해결하기 위해서 2가지 방안이 생각났다.

1️⃣ 글자수를 제한시키고 이번 WWDC 행사때까지.. 버틴다..
2️⃣ UIKit의 UITextView를 SwiftUI에 반영시킨다.

근데 1️⃣은 도주자 컨셉의 방법이라 최후의 선택으로 남기고 2️⃣을 하기로 마음 먹고 개발을 공부했다.

순수 UIKit를 하거나 순수 SwiftUI을 했던 터라, 처음 UIKit과 SwiftUI를 연결하는 작업을 공부하다보니 많이 막막했었다. 구글링을 해서 이래 저래 코딩을 했는데에도, 마음은 급하고 코드는 기대했던 대로 실행이 안되어서 불안감이 스멸스멸 올라왔다. 그러던 중, 우디가 이런 쪽으로 작업을 많이 했던 게 되었게 생각나서 연락을 드렸더니 친절하게도 우디의 UITextFeildView 관련 깃헙을 공유해주셨다. 

나는 이 외에도 몇 작업이 추가적으로 필요했어서 우디의 코드를 고쳐서 사용했고 덕분에 원하는 결과를 낼 수 있었다. 덕분에 작은 단위로 연습을 해볼 수 있었던 것 같다 !
우디 넘 감사드립니다.. 😭  (참고로 이때 공부한 내용은 이후 정리해서 UIKit 카테고리에 업로드할 예정이에요 :)

 

텍스트 에디터만 UIkit으로 바꿨을 뿐인데, 부수적인 코드들도 같이 바꼈다. 이 과정에서 혹여나 놓치는 부분이 있을까 너무 두렵고 걱정이 되었다. 하지만 전에 어느정도 분리를 해놓은 덕에 그렇게까지 어렵지는 않았던 것 같다. 이래서 유지보수가 어렵다고 하는 구나.. 싶고 모듈화의 중요성에 대해서도 깨달았던 것 같다. 겨울 방학때 코드를 좀 더 정리된 형태로 깔끔하게 짜기 위해서 공부를 해야겠다.

 

struct CustomTextView: UIViewRepresentable {
    
    @Binding var text: String
    let lineSpacing: CGFloat
    let font: UIFont
    let textColor: UIColor
    
    func makeUIView(context: Context) -> UITextView {
        let textView = UITextView()
        textView.delegate = context.coordinator
        textView.autocorrectionType = .no
        textView.textColor = textColor
        textView.tintColor = textColor
        textView.font = font
        textView.text = text
        
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = lineSpacing
        let attributes: [NSAttributedString.Key: Any] = [
            .font: font,
            .foregroundColor: textColor,
            .paragraphStyle: paragraphStyle
        ]
        textView.typingAttributes = attributes
        
        return textView
    }
    
    func updateUIView(_ uiView: UITextView, context: Context) {
        uiView.text = text
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = lineSpacing
        let attributes: [NSAttributedString.Key: Any] = [
            .font: font,
            .foregroundColor: textColor,
            .paragraphStyle: paragraphStyle
        ]
        uiView.typingAttributes = attributes
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(text: $text)
    }
    
    class Coordinator: NSObject, UITextViewDelegate {
        @Binding var text: String
        
        init(text: Binding<String>) {
            _text = text
        }
        
        func textViewDidChange(_ textView: UITextView) {
            DispatchQueue.main.async {
                self.text = textView.text
            }
        }
    }
}

 


그리고 드디어 ! 며칠동안 고생한 끝에 앱 업데이트를 했다 !! 🙌🏻❤️‍🔥😭

 

유저의 피드백으로 수정한 첫 hotfix ! 아찔하면서도 한 층 성장했음을 느낀다 !

이번주에 다운로드 수를 1500을 넘어셨는데, 넘 짜릿하다.. 얼른 방학이 되어 트래킹을 심고싶다 💖👀

 

해결한 이후 내 표정.. by 스마일..

반응형

'오뚝이 개발자 > 앱 출시 ( Cherish )' 카테고리의 다른 글

Cherish 앱 업데이트 1.2.6  (3) 2024.03.15
Cherish 앱 업데이트 1.2.4  (1) 2023.10.08
Cherish 앱 업데이트 1.2.0  (0) 2023.03.04
Cherish 앱 업데이트 1.1.0  (0) 2023.03.04
Cherish 앱 제작 일기  (0) 2022.09.18
Comments