首页 > 其他分享 >MAUI+Masa Blazor APP Store新手上线指南

MAUI+Masa Blazor APP Store新手上线指南

时间:2023-08-15 14:44:27浏览次数:73  
标签:your Masa App app Guideline MAUI 审核 APP Store

目录


前言

作为新手App开发,iOS由于众所周知的原因,必须通过App Store下载安装App,所以通过App Store的审核是必须的。
以下是我们首次使用MAUI+MASA Blazor开发App并上传App Store中遇到的审核意见和我们的解决方法,供MAUI新手开发参考。
首先强调,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();
 }

4、希望Android MAUI Blazor字体缩放不受系统字体缩放影响
系统字体缩放会影响我们的UI显示,我们可以通过在MainActivity 重写Resources来实现强制修改字体缩放

    public class MainActivity : MauiAppCompatActivity {
        public override Resources Resources
        {
            get
            {
                var resources = base.Resources;
                if (resources != null && resources.Configuration?.FontScale != 1.0f)
                {
                    var configuration = resources.Configuration;
                    configuration.FontScale = 1.0f;
                    resources.UpdateConfiguration(configuration, resources.DisplayMetrics);
                }
                return resources;
            }

        }
.....

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时提示找不到图标资源

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

标签:your,Masa,App,app,Guideline,MAUI,审核,APP,Store
From: https://www.cnblogs.com/sunday866/p/17613701.html

相关文章

  • 因为私域流量运营,App重新受重视?
    2023年,中国新生人口出生人数预测只有780W,少得可怜。微信、支付宝、抖音、小红书等社交平台,在21世纪20年代风生水起,伴随者人口红利的增长,奠定了中国公域流量平台的位置。 市场是千变万化的。人口急剧缩减,红利正在慢慢的消失,带来的就是各大社交平台人口红利缩减后水涨船高的流......
  • 如何绕过App的强制更新
    遇到强制更新的页面,可以选择两种方式:-先断网,进入系统,然后再打开网络-一进入app,会检查版本更新,如果发现版本较老,会提示更新,一般这种功能写在第一个页面中,换到别的页面就不会再提示了-找到源码的位置,将强制更新的页面不要弹出(此时,后端API必须得是可用的状态)1:获取进程名称#......
  • App自动化
    Appium基础安装APKimporttimefromappium.webdriverimportRemote#apk的路径file=r'apk路径'caps={"platformName":"Android","deviceName":"设备号",#可通过adbdevices或者adbget-serialno获取......
  • webkit webApp 开发技术要点总结
    如果你是一名前端er,又想在移动设备上开发出自己的应用,那怎么实现呢?幸好,webkit内核的浏览器能帮助我们完成这一切。接触webkitwebApp的开发已经有一段时间了,现把一些技巧分享给大家:1.viewport:也就是可视区域。对于桌面浏览器,我们都很清楚viewport是什么,就是出去了所有工具栏、......
  • virtualenvwrapper 使用流程
    virtualenvwrapper使用流程virtualenvwrapper基于virtualenv,可以更方便的管理Python虚拟环境,virtualenvwrapper-win依赖于virtualenv,所以也要安装virtualenv。需要注意的是,virtualenvwrapper在Windows系统中只能通过cmd才能正常使用一、安装virtualenvwrapper-win......
  • Application创建过程-1
     一、概述system进程和app进程都运行着一个或多个app,每个app都会有一个对应的Application对象#######(该对象跟LoadedApk一一对应)。下面分别以下两种进程创建Application的过程:1.system_server进程;2.app进程;二、system_server进程2.1SystemServer.run[->SystemSer......
  • 极其强烈推荐的手机无人直播app下载
    手机无人直播app,商家自动直播app全面迎来了大爆发。相比数字人无人直播价格昂贵。手机无人直播则是算不上任何的投入成本。两支手机+一个手机无人直播APP+一套声卡几块块钱,就可实现7X24X365无人直播的梦想。这种市场需求性可以说是全国1.4亿线下实体商户的刚性需求。魔棒手机无人直......
  • 深入思考 Next.js App Directory 架构
    写在前面:新的App目录架构一直是最近Next.js发布的主要亮点,这一点引发了许多讨论。在这篇文章中,AtilaFassina探讨了这种新策略的优势和风险,并反思了您是否应该立即在生产环境中使用它。自从Next.js13release发布以来,关于其描述的新功能的稳定性引发了一些争议。我们在“W......
  • uni-app中html5+开发记录
    代码示例:1、创建dom并绑定click事件 btnBack=newplus.nativeObj.View('btnBack',{top:systemInfo.statusBarHeight+'px',//此处top和left是相对于手机屏幕左上角为基准,不支持rightleft:'10px',height:&......
  • 直播app系统源码中加载图片的三种方式
    直播APP系统源码中,加载图片可以很好的提高用户体验,图片预先加载出来,可以方便用户更好的去观看,避免很长的等待时间,让用户更加快速冲浪,本文将为大家分享三个直播app系统源码中加载图片的方式。方式一:直播app系统源码中src指向图像的位置最常用的一种方式,无需搭配后端代码<img sr......