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-011

查询可用运行内存的API返回错误结果

常见表现

游戏提示“设备性能不达标”。

游戏采用最保守的内存管理策略,导致渲染距离极低、材质质量极低。

原因分析

PlayCover中的应用都是以Mac Catalyst模式运行的。

iOS上有一个用于查询可用运行内存的函数os_proc_available_memory,此函数在Mac Catalyst环境下总是返回 0 。

解决方法

固定返回4个G的可用运行内存。

BUNDLE_ID=com.companyname.appname
BUNDLE_PATH=~/Library/Containers/io.playcover.PlayCover/Applications/$BUNDLE_ID.app
EXECUTABLE=$BUNDLE_PATH/$(/usr/libexec/PlistBuddy -c "Print :CFBundleExecutable" $BUNDLE_PATH/Info.plist)
FUNC_ADDR=$(otool -Iv "$EXECUTABLE" | grep _os_proc_available_memory | head -n1 | awk '{print $1}')
printf '\x20\x00\xC0\xD2\xC0\x03\x5F\xD6' | dd of=$EXECUTABLE bs=1 seek=$(($FUNC_ADDR-0x100000000)) conv=notrunc
codesign -fs- $EXECUTABLE --deep --preserve-metadata=entitlements

Tip

将指令中第一个字节\x20改为\x40,即可变为8个G。