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。