It’s me. Right.
Hello.ENTP.World
It’s me. Right.
전체 방문자
오늘
어제
  • 분류 전체보기 (45)
    • 멋쟁이사자처럼 앱스쿨 1기 (18)
    • 2024 Apple Developer Academ.. (10)
    • 개발 with Apple (8)
    • Flutter (1)
    • 알고리즘 (4)
    • 디자인 (0)
    • 앱스토어 출시 (1)
    • 영어공부 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • swift cicd
  • xcode cicd
  • 아키텍처
  • xcode cloud workflow
  • Xcode cloud
  • 애플아카데미
  • xcode cloud 계정 권한
  • 협업
  • Apple Developer Academy
  • 개발
  • 코테
  • Xcode
  • 동기
  • xcode cloud appstoreconnect
  • 코딩테스트
  • 개발자
  • 회고
  • xcode 팀 계정
  • 백준
  • 알고리즘
  • 좋은 회고
  • git xcodecloud
  • git cicd
  • swiftUI
  • 애플디벨로퍼아카데미
  • xcodcloud
  • xcode 배포 자동화
  • ios
  • xcoud cloud cicd
  • git xcode cloud

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
It’s me. Right.

Hello.ENTP.World

[오류] Local Authentication 보라색 오류 발생 - Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.
개발 with Apple

[오류] Local Authentication 보라색 오류 발생 - Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.

2024. 4. 19. 03:08
반응형

1. 내용 캡쳐

- 로그인 이전 View를 로그인 성공 여부에 따라서 메인 뷰로 Route해주기 위해서 @Published를 사용하였습니다. 로그인 방식은 Local Authentication을 사용하는 방식을 채택하였으며, 인증을 수행 후 성공 시 아래 코드 27줄에서 볼 수 있듯, @Published된 변수 값 변경을 통한 뷰의 전환을 수행하도록 하였으나 보라돌이 에러를 마주치고 말았다. Xcode에서 잘 만나기 힘들지만 중요한 순간에 한번씩 만나게 되는 보라색 에러는 주로 메모리 관련된 오류이며, 당장에 문제가 없을 지라도, 충돌 시 앱이 동작하지 않을 수 있는 중요한 에러 중 하나이다.

 

2. 원인 분석

- Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.

경고 내용에서도 알 수 있 듯, 백그라운드로부터 발생한 publishing 변경 사항은 허용되지 않는다. 따라서 메인 스레드에서 진행하라고 권고한다. 

 

1) Face Id, 지문인증 등 기기 인증을 사용하게 해주는 Local Authentication은 비동기 처리로 진행된다. 

- 비동기 처리는 주로 서버에 데이터를 요청하는 네트워크 통신에 사용되는데, 화면 구성을 처리하는 스레드와 다른 스레드를 활용해서 화면 스크롤에 지장이 없도록 하기 위해서 사용된다.

-> 따라서 메인 스레드는 블록되지 않고, 메인 스레드를 제외한 백그라운드 스레드에서 인증 처리를 수행하게 된다.

2) 백그라운드 스레드에서 인증 성공 후 @Published된 변수 값 변경을 통해서 사용자 눈에 보이는 UI를 변경하라고 수행한다.

- 이 경우 이미 메인 스레드는 요청 순서대로 처리하고 있는데, 다른 스레드에서 본인이 사용하고 작업하는 UI뷰를 수정하려고 하기 때문에 발생하는 오류이다.

 

- 결론적으로 SwiftUI에서 View를 그려주는 UI처리는 주로 메인스레드에서 작동하도록 설계되어있다. 따라서 해당 오류는 백그라운드 스레드에서 UI를 업데이트 하려고 하거나, 비동기로 인한 값에서 UI 관련 요청을 할 때 발생한다. 

-> 따라서 해당 작업을 메인스레드에서 수행하도록 보장해주어야 한다.

 

 

3. 결과

- DispatchQueue.main.async를 메인스레드에서 비동기적으로 처리할 수 있도록 코드를 수정해주었다.

 

4. 참고

https://velog.io/@dev_lee/SwiftUI-Published-%EB%B3%80%EC%88%98-%EA%B0%92%EC%9D%84-%EB%B9%84%EB%8F%99%EA%B8%B0%EB%A5%BC-%ED%86%B5%ED%95%B4-%EB%B3%80%EA%B2%BD-%EC%8B%9C-Publishing-changes-from-background-threads-is-not-allowed-%EA%B2%BD%EA%B3%A0-%EB%A9%94%EC%8B%9C%EC%A7%80-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95

 

🐛 [SwiftUI] @Published 변수 값을 비동기를 통해 변경 시 'Publishing changes from background threads is not allowe

삡삡 안녕하세요 이서에요🥸. SwiftUI의 @Published를 사용하여 네트워크 통신을 통해 받아온 값으로 변경하는 도중 아래와 같은 경고 메시지를 확인하여 이를 해결하는 방법에 대해 포스팅하고자

velog.io

https://todayssky.tistory.com/5

 

[Swift] Swift의 비동기 처리 (2) DispatchQueue.main

안녕하세요🐱 이번에는 GCD에 포함되어 있는 DispatchQue.main에 대해 다루어 보려고 합니다. DispatchQueue.main는 메인 스레드에서 처리되는 Serial queue입니다. 모든 UI 작업이 여기서 수행해야 합니다. syn

todayssky.tistory.com

https://velog.io/@yongchul/iOSThread%EC%9D%98-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90

 

[iOS]Thread의 이해(1) - Main Thread와 Background Thread

Main Thread는 오직 한개 뿐이며, 나머지는 모두 Background Thread 입니다.우리가 일반적으로 작성하는 대부분의 코드는 MainThread에서 실행됩니다. 이 사실을 잘 의식하지 못하는 이유는 우리가 작성한

velog.io

 

반응형

'개발 with Apple' 카테고리의 다른 글

[설정] Xcode Cloud workflow 확인 및 생성 불가 문제 해결  (2) 2024.12.30
[오류] SwiftData - Accessing Environment<ModelContext>'s value outside of being installed on a View. This will always read the default value and will not update. & View outside에 위치한 @Query를 사용하여 데이터 불러오기 실패  (3) 2024.05.31
[오류] Alert 다중 사용 시 1개만 실행되고 나머지는 실행 안됨  (2) 2024.04.18
[오류] MacOS 업그레이드 후 개발자도구 xcrun: error: invalid active developer path  (1) 2023.11.22
[오류] Xcode - The run destination is not valid for running the scheme  (6) 2023.11.03
    '개발 with Apple' 카테고리의 다른 글
    • [설정] Xcode Cloud workflow 확인 및 생성 불가 문제 해결
    • [오류] SwiftData - Accessing Environment<ModelContext>'s value outside of being installed on a View. This will always read the default value and will not update. & View outside에 위치한 @Query를 사용하여 데이터 불러오기 실패
    • [오류] Alert 다중 사용 시 1개만 실행되고 나머지는 실행 안됨
    • [오류] MacOS 업그레이드 후 개발자도구 xcrun: error: invalid active developer path
    It’s me. Right.
    It’s me. Right.
    개발자가 되고싶은 코린이의 천방지축 얼렁뚱땅 개발일기

    티스토리툴바