请教 Mac (Intel) vs. Mac (M1) 在开发 Apple 应用的区别

2022-07-16 12:15:01 +08:00
 SimpleOnion

各位 V 友好,想请教大家 Mac (Intel) vs. Mac (M1) 在开发 Apple 应用的区别?更具体而言,是想请教以下问题:

  1. 开发 iPhone (iOS) 应用程序
    • 1.1 Mac (Intel) 开发上述应用程序能否上架 iPhone 应用商店
    • 1.2 如果能行的话,那么与 Mac (M1) 所开发的程序有什么区别?
  2. 开发 iPad (iPadOS) 应用程序
    • 2.1 Mac (Intel) 开发上述应用程序能否上架 iPad 应用商店
    • 2.2 如果能行的话,那么与 Mac (M1) 所开发的程序有什么区别?
  3. 开发 Mac (macOS) 应用程序(我认为这个是这个帖子的核心,请斧正)
    • 3.1 Mac (Intel) 开发上述应用程序能否上架 Mac 应用商店
    • 3.2 如果能行的话,那么与 Mac (M1) 所开发的程序有什么区别?
    • 3.3 可能存在的衍生问题是,上架 Mac 应用商店和通过自己签名发行软件(没有想清楚对于此条详细准确的描述)

关于问题 3.2 ,从用户和开发者的角度来看,我的思考是存在 2 大类,共 4 种情况:

第一类(上架 Mac 应用商店)

开发者使用 Mac (Intel) 开发的软件 开发者使用 Mac (M1) 开发的软件
使用 Mac (Intel) 的用户 正常使用 无法使用
使用 Mac (M1) 的用户 需要 Rosetta 2 转译后使用 正常使用

第二类(通过自己或第三方来发行软件)

开发者使用 Mac (Intel) 开发的软件 开发者使用 Mac (M1) 开发的软件
使用 Mac (Intel) 的用户 正常使用 无法使用
使用 Mac (M1) 的用户 需要 Rosetta 2 转译后使用 正常使用

期待大家的帮助,感谢。

P.S.

2279 次点击
所在节点    程序员
8 条回复
moult
2022-07-16 12:27:20 +08:00
https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary
准确的说,不管 Apple silicon 还是 Intel 芯片,都可以编译出 Universal 二进制。
helone
2022-07-16 12:31:31 +08:00
1.1 能
1.2 没区别
2.1 能
2.2 没区别
3.1 能
3.2 没区别
3.3 楼上已经说了,现在无论任何芯片都能编译出 Universal 二进制,也就是对于双方芯片都是原生架构的程序,不需要任何转译
ecnelises
2022-07-16 12:32:27 +08:00
首先 iPadOS 就是 iOS 换皮,所以 1=2.

1.1 ,能否上架 App Store 仅和你使用的 iOS SDK 有关,比如今年年底可能 Apple 就会宣布所有新 App 必须使用 iOS 16 SDK 提交(和最低支持的系统版本不是一回事,注意),也就是说 App 必须使用 Xcode 14 构建。这是一环套一环的关系:Xcode 对运行的系统版本可能有要求,而系统版本可能对芯片有要求。所以如果以后某代 macOS 不支持任何 Intel CPU 了,而最新的 Xcode 又只能运行在这个 macOS 上,那就意味着 Intel Mac 就无法上架 iOS App 了。(不过应该是很久很久以后的事情)

1.2 ,Xcode 有完备的 AArch64/x86_64 交叉编译工具链,所以 M1 和 Intel 编译出的 Binary 是没区别的。

3.1 同 1.1.

3.2 ,Mac 开发会比 iOS 开发多一个构建选项,即你是要 Universal Binary 还是 Apple Silicon 还是 Intel. 不清楚现在 Mac App Store 是否有相关限制要求必须提交 Universal Binary ,不过这三个选项和你用 Intel 还是 Apple Silicon 没关系的。这点同 1.2.

3.3 上架 Mac App Store 会要求应用强制在沙盒环境,其他流程会比自己发行稍微简单些。自己发行软件需要通过自己的密钥签名,然后提交给苹果做 Notorization 扫描(和 App Store 审核不同,这个是自动的,一分钟就能搞定),完成这两个步骤用户就可以正常打开了。
icyalala
2022-07-16 13:15:30 +08:00
对于开发 iOS/iPadOS 的 App 来说,M1 和 Intel 可以认为没什么区别。
只有一点,就是现在 M1 支持 macOS 直接运行 iOS 程序,如果你需要测试这个功能,那只能用 M1 。

开发 macOS 同样也都可以,clang 在编译时可以配置输出多架构的 binary ,所以开发和上架不用担心。
但同样的,想要测 Intel 兼容性只能 Intel 、想要测 arm64 或 Rosetta2 兼容性只能在 M1 。

所以从开发者角度来看,目前 Intel 和 M1 对于开发苹果系的 App 来说区别不大,可以输出等同的 Universal 二进制程序,也都可以上架。区别主要在于后面兼容性测试。(M1 这里指的 Apple Silicon 系列,M2 应该同理)
SimpleOnion
2022-07-16 16:56:06 +08:00
感谢四位的分析与解答,我大致有了一点儿概念。那我来总结一下:

针对 iOS/iPadOS 应用程序来说,两者没有区别

而对于 macOS 应用程序来说(在借助 Universal macOS Binary 的情况下),主要问题在于 **Debug** 上面,通过阅读 @moult 分享的文章《[Building a Universal macOS Binary]( https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary)》,我将其中一段贴在下面

> Note
>
> You can build a universal binary on either an Apple silicon or Intel-based Mac computer, but you cannot debug the arm64 slice of your binary on an Intel-based Mac computer. It’s possible to debug both slices of a universal binary on Apple silicon, but you must run the x86_64 slice under Rosetta translation.

有关 Debug 的相关情况,从中可以得到下面的表格:

| | x86_64 | arm64 |
| --- | --- | --- |
| Intel | Yes | No |
| Apple silicon | Yes (with Rosetta) | Yes |

这一部分也在某一方面印证了 @icyalala 在兼容性方面的讨论,也包括 iOS Apps on macOS 这种情况。另外感谢 @ecnelises 关于上架应用商店问题与自签名问题的进一步说明。

谢谢大家
dadachen1997
2022-07-16 18:08:56 +08:00
想一想,没有 m1 芯片时候是咋开发的,就差不多明白了。
julyclyde
2022-07-18 12:06:35 +08:00
不过现在已经不需要再考虑 intel 平台了
最近几年 apple 不可能再迁移回去的
SimpleOnion
2022-07-29 17:29:39 +08:00

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

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

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

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

© 2021 V2EX