Fix: non-main thread issue when closing WebAuthenticationSession #44
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hello 👋
I found a problem when using
WebAuthenticationSession
in a project that uses TCA frameworkProblem:
A non-main thread issue occurs when closing the
WebAuthenticationSession
window.(Warnings generated by the TCA library)
(Warnings generated by the SwiftUI Framework)
Cause:
The problem does not occur when using the pure SwiftUI
@Binding
. However, when assigning a Binding variable toisPresented:
usingTCA
, it appears that the action of the Binding variable becoming false when the window closes is executed in the background. (This is just a guess of mine, so it may be wrong.)Anyway, the problem occurs when the value of the variable
item
is changeed tonil
inside thecompletionHandler
of theWebAuthenticationPresenter
.Solution:
This commit is modified to run on the main thread in the
resetItemBinding()
function.Testing:
I confirmed that this modification does not cause side effects when using pure SwiftUI.
Request:
Please let me know if there is a possibility that another problem may occur due to this modification. If not, please reflect it in the main branch.
Thank you for your time.
Have a nice day.
안녕하세요. 영어로 번역하는 과정에서 의도가 정확히 전달되지 않은 부분이 있을 것 같아, 한국어로 요약한 내용도 함께 기재합니다.
TCA를 사용하는 프로젝트에서
WebAuthenticationSession
을 사용할 때, 다음과 같은 문제가 발생하는 것을 알게 되었습니다.문제 :
WebAuthenticationSession
창이 닫힐 때, non-main thread 관련 문제 발생.(이미지 생략)
원인 파악 :
순수한 SwiftUI의
@Binding
을 이용하였을 때는 문제가 없었습니다.하지만 TCA를 사용하여
isPresented:
에 Binding 변수를 할당하게 되면 창이 닫히면서 Binding 변수가 false로 변하는 동작이 background에서 실행이 되는 것으로 보입니다. (추측이므로, 틀렸을 수도 있음.)어쨌든, 문제가 발생하는 시점은
WebAuthenticationPresenter
의completionHandler
의 동작 내부에서 변수item
의 값을nil
로 초기화 할 때인 것으로 확인했습니다.해결 방안 제시 :
resetItemBinding()
함수 내부의 코드를 main thread에서 동작하도록 수정.이 수정은 순수하게 SwiftUI를 사용하는 경우에 대해 side effect를 발생시키지 않는것으로 확인했습니다.
만약 이 수정으로 인해 제가 모르는 또 다른 문제가 발생할 가능성이 있다면 알려주시고, 그렇지 않다면 main branch에 반영시켜주시기를 부탁드립니다.
고맙습니다.
좋은 하루 보내세요.