Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ISSUE-009

虚幻引擎缺少Entitlement

常见表现

启动闪退,无崩溃报告。

通过终端运行游戏,日志停留在Mobile Provision not found

相关源码

虚幻引擎 IOSPlatformMisc.cpp

void FIOSPlatformMisc::PlatformInit()
{
	//...
	
	// Check for required entitlements
	TArray<FString> RequiredEntitlements;
	GConfig->GetArray(TEXT("/Script/IOSRuntimeSettings.IOSRuntimeSettings"), TEXT("RequiredEntitlements"), RequiredEntitlements, GEngineIni);
	for (const FString& Entitlement : RequiredEntitlements)
	{
		if (!FIOSPlatformMisc::IsEntitlementEnabled(TCHAR_TO_ANSI(*Entitlement)))
		{
			UE_LOG(LogInit, Fatal, TEXT("App does not have required entitlement %s."), *Entitlement);
		}
	}
	
	//...
}

原因分析

虚幻引擎会检查是否有对应的Entitlement,如果没有的话,会触发UE_LOG(Fatal)直接闪退。

解决方法

虚幻引擎会先从可执行文件中读取Entitlement,然后尝试读取应用本体内的embedded.mobileprovision文件,所以伪造一个embedded.mobileprovision文件即可:

  • 打开第一个目录:右键游戏图标,选择“在访达中查看”,返回上一级目录,进入Entitlements。
  • 打开第二个目录:右键游戏图标,选择“在访达中查看”,右键选择“显示包内容”。
  • 将第一个目录中对应游戏的plist文件拷贝至第二个目录,重命名为embedded.mobileprovision