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。