捆绑 Mac 应用程序时出现问题

问题描述 投票:0回答:2

我正在尝试制作一个 mac 应用程序包。它捆绑在一个 shell 文件周围。结构是这样的:

App
    Contents
        Info.plist
            App.command
        MacOS
        Resources
            App.icns

但是,当我双击应用程序包时,它会显示以下提示:


To open classroom.command, you need to install Rosetta. Would you like to install it now?

我的应用程序包似乎不是基于英特尔的。但这没有意义。 Shell脚本跟什么平台没有关系吧?

我通过获取 .app 根文件夹的信息来验证它。我可以看到“种类”是“应用程序”。而在其他可启动的应用程序上,我看到“种类”是“应用程序(英特尔)”。 Info.plist 中我错过了什么吗?

macos bundle intel launch
2个回答
0
投票

看起来 MacOS 假定它是 Intel,除非明确告知它支持 ARM64。

我可以通过添加包含以下内容的文件

/Contents/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>run</string>
    <key>CFBundleIdentifier</key>
    <string>com.testing</string>
    <key>LSArchitecturePriority</key>
    <array>
        <string>arm64</string>
    </array>
    <key>LSRequiresNativeExecution</key>
    <true/>
</dict>
</plist>

此外,

LSArchitecturePriority
值似乎已被缓存(或者至少Rosetta不会重新考虑运行该应用程序)......并且似乎将
CFBundleIdentifier
更改为其他任何值都足以让它重试。


我认为这不相关,但我确实看到有人提到arm64程序需要签名,我一直在尝试使用以下方法来做到这一点(使用临时身份),但我认为这不是必要的(也许二进制文件需要):

codesign --timestamp --options=runtime -s "-" testing.app 

-1
投票

Rosetta 是一款可以在 Intel Mac 上运行 PowerPC 代码的软件。根据您的处理器、操作系统,您可能需要安装它才能运行应用程序。

这是完整的解释

© www.soinside.com 2019 - 2024. All rights reserved.