描述
这几天准备更新打包上线,遇到一个很奇葩的问题。打包构建成功了,也上传成功了!奇怪的现象就发生了!在 iTunes Connect -> TestFlight ->构建版本 那一栏显示状态 “正在处理” ,就去忙别的了,过了一个小时发现构建上传的版本不见了??? 反复试了好几次发现,结果都是“正在处理”后就莫名的消失了!接下来就谈一谈上线遇到的坑。
APP打包上传后在构建版本中不显示
构建版本出现的那些坑:
声明一下我现在用的是Xcode9.1 别的版本没时间测试,就谈谈 xcode9.1 的原因吧 !
1.缓存:苹果的ituness connect 有个缓存机制,或许有些人不了解,在上传app成功后,明明已经审核通过却没有发现app上架,这个其实是apple的缓存机制,只要把地区和app价格修改一下随便,然后保存,在修改过来,等一下时间,就会上架并且可以搜索到了,单个人推测原因不是,仅列出可能性。
2.构建版本无效:这个例子说实话我碰见的很少,构建版本这个东西在第一次上架以后,基本上只需要改动版本号和更新信息就好了,特别的意外吧
3.权限请求没到位:这个原因是我认为最可能的。并且跟同事测试过,上传了两个版本,一个带请求权限,一个不带的,事实是带权限的可以通过,不带的就会消失
【解决办法:在项目中,对相册,相机之类的权限请求是,在info.plist文件里面添加key权限。特别注意的一点,key值对应的string字段,一定一定要写,为什么呢,不写也会版本消失的】
<key>NSAppleMusicUsageDescription</key>
<string>音乐权限</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>蓝牙权限</string>
<key>NSCalendarsUsageDescription</key>
<string>日历权限</string>
<key>NSCameraUsageDescription</key>
<string>摄像头权限</string>
<key>NSContactsUsageDescription</key>
<string>通讯录权限</string>
<key>NSHealthShareUsageDescription</key>
<string>健康权限</string>
<key>NSHealthUpdateUsageDescription</key>
<string>健康权限</string>
<key>NSHomeKitUsageDescription</key>
<string></string>
<key>NSLocationAlwaysUsageDescription</key>
<string>地理位置权限</string>
<key>NSLocationUsageDescription</key>
<string>地理位置权限</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>地理位置权限</string>
<key>NSMicrophoneUsageDescription</key>
<string>麦克风权限</string>
<key>NSMotionUsageDescription</key>
<string>运动权限</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>添加图片权限</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>相册权限</string>
<key>NSRemindersUsageDescription</key>
<string></string>
<key>NSSiriUsageDescription</key>
<string>Siri权限</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>语音识别权限</string>
<key>NSVideoSubscriberAccountUsageDescription</key>
<string></string>
4.私有API:其实这个可能不大,一般是在版本构建以后,并且提交以供审核后用邮件提示的,只是提出这种可能,以我的经验,对于分享和第三方登录时,在新浪的sdk里面,绝逼百分之780含有广告字符和私有api,还有google的分享的登录,这个基本上可定会含有的,建议不用,实在用的话,请搜索用终端命令去掉广告字符和API的复杂方法
提醒:注意查看苹果邮件反馈信息
5.BitCode:可以为目标安装App的设备进行优化二进制,减小安装包的下载大小,当然iOS开发者也可以上传多个版本而不是打包到单个包里,但是这样会占用更多的存储空间. 最重要的是允许苹果可以在后台服务器对应用程序进行签名,而不用导出任何密钥到终端开发者那.
(看起来没什么作用,经过我的几个打包上传测试发现如果不设置为Yes同样也会消失)
注:Enable Bitcode -> YES
苹果发来的邮件:
While processing your iOS app, XXX版本 1.0.3(1.0.3), errors occurred in the app thinning process, and your app couldn’t be thinned. If your app contains bitcode, bitcode processing may have failed. Because of these errors, this build of your app will not be able to be submitted for review or placed on the App Store. For information that may help resolve this issue, see Tech Note 2432.
译:拒绝的理由好像是bitcode压缩失败,但是我的工程由于第三方不支持,已经关闭了bitcode.难道现在苹果强制要求开发者必须支持bitcode功能吗?
Bitcode是什么?
点击试试看Bitcode
iOS 打包上线 bitcode问题
6.在iTunes Connect的应用上传详情页,点击“活动”,查看已上传的二进制文件状态。
如果上传后显示正在处理,刷新后没有任何版本显示,这时候此二进制文件很有可能已经被判定为无效的二进制文件了。请到开发者的邮箱中查看邮件,Apple会发邮件说明详情: