Swift 6환경에서 handleDeeplink 및 handleDeferredDeeplink 함수등에서 입력한 Closure가 호출되는 시점에 앱이 크래시되는 현상
영향을 받는 함수
Airbridge.handleDeeplink
Airbridge.handleDeferredDeeplink
Airbridge.createTrackingLink
Airbridge.click
Airbridge.impression
AirbridgeOptionBuilder.setOnAttributionReceived
Swift 5.x 이하에서는 멀티스레드 환경에서 여러 스레드가 동시에 같은 메모리에 접근하는 데이터 레이스 위험이 있어도 컴파일러가 경고만 주었으나 Swift 6 환경에서는 컴파일러 단계에서 다른 스레드(Actor 격리 영역)로 넘어가서 실행될 수 있는 모든 데이터와 클로저는 스레드 간 이동이 안전하다는 것을 반드시 증명해야 하며, 그렇지 않으면 컴파일 에러를 발생시키거나 하위 호환성 빌드 시 런타임 크래시를 유발합니다.
에어브릿지 SDK에서 클로저를 파라미터로 받는 함수를 사용할 때, 클로저 내부 변수 앞에 @Sendable 어노테이션을 명시적으로 추가하여 데이터가 스레드 간에 안전하게 전달됨을 컴파일러에게 알려야 합니다.
Airbridge.handleDeferredDeeplink() { @Sendable url in if let url { // Deep link handling logic }}iOS Lifecycle의 didBecomeActive 이전에 trackDeeplink를 호출해야 Deep link Install 혹은 Deep link Open이 발생합니다. didBecomeActive 이후에 trackDeeplink를 발생했을 경우에 Organic Install 혹은 Open이 발생합니다.
Deeplink Install 혹은 Deeplink Open이 발생하지 않고 Install(Open)이 발생 합니다.
didBecomeActive 이전에 trackDeeplink 를 호출 해 주세요. AirbridgeOptionBuilder에서 setLogLevel 을 Debug로 설정하면 다음과 같은 로그를 순차적으로 확인 할 수 있습니다.
Following app state detected: state=didDeeplinkFollowing app state detected: state=didBecomeActive4.7.1배포 도중에 4.7.0이 삭제되는 이슈가 발생하여, 4.7.0에 대한 버전이 CocoaPods에 재배포가 되었습니다.
CocoaPods이 버전을 찾지 못하거나, 설치한 Pods에 대해서 Checksum 오류가 표시된다면 다음을 진행 해 주세요.
pod cache clean --allpod repo remove trunkpod setup pod install --repo-updatePassword AutoFill 기능으로 저장된 암호의 도메인이 airbridge.io 또는 abr.ge로 보이는 현상이 앱을 사용하는 유저에게 발생할 수 있습니다.
에어브릿지 SDK의 딥링크를 설정한 후에 Password AutoFill 기능을 활용하면 도메인이 에어브릿지 딥링크의 앱 링크(applinks) 도메인 airbridge.io 또는 abr.ge로 저장됩니다.
Password AutoFill에 사용하는 webcredentials 도메인을 설정하면 문제를 해결할 수 있습니다.
1. 암호를 저장하는 도메인을 준비해주세요.
2. 아래 JSON을 https://YOUR_DOMAIN/.well-known/apple-app-site-association에 Content-Type: application/json으로 호스팅합니다. 준비한 도메인이 YOUR_DOMAIN입니다.
애플 개발자 대시보드의 [Identifiers]>[YOUR_APP]에서 App ID Prefix, Bundle ID를 확인할 수 있습니다.
{ "webcredentials": { "apps": ["YOUR_APP_ID_PREFIX.YOUR_BUNDLE_ID"] }}3. Xcode의 [YOUR_PROJECT]>[Signing & Capabilities]로 이동합니다.
4. '+ Capability'를 클릭해 Associated Domains를 추가합니다. Associated Domains에 webcredentials:YOUR_DOMAIN을 입력합니다.
도움이 되었나요?