iOS에서 deeplink를 이용하여 앱의 원하는 위치로 이동하고 싶었습니다.
앱이 켜져있는 상태에서는 urlscheme이 포함된 deeplink로 이동이 잘 되었는데 앱이 종료되어있는 상태에서는 deeplink를 이용하면 AppDelegate의 open url 함수가 동작하지 않는걸 확인했습니다.
확인해보니 application(_:didFinishLaunchingWithOptions:) 함수의 return value 문제였습니다. 해당 함수는 앱을 실행할 준비가 거의 완료되면 알려주는 함수입니다.
return value
앱이 URL 리소스를 처리할 수 없거나 사용자 활동을 계속할 수 없으면 false이고, 그렇지 않으면 true를 반환합니다. 원격 알림의 결과로 앱이 실행되는 경우 반환 값은 무시됩니다.
출처: https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622921-application#return_value
앱이 url 리소스를 처리할 수 없거나, 사용자 활동을 계속할 수 없으면 false.. 일반적으로 true로 설정이 되어있었는데 특정상황에서 false로 return을 해주는게 화근이었다..
application(_:open:options:)의 Discussion을 확인해보니
Discussion
This method is not called if your implementations return false from both the application(:willFinishLaunchingWithOptions:) and application(:didFinishLaunchingWithOptions:) methods.
출처: https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623112-application#discussion
해당 메서드는 application(:willFinishLaunchingWithOptions:) 및 application(:didFinishLaunchingWithOptions:) 메서드 모두에서 false를 반환하는 경우 이 메서드가 호출되지 않습니다.
해당 부분의 return 을 true로 변경해주니 잘 동작하는걸 확인할 수 있었다.