iOS 18.4 OS버전에서 신규로 발생한 Crash 이슈

안녕하세요

최근 앱정책으로 iOS 18이상으로 준비해서 배포 되었습니다.

신규로 iOS 18.4 crash 이슈가 발생하는데요.

아래와 주로 UIKitCore 와 관련하여 발생하는데요

애플 OS의 문제로 보여지기는 하는데 혹시 엔진에서 따로 적용해야 되거나 대응해야 되는 부분도 있을까요?

(첨부한 파일은 발생한 일부 콜스택입니다. 대부분 UIKitCore로 공통점이 있습니다.)

<br/>

https://developer.apple.com/forums/search?q\=iOS\+18\.4\+crash

Steps to Reproduce

안녕하세요.

첨부해주신 콜스택에서는 Webkit 처리중에 발생한 크래시로 확인되는데, 관련성이 있어보이는 사례나 4.27 plus 와 ue5-main에서 관련 수정사항을 확인하기 어려운 것 같습니다.

빌드 환경과 문제 재현 방법에 대한 자세한 정보를 공유해주시면 더 확인해볼 수 있도록 하겠습니다.

감사합니다.

인게임에서 웹페이지를 열때 주로 발생(항상은 아닙니다)합니다. 그리고 iOS18.4에서만 발생합니다.

해당 발생했을때 콜스택입니다.

안녕하세요

일단 발생하는 샘플 제작은 당장은 좀 대응이 어려울거 같고(샘플로 된다는 보장이 없어보이는게 위에 저부분 왜에도 약간 불특정으로 발생하는거 같습니다.) 다만 관련해서 발생한 Sentry 리포트 유효해 보이는 두개를 일단 공유 드리고 해당 Sentry 리포트에 관해 궁금한게 해당 리포트 파일을 보시면

Application Specific Information:

Pool->TableIndex > 0 >

Stack overflow in

이부분에서 실제 관련 엔진 코드를 가보면 아래 부분이 있는데 해당 부분과 연관지어서 생각할수 있는 부분이 있을까요?

FMalloc* FApplePlatformMemory::BaseAllocator()

case EMemoryAllocatorToUse::Binned:

{

// get free memory

vm_statistics Stats;

mach_msg_type_number_t StatsSize = sizeof(Stats);

host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&Stats, &StatsSize);

// 1 << FMath::CeilLogTwo(MemoryConstants.TotalPhysical) should really be FMath::RoundUpToPowerOfTwo,

// but that overflows to 0 when MemoryConstants.TotalPhysical is close to 4GB, since CeilLogTwo returns 32

// this then causes the MemoryLimit to be 0 and crashing the app

uint64 MemoryLimit = FMath::Min<uint64>( uint64(1) << FMath::CeilLogTwo((Stats.free_count + Stats.inactive_count) * GetConstants().PageSize), 0x100000000);

// [RCL] 2017-03-06 FIXME: perhaps BinnedPageSize should be used here, but leaving this change to the Mac platform owner.

return new FMallocBinned((uint32)(GetConstants().PageSize&MAX_uint32), MemoryLimit);

}

추가적으로 자체적으로 ​

#define USE_MALLOC_BINNED2 (PLATFORM_MAC) -> #define USE_MALLOC_BINNED2 (PLATFORM_MAC || PLATFORM_IOS) 수정해서 Binned2로 사용하면 크래쉬가 발생안하는거 같은데(좀 테스트를 오래해봐야 될거 같긴하지만) 사용방법에 문제는 없을지도 한번 문의드립니다.

안녕하세요.

공유해주신 내용을 바탕으로 보았을 때 UIView에서 입력 포커스에 문제처럼 보여지지만, 해당 콜스택만으로 문제가 프로젝트에 한정된 것인지, 엔진과 관련된 부분인지 문제가 발생한 지점을 확인하기 어려운 상황으로 보입니다.

iOS 버전에 따른 문제 가능성을 확인해보기 위해, 최소한의 기능만 포함한 재현용 샘플을 만들어 보시고, iOS 관련 수정이 더 활발히 이루어진 UE5에서 동일한 문제가 재현되는지 확인해보시면 좋을 것 같습니다.

만약 문제를 재현할 수 있는 샘플을 공유해주실 수 있다면 확인해보겠습니다.

감사합니다.

안녕하세요.

첨부해주신 내용으로 확인해보았을 때, MallocBinned 에서 nano 영역에 메모리를 재할당하면서 발생하는 메모리 손상 이슈가 관련있는 것으로 보입니다.

정확한 원인 파악을 위해 메모리 사용 추적이 필요할 수 있지만, MallocBinned의 최신 수정사항을 적용하여 문제가 해결되시는지 확인해보시면 좋을 것 같습니다.

https://github.com/EpicGames/UnrealEngine/commit/ed9fa68e850cd658227dce1878e234a7b40b63f2

https://github.com/EpicGames/UnrealEngine/commits/ue5-main/Engine/Source/Runtime/Core/Private/HAL/MallocBinned.cpp

https://github.com/EpicGames/UnrealEngine/pull/8543

https://github.com/EpicGames/UnrealEngine/pull/11278

그리고 UE5 iOS 에서는 MallocBinned2를 사용하는 것으로 확인되어 문제가 없을 것 같지만, 말씀하신대로 MallocBinned2 사용하시면서 충분한 테스트를 통한 확인이 필요할 것 같습니다.

MallocBinned2를 사용할 때, 언리얼 메모리 할당자를 사용한 메모리 영역을 언리얼 외부에서 표준 메모리 할당으로 해제하는 상황에서 크래시가 발생할 수 있는 것으로 알려져있는데 이 부분에 대한 불일치 상황에 대해서 다음 글도 참고해보시면 도움이 되실 것 같습니다.

https://forums.unrealengine.com/t/dealing-with-allocator-mismatches-with-external-libraries/1416830

감사합니다.