当前位置: 首页 > news >正文

利用uni-app 开发的iOS app 发布到App Store全流程

1.0.3 20200927

更新官方对应用审核流程的状态。

注:最新审核后续将同步社区另一篇记录 AppStore 审核被拒原因记录及解决措施

:苹果开发上架常见问题 | appuploader使用教程
1.0.2 20200925

新增首次驳回拒绝邮件解决措施。

1.0.1 20200922

首次提交关于App Store上架步骤流程:
兼容检查 -> 账号申请 -> 证书申请 -> 发布准备 -> App Store上架 -> 审核后续
提交审核iOS审核团队联系方式;


本笔记用于记录了本人利用HBuilderX 开发项目到打包iOS app包后,上架App Store商店全过程步骤,希望对有需要的小伙伴给予些许帮助。

先后顺序因人而已,我这里主要是按照以下步骤:

兼容检查 -> 账号申请 -> 证书申请 -> 发布准备 -> App Store上架 -> 审核后续:

1、兼容检查:
  • 布局屏幕宽度适配(css样式:如字体大小、间距等)

如:

input中class样式
:class="iosPlus ? 'biaotiIOS' : 'biaoti'"
  • 插件兼容(如我个人应用涉及的word等文档预览、腾讯云验证码适配处理和人脸识别验证兼容等)
  • 官方API差异检查(如Native.js for iOS的一些API)
  • 好用的平台自动化测试工具,如IPA guard 测试服务

2、账号申请:

关于账号类型:

账号类型

  • 因政策原因,公司没有以前容易申请,申请时间预计一周时间;(本人申请的是「个人账号」花了大概两天吧)
  • 公司和企业的账号申请需要邓白氏码,如果邓白氏码未申请,请先申请邓白氏码,这个过程需要一到两个星期。

注册申请

  1. 注册苹果账号apple id
  2. 开启双重认证,需在一台IOS手机/iPad操作
  3. 在App Store下载Apple Developer APP 进行注册开发者账号
  4. 去Apple Developer应用填写申请资料
  5. 绑定支付宝或者微信支付苹果年费(¥688元/年)
3、证书申请:
3.1 iOS证书(.p12)和描述文件(.mobileprovision)申请

详细步骤:

  1. 生成证书请求文件
  2. 申请开发(Development)证书和描述文件
  3. 申请发布(Production)证书和描述文件

申请步骤详见 iOS证书和描述文件申请

image

发布 (Production)证书用于正式发布环境下使用,用于提交到Appstore审核发布。发布证书打包的 ipa,不可以直接安装到手机上.

依据上述步骤最终会在本机得到以下文件:

image.png

其中红线部分为打包需要的文件,其它均为申请途中产生的辅助文件。

3.2 关于IOS的证书
  1. iOS开发证书:iOS开发证书是用于测试APP,在开发过程中安装到苹果手机真机测试APP的运行情况。
  2. iOS发布证书:当APP开发测试好后上线就需要用到iOS发布证书,用iOS发布证书打包的ipa才能上传到App Store审核。
  3. iOS推送证书:iOS推送证书是用于推送通知的,平时我们在手机的系统栏下拉看到的那些消息就是推送通知,如果要做这个功能就需要配置推送证书。
  4. iOS企业证书:可以免上架App Store无设备数量限制安装到手机使用。
4、发布准备

上架前的准备工作

上架前我们需大致了解下应用上架的流程、审核标准规范,得知应用应符合哪些前提条件、哪些底线规则绝不能触及等等,才能顺利的通过审核并在AppStore上架。

苹果应用审核采用人工审核和自动审核相结合的方式。大体分为三部分,预审、机审和人工审核。

4.1 熟悉上架流程

目前应用提审的整个流程大体分为五个阶段:Prepare For Upload(准备上传)、Waiting For Review(等待审核)、 In Review(审核)、Pending Developer Release(等待开发者发布)、Ready For Sale(准备销售)。

APP上传后,会进入到 Wait for Review 状态,而后进入到In Review状态,In Review一般2天左右就会审核通过或者是被打回。

  • .ipa包上传后首先进入的是预审,会被扫描API等,预审通过后会在iTC里出现,然后才可以提交至 Waiting;
  • 在 Waiting For Review(等待审核)阶段一般是机审,机审主要是对代码进行机器审核,排查APP是否重复应用,“2.1苹果狗年大礼包”事件就更多地依赖机器自动审核,减少人工成本;
  • 通过后会进入In Review(审核)阶段,即人工审核阶段,这个阶段主要看的是App的元数据,例如APP封面、功能、体验等等,注重用户体验。
4.2 阅读最新的应用审核标准 - 《App Store 审核指南》

被驳回是很正常的事情,但前提我们必须了解该审核规范内容,遵守相关要求,按规则调整问题。

图片来源:App Store 拒绝情况说明.

2020-09-212020-09-212020-09-222020-09-222020-09-232020-09-232020-09-242020-09-242020-09-252020-09-252020-09-262020-09-262020-09-272020-09-272020-09-28应用程式审查确保:确保各注意事项内容安全:隐私、数据安全等性能:应用完整性、硬件兼容性要求业务:清晰业务模式、明确订阅商业规则模式等设计:良好的页面交互设计、精致设计和符合相关编程指南法律:应用程序必须在您可以使用它们的任何位置都符合所有法律要求及时跟进和解决错误日志报告AppStore提交之前规则提交之后

4.3 熟知常见驳回的问题:
  1. 崩溃和错误(这个留给iOS审核团队来发现就过份了哈 )
  2. 链接断开:应用中的所有链接(包括提用描述提供的隐私链接)都必须正常加载
  3. 占位符内容:如非正式功能图片和文字等
  4. 申请许可:引用了敏感用户数据API,详见
  5. 屏幕截图不正确(详见 - 尺寸要求规范)
可以利用XCode自带的iOS模拟器,直接在HBuildeX 工具里运行截图即可,比如我使用的是iPhone 11 Pro Max(13.6)对应6.5英寸显示屏(1242 × 2688 像素)

创建IOS模拟器

在HBuilderX里,点击顶部菜单栏 运行 - 运行手机或模拟器 - iOS模拟器

image


6. 信息不完整:需提供演示帐户用户名和密码等
7. 不合格的用户界面:应用需保持精致和用户友好的界面,符合iOS UI Design (行业标准规范 很赞同!🤔)

5、App Store上架
5.1 应用商店创建App
5.2 填写APP各项审核信息
  • 版本信息
  • 综合信息
  • ...

若「编辑年龄分级」为4+岁,根据苹果的最新规范不能使用IDFA

5.3 IOS 打包(生成.ipa文件)

到这一步,默认已经成功得到了 iOS证书(.p12)和描述文件(.mobileprovision)文件,否则请先完成 步骤3、!

  • 以HBuilderX 工具为例,打开待发布的项目 - 发行 - 原生App云打包

  • 打包成功后会在控制台输出得到下载链接:

    image

  • 通过 Transporter App 上传App 的二进制文件(上述打包生成链接的.ipa文件)

5.4 上传.ipa包至App Store Connect 中

利用第三方IPA上传工具:appuploder工具

上传构建版本,可以查看交付进度(包括警告、错误和交付日志)以及交付历史

5.5 使用 TestFlight测试 Beta 版 App
  • 在用于测试的 iOS 设备上安装 TestFlight;
  • 在 App Store Connect 中的TestFight 构建beta版本:
  • 在内部群组 - 新建测试员:
  • 点击邀请后,该成员邮箱将会收到一个兑换码:
  • 随后就可以在TestFlight 里打开该构建版本

关于 TestFlight:

1. 每个构建版本有最多 90 天的时间可供测试;
2. 如果在测试设备上安装该 App 的 App Store 版本,则该版本将被其 Beta 版本替换;
3. Beta 版 App 下载完成后,其名称旁边会出现一个表示其为 Beta 版本的橙色圆点。
5.6 提交审核!

审核有时很快一两天,或要几天时间,需及时查看看邮件。

如果变成可供销售,那么恭喜你已成功在App Store里上架!

6、审核后续

被驳回拒绝也是意料之中的事情,提交审核后的第二天(早上6点多)便收到了 App Store Review 的邮件。

6.0 我的被拒经历 🤨

第一封邮件:
2020年9月25日 06:48

2020年9月25日 上午6:48
发件人 Apple
Other - Other
Hello,The review of your app is taking longer than expected. Once we have completed our review, we will notify you via Resolution Center.If you would like to inquire about the status of this review, you may file a request via the Apple Developer Contact Us page.Best regards,App Store Review

翻译:
意思是这次评论时间会很长,等评论完成之后,会通知我们。

分析:
查阅相关资料,该邮件内容可理解为是对开发者账号的一种审查策略。邮件的标题为:Other - Other, 据说是一种全新的拒绝理由!🤔🤔

广大网友的猜测:

  • 苹果审核机制变了;
  • 苹果要审查你的账号了;
  • 苹果最近太忙了,知道要延迟审核,先给你的拒绝放在那,等轮到你了再说。
  • 考虑到最近的特殊大环境,有可能是ZF原因。

解决措施:

🎉 1. 等着!邮件已经说明了只需要等待对方答复。

🎉 2. 如果着急的话,就按照提示选择 Contact Us,提交申诉。
即 点击邮件的 " Apple Developer Contact Us" --> App审核 --> 选择 "App 审核状态" / "App 被拒澄清" 均可。
(此时苹果应会自动回复了一封邮件,大概一到两天内才会给予正式答复邮件)

我的回复内容:

Dear AppStore review team, hello.
I received an email about my app review rejection, the content is probably ``'The review of your app is taking longer than expected...' This is my first time submitting an app in the AppStore, I am very excited and happy ! 😃😃 If it is found that there are any abnormal problems in the submitted application, I think I will be happy to actively cooperate with the rectification, and look forward to your reply. Good luck!

大概就是说 我收到了被拒邮件,并表示非常乐意配合整改,期待正式回信。

总之态度很诚恳,愿意积极配合。🌝🌝

总体大致流程:

收到Other-Other被拒 ——> 根据邮件提示询问审核状态 ——> 约2天收到官方回复(提及会将你的请求转达给内部其他团队)——> 再过2天收到完成账号调查邮件+in review邮件 ——> 可能收到关于需调整的问题,再次被拒 ——> 修改代码重新提交 ——> in review、通过审核!🎉🎉🎉

相关文章:

利用uni-app 开发的iOS app 发布到App Store全流程

1.0.3 20200927 更新官方对应用审核流程的状态。 注:最新审核后续将同步社区另一篇记录 AppStore 审核被拒原因记录及解决措施 :苹果开发上架常见问题 | appuploader使用教程 1.0.2 20200925 新增首次驳回拒绝邮件解决措施。 1.0.1 20200922 首次…...

5个高质量的实用办公软件,每一款都是良心推荐

在现代办公环境中,高效的办公软件可以极大地提升工作效率,简化工作流程,帮助我们更好地完成工作。今天就给大家分享5个高质量的实用办公软件,每一款都是良心推荐。 01、FastStone Capture(截图工具) FastSt…...

基于GPTs个性化定制SCI论文专业翻译器

1. 什么是GPTs GPTs是OpenAI在2023年11月6日开发者大会上发布的重要功能更新,允许用户根据特定需求定制自己的ChatGPT模型。 Introducing GPTs 官方介绍页面https://openai.com/blog/introducing-gpts 在原有自定义ChatGPT的流程中,首先需要自己编制p…...

Final Cut Pro X for Mac:打造专业级视频剪辑的终极利器

随着数字媒体技术的不断发展,视频剪辑已经成为各行各业不可或缺的一部分。Final Cut Pro X for Mac作为一款专业的视频剪辑软件,凭借其强大的功能和易用性,已经成为Mac用户的首选。本文将向您详细介绍Final Cut Pro X for Mac的优势、功能以及…...

c++分割路径的字符串,得到 目录 文件名 扩展名

简单的做一个c小代码片的记录 c分割了图片的 路径字符串&#xff0c;得到 目录 文件名 扩展名 #include <iostream> using namespace std;int main() {std::string path "E:\\set1_seg\\32.jpg";//index:"\\"在字符串中的位置int index path.find…...

ABAP OpenSQL 分页处理

功能实现 在 ABAP 中&#xff0c;可以使用 OpenSQL 来实现分页功能。下面是一种实现分页的示例方法&#xff1a; 首先&#xff0c;定义一个内部表来存储查询结果数据&#xff1a; DATA lt_data TYPE TABLE OF your_data_type.然后&#xff0c;使用 SELECT 语句将数据查询到内…...

kubeasz一键部署k8s集群

下载程序 部署说明 部署文档 rootiZj6cd9joygowsf7am5hryZ:~# apt-get update rootiZj6cd9joygowsf7am5hryZ:~# apt-get upgrade rootiZj6cd9joygowsf7am5hryZ:~# export release3.6.2 rootiZj6cd9joygowsf7am5hryZ:~# wget https://github.com/easzlab/kubeasz/releases/…...

高性能图表库LightningChart JS v5.0 - 轻松实现图表自定义布局

LightningChart JS是Web上性能最高的图表库具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用&#xff0c;从而实现高刷新率和流畅的动画。 点击获取LightningChart JS v5.0正式版下载 LightningChart JS …...

深度学习的集体智慧:最新发展综述

一、说明 我们调查了来自复杂系统的想法&#xff0c;如群体智能、自组织和紧急行为&#xff0c;这些想法在机器学习中越来越受欢迎。人工神经网络正在影响我们的日常生活&#xff0c;从执行预测性任务&#xff08;如推荐、面部识别和对象分类&#xff09;到生成任务&#xff08…...

Java之“数字困境”:资产管理项目中的Bug追踪与启示

目录 1 前言2 问题的发现3 调试的开始4 深入调试5 调试心得与反思6 结语 1 前言 在程序员的日常工作中&#xff0c;我们时常面对各种令人头疼的问题&#xff0c;其中最令人崩溃的瞬间之一&#xff0c;就是当我们花费大量时间追踪一个看似复杂的bug&#xff0c;最终发现问题的根…...

小程序微信登录授权突然没反应的原因和解决方案

之前的小程序微信授权一直用的很好 今天突然点击没反应了 马上在开发工具试一试 返现点击授权返回错误信息 排除所有代码问题&#xff08;之前一直用的好好的&#xff09;和服务器承载问题&#xff08;就几个人点击&#xff09; 第一反应就是小程序有啥政策改变的问题&#x…...

文本提交时如何使用PHP替换回车为br

1、使用PHP内置的nl2br()函数 nl2br()函数是PHP内置的函数&#xff0c;可以将任何字符串中的回车符&#xff08;\n&#xff09;替换为HTML中的换行符&#xff08;br&#xff09;。具体使用方法如下&#xff1a; $string "这里有一个\n换行符"; $string nl2br($str…...

安全框架SpringSecurity-1(认证入门数据库授权)

一、Spring Security ①&#xff1a;什么是Spring Security Spring Security是一个能够为基于Spring的企业应用系统提供声明式&#xff08;注解&#xff09;的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean&#xff0c;充分利用了Spring …...

【MybatisPlus】条件构造器、自定义SQL、Service接口

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 MybatisPlus 一、条件构造器1.1 基于QueryW…...

数组计算广播

Numpy数组不需要循环遍历&#xff0c;即可对每个元素执行批量的算术运算操作&#xff08;矢量化运算&#xff09;。当两个数组大小&#xff08;Numpy.shape&#xff09;不同时&#xff0c;进行算术运算会出现广播机制。 数组广播 数组在进行矢量化运算的时&#xff0c;要求数组…...

代码解读:Zero-shot 视频生成任务 Text2Video-Zero

Diffusion Models视频生成-博客汇总 前言:上一篇博客《【ICCV 2023 Oral】解读Text2Video-Zero:解锁 Zero-shot 视频生成任务》解读了这篇论文《Text2Video-Zero: Text-to-Image Diffusion Models are Zero-Shot Video Generators》。这篇论文的创新点比较多,含金量很高,而…...

hub.docker访问不了的问题(一步解决)

暂时我也不清楚&#xff0c;但是下面这个网址可以用(可以先用着)Docker Hub Container Image Library | App Containerization (axlinux.top)https://hub.axlinux.top/...

[.NET] Speex 语音编解码介绍, 使用, 代码示例

Speex 是一个开源的, 适合语音编解码的算法, 常应用于网络电话中. 在下面的的介绍中, 我们将使用 SpeexSharp 对 Speex 编码在 .NET 中的使用做介绍 SpeexSharp 可以在 nuget 中直接安装, 并且已经封装了编解码器的类供使用. 如果你不希望了解 Speex 的具体编解码过程, 可以忽…...

小样本目标检测(Few-Shot Object Detection)综述

背景 前言:我的未来研究方向就是这个,所以会更新一系列的文章,就关于FSOD,如果有相同研究方向的同学欢迎沟通交流,我目前研一,希望能在研一发文,目前也有一些想法,但是具体能不能实现还要在做的过程中慢慢评估和实现.写文的主要目的还是记录,避免重复劳动,我想用尽量简洁的语言…...

【解决问题】---- 解决 avue-crud 表格勾选数据翻页后界面保持选中

1. 错误预览 第一页选择【7、8、9、10】 直接点击第三页未进行选择 直接点击第四页未进行选择 2. 问题总结 通过测试可以看到&#xff0c;页面的选择项会影响到其他页面的选择&#xff1b;点击保存&#xff0c;返回的数据却是真真选择的数据&#xff1b;数据在选择渲染…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...