应用测试和发布
1、什么是iOS中的App ID?
每一个App
都有一个唯一的、独立的ID,这就是App ID
。App ID
由两个部分构成: Team ID
和Bundle ID
,形式为Team ID.Bundle ID
。
-
Team ID
指定App的开发者或开发团队。 -
Bundle ID
指定App或与之相关的一系列App
。Bundle ID
可以唯一确定App
,Bundle ID
是在Xcode
项目中确定的。
App ID
字符串通常以反域名(reverse-domain-name
)格式(com.domainname.appname
)作为前缀(Prefix/Seed
),一般不超过255个ASCII字符。
App ID
分为两类:
Explicit App ID
:唯一的App ID
,用于唯一标识一个应用程序。例如“com.apple.garageband”
这个App ID
,用于标识Bundle Identifier
为“com.apple.garageband”
的App
。Wildcard App ID
:含有通配符的App ID
,用于标识一组应用程序。
例如*
(实际上是Application Identifier Prefix
)表示所有应用程序;而“com.apple.*”
可以表示Bundle Identifier
以“com.apple.”
开头(苹果公司)的所有应用程序。
App ID
2、什么是iOS中的Code Signing?
为了确定App
是谁开发的,开发之后有没有修改,苹果公司引进了Code Signing
的机制。有了它,从App Store
下载某个App
后,iOS
和MacOS
系统可以通过签名确认是谁开发了此App
,以及签名是否有效。
只要App
对应的可执行文件被修改,签名就认定为无效。如果App
的签名无效,那么系统将拒绝运行App
,以保证整个系统的安全性和用户体验。Code Signing
对应的签名是由一对公共密钥和私有密钥,以及一个由Apple
签发的证书构成的。其中私有密钥用来产生签名;证书则包含了公共密钥并由此认定是开发者。
Code Signing Guide
3、什么是iOS中的App Thinning?
App Thinning
,中文为“应用瘦身”,指的是App Store
和操作系统在安装iOS
和watchOS
的App
时,通过一系列的优化,尽可能地减小安装包的大小,使得App
以最节省资源的方式、最适合的大小被安装到设备上。其包括三种类型:Slicing、Bitcode、On-demand Resource
Slicing
App
切片(slicing
),根据苹果的文档,
切片是创建和提供不同的目标设备的应用程序包的变体(variant)的过程。
一个变体(variant)只包含可执行架构和目标设备所需要的资源。换句话来说,应用程序切片只提供给与每个设备相关的资源(取决于屏幕分辨率和架构等等)。实际上,应用程序切片完成了 App 瘦身的大部分工作。
Bitcode
字节码是一个编译好的程序的中间表示形式。上传到iTunes Connect
中的包含字节码的app
将会在 App store
中进行链接和编译。苹果会对包含字节码的二进制app进行二次优化,而不需要提交一个新的app
版本到app store
中。
On-demand Resource
按需加载的资源就是在App
初次安装后需要下载的文件。例如,游戏的特定关卡(以及和这些关卡相关的内容)只有在玩家解锁时才可以下载。此外,超过设置时间之后,玩家不需要的早期关卡可以被移除,以节省设备的存储空间。
iOS 9 App 瘦身功能
4、向App Store提交App时有哪些原因可能被拒绝?
虽然现在App Store审核App越来越快了,被其拒绝上架所付出的成本也越来越低了,但是在提交App之前还是应该仔细检测,争取一次性通过。
被App Store拒绝的原因有很多,主要有以下几种:
奔溃
程序本身有bug,第三方服务器出错都有可能造成App被App Store拒绝。注意,一般测试是在线下环境中运行App,而App Store是在线上环境运行的,所以,在提交审核之前,还是应该要线上环境运行一遍。
第三方
如果App需要安装第三方应用,比如需要QQ登录,而测试员的手机中又没有安装QQ,如果出现提示安装QQ信息,就有可能被App Store拒绝上架;另外,使用第三方广告,也有可能因为违规被App Store拒绝上架
版权
第三方客户端套用某平台的名字,在App的描述或命名中为了提供点击量和排名加入某些无关的关键字;或者是“山寨”其他App的行为;App中包含没有授权的内容,都会被App Store拒绝上架。
材料不齐
有时App会因为缺少材料导致App Store无法审核。例如:缺少截图或者使用错误的截图。这里只是部分情况。苹果官方有专门的审核文件,可以仔细阅读。
缺少元数据问题
Guideline 2.3.8 - Performance - Accurate Metadata
We noticed that your app icons, screenshots, or other metadata items include content that is not appropriate for all age groups.
Please see attached screenshots for details.
Next Steps
To resolve this issue, please revise your metadata to ensure that all items are appropriate for a 4+ age rating. Since this content is visible on the App Store by all users, even when purchasing is restricted by the app's rating, this content must meet the requirements for a 4+ rating.
For resources on metadata best practices, you may want to review the App Store Product Page information available on the Apple developer portal.
Since your iTunes Connect status is Rejected, a new binary will be required. Make the desired metadata changes when you upload the new binary.
NOTE: Please be sure to make any metadata changes to all app localizations by selecting each specific localization and making appropriate changes.
违法审核指南
比如:禁止传销和金钱相关的内容出现在app中
5、苹果Appstore加急审核方法?
苹果Appstore加急审核,是为开发者提供的快速审核通道。加急审核主要用于解决紧急需求,例如重要节日功能,严重的bug,遇到这些问题可以提出加急申请。加急申请入口
加急申请的整个流程
1、首先打开itunesconnect管理后台在后台首页的最下方,找到 Contact us
(联系我们)
2、进入联系我们页面
3、进入加急审核页面,按需求填写信息提交即可
6、讲讲P12文件?
为什么需要P12文件
- 正常情况下一个开发者账号只能生成两个
cer
证书 -
cer
证书在生成时和电脑绑定 - 如果一个电脑没有对应有效的
cer
证书,就不能真机调试 - 苹果为了解决让多人都可以真机调试,但是不会无限制生成证书,推出了
p12
文件
P12文件的作用
-
p12
证书的作用相当于之前的cer
证书 - 用于验证我们电脑的身份,让电脑具有真机调试的能力
如何生成P12证书
- 找到之前安装的cer证书(在钥匙串中),点击右键导出
-
选择存放的目录
输入密码生成即可,一般不输入方便使用
7、测试APP证书配置
1、配置cer证书
- 作用:用于决定哪台电脑可以打包测试程序
- 结果:会生成
cer
证书,需要下载安装证书
2、配置APPID
- 作用:用于决定让哪些
App
可以测试打包 - 结果:不会生成新的文件,之后会利用该AppID生成描述文件
- 类型:
1)明确的APPID
:可以做特殊功能:比如内购/远程推送
2)模糊的APPID
:方便测试,但是不能做特殊功能
3、配置Device
- 作用:用于决定让哪些真机可以用于测试打包
- 结果:不会生成新的文件,之后在生成描述文件时会需要选择设备
4、配置描述文件
- 作用:将刚才配置的三个内容联系起来
- 结果:会生成新的文件,需要下载安装(双击安装即可,会自动安装到Xcode中)
5、总结:
- 最终生成两个文件:证书文件和描述文件
8、推送证书到期处理
推送证书有时间期限的,有时我们应用突然接不到消息了,有可能就是证书过期了,有效期一般为1年左右,那有效期快过了怎么处理呢?
解决方案:
1、删除MAC
上钥匙串访问中对应的推送证书
2、去开发者中心删掉过期推送证书,重新按着上面的步骤重新来一遍
3、在第三方平台上重新上传新的.p12
证书
9、Metadata Reject
处于“Metadata Reject”
状态的应用,通常不需要重新上传应用,只需要把相应的元数据信息修改好,在“Resolution Center”
给审核人员回复说明一下即可,如果选择重新上传应用,就会需要重新排队等待审核
10、审核被拒绝情况
1、Guideline 1.2 - Safety - User Generated Content
Your app enables the display of user-generated content but does not have the proper precautions in place.
Next Steps
To resolve this issue, please revise your app to implement all of the following precautions:
- Require that users agree to terms (EULA) and these terms must make it clear that there is no tolerance for objectionable content or abusive users
- A method for filtering objectionable content
- A mechanism for users to flag objectionable content
- A mechanism for users to block abusive users
- The developer must act on objectionable content reports within 24 hours by removing the content and ejecting the user who provided the offending content
如果你的 App
内有发帖等UGC
(用户产生内容)功能,必须提供用户协议,并留有内容举报功能,否则就会被审核拒绝。
解决方案:
1、注册页要有用户隐私相关协议,如果没有注册功能,那就在初次登录的时候弹出来让用户看;或者就是登录的时候加个同意用户隐私协议的按钮啊,必须点了勾选上才能登录。知乎底部加一个用户协议
2、 朋友圈、动态这种要有举报功能即UGC
内容需要有投诉举报的地方
3、可以在用户生成内容上添加上举报按钮,同时也要按相应要求加入其他相关功能并立即执行;用户协议一般加在用户的注册入口,iTC后台的隐私协议中也需要填上。
2、Guideline 3.2.2 - Business - Other Business Model Issues - Unacceptable
The primary purpose of your app is to encourage users to watch ads or perform marketing-oriented tasks, which is not appropriate for the App Store.
Next Steps
We encourage you to review your app concept and incorporate different content and features that are in compliance with the App Store Review Guidelines.
问题:App
主要鼓励用户做任务,和看广告,这种模式不被AppStore
接受
解决方案:
因为本身App的设计是观看视频和推广,这些任务不能取消,所以分为线上模式和审核模式,审核模式把相关任务屏蔽,关于金币的字眼全部屏蔽。在线上模式放开(注意:包括审核时所填写的信息和宣传图片都不能带有与金币或者推广任务相关的信息)
3、Guideline 2.1 - Performance - App Completeness
We discovered one or more bugs in your app when reviewed on iPad running iOS 11.3 on Wi-Fi connected to an IPv6 network.
Specifically, we found that your app did not load content properly after launched.
Please see attached screenshots for details.
Next Steps
To resolve this issue, please run your app on a device to identify any issues, then revise and resubmit your app for review.
If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.
For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue. For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue.
其实就是新设备网络权限第一次不能访问,需要进行监听加载数据。iOS10 优化APP首次安装网络权限提示方案。解决方案很简单,可以监听网络状态,网络连接时重新请求数据就可以了。
11、测试设备数的限制
测试设备100个数目限制的详细规则
每个开发者在一个
membership year
(从缴费日开始算起,一年之内算一个membership year)中,只能有100个增加设备的名额,如果你增加一个设备,之后又将该设备删掉,并不会将用掉的名额恢复开发者在每个
membership year
开始的时候,team agent
和admin
角色可以选择删除一些设备来恢复资格,也可以清空所有设备来恢复到100次设备的名额。这个操作在team agent
和admin
在一次新的membership year
开始后即可使用。在使用时需要注意,先将需要删除的设备删掉,然后才能添加需要新增的设备。一旦开始增加新设备,删除设备以恢复名额的功能将不再可用。在以后整个
membership year
中,删除设备不会增加新的名额
举个例子:
假如第一年你增加了70个设备,同时删除了10个设备,这个时候,虽然你的设备数是60,但是可用的增加测试机的名额却是只有30个
到了第二年, 你延续开发者身份,在你第一次登录进去后, 你可以看到你的可用设备恢复成100-60=40个了,这个时候,你可以选择删除一些设备,例如你又删除了20个设备,这样你的名额数变成了60个。之后你增加了1个设备,因为你选择了增加新设备,苹果认为你以及放弃了删除设备以恢复名额的机会,这样,你的名额就固定成59个了,以后删除设备都不会增加新设备,直到你的下一个membership year开始时才又会有这样的机会来删除设备释放名额
如果设备数达到上限,又急需要增加新设备怎么办?对此你可以给苹果的技术客服发邮件要求他们帮助删除所有设备,并且恢复到增加100个测试设备的名额。
其实有来
testflight
设备数都不是问题,完全是为测试准备的
推送
1、本地推送通知的流程是怎样的?
UserNotifications
框架是针对远程和本地消息通知的框架,其流程主要分为以下4步:
1)注册。通过调用requestAuthrization
这个方法,通知中心会向用户发送通知许可请求。用户在弹出的alert请求中点击“同意”按钮,即可注册
2)创建。首先设置信息内容UNMutableNotificationContent
和触发机制UNNotificationTrigger
;然后用这两个值来创建UNNotificationRequest
;最后将request
加入到当前通知中心UNUserNotificationCenter.current()
中
3)推送。这一步想系统或者远程服务器推送通知的过程。收到通知后对应的UI会显示在手机界面上。
4)响应。当用户看到通知后,点击通知后会看到相应的响应选项。UNNotificationAction
和UNNotificationCategory
用于设置响应选项
2、远程消息推送原理
1、应用程序注册APNS
消息推送。
2、iOS
从APNS Server
获取devicetoken
,应用程序接收device token
。
3、应用程序将device token
发送给程序的PUSH
服务端程序。
4、服务端程序向APNS
服务发送消息。
5、APNS
服务将消息发送给iPhone
应用程序。