[iOS] _web_defaultsDidChange 이슈

또상·2022년 2월 3일
0

Error...

목록 보기
4/5

Foundation

[NSUserDefaults(NSUserDefaults_NSURLExtras) _web_defaultsDidChange]

다음과 같은 fatal error 가 발생했다. iOS 13 에서 발생하는 문제라고 하는데, iOS 14.8.1 에서 발생해서, iOS 14의 특정 버전에서도 발생하는 것인지 아니면 다른 문제인데 잘못 짚은 것인진 모르겠다. 하지만, 여러 글에서 해당 이슈는 문자 인증 자동완성 에서 발생하는 것이라고 말하고 있어서 같은 방법으로 수정했다.

NSString 을 String 으로 변환하면서 생기는 문제인듯!

import Foundation

extension NSString {
  class func swizzleReplacingCharacters() {
    let originalMethod = class_getInstanceMethod(NSString.self, #selector(NSString.replacingCharacters(in:with:)))
    
    let swizzledMethod = class_getInstanceMethod(NSString.self, #selector(NSString.swizzledReplacingCharacters(in:with:)))
    
    guard let original = originalMethod, let swizzled = swizzledMethod else {
      return
    }
    
    method_exchangeImplementations(original, swizzled)
  }
  
  @objc func swizzledReplacingCharacters(in range: NSRange, with replacement: String) -> String {
    return self.swizzledReplacingCharacters(in: range, with: replacement)
  }
}
// AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    if UIDevice.current.systemVersion.hasPrefix("13") || UIDevice.current.systemVersion.hasPrefix("14") {
      NSString.swizzleReplacingCharacters()
    }
}

출처
https://darth-vader.tistory.com/1
https://joonhyoung.github.io/swift/swizzleReplacingCharacters/

profile
0년차 iOS 개발자입니다.

0개의 댓글