[트러블슈팅] 02. LinkNavigator item 디코딩 시 Base64 문자열 처리 오류

2026. 1. 5. 23:39·탭탭 - TapTap/트러블슈팅
728x90

문제

문제 1. LinkNavigation Push 처리 시 url을 매개변수로 넘겨 받는데, URL을 정상적으로 처리하지 못하는 문제 발생

 

분석

@Reducer
struct LinkDetailFeature {
  @Dependency(\.swiftDataClient) var swiftDataClient
  @Dependency(\.linkNavigator) var linkNavigator
  
  @ObservableState
  struct State {
	...
  }
  
  enum Action {
    ...
    /// 원문보기
    case originalArticleTapped(URL)
  }
  
  var body: some ReducerOf<Self> {
    Reduce { state, action in
      switch action {
      ...
      /// 원문보기
      case .originalArticleTapped(let url):
        linkNavigator.push(Route.originalArticle, url.absoluteString)
        return .none
      }
    }
  }
}

 LinkDetailFeature에서는 '원문 보기' 버튼의 탭 이벤트를 감지하여 OriginalArticleView로 네비게이션(push)하는 로직을 구현했습니다. 이때, 화면 전환을 위해 라우팅 목적지와 데이터 바인딩에 필요한 item을 매개변수로 함께 전달하도록 구성했습니다. 

 

 OriginalArticleView에서는 WKWebView를 사용해서 웹페이지를 렌더링하고 있었는데, 어떠한 문제로 인해 WebView가 제대로 렌더링 되지 않고 있음을 확인했습니다. 

 

크래시 로그를 분석해본 결과 WebKit -> JSCore -> CoreFoundation 순으로 스택이 이어지는데, 이는 WKWebView 내부 렌더링 또는 URL 로드 과정에서 발생한 크래시일 가능성이 높다고 판단하여 URL 로그를 찍어보았습니다.

 

 디코딩 된 URL을 확인해 보니 Base64 -> 디코딩 -> 문자열 변환 과정에서 이스케이프 문자(\, ", /)가 남아있어 WebKit이 내부적으로 비정상적인 URL을 로드하려다가 크래시가 발생했음을 확인했습니다.

 

해결

guard let data = Data(base64Encoded: trimmedItem),
    let decoded = String(data: data, encoding: .utf8)?
      .replacingOccurrences(of: "\\/", with: "/")
      .replacingOccurrences(of: "\"", with: ""),
    let url = URL(string: decoded)
  else {
    return WrappingController(matchPath: matchPath) {
      Text("Invalid URL")
    }
  }

 Base64 디코딩 이후, 문자열 내의 불필요한 이스케이프 문자를 제거하도록 수정하였고, 이를 통해 유효한 URL 객체만 생성되어 WKWebView에 정상적으로 렌더링되도록 해결하였습니다.

'탭탭 - TapTap > 트러블슈팅' 카테고리의 다른 글

[트러블슈팅] 01. ModelContainer 충돌 문제  (0) 2026.01.05
'탭탭 - TapTap/트러블슈팅' 카테고리의 다른 글
  • [트러블슈팅] 01. ModelContainer 충돌 문제
여성일
여성일
  • 여성일
    성일노트
    여성일
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 탭탭 - TapTap N
        • 리팩토링 N
        • 트러블슈팅
        • 개발일지
      • 애플 디벨로퍼 아카데미
        • 챌린지 회고
        • 하루의 날씨
      • Swift Student Challenge 202..
      • AI를 잘쓰는 개발자가 될래요
      • 우리 같이 협업하자
      • ToyProject - 사카마카 (살까말까 고민 ..
      • ToyProject - Book2OnNon (모바..
      • ToyProject - 바꿔조 (환율 계산기)
      • iOS
        • iOS
        • Vapor
        • Design Pattern
        • CoreData
        • Tuist
        • RxSwift
        • ReactorKit
        • TCA
      • Swift
        • Swift 기본기
        • UIkit
        • SwiftUI
      • UX, 사용성
      • 원티드 프리온보딩 챌린지 iOS 과정
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      F
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.6
    여성일
    [트러블슈팅] 02. LinkNavigator item 디코딩 시 Base64 문자열 처리 오류
    상단으로

    티스토리툴바