Mac App Store 应用程序提交指南
Note: Submitting an app to 构建和发布为 macOS 应用 Mac App Store requires enrolling in the Apple Developer Program, which costs money.
如何提交你的应用
下面步骤介绍了一个简单的提交应用到商店方法。 然而,这些步骤不能保证你的应用被 Apple 接受;你仍然需要阅读 Apple 的 Submitting Your App 关于如何满足 Mac App Store 要求的向导。
为了提交应用到商店,首先需要从 Apple 获得一个证书 可以参照 现有的指南。
获得 Team ID
在软件签名之前,你需要知道开发者账户的 Team ID 查看 Team ID,登录 Apple Developer Center 并点击侧边栏的 Membership。 你可以在团队名称下面的 Membership Information 部分查看到 Team ID。
First, you have to add a ElectronTeamID key to your app’s Info.plist , which has your Team ID as its value:
请注意上述 TEAM_ID 对应开发者账户的 Team ID, your.bundle.id 对应软件打包时使用的 Bundle ID。
如果你是 macOS 下的应用沙箱使用新手,应当仔细阅读 Apple 的 Enabling App Sandbox 了解一些基础,然后在授权文件内添加你的应用需要的许可。
原生模块签名
应用程序中的原生模块也需要签署。如果使用 electron-osx-sign,确保已生成二进制文件的路径包含在 参数列表:
还要注意,原生模块可能产生的中间文件 不包括在内(因为它们也需要签署)。 如果你使用 electron-packager 8.1.0 之前的版本,在构建步骤中添加 --ignore=.+\.o$ 以忽略这些文件。 Versions 8.1.0 and later ignore those files by default.
上传你的应用
在签名应用之后,你可以使用 Application Loader 上传软件到 iTunes Connect 进行处理。请确保在上传之前你已经 创建应用记录。
检查并提交你的应用
MAS 构建限制
为了让你的应用满足沙箱的所有条件,在 MAS 构建的时候,下面的模块已被禁用:
- crashReporter
- autoUpdater
- 一些视频采集功能无效。
- 某些辅助功能无法访问。
- 应用无法检测 DNS 构建和发布为 macOS 应用 变化。
根据应用使用的 Electron API,你可能需要添加附加授权 在 parent.plist 文件,在 Mac App Store 发布应用程序的时候能够使用这些API。
启用传入的网络连接,让你的应用程序打开网络 socket 监听:
dialog.showOpenDialog
dialog.showSaveDialog
Electron 使用的加密算法
Depending on the countries in which you are releasing your app, you may be required to 构建和发布为 macOS 应用 provide information on the cryptographic algorithms used in your software. See the encryption export compliance docs for more information.
开发者头条
新的 构建和发布为 macOS 应用 Use Compiler to Extract Swift Strings 构建设置调用 Swift 编译器从 Text()、String(localized:)、AttributedString(localized:) 初始值设定项、SwiftUI 的 LocalizedStringKey 和 Foundation 的 StringLocalizationKey 中准确地提取字符串插值和字符串文字。
添加了对 genstrings 和本地化导入和导出的支持,以提取在 Objective-C 代码中使用新 NSLocalizedAttributedString 宏的字符串。
在导出以进行本地化时,Xcode 会自动从 Info.plist 文件中提取 NSGKFriendListUsageDescription、NSLocationTemporaryUsageDescriptionDictionary 和 NSFallDetectionUsageDescription。
Metal
Metal Debugger 现在支持 Selective Shader Debugging,它允许您限制大型 Compute 着色器的调试范围。这导致更快的着色器调试器会话创建和迭代时间。
Metal Debugger 中的新捕获控件可让您精确控制来决定捕获 Metal 工作负载的哪个部分,以及捕获多个帧或范围的选项。
Metal Debugger 现在支持导入 metallibsym 文件,这使您可以在应用程序中进行 Metal 着色器调试和分析,而无需在您的 metallib 中嵌入着色器源。
Metal Debugger 中的 Apple GPU 可以使用 GPU 时间线。使用此时间线可视化和检查 Metal GPU 命令的并行执行以及一组精选的 GPU 计数器。
Metal 管道状态对象现在在 Metal Debugger 中表示为资源,包括一个全新的 Metal Pipeline States 和 Metal Libraries 查看器,以及 Metal Debugger 的 Memory Viewer 中的 Metal Pipeline 状态的 GPU 内存。
Instruments 的 Metal System Trace、Xcode 中的 Metal Debugger 以及全新的 Condition Inducer 中提供了新的一致 GPU 性能状态分析工作流。
现在可以在 Metal System Trace 模板的记录选项中覆盖 GPU 性能状态。
Metal Debugger 现在支持 Metal 光线追踪以及新的高级加速结构查看器。
Organizer
现在可以通过 URL 共享崩溃报告
Xcode 现在会显示您的崩溃问题的 TestFlight 反馈,以便更好地了解问题所在
现在可以根据任何特定的历史应用程序版本、任何特定的历史应用程序版本、产品类型(如 App Clip、应用程序扩展或主应用程序)以及 TestFlight 或 App Store 的发布历史记录过滤 Energy 报告列表。
Xcode Organizer 中的新 Scroll Hitch Goals 使分析应用程序版本的滚动体验变得容易
当您查看应用的指标时,您现在可以选择查看应用的 App Clip 的指标
Xcode Organizer 中新的 Terminations 指标显示前景和背景终止,按原因细分
Xcode Organizer 中的历史数据现在可以为每个指标图表显示最多 16 个应用程序的最新版本,提供应用程序在更大时间窗口内的性能趋势。
Xcode Organizer 中 Disk Write Reports 的 Qualitative Insights 在检查器中显示称为 Insights 的新信息
现在 Xcode Organizer 中提供了 Smart Insights,可帮助您比以前更快地发现应用程序的功能和性能回归
Project Navigator
当 Products 组位于默认位置时,项目导航器会隐藏它
Move Focus to Editor 命令现在解释 vim 方向移动键。
签名和分发
xcodebuild 现在支持使用 App Store Connect API 密钥对 Apple Developer 网站进行身份验证。
Xcode 现在提供在您第一次将新应用上传到 App 构建和发布为 macOS 应用 Store Connect 时创建应用记录的功能。
将应用上传到 App Store Connect 时,Xcode 中的分发助手会检测您的应用是否具有有效的内部版本号 (CFBundleVersion)。
Xcode 13 支持在 Mac 上为 TestFlight 配置应用程序
您现在可以在命令行上使用 notarytool 与 Apple 公证服务进行交互
Source Control
现在,您可以在登录 GitHub 或 Bitbucket Server 帐户后,使用 Xcode 的源代码控制功能创建、审查和合并拉取请求。
源码编辑器
Xcode 13 引入了 Vim 键绑定,在源代码编辑器中模拟 vim 体验并结合现有的编辑器功能。
在首选项中启用 Vim 键绑定,使用文本编辑 > 编辑中的启用 Vim 键绑定选项。
可以通过选择 Edit > Copy Location 以:的形式将所选内容的当前位置复制到剪贴板。
在 Swift 中将占位符扩展为闭包时,代码完成使用闭包的参数名称而不是。
Xcode 13 中的 Swift 语法高亮显示是即时且无闪烁的,无论是在文件之间进行编辑还是导航。
即使您的代码不完整或您的项目无法编译,Swift Jump to Definition 现在也能提供更具弹性的体验。
从 Swift 类、协议或方法声明跳转到定义还可以轻松导航到整个工作区中的所有子类、扩展和符合协议的类型。
Xcode 13 包括重新设计的 Swift 代码完成功能,可最大限度地提高可靠性和性能,尤其是在项目源代码中存在结构和逻辑不一致的情况下。
Static Analyzer
静态分析器现在警告带有副作用的断言、无限循环和更多 C++11 std::move 误用情况。
StoreKit
Xcode 中的 StoreKit 测试支持对使用 StoreKit 新的现代基于 Swift 的 API 构建的应用内购买进行全面测试。
Swift Packages
Swift 包现在可以声明 Mac Catalyst 的部署目标,并且现在可以在构建条件中将 Mac Catalyst 指定为平台。
当包声明工具版本为 5.5 或更高版本时,macOS 的构建条件不再适用于 Mac Catalyst。
Swift Packages 现在支持 DriverKit 作为平台。
现在可以在 Add Packages 表中添加精选的包集合。
构建和发布为 macOS 应用
Swift 重构
新的重构有助于迁移到异步代码。“Convert Call to Async Alternative”可用于将完成处理程序作为最后一个参数的调用,并重构它们以使用新的异步语言功能,假设该函数的异步等效项已经存在。
现在可以将新的 Add Async Wrapper 重构操作应用于具有完成处理程序的函数。
Source Editor 和 Test Navigator 具有 Run Test 操作的两个新变体,它们无需构建即可运行测试选择。
您现在可以使用 XCTPerformanceMeasurementPolarity 枚举自定义如何将性能测试的自定义指标的测量值与设置的基线进行比较。
XCTest 现在能够在受支持的 iOS 设备上的 UI 测试中合成指针交互。
性能 XCTests 现在支持测量应用程序启动时的 CPU 使用率 (XCTCPUMetric)、磁盘写入 (XCTStorageMetric) 和内存使用率 (XCTMemoryMetric)。
xcodebuild 有一个新选项-enablePerformanceTestsDiagnostics YES,用于收集性能 XCTest 的诊断信息。
用户界面测试现在支持在 macOS 中使用 swipeUp、swipeDown、swipeLeft 和 swipeRight 系列方法。
性能测试现在支持在 macOS 中为动画os_signpost间隔使用 XCTOSSignpostMetric 时收集故障指标。
在 macOS 中,或在具有密码的设备上使用自动化时,您必须从管理员帐户运行自动化,并且必须进行身份验证以授权自动化。
XCTest 现在支持从 App Tracking Transparency 框架重置受保护资源“用户跟踪”的授权状态。
用 Swift 编写的测试方法可能会被标记为异步或异步抛出,以允许调用和等待来自异步 API 的结果,作为 Swift 并发语言功能的一部分。
XCTestCase 现在包含一个 addTeardownBlock 方法重载,其闭包参数是 async throws
XCTExpectFailure 函数现在包括用于自定义某些选项的 Swift 重载,而无需创建 XCTExpectedFailure.Options 实例
XCTest 现在能够在 watchOS UI 测试中合成 Digital Crown 旋转。
XCTest 现在包括 setUp 和 tearDown 实例方法的异步抛出重载
测试现在可以从任何线程调用 XCTestCase.expectation(description:)——以及其他返回 XCTestExpectation 的 XCTestCase API。这消除了之前测试从主线程调用这些 API 的要求,并允许使用它们的现有测试采用异步,而无需 @MainActor。
Xcode 13 正式版发布,来看看有什么新特性
新的 Use Compiler to Extract Swift Strings 构建设置调用 Swift 编译器从 Text()、String(localized:)、AttributedString(localized:) 初始值设定项、SwiftUI 的 LocalizedStringKey 和 Foundation 的 StringLocalizationKey 中准确地提取字符串插值和字符串文字。
添加了对 genstrings 和本地化导入和导出的支持,以提取在 Objective-C 代码中使用新 NSLocalizedAttributedString 宏的字符串。
在导出以进行本地化时,Xcode 会自动从 构建和发布为 macOS 应用 Info.plist 文件中提取 NSGKFriendListUsageDescription、NSLocationTemporaryUsageDescriptionDictionary 和 NSFallDetectionUsageDescription。
Metal
Metal Debugger 现在支持 Selective Shader Debugging,它允许您限制大型 Compute 着色器的调试范围。这导致更快的着色器调试器会话创建和迭代时间。
Metal Debugger 中的新捕获控件可让您精确控制来决定捕获 Metal 工作负载的哪个部分,以及捕获多个帧或范围的选项。
Metal Debugger 现在支持导入 metallibsym 文件,这使您可以在应用程序中进行 Metal 着色器调试和分析,而无需在您的 metallib 中嵌入着色器源。
Metal Debugger 中的 Apple GPU 可以使用 GPU 时间线。使用此时间线可视化和检查 Metal GPU 命令的并行执行以及一组精选的 GPU 计数器。
Metal 管道状态对象现在在 Metal Debugger 中表示为资源,包括一个全新的 Metal Pipeline States 和 Metal Libraries 查看器,以及 Metal Debugger 的 Memory Viewer 中的 Metal Pipeline 状态的 GPU 内存。
Instruments 的 Metal System Trace、Xcode 中的 Metal Debugger 以及全新的 Condition Inducer 中提供了新的一致 GPU 性能状态分析工作流。
现在可以在 Metal System Trace 模板的记录选项中覆盖 GPU 性能状态。
Metal Debugger 现在支持 Metal 光线追踪以及新的高级加速结构查看器。
Organizer
现在可以通过 URL 共享崩溃报告
Xcode 现在会显示您的崩溃问题的 TestFlight 反馈,以便更好地了解问题所在
现在可以根据任何特定的历史应用程序版本、任何特定的历史应用程序版本、产品类型(如 App Clip、应用程序扩展或主应用程序)以及 TestFlight 或 App Store 的发布历史记录过滤 Energy 报告列表。
Xcode Organizer 中的新 Scroll Hitch Goals 使分析应用程序版本的滚动体验变得容易
当您查看应用的指标时,您现在可以选择查看应用的 App Clip 的指标
Xcode Organizer 中新的 Terminations 指标显示前景和背景终止,按原因细分
Xcode Organizer 中的历史数据现在可以为每个指标图表显示最多 16 个应用程序的最新版本,提供应用程序在更大时间窗口内的性能趋势。
Xcode Organizer 中 Disk Write Reports 的 Qualitative Insights 在检查器中显示称为 Insights 的新信息
现在 Xcode Organizer 中提供了 Smart Insights,可帮助您比以前更快地发现应用程序的功能和性能回归
Project Navigator
当 Products 组位于默认位置时,项目导航器会隐藏它
Move 构建和发布为 macOS 应用 Focus to Editor 命令现在解释 vim 方向移动键。
签名和分发
xcodebuild 现在支持使用 App Store Connect API 密钥对 Apple Developer 网站进行身份验证。
Xcode 现在提供在您第一次将新应用上传到 App Store Connect 时创建应用记录的功能。
将应用上传到 App Store Connect 时,Xcode 中的分发助手会检测您的应用是否具有有效的内部版本号 (CFBundleVersion)。
Xcode 13 支持在 Mac 上为 TestFlight 配置应用程序
您现在可以在命令行上使用 notarytool 与 Apple 公证服务进行交互
Source Control
现在,您可以在登录 GitHub 或 Bitbucket Server 帐户后,使用 Xcode 的源代码控制功能创建、审查和合并拉取请求。
源码编辑器
Xcode 13 引入了 Vim 键绑定,在源代码编辑器中模拟 vim 体验并结合现有的编辑器功能。
在首选项中启用 Vim 键绑定,使用文本编辑 > 编辑中的启用 Vim 键绑定选项。
可以通过选择 Edit > Copy Location 以 : 的形式将所选内容的当前位置复制到剪贴板。
在 Swift 中将占位符扩展为闭包时,代码完成使用闭包的参数名称而不是 。
Xcode 13 中的 Swift 语法高亮显示是即时且无闪烁的,无论是在文件之间进行编辑还是导航。
即使您的代码不完整或您的项目无法编译,Swift Jump to Definition 现在也能提供更具弹性的体验。
从 Swift 类、协议或方法声明跳转到定义还可以轻松导航到整个工作区中的所有子类、扩展和符合协议的类型。
Xcode 13 包括重新设计的 Swift 代码完成功能,可最大限度地提高可靠性和性能,尤其是在项目源代码中存在结构和逻辑不一致的情况下。
Static Analyzer
静态分析器现在警告带有副作用的断言、无限循环和更多 C++11 std::move 误用情况。
StoreKit
Xcode 中的 StoreKit 测试支持对使用 StoreKit 新的现代基于 Swift 的 API 构建的应用内购买进行全面测试。
Swift Packages
Swift 包现在可以声明 Mac Catalyst 的部署目标,并且现在可以在构建条件中将 Mac Catalyst 指定为平台。
当包声明工具版本为 5.5 或更高版本时,macOS 的构建条件不再适用于 Mac Catalyst。
Swift Packages 现在支持 DriverKit 作为平台。
现在可以在 Add Packages 表中添加精选的包集合。
Swift 重构
新的重构有助于迁移到异步代码。“Convert Call to Async Alternative”可用于将完成处理程序作为最后一个参数的调用,并重构它们以使用新的异步语言功能,假设该函数的异步等效项已经存在。
现在可以将新的 Add Async Wrapper 重构操作应用于具有完成处理程序的函数。
Source Editor 和 Test Navigator 具有 Run Test 操作的两个新变体,它们无需构建即可运行测试选择。
您现在可以使用 XCTPerformanceMeasurementPolarity 枚举自定义如何将性能测试的自定义指标的测量值与设置的基线进行比较。
XCTest 现在能够在受支持的 iOS 设备上的 UI 测试中合成指针交互。
性能 XCTests 现在支持测量应用程序启动时的 CPU 使用率 (XCTCPUMetric)、磁盘写入 (XCTStorageMetric) 和内存使用率 (XCTMemoryMetric)。
xcodebuild 有一个新选项 -enablePerformanceTestsDiagnostics YES ,用于收集性能 XCTest 的诊断信息。
用户界面测试现在支持在 macOS 中使用 swipeUp、swipeDown、swipeLeft 和 swipeRight 构建和发布为 macOS 应用 系列方法。
性能测试现在支持在 macOS 中为动画 os_signpost 间隔使用 XCTOSSignpostMetric 时收集故障指标。
在 macOS 中,或在具有密码的设备上使用自动化时,您必须从管理员帐户运行自动化,并且必须进行身份验证以授权自动化。
XCTest 现在支持从 App Tracking Transparency 框架重置受保护资源“用户跟踪”的授权状态。
用 Swift 编写的测试方法可能会被标记为异步或异步抛出,以允许调用和等待来自异步 API 的结果,作为 Swift 并发语言功能的一部分。
XCTestCase 现在包含一个 addTeardownBlock 方法重载,其闭包参数是 async throws
XCTExpectFailure 函数现在包括用于自定义某些选项的 Swift 重载,而无需创建 XCTExpectedFailure.Options 实例
XCTest 现在能够在 watchOS UI 测试中合成 Digital Crown 旋转。
XCTest 现在包括 setUp 和 tearDown 实例方法的异步抛出重载
测试现在可以从任何线程调用 XCTestCase.expectation(description:)——以及其他返回 XCTestExpectation 的 XCTestCase API。这消除了之前测试从主线程调用这些 API 的要求,并允许使用它们的现有测试采用异步,而无需 @MainActor。
macOS Big Sur可以为企业带来哪些安全保证?
然而,Rosetta 2有几个问题。首先,转换不可避免地要花费时间,而且再聪明的优化也改变不了这样一个事实:一些依赖于Rosetta 2的应用程序的启动或运行速度会比它们在Intel架构上编译时慢。为了避免这个问题,苹果还引入了一种新的多架构、通用(又名Fat)二进制格式。这允许开发者将现有macOS应用移植到苹果芯片上运行。对于Xcode 12或更高版本,开发人员可以构建一个包含两种设备架构的“胖”二进制文件:不需要基于arm的Mac来编译这些通用二进制文件。
自从Apple在macOS El Capitan 10.11中引入系统完整性保护方法以来,这种系统容量的强化应该不会给IT和安全团队带来太多挑战。
鉴于所有流行浏览器中都广泛使用扩展名,安全团队将希望注意macOS Big Sur中的新Web扩展功能。这使现有的Chrome和Firefox扩展可以轻松地转换为通过xcrun工具与Safari 14结合使用。苹果希望通过继续坚持必须通过其App Store分发浏览器扩展来缓解有关安全的担忧,还有一些用于管理浏览器扩展的新用户控件。
据报道,Safari 14默认也会启用HTTP / 3。根据Apple的发行说明,Big Sur通过“开发人员”菜单中的“构建和发布为 macOS 应用 实验功能”在Safari中启用了实验HTTP / 3支持。可以使用以下终端命令在系统范围内启用它:
由于我们讨论的是命令行,macOS 11中的另一个网络更改与networksetup实用程序有关,即/usr/sbin/networksetup。从Big Sur开始,此工具将不再允许标准用户更改网络设置。标准用户将能够打开和关闭Wifi并阅读网络设置,但是修改将需要管理员用户名和密码。
只要苹果的App Store能够及时有效地监视和删除恶意或滥用行为,我们也不会认为浏览器扩展的增加会带来更大的攻击面。当然,这是苹果的责任,而企业安全团队可能会感到,考虑到恶意扩展的历史以及我们有多少私有扩展,通过MDM或类似配置工具来锁定浏览器扩展的安装是值得考虑的事情。敏感数据通过浏览器应用程序传递。在此基础上,新的隐私报告工具是Big Sur中Safari 14的受欢迎补充。
证书信任:有根证书是远远不够的
在macOS Big Sur中,仅以UID 0运行将不再足以进行此更改:需要使用管理员密码进行确认。
配置文件得到优先处理
在macOS Big Sur中,Apple承认滥用配置文件,现在提高了其安装标准。除非设备已注册到MDM程序中,否则安装配置文件现在将要求用户在“系统偏好设置”应用中手动完成配置文件的安装,其中还会有一个窗口描述概要文件的实际行为。
有点奇怪的是,此操作有8分钟的超时:如果用户未在该时间内完成安装,则macOS Big Sur会将其从系统偏好设置中删除。
令人惊讶的是,在应用程序安全方面没有什么令人惊讶的表现。虽然WWDC 2020远未结束,但我们还没有看到任何关于苹果将改变macOS 11应用程序安全方法的声明或建议。由于如此多的幕后变化都集中在安全性上,企业安全团队可能一直希望有一些重大的发展,但这仍有待观察。
在macOS 11中,苹果似乎将继续依赖在macOS 10.x多年中一直在缓慢发展的模型,但是在依靠静态签名进行阻止和检测方面,该模型仍然落后于其他程序应用程序的安全模型仍然是这样的:
攻击者从10.14开始使用简单的社会工程手段发起攻击,让Gatekeeper和Notarization的安全能力看起来像是摆设一样,但这种情况只是有所改善。 XProtect的静态YARA规则依赖于Apple已知的恶意软件。即,某些用户或企业必须先被感染,然后Apple才能更新签名,而MRT.app仅在更新后运行,用户登录或重新启动MRT.app。 意味着在Mac实际使用的大部分时间内,它是无能为力进行防护的。