[IOS] 오류 : This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.

이 문제는 주로 iOS나 macOS 등의 Apple 플랫폼에서 발생하는 Autolayout(자동 레이아웃) 관련 문제로 보입니다. Autolayout은 인터페이스 요소들의 크기와 위치를 자동으로 관리하는 시스템으로, 메인 스레드에서 동작해야 하는 경우가 많습니다.

에러 메시지에 따르면 “이 애플리케이션은 메인 스레드에서 레이아웃 엔진에 접근한 후에 백그라운드 스레드에서 레이아웃 엔진을 수정하고 있습니다. 이로 인해 엔진 손상과 이상 동작이 발생할 수 있으며, 애플리케이션의 비정상적인 충돌이 발생할 수 있습니다.”

이러한 상황에서 메인 스레드와 백그라운드 스레드가 동시에 Autolayout 엔진을 수정하려고 하면, 엔진의 내부 상태가 손상될 수 있으며, 이로 인해 예측 불가능한 동작이 발생할 수 있습니다. 이는 주로 UI 업데이트와 관련하여 발생하며, Autolayout 엔진이 UI 레이아웃을 계산하거나 변경하는 동안, 다른 스레드에서 레이아웃을 수정하면 충돌이 발생합니다.

이런 경우를 방지하기 위해서는 다음과 같은 접근 방법을 적용해야 합니다:

  1. UI 업데이트는 항상 메인 스레드에서 수행되어야 합니다. 백그라운드 스레드에서 UI 업데이트를 수행하는 대신에, 비동기 작업이 완료된 후 메인 스레드에서 UI 업데이트를 예약하도록 합니다.

  2. Autolayout 관련 작업 역시 메인 스레드에서 수행해야 합니다. Autolayout 엔진에 접근하는 모든 코드를 메인 스레드에서 실행하도록 해야 합니다.

  3. 비동기 작업을 수행할 때는 메인 스레드와 백그라운드 스레드 간의 동기화 메커니즘을 사용하여, 동시 접근을 방지합니다.

  4. Autolayout 엔진을 수정하기 전에 메인 스레드와 백그라운드 스레드 간의 작업을 조율하여 엔진 손상을 방지합니다.

이러한 접근 방법을 준수하여 애플리케이션의 Autolayout 관련 문제를 해결할 수 있습니다. UI 업데이트와 관련하여 스레드 안전성을 유지하는 것이 중요하며, 이를 통해 애플리케이션의 안정성과 신뢰성을 확보할 수 있습니다.

조치 : main thread에서 UI를 그리도록 수정