【发布时间】:2017-01-11 14:43:31
【问题描述】:
我正在开发一款跨平台游戏,该游戏将通过 Steam 发布和分发,但我在 Mac 版本上遇到了问题。一切都是用 C++ 编写的,并使用 CMake 生成的项目文件在 El Capitan 上使用 Xcode 构建,其中包含一些小的修改。构建完成后,我使用自己的构建脚本将 .app 包放在一起,生成目录结构,添加图标文件和二进制文件,以及我自己编写的 Info.plist 文件我可以找到关于哪些元素是必要的文档。
问题在于向后兼容性。当我尝试在运行 Yosemite 的 Mac 上启动游戏 .app 时,我收到以下错误消息:
您不能在此版本的 OS X 上使用此版本的应用程序“[my app name]”。您使用的是 OS X 10.10.5。该应用程序需要 OS X 10.11 或更高版本。
问题是,在 Xcode 中,我将构建目标指定为 OS X 10.7,所以我对为什么会发生此错误感到困惑。我什至可以进入 Finder 中的包,导航到实际的游戏二进制文件,然后毫无问题地运行它。当我双击 .app 文件(其图标显示带有斜线的圆圈,表明我可能在 Info.plists 或包配置中做错了什么)时,它只会失败并显示此错误消息。在 El Capitan 上运行时一切正常。
我也尝试过适当地设置LSMinimumSystemVersion,但这并不能解决问题。
这是我的Info.plist 文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>Contents/MacOS/[binary name]</string>
<key>CFBundleDisplayName</key>
<string>[game title]</string>
<key>CFBundleIconFile</key>
<string>[icon file]</string>
</dict>
</plist>
我认为 Info.plist 中缺少某些内容,但 Apple 关于所需密钥的文档对于弄清楚可能是什么并没有帮助。
如果您需要更多信息来解决这个问题,请告诉我,非常感谢您的帮助!
【问题讨论】:
-
@dorukayhan 这有什么帮助?我正在尝试构建以实现向后兼容性。
-
我遇到了同样的问题,除了使用 go 二进制文件而不是 C++。直接执行时二进制运行良好,但是通过 .app 包执行时,我得到相同的错误(版本不同除外)。我尝试在 Info.plist 中设置各种版本密钥,以及使用 386 和 amd64 代码构建“胖”二进制文件。
-
你是如何尝试设置
LSMinimumSystemVersion的?此外(可能不相关),CFBundleExecutable不应包含路径,而应包含可执行文件的名称。假定它位于 Contents/MacOS 中。您应该在 Xcode 中创建一个新项目并检查为其创建的 Info.plist。尝试将所有这些键添加到您的 Info.plist 中,除非您已验证任何给定的键是不必要的。
标签: macos backwards-compatibility