特声明本文章只针对典型案例,不针对公司或个人,若有雷同纯属意外。
1.APP发布苹果商店时没有修改连接现网服务器的域名,而是连接的测试服务器的IP地址,导致用户升级后不能正常使用,业务中断。由于苹果的APP审核要3到5个工作日,所以不能立刻重新发布APP并下载使用。
解决方案:对版本发布要有发布流程文档,发布APP按照文档进行核对进行。预发测试最好要一天(稳定后的版本最长可达三天),切不可以预发时还在改问题,进入预发测试要封版本,非严重问题不修改,在进入预发测试最后半天禁止提单,修改问题,大多数的严重问题都是发布前修改问题没有全面测试引起的,修改小问题引起大问题的事情多了的去。预发测试用例要包含常用关键测试场景。
2.APP发布后使用时,发现有关键的图片加载不全或加载不上(透明图片)。开发者通过XCODE安装到测试手机上能正常使用。
原因是应用图片名称使用了@x2.png,在XCODE上由于对图片有临时存储功能,装到手机上可以找到图片,当生成IPA包时,不能把这类的图片完全匹上。可见这是XCODE的重要BUG。开发者自己很难发现这类问题,除非先生成IPA包,放到http://fir.im,七牛服务器,或上传到苹果商店,用TestFlight下载,或者让另一个开发者下载代码并通过XCODE安装才能真正发现。只让一个人开发一个版本, 不经过上面的准商店测试是发现不了这类问题的。老板为了省钱想一个人包打一切,那样理想是丰满的,现实是骨干的,人员备份还是好处的。
3.APP开启了定位服务,结果应用中的页面没有一个页面有带地图定位的页面,导致驳回,要求提供有地图定位的视频。
原因是提供给审核人员的账户里没有数据,导致用户很多页面看不到,特别是地图定位页面看不到。
解决方案是:
给APP审核人员提供的登录帐号和密码,并且提供部分测试数据,防止审核人员看到白茫茫的一天,只看你满文在画饼充饥。
4.APP审核时发现,有版本更新的功能,直接被no pass了。因为今年3月初,苹果禁止发布的APP有版本更新功能,要用萌萌达的版本更新功能。
解决方案:
你要关心苹果对APP发布规则和新功能的介绍了。看来你要使用你那中国式英语看下苹果的公告了。就是你需要版本更新,也不能当面让苹果审核BOSS发现啊,至少先欺骗它通过,以后再改数据库的版本号,启动版本更新也不迟。版本更新真的有需要保留,是给自己留的后门,若业务大变更可以启动。但是别当家常便饭来刷大家(强制或非强制下载新版本)。
5.APP由于使用友盟的新浪微博没有安装,授权登录跳到空白页面,导致审核不通过。
解决方案:
判断是否安装新浪微博,若发现没有安装弹出没有安装新浪微博就可以了,别乱跳舞了。
6.一个开发人员加入一个图片并且是该图片被两个目录引用,然后删除了图片,在他的电脑上安装和发布APP正常,别人下载相同的代码都报找不到图片。
这个也可能和第2种情况类似,本机XCODE缓存了以前删除的图片,导致可以找到已经删除的图片。
解决方案:
让他删除图片重新正确加载,删除search path对本地路径的包含地址,统一使用相对路径。上传工程文件就可以解决。
一下是具体被拒绝的实际例子。
1.This app attempts to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSBluetoothPeripheralUsageDescription key with a string value explaining to the user how the app uses this data.
This app attempts to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.
Once these issues have been corrected, you can then redeliver the corrected binary.
因为你的应用app使用了麦克风,但是Info.plist里没有配置,它是会引起 crash的。至于的蓝牙的描述,估计是蓝牙和它属于一类问题,除非你是用了蓝牙没有配置,否者路过。
2.Your app has the UIFileSharingEnabled key set to true in the Info.plist, but the Documents folder includes files and folders not intended for file sharing.
Next Steps
Please move all files that are not intended for user access via the file sharing feature to another part of your app’s sandbox. When file sharing is enabled, the entire Documents folder is used for file sharing.
If your app does not require the file sharing feature, please set the UIFileSharingEnabled key in the Info.plist to false.
这个是你使用了app的文档共享功能,发布描述时没有说明为何使用它。当然绝对大多数的应用不需要文档共享,直接删除那条属性(Application supports iTunes file sharing)或设置为NO.当然你若需要这个功能,在发布描述里说明你的app为何需要文档共享,有什么用处。我们的应用,在测试版本需要这个文档共享功能来到处日志文件。正式版本是不打日志的,所以不需要这个文档共享功能。
3.We discovered one or more bugs in your app when reviewed on iPad and iPhone running iOS 9.3.3 on Wi-Fi connected to an IPv6 network.
Specifically, we encountered an network error message upon launch.
We’ve attached screenshot(s) for your reference.
Next Steps
Please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify the issue(s), 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(s). For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue(s).
Resources
For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking
这个是你的app是否支持http请求,它默认是只支持https请求。这个需要你在Info.plist文件中增加App Transport Security Settings和子属性Allow Arbitrary Loads为YES
4.你的应用开启了远程推送,你的证书不支持远程推送,实际上你也没有实际使用远程推送。以前苹果对这个配置检查不严格,现在检查严格了。可能你没有配置定位功能,但是它顺带也报你配置了定位功能。因为定位功能配置和远程推送配置是一类问题,可能它也顺带说了。不要被它误解了。解决方案:若你没有使用远程推送,关闭它的能力就可以了,一了百了。
We identified one or more issues with a recent delivery for your app, “**“. Please correct the following issues, then upload again.
Missing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSLocationWhenInUseUsageDescription key with a string value explaining to the user how the app uses this data.
Though you are not required to fix the following issues, we wanted to make you aware of them:
Missing Push Notification Entitlement - Your app appears to register with the Apple Push Notification service, but the app signature’s entitlements do not include the “aps-environment” entitlement. If your app uses the Apple Push Notification service, make sure your App ID is enabled for Push Notification in the Provisioning Portal, and resubmit after signing your app with a Distribution provisioning profile that includes the “aps-environment” entitlement. Xcode 8 does not automatically copy the aps-environment entitlement from provisioning profiles at build time. This behavior is intentional. To use this entitlement, either enable Push Notifications in the project editor’s Capabilities pane, or manually add the entitlement to your entitlements file. For more information, see https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.
5.app图标缺失。完善图标就可以了。
We have discovered one or more issues with your recent delivery for “*“. To process your delivery, the following issues must be corrected:
Invalid Image Path - No image found at the path referenced under key “CFBundleIcons”: AppIcon20x20
Once these issues have been corrected, you can then redeliver the corrected binary.
6.iOS提交审核:您的 App 正在使用广告标识符 (IDFA)
您的 App 正在使用广告标识符 (IDFA)。您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件。
解决方案:检查是否使用IDFA
检查我们项目中是否使用广告标示符,其实就是查看我们framework中是否有个叫做AdSupport.framework的框架;
如果检查framework没有,可能是我们接入的第三方里面有,用以下方法检查第三方中是否包含有IDFA版本;
(1)打开终端cd到要检查的文件的目录;
(2)执行命令:grep -r advertisingIdentifier .(注意别少了点);
jiaguoshangdeMacBook-Air:ArtEnjoymentRunLu-2.4.0的副本 jiaguoshang$ grep -r advertisingIdentifier .
./Pods/YXFDCategories/YXFDCategories/Classes/UIDevice+YiXiang.m: idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
Binary file ./Pods/UMengUShare/UShareSDK/SocialLibraries/Twitter/TwitterCore.framework/TwitterCore matches
Binary file ./Pods/UMengUShare/UShareSDK/SocialLibraries/UniqueId/libSocialUniqueId.a matches
Binary file ./Pods/UMengUShare/UShareSDK/SocialLibraries/Facebook/FBSDKCoreKit.framework/FBSDKCoreKit matches
Binary file ./Pods/UMengUShare/UShareSDK/SocialLibraries/Sina/SinaSDK/libWeiboSDK.a matches
可以发现罪魁祸首是私有库YXFDCategories。把私有库中相关代码删除后,再次提交版本就不提示使用广告描述符了。真奇怪UMengUShare开源第三方库也检测出来使用了,但是苹果审核程序直接无视了。
7.只支持微信等第三方软件授权登录,并且不支持网页授权登录或用户名密码登录。
Guideline 4.2.3 - Design - Minimum Functionality
We were required to install the WeChat app before we could log in via WeChat. Users should be able to log in with WeChat and access their accounts without having to install any additional apps.
Next Steps
If you would like to offer authentication through WeChat, please use a mechanism that allows users to log in with WeChat from within your app without first having to install an additional app.
We recommend implementing the Safari View Controller API to display web content within your app. The Safari View Controller allows the display of a URL and inspection of the certificate from an embedded browser in an app so that customers can verify the webpage URL and SSL certificate to confirm they are entering their sign in credentials into a legitimate page.
可以看到流行的软件当发现本地没有装微信时,都不显示微信登录;QQ当没有安装,大都也不显示QQ登录图标,个别的显示QQ图标并且采用网页登录QQ授权,不过他们都有用户名密码登录功能。所以它的常规解决方案时当发现本地没有安装第三方授权软件直接不显示它的按钮(按钮灰化不使能或弹出提示苹果照样给你驳回),就时没有完整的用户名/密码登录功能,至少给他在审核期间可以只有审核人员知道的登录账户和密码。可以当发现服务器返回版本低于app版本时显示临时用户名密码登录,发布时选择手动发布。当审核通过时(苹果会发邮件一般造成7点左右审核过的可能比较多),修改服务器返回的最新版本号并设置不更新,并发布版本,等在所在区域的苹果商店看到最新的app时在,再设置为非强制更新,等一天后等全世界的区域都上架后若是需要强制更新的再设置为强制更新(世界各个苹果市场上架时间并不一致,有不同的负责任,是苹果审核人员手动上架的,一般2小时上架,也有时6个小时上架的)。当然这个你的用户密码功能没有开发完的情况。若你的这个功能完全,直接不显示第三方授权登录的按钮,保留用户名密码按钮就可以。
8.自己的截图不能反映自己App的主要功能(We noticed that your screenshots do not sufficiently reflect your app in use.),重新换了设计师做的UI图(现在app流行的截图不是直接用手机对app界面进行手机截屏,而是UI设计师设计一个图把需要的数据放到截图上,app页面只是截图的一部分,其它的部分放上说明信息。任何事情都有风险的,按钮和标签位置要相对正确,有不大的出入,就被苹果KO了。这就是新玩法的阵痛,所以我们发布新app时都是先试水一两次,可以审核时的功能不是很全,防止审核不过影响市场推广)就可以了。
Guideline 2.3.3 - Performance - Accurate Metadata
We noticed that your screenshots do not sufficiently reflect your app in use.
Specifically, your 5.5-inch iPhone screenshots do not display the app in the correct device frame.
Next Steps
To resolve this issue, please revise your screenshots to ensure that they accurately reflect the app in use on the supported devices. For iPhone, you need a set of 5.5-inch display screenshots and for iPad, you need a set for 12.9-inch display. This set will be scaled appropriately down to other device sizes when viewed on the App Store in each territory.
Note that 5.8-inch display assets for iPhone X are optional and don't scale down to other devices sizes. Screenshots that include iPhone X layout features like rounded corners or sensor housing should only be used for the 5.8-inch display.
Resources
For resources on creating great screenshots for the App Store, you may want to review the App Store Product Page information available on the Apple developer portal.
Please ensure you have made any screenshot modifications using Media Manager. You should confirm your app looks and behaves identically in all languages and on all supported devices. Learn how to use Media Manager to add custom screenshots for each display size and localization.
Please see attached screenshots for details.
Since your App Store Connect status is Metadata Rejected, we do NOT require a new binary. To revise the metadata, visit App Store Connect to select your app and revise the desired metadata values. Once you’ve completed all changes, reply to this message in Resolution Center and we will continue the review.
9.iPhone 8 plus的截图有iphone x的显示特性(Specifically, your 5.5-inch iPhone screenshots include iPhone X display features.),重新换了设计师做的UI图就可以了。
Guideline 2.3.3 - Performance - Accurate Metadata
We noticed that your screenshots do not sufficiently reflect your app in use.
Specifically, your 5.5-inch iPhone screenshots include iPhone X display features.
Next Steps
To resolve this issue, please revise your screenshots to ensure that they accurately reflect the app in use on the supported devices. For iPhone, you need a set of 5.5-inch display screenshots and for iPad, you need a set for 12.9-inch display. This set will be scaled appropriately down to other device sizes when viewed on the App Store in each territory.
Note that 5.8-inch display assets for iPhone X are optional and don't scale down to other devices sizes. Screenshots that include iPhone X layout features like rounded corners or sensor housing should only be used for the 5.8-inch display.
Resources
For resources on creating great screenshots for the App Store, you may want to review the App Store Product Page information available on the Apple developer portal.
Please ensure you have made any screenshot modifications using Media Manager. You should confirm your app looks and behaves identically in all languages and on all supported devices. Learn how to use Media Manager to add custom screenshots for each display size and localization.
Please see attached screenshots for details.
Since your App Store Connect status is Metadata Rejected, we do NOT require a new binary. To revise the metadata, visit App Store Connect to select your app and revise the desired metadata values. Once you’ve completed all changes, reply to this message in Resolution Center and we will continue the review.
以后遇到app被拒绝,我会把苹果拒绝的情况都贴出来。