当我们开发完一个应用,就到了发布到市场的时候,Android的打包比较简单,签名之后可以放在我们自己的服务器上,让用户扫描二维码来下载,而苹果的就比较麻烦了,如果内测可以通过蒲公英等内测分发平台,但是这个时候使用的证书是开发证书,只有在profile里注册过uuid的设备才可以安装。如果想让所有使用苹果的用户都可以安装我们的APP,只有发布到App Store。
发布ionic应用到App Store的步骤:

1:打开Mac电脑的Xcode,注意beta版的Xcode是不能上传应用到app store的。
登录你的apple id开发者账号。如果是企业账号($99),最后的发布只能使用角色为agent的企业账户来发布。如果是个人账户,个人即为agent,team也就是个人的名字。一个开发者账户可以是多个企业账户team的开发人员,同样一个企业账户的team可以有多个角色为admin的开发人员,admin没有agent的权限多。
其实apple的证书并不复杂,就这么几种:identify certificates是带有钥匙串的唯一性证书,provisioning profile是包含identify和app id,device这些信息在一起生成的一个综合信息证书,app id是app的唯一标识。
如果只是发布,打开Xcode的preferences\account,登录agent账户,点击manage certificates,点击+号,选择app store,会自动生成production版本的identify certificates,keychain也会自动生成。

之后在苹果开发者中心网站创建app id:

这个explicit app id应该和你的ionic 项目config.xml文件里的id一致。
然后去生成provisioning profile,非常简单,选择一下app id 和identify certificates,生成之后点击下载,双击下载之后的文件,就会自动打开Xcode,这时候证书就全部在Xcode里面了,或者点击preferences\account的download all profiles也可以自动将证书在Xcode里下载好。

2:在你的ionic项目执行:ionic cordova build iOS –release,如果失败,可以先build一个普通版本,到xcode里把证书选上,之后再回来build。
成功之后在xcode里打开你的项目路径下面的platforms\ios\xxxxx.xcodeproj文件:

Bundle Id应该和你的ionic项目的id一致。
Signing选项下面会自动出现Xcode里面所有可用的profile文件,选择好你刚才创建的那个用于发布的profiles,xcode会自动的找到这个profile对应的signing certificate。
这些信息都填好没有错误之后,点击product\scheme\edit scheme选择release:

然后点击Product\Archive生成.ipa文件:

生成成功之后,选择export,导出.ipa文件到你的mac。在Xcode\Open Developer Tool\Application Loader里登录开发者账号(和你在ITunes Connect里登录的一致),点击Deliver Your App打开这个ipa文件:
这里注意,如果不是发布,而是想在蒲公英等内测分发平台发布,用来内测,将这个.ipa文件上传到蒲公英你的账号就可以了。不过export的时候注意不要选择App Store 模式,而要选择 Ad Hoc模式。而且你在生成开发证书profile选择设备的时候要将声明过udid的设备选择进来才能在这些设备安装内测版本的app。

然后就可以开始上传你的app 到App Store了,大概需要半个小时的时间。

3:在开发者中心(developer.apple.com)登陆开发者账号,选择iTunes Connect,这个iTunes Connect是用来管理app store的app信息和提交,更新,分析的地方
进入之后,选择My Apps

点击+号,新建一个APP,填上所有需要的信息,如果刚才使用Application Loader上传的app成功了的话,你可以在活动里看到你构建版本的记录:

如果这里没有记录,说明上传没有成功。注意在ios10因为苹果加强了用户权限管理,你需要在plist文件里声明你需要用到的camera,contacts,bluetooth等等,最好把基础的全部声明,防止上传失败。

如果有记录,在ios准备提交的页面,构建版本旁边会有+号,点击选择你上传的版本,会出现图标和上传时间。

之后把所有的信息填好,点击存储,提交进入审核就可以进入审核阶段了。

转《发布ionic应用到App Store的完整步骤 》的更多相关文章

  1. 转《在浏览器中使用tensorflow.js进行人脸识别的JavaScript API》

    作者 | Vincent Mühle 编译 | 姗姗 出品 | 人工智能头条(公众号ID:AI_Thinker) [导读]随着深度学习方法的应用,浏览器调用人脸识别技术已经得到了更广泛的应用与提升.在 ...

  2. face-api.js:一个在浏览器中进行人脸识别的 JavaScript 接口

    Mark! 本文将为大家介绍一个建立在「tensorflow.js」内核上的 javascript API——「face-api.js」,它实现了三种卷积神经网络架构,用于完成人脸检测.识别和特征点检 ...

  3. TensorFlow.js之安装与核心概念

    TensorFlow.js是通过WebGL加速.基于浏览器的机器学习js框架.通过tensorflow.js,我们可以在浏览器中开发机器学习.运行现有的模型或者重新训练现有的模型. 一.安装     ...

  4. 在Java中直接调用js代码(转载)

    http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...

  5. 第十一章:WEB浏览器中的javascript

    客户端javascript涵盖在本系列的第二部分第10章,主要讲解javascript是如何在web浏览器中实现的,这些章节介绍了大量的脚本宿主对象,这些对象可以表示浏览器窗口.文档树的内容.这些章节 ...

  6. 在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...

  7. TensorFlow.js入门(一)一维向量的学习

    TensorFlow的介绍   TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着 ...

  8. JavaScript权威指南--WEB浏览器中的javascript

    知识要点 1.客户端javascript window对象是所有客户端javascript特性和API的主要接入点.它表示web浏览器的一个窗口或窗体,并且可以用window表示来引用它.window ...

  9. 解决webkit浏览器中js方法中使用window.event提示未定义的问题

    这实际上是一个浏览器兼容性问题,根源百度中一大堆,简要说就是ie中event对象是全局变量,所以哪里都能使用到,但是webkit内核的浏览器中却不存在这个全局变量event,而是以一个隐式的局部变量的 ...

  10. JS Date当前时间:获取日期时间方法在各浏览器中的差异

    转自:http://www.feiesoft.com/00047/<script type="text/javascript"> // JS Date当前时间获取方法在 ...

随机推荐

  1. 2017-2018-2 20155314《网络对抗技术》Exp6 信息搜集与漏洞扫描

    2017-2018-2 20155314<网络对抗技术>Exp6 信息搜集与漏洞扫描 目录 实验目标 实验内容 实验环境 基础问题回答 预备知识 实验步骤 1 信息搜集 1.1 外围信息搜 ...

  2. MySQL主从同步原理

    mysql主从复制用途 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从部署必要条件 主库开启binlo日志(设置log-bin参数) 主从server-id不同 从库可以连同 ...

  3. OpenCV——轮廓填充drawContours函数解析

    函数的调用形式 void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const ...

  4. ros自定义消息的时候报错ImportError: No module named em

    Traceback (most recent call last):  File "/opt/ros/kinetic/share/gencpp/cmake/../../../lib/genc ...

  5. js判断变量的类型(使用闭包来玩一把)

    var Type = (function() { var Type = {}; for (var i = 0, type; type = ['Undefined', 'Null', 'Boolean' ...

  6. statefulSet 原理理解

    1.  svc(vip)                       --              deployment 2.headless(none)                --     ...

  7. 8-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给C#TCP客户端显示)

    http://www.cnblogs.com/yangfengwu/p/8785516.html 先写单片机端的程序 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s ...

  8. GIT 分支管理:多人协作

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  9. BZOJ4911: [Sdoi2017]切树游戏

    BZOJ 4911 切树游戏 重构了三次.jpg 每次都把这个问题想简单了.jpg 果然我还是太菜了.jpg 这种题的题解可以一眼秒掉了,FWT+动态DP简直是裸的一批... 那么接下来,考虑如何维护 ...

  10. Codechef TAPAIR Counting the important pairs 随机化、树上差分

    传送门 题意:给出一个$N$个点.$M$条边的无向连通图,求有多少组无序数对$(i,j)$满足:割掉第$i$条边与第$j$条边之后,图变为不连通.$N \leq 10^5 , M \leq 3 \ti ...