如何将 Rust 编译生成的二进制文件打包为 Mac 平台的 APP?

2022-12-15 20:09:44 +08:00
 LeeeSe
试用了 cargo-bundle 库,发现打包出来的 aarch64 架构包无法在别的电脑上使用,只能自己使用,反而打包出来的 x86_64 应用可以通过转译在别的电脑上运行。楼主是 Rust 新手,暂时找不到原因。

话说有没有更通用的办法,比如脱离 Rust 使用 Xcode ?
2365 次点击
所在节点    Apple
8 条回复
lscho
2022-12-15 20:13:50 +08:00
不能运行的提示什么?
LeeeSe
2022-12-15 20:14:16 +08:00
@lscho 直接提示安装包已损坏,请丢进垃圾篓
LeeeSe
2022-12-15 20:19:46 +08:00
具体原因是写了一款小工具,想要分享给大家,但是竟然失败在软件打包分发问题上,希望有能力的朋友可以出谋划策,我想让这个小工具让大家都方便地用上。
https://www.v2ex.com/t/902728#;
lscho
2022-12-15 20:22:32 +08:00
@LeeeSe 这和 Rust 没关系,macOS 默认会对可执行文件进行签名检测,没有签名(比如你直接打包)或者签名与文件不符合(比如破解版软件)都会报这个错误。关闭系统完整性保护( SIP )或者手动去除可执行文件的隔离属性就可以了。用这个:sudo xattr -d com.apple.quarantine /Applications/xxx.app

具体你用安装包已损坏,请丢进垃圾篓搜一下就知道了
lscho
2022-12-15 20:24:55 +08:00
如果你想分享给网友使用,建议用 brew 方式,你列的那个帖子里已经有大佬推荐了。如果用下载方式,macOS 会自动打上 com.apple.quarantine 这个隔离标志,应该是你必须用开发者证书签名才行。
LeeeSe
2022-12-15 20:46:43 +08:00
@lscho 感谢你的认真回答。你所说的命令我确实搜到过,但大都是互相抄写,没有说明具体原因(好在你告诉我了),并且有些麻烦不是比较好的解决方案;至于我的帖子中大佬的推荐,我当时并没有明白他的用意,只是很着急地在找报错原因。
我现在去研究一下如何用 brew 分享 app
LeeeSe
2022-12-15 21:22:36 +08:00
@lscho 请问如果使用 brew cask 发布编译好的 app 是不是还是会提示已损坏?如果使用 brew 发布的话等于是在用户端编译,意味着要安装 Rust 环境。我的理解对吗?
ecnelises
2022-12-15 23:07:30 +08:00
Apple Silicon 会强制要求签名,x86 的不用,连带着 Rosetta 的也不用( https://support.apple.com/zh-cn/guide/security/secebb113be1/web

即使绕过 Mac App Store ,要在陌生人电脑上正常运行也需要签名和 Notarization 两个步骤,都需要订阅的开发者账号。我有账号,周末来研究下楼主的源码打个包

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/902802

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX