MAUI+Masa Blazor APP 各大商店新手发布指南(一)App Store篇

news2025/1/19 3:25:58

文章目录

  • 前言
  • 新手常见审核意见
    • Guideline 2.1 - Information Needed
    • Guideline 3.2 - Business
    • Guideline 2.1 - Performance - App Completeness
    • Guideline 2.3.8 - Performance - Accurate Metadata
    • Guideline 5.1.1(v) - Data Collection and Storage
    • Guideline 4.2 - Design - Minimum Functionality
    • Guideline 4.8 - Design - sign in with Apple
    • Guideline 4.2.3 - Design - Minimum Functionality
    • Guideline 4.0 - Design
    • 在推送到App Store Connect后,邮箱收到ZipArchive' contains bitcode的审核错误。
    • 通过transfer app上传app时提示找不到图标资源
    • 其他注意事项


前言

作为新手App开发,iOS由于众所周知的原因,必须通过App Store下载安装App,所以通过App Store的审核是必须的(当然如果您有299美元一年的企业版证书可以走内部分发渠道的场景除外)。
以下是我们首次使用MAUI+MASA Blazor开发App并上传App Store中遇到的审核意见和我们的解决方法,供MAUI新手开发参考。
首先强调:
1、App Store不需要软著。
2、发布App Store需要确认证书为个人或者公司,企业证书是不能发布App Store的。

新手常见审核意见

Guideline 2.1 - Information Needed

  1. Is your app restricted to users who are part of a single company? This may include users of the company’s partners, employees, and contractors.
  1. Is your app designed for use by a limited or specific group of companies?
  • If yes, which companies use this app?
  • If not, can any company become a client and utilize this app?
  1. What features in the app, if any, are intended for use by the general public?
  1. How do users obtain an account?
  1. Is there any paid content in the app and if so who pays for it? For example, do users pay for opening an account or using certain features in the app?

如果你的应用审核人员认为是公司内部使用,不是面向所有用户,那么你就会收到如上的审核意见,你需要依次回答上述问题。
如果回答不当,你会收到如下审核回复

Guideline 3.2 - Business

We found in our review that your app is intended to be used by a specific business or organization, including partners, clients, or employees, but you’ve selected public distribution on the App Store in App Store Connect. Since the App Store is intended for apps with a public audience, we recommend reviewing the other distribution options available to you through your Apple Developer Program Account.

解决方案1:回答中要坚持你的App是面向所有用户的,并提供注册入口。如果是用手机号验证码的方式注册,审核人员往往不会真正注册,因为他们大多不在中国大陆无法接收验证码。
解决方案2:如果你的App确实无法面向所有用户,那么你要向未注册用户(游客)提供一些功能,并回复说明情况,强调用户不注册也可以使用App,列举提供的功能。

Guideline 2.1 - Performance - App Completeness

We discovered one or more bugs in your app. Specifically, app showed an error screen after we tapped log out button.

Review device details:

  • Device type: iPad
  • OS version: iOS 16

如果审核人员发现不正常的页面(例如空白页面,布局错乱页面),或者页面出现报错,那么审核会立即终止。
这里有几个点需要注意
1、按照经验,就算你的App明确注明只适用于iPhone,那么审核人员还是会使用iPad来安装和审核,所以你要确保你的App在iPad上布局没有明显的异常。
2、审核人员会使用最新的iOS版本来审核,确保你的App可以兼容。
3、审核人员的iPad是英文环境,确保你的App在英文环境显示正常无报错,支持多语言请使用I18n相关配置,如果你的应用只需要中文,请在布局页面或者基组件页面的OnInitializedAsync事件通过 I18n.SetCulture(new CultureInfo(“zh-CN”)) 强制使用中文。

 protected override async Task OnInitializedAsync()
 {
     I18n.SetCulture(new CultureInfo("zh-CN"));
     await base.OnInitializedAsync();
 }

Guideline 2.3.8 - Performance - Accurate Metadata

We noticed that the app name to be displayed on the App Store and the app name displayed on the device do not sufficiently match, which makes it difficult for users to find the app they just downloaded. The app names are:

  • Name on the App Store: AAA
  • Name displayed on the device: BBB

请确保你在App Store Connect创建的应用名称与MAUI项目的csproj文件中标识内的名称完全一致
1
2

Guideline 5.1.1(v) - Data Collection and Storage

We noticed that your app supports account creation but does not appear to include an option to initiate account deletion.
Apps that support account creation must also offer account deletion to give App Store users more control of the data they’ve shared while using your app.

你的APP必须有删除账号功能
1、删除账号功能在App内部,需要在首页三步操作就可以找到入口,可以回复审核告知入口的位置和操作流程
2、可以在外部网站进行账号删除操作,App提供指向外部网站的链接
3、要与禁用和停用账号功能区别开来,删除的账号是可以重新注册的,并且删除的账号信息必须全部移除,包括与账号相关的分享的内容,你可以提供确认步骤,防止用户误操作。只有有资质的相关监管行业才可以保留用户信息或者要求用户必须电话或者邮件回复等方式进行删除账号确认(Apple审核往往无法确认这些内容)。

Guideline 4.2 - Design - Minimum Functionality

We found that the usefulness of your app is limited by the minimal amount of content or features it includes.

审核人员认为你的App功能过于简单,或者只是简单的网页套壳项目,这显然是个很主观的判断。
如果你的App真的是一个套壳项目,那么是很容易被识别出来的,你需要丰富内容重新提交审核。
如果不是上述情况,这里有一个技巧,你可以把你App的文档,或者测试的报告,相关内容全部打包在审核留言上提交给审核人员,并向他解释你的app是多么的重要,向他解释还有很多按钮和流程是在特定权限或者场景才能展示,例如:蓝牙、或者扫码特定内容之后触发的功能等等。4.2的审核意见一般都可以解决。

Guideline 4.8 - Design - sign in with Apple

We noticed that your app uses a third-party login service but does not offer Sign in with Apple.

霸王条款,你如果使用了第三方登录,比如微信登录,那么你必须也同时实现apple登录
apple登录 微软MAUI有文档

https://learn.microsoft.com/zh-cn/dotnet/maui/platform-integration/communication/authentication?tabs=macios#apple-sign-in

Guideline 4.2.3 - Design - Minimum Functionality

We were required to install the Wechat apps before we can log-in via Wechat. The user should be able
to log-in and access their account, without requiring additional applications to be installed.

If you choose to allow users to log-in via Wechat, please use methods that can authenticate users from
within your app, such as a native web-view.

如果没有安装微信,审核给的意见是可以通过网页微信授权登录,但是这里可以做的更简单一些,就是使用WXApi isWXAppInstalled来判断微信是否安装,如果没有安装,就不显示微信登录的按钮即可。

Guideline 4.0 - Design

Your app includes an update button or alerts the user to update the app, but the update button or alert does not link directly to the app’s page on the App Store.

你使用了不标准的图标,例如修改了apple登录的图标,你需要参照下面的文档使用图标,建议不要轻易修改apple登录图标

https://developer.apple.com/design/human-interface-guidelines/buttons

在推送到App Store Connect后,邮箱收到ZipArchive’ contains bitcode的审核错误。

1
APP Store审核过程中提示 ZipArchive’ contains bitcode,往往是第三方nuget包引起的,例如 BarcodeScanner.Mobile.Maui,该包依赖Firebase,Firebase在windows上会触发打包长度的问题,只能在mac下打包。
解决方法是在,MAUI项目的csproj文件中,Project节点下添加如下代码,编译发布时即可关闭bitcode。

	<PropertyGroup>
		<!-- Properties used to strip bitcode from frameworks when using Visual Studio for Mac -->
		<_StripBitcodeFromFrameworksMasterAfterTargets Condition="'$(OS)'=='Unix'">_ExpandNativeReferences</_StripBitcodeFromFrameworksMasterAfterTargets>
		<_StripBitcodeFromFrameworksMasterDependsOnTargets Condition="'$(OS)'=='Unix'">_StripBitcodeFromFrameworksOnMac</_StripBitcodeFromFrameworksMasterDependsOnTargets>

		<!-- Properties used to strip bitcode from frameworks when using Visual Studio for Windows -->
		<_StripBitcodeFromFrameworksMasterAfterTargets Condition="'$(OS)'!='Unix'">_ComputeFrameworkFilesToPublish</_StripBitcodeFromFrameworksMasterAfterTargets>
		<_StripBitcodeFromFrameworksMasterDependsOnTargets Condition="'$(OS)'!='Unix'">_StripBitcodeFromFrameworksOnWindows</_StripBitcodeFromFrameworksMasterDependsOnTargets>
	</PropertyGroup>

	<Target Name="_StripBitcodeFromFrameworksMasterTarget" Condition="'$(_StripBitcodeFromFrameworksMasterDependsOnTargets)'!='' AND @(_FrameworkNativeReference-&gt;Count()) != 0" AfterTargets="$(_StripBitcodeFromFrameworksMasterAfterTargets)" DependsOnTargets="$(_StripBitcodeFromFrameworksMasterDependsOnTargets)" />

	<Target Name="_StripBitcodeFromFrameworksOnMac" Condition="('$(OutputType)'!='Library' OR '$(IsAppExtension)'=='True') AND '$(_SdkIsSimulator)'=='False'">

		<!-- Find the bitcode_strip command -->
		<Exec Command="xcrun -find bitcode_strip" ConsoleToMSBuild="true">
			<Output TaskParameter="ConsoleOutput" PropertyName="_BitcodeStripCommand" />
		</Exec>

		<!-- Strip the bitcode from frameworks -->
		<Exec Command="$(_BitcodeStripCommand) %(_FrameworkNativeReference.Identity) -r -o %(_FrameworkNativeReference.Identity)" />
	</Target>

	<Target Name="_StripBitcodeFromFrameworksOnWindows" Condition="('$(OutputType)'!='Library' OR '$(IsAppExtension)'=='True') AND '$(_SdkIsSimulator)'=='False' AND '$(IsMacEnabled)'=='true'">

		<!-- Strip the bitcode from frameworks -->
		<Exec SessionId="$(BuildSessionId)" Command="&quot;%24(xcrun -find bitcode_strip)&quot; %(_FrameworkNativeReference.Identity) -r -o %(_FrameworkNativeReference.Identity)" />

		<CopyFileFromBuildServer SessionId="$(BuildSessionId)" File="%(_FrameworkNativeReference.Identity)" TargetFile="%(_FrameworkNativeReference.Identity)" />
	</Target>

通过transfer app上传app时提示找不到图标资源

在这里插入图片描述

大多在mac打包时出现,清空bin和obj文件夹重新生成即可,另外app的图标不能包含透明区域(alpha通道)。

其他注意事项

1、一般如果审核被拒绝次数过多会向你提供电话审核帮助的提示,如果实在通过留言的方式很难沟通,可以申请电话帮助(每次留言审核可能需要24小时才能得到回复),电话帮助会是中文业务代表,不用担心语言问题。
2、一般首次审核通过,之后发布的更新版本审核会很快。但是如果发布了错误的审核版本,可以马上申请加急审核,一般3小时之内就能审核通过(常规审核可能需要24小时)。链接如下:

https://developer.apple.com/contact/app-store/?topic=expedite

3、请注意上传的版本,版本只能增加不能减少,也就是如果上传了1.5.1的版本(无论是否发布),你就不能再上传1.5.0的版本。

以上就是全部内容,如果有新增内容,我们会陆续补充,之后会陆续更新国内安卓市场的审核指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python统计字符内容的占比

说明&#xff1a;如果有自己动手做过字符动画&#xff0c;会知道字符动画的“灵动性”核心在于使用的字符集。 简单来说&#xff0c;动画转为字符动画&#xff0c;原理是将动画转为灰阶图&#xff0c;灰度范围是0~255&#xff0c;然后将对应灰度的像素点转为对应比值的字符。这…

【数据结构OJ题】链表的中间结点

原题链接&#xff1a;https://leetcode.cn/problems/middle-of-the-linked-list/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 快慢指针法 通过快慢指针找到中间结点&#xff0c;快指针每次走两步&#xff0c;慢指针每次走一步&#…

ignition gazebo || 解决ignition gazebo启动后所有图标都是黑方块的问题

问题&#xff1a; 启动ignition gazebo出现图表全黑的情况 ign gazebo 解决方案 sudo apt install aptitude aptitude是一款针对debian系系统的系统依赖管理更加有效的包管理工具。我建议以后都使用aptitude进行包管理。 下面正式开始解决问题。 出现这个问题毫无疑问是qt…

java的类和对象详解

一、java是面向对象的编程语言 首先一般的编程语言有两种&#xff0c;一种是面向对象&#xff0c;一种是面向过程。前者更加关注代码中对象与对象之间关系与协作&#xff0c;而后者更加注重代码的执行过程。 举个例子 传统的方式&#xff1a;注重的是洗衣服的过程&#xff0c;…

BUUCTF [CISCN2019 华东南赛区]Web11

分析 上面可以看出这是Smarty模板引擎 看到这个ip我们应该想到使用X-Forwarded-For字段 X-Forwarded-For 是一个 HTTP 扩展头部&#xff0c;用来描述请求者的ip 如果后端认为这个是我们的真实ip并使用Smarty来回显那么就可能造成了SSTI 当我们设置了 X-Forwarded-For: {{11}}时…

【EI/SCOPUS检索】2023年第二届光学成像与测量国际会议 (ICOIM2023)

2023年第二届光学成像与量国际会议 &#xff08;ICOIM2023&#xff09; 2023 2nd International Conference on Optical Imaging and Measurement 光学成像与测量密切相关且具有广泛的应用&#xff0c;如显微镜、望远镜、传感器等。通常&#xff0c;成像是测量的基础&#xf…

Python - 多线程,多进程中的join和Event及没有使用join和event区别

一. 前言 在Python的多线程和多进程编程中&#xff0c;join() 和 Event 都是用来控制线程或进程之间的同步关系的工具&#xff0c;它们的作用类似&#xff0c;但还是有一些区别。 二. 概念 1. join() join() 方法是线程或进程实例的一个方法&#xff0c;用于阻塞当前调用线…

6. 自定义异常 全局异常处理 测试异常处理

目录 1. 自定义异常 2. 全局异常处理 3. 测试异常处理 1. 自定义异常 创建⼀个异常类&#xff0c;加入状态码与状态描述属性。 凡是业务代码中出现的可预期的异常&#xff0c;统一抛出 ApplicationException public class ApplicationException extends RuntimeException{//…

[Java优选系列第1弹]如何优化Java三层架构开发效率?三个实用技巧分享

&#x1f49e;优选系列制作漫长&#xff0c;每篇一经写出不再创作&#xff0c;均是呕心沥血制作&#xff0c;且看且珍惜&#x1f4ab; 一直在等你&#xff0c;你终于来啦&#x1f496; 绿色代表解释说明 黄色代表重点 红色代表精髓 Java三层架构…

qt 安 装

之后版本都是在线安装 下载地址 Index of /archive/online_installers 只用这三个即可&#xff0c;其他不用管默认

操作系统-笔记-第一章-操作系统的概念

目录 一、第一章——操作系统的概念 1、操作系统的概念、功能 &#xff08;1&#xff09;层次 &#xff08;2&#xff09;总结 2、操作系统的特征&#xff08;4个&#xff09; &#xff08;1&#xff09;并发与并行 &#xff08;2&#xff09;共享与互斥 &#xff08;3…

【网络基础实战之路】基于MPLS-VPN技术实现两个私网间互通的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…

主流的嵌入式微处理器

目前主流的嵌入式微处理器系列有&#xff1a; ARM系列 MIPS系列 PowerPC系列 Super H系列 一、MPC/PPC系列 PowerPC(简称PPC),其基本设计源自IBM的POWER.1991年&#xff0c;APPLE(苹果电脑)、IBM、Motorola&#xff08;摩托罗拉&#xff09;组成的AIM联盟发展出Power微处理器…

Windows Server 2019设置使用照片查看器查看图片的设置方法

1、使用winR快捷键快速打开运行&#xff0c;输入regedit打开注册表&#xff1a; 2、在注册表中找到&#xff1a;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations 3、在右侧新建字符串项&#xff1a; 4、例如新建两项.jpg 和.png值…

eNSP:mpls综合实验

实验要求&#xff1a; 拓扑图 路由、IP配置 r1: <Huawei>sys [Huawei]sys r1 [r1]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int g 0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.2.1 30[r1]ip route-static 192.168.3.0 30 192.168.2.2 [r1]ip rou…

生信豆芽菜-TIP预测免疫

网址&#xff1a;http://www.sxdyc.com/immuneTipScore 一、TIP预测免疫的介绍 TIP&#xff08;Tumor Immune Prediction&#xff09;是一种用于预测肿瘤免疫状态的计算方法。它通过分析基因表达数据来推断肿瘤样本中的免疫细胞浸润情况和免疫反应程度。 TIP的基本原理如下&…

HTML中的字符串转义

为什么要转义&#xff1f; 转义可以防止 xss 攻击。接下来&#xff0c;我们来看一下如何转义。 HTML Sanitizer API Sanitizer 是浏览器自带的转义方法&#xff0c;在2021年初被提出&#xff0c;兼容性问题很大。 列举几个常用的 API&#xff1a; const $div document.qu…

RTC实验

一、RTC简介 RTC(Real Time Clock)即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电BCD码&#xff0c;四位二进制表示一位…

Cesium--一些实验过程中的效果记录

1.一种反射效果&#xff1a; 片元着色器代码 fragmentShaderSource:in vec3 v_positionMC;in vec3 v_positionEC;in vec2 v_st;void main(){czm_materialInput materialInput;vec3 normalEC normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), ve…