天天看点

App Store 上架被拒,上架过程的辛酸~~~

code小生 一个专注大前端领域的技术平台公众号回复

Android

加入安卓技术群

作者:位之先

链接:https://www.jianshu.com/p/f586bc94c732

声明:本文已获

位之先

授权发表,转发等请联系原作者授权
App的开发渐渐的进入尾声,相关测试也逐渐完成,只剩下了最后一项App Store上架审核,因之前App没有上架App Store,都是企业版发布,这次上架App Store问题居多,故把这次上架的问题,进行总结,供后续参考。

更新iOS14被拒

1、本地网络被拒解决方案: local network

因iOS14新增审核规则,要求对本地网络的使用增加具体描述

查看网上有伙伴说增加描述信息就可以,亲测还是被拒,提示描述信息审核"不通过"

<key>NSLocalNetworkUsageDescription</key>
    <string>【app名称】需要访问您的本地网络才能与【app名称】服务器连接</string>
           

1.1 经研究,修改成以下描述,可通过Apple团队审核。

<key>NSLocalNetworkUsageDescription</key>
    <string>此App将可发现和连接到您所用网络上的设备。</string>
           

1.2 通过审核下一步会提示让你在开发者账号描述,你为何使用了本地网络,都是做了什么,什么功能会使用到,然后反馈给他们,他们会继续进行审核,目前项目已通过这个方法上架成功。

1、Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage


We noticed that your app requests the user’s consent to access the local network information but does not clarify the use of the local network information in the applicable purpose string.

To help users understand why your app is requesting access to their personal data, all permission request alerts in your app should specify how your app will use the requested feature.

Next Steps

Please revise the relevant purpose string in your app’s Info.plist file to specify why the app is requesting access to the local network information. Make sure the purpose string includes an example of how the user's data will be used. 

You can modify your app's Info.plist file using the property list editor in Xcode. 

Resources

For additional information and instructions on requesting permission, please review the Requesting Permission p of the iOS Human Interface Guidelines and the Information Property List Key Reference. You may also want to review the Technical Q&A QA1937: Resolving the Privacy-Sensitive Data App Rejection page for details on how to provide a usage description for permission request alerts.

Please see attached screenshot for details.
           

-----------------------------------以下是iOS14之前遇到的被拒记录------------------------------------

  1. 解决方案 iPhoneSimulator 修改为 iPhoneOS
1. 
ERROR ITMS-90542: Invalid CFBundleSupportedPlatforms value. The key
'CFBundleSupportedPlatforms' in the Info.plist file in bundle 'Payload/#XF ßIE5 RRS .app/
HTMIBlue.bundle' contains an invalid value '[iPhoneSimulator]'. Consider removing the
CFBundleSupportedPlatforms key from the Info.plist. If this bundle is part of a third-party
framework, consider contacting the developer of the framework for an update to address this
issue.
           
  1. 解决方案NSHealthShareUsageDescriptionsome string value stating the reason
2. 
ERROR ITMS-90683: Missing Purpose String in Info.plist. Your app's code references one or
more APIs that access sensitive user data. The app's Info.plist file should contain a
NSHealthShareUsageDescription key with a user-facing purpose string explaining clearly and
completely why your app needs the data. Starting Spring 2019, all apps submitted to the App
Store that access user data are required to include a purpose string. If you're using external
libraries or SDKs, they may reference APls that require a purpose string. While your app might not
use these APIs, a purpose string is still required. You can contact the developer of the library or
SDK and request they release a version of their code that doesn't contain the APIs. Learn more
(https://developer.apple.com/documentation/uikit/core_ app/protecting _the. _user. _s_ privacy).
           
  1. 解决方案
项目应导入App Store Icon图标
3. 
ERROR ITMS-90704: Missing App lcon. An app icon measuring 1024 by 1024 pixels in PNG
format must be included in the Asset Catalog of apps built for iOS, iPadOS, or watchOS. Without
this icon, apps cannot be submitted for review. For details, see https://developer.apple.com/ios/
human-interface-guidelines/icons-and-images/app-icon/.
           
  1. 解决方案 info.plist 删除NSExtensionActivationSupportTex字段
4. 
ERROR ITMS-90361: Invalid lnfo.plist value type. The value type for the key
'NSExtensionActivationSupportTex in bundle #X ใคื้ ธืB1ะ3ริ 8R .app/Pluglns/#X คื้ ธื[1ะX3ริ lBวัริ .appex
is not a boolean.
           
  1. 解决方案 删除 info.plist 文件中的 Executable file 配置
5. 
ERROR ITMS-90535: Unexpected CFBundleExecutable Key. The bundle at 'Payload/教育部政务服务.app/HTMIBlue.bundle' does not contain a bundle executable. If this bundle intentionally does not contain an executable, consider removing the CFBundleExecutable key from its Info.plist and using a CFBundlePackageType of BNDL. If this bundle is part of a third-party framework, consider contacting the developer of the framework for an update to address this issue.
           
  1. 解决方案 扩展插件版本号不匹配
6. 
App Store Connect Operation Warning
WARNING ITMS-90473: CFBundleVersion Mismatch. The CFBundleVersion value '100' of
extension '教育部政务服务.app/PlugIns/教育部政务服务.appex' does not match the
CFBundleVersion value '1' of its containing iOS application '#J î 5ßES BRS .app'
           
  1. 解决方案 删除 info.plist 文件中的 Executable file 配置
7. 
RROR ITMS-90171: Invalid Bundle Structure - The binary file '#XỂ8ßES RR5.app/Frameworks/
HTMIScreenShotModule.framework/HTMlScreenShotModule' is not permitted. Your app can't
contain standalone executables or libraries, other than a valid CFBundleExecutable of supported
bundles. Refer to the Bundle Programming Guide at https://developer.apple.com/go/?id=bundle-
structure for information on the iOS app bundle structure.
           
  1. 解决方案 因项目不支持ipad,需在项目中取消 ipad 支持
8.  
ERROR ITMS-90023: Missing required icon file. The bundle does not contain an app icon for
iPad of exactly '76x76' pixels, in .png format for iOS versions >= 7.0. To support older operating
systems, the icon may be required in the bundle outside of an asset catalog. Make sure the
Info.plist file includes appropriate entries referencing the file. See https://developer.apple.com/
documentation/bundleresources/information_ property_ list/user_ interface
           
  1. 解决方案 info.plist 增加NSHealthUpdateUsageDescriptionsome string value stating the reason
9.  
ERROR ITMS-90683: Missing Purpose String in Info.plist. Your app's code references one or mor
APIs that access sensitive user data. The app's Info.plist file should contain a
NSHealthUpdateUsageDescription key with a user-facing purpose string explaining clearly and
completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Sto
that access user data are required to include a purpose string. If you're using external libraries or
SDKs, they may reference APIs that require a purpose string. While your app might not use these
APls, a purpose string is still required. You can contact the developer of the library or SDK and
request they release a version of their code that doesn't contain the APIs. Learn more (https://
developer.apple.com/documentation/uikit/core _app/protecting_ the_ _user. _s_ privacy).
           
  1. 解决方案 删除敏感方法 _actionButtonTapped _applicationIconImageForBundleIdentifier:format:scale: allInstalledApplications currentSession openApplicationWithBundleID:
10.  
ITMS-90338:Non-public API usage - The app references non-public selectors in 教育部政务服
务: _actionButtonTapped:, _applicationIconImageForBundleIdentifier:format:scale:, 
allInstalledApplications, currentSession, openApplicationWithBundleID:. If method names in your 
source code match the private Apple APIs listed above, altering your method names will help prevent 
this app from being flagged in future submissions. In addition, note that one or more of the above APIs 
may be located in a static library that was included with your app. If so, they must be removed. For 
further information, visit the Technical Support Information at 
http://developer.apple.com/support/technical/
           
  1. 解决方案 问题主要是说你的App中获取用户权限时,info.plist中通讯录权限【NSContactsUsageDescription】没有具体的使用说明,请补充完整 。
11.  
ITMS-90683:Missing Purpose String in Info.plist - Your app's code references one or more APIs 
that access sensitive user data. The app's Info.plist file should contain a NSContactsUsageDescription 
key with a user-facing purpose string explaining clearly and completely why your app needs the data. 
Starting Spring 2019, all apps submitted to the App Store that access user data are required to include 
a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a 
purpose string. While your app might not use these APIs, a purpose string is still required. You can 
contact the developer of the library or SDK and request they release a version of their code that doesn't 
contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
           
  1. 解决方案

问题主要是说你的App中获取用户权限时,info.plist中麦克风权限【NSMicrophoneUsageDescription】没有具体的使用说明,请补充完整 。

12. 
ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs 
that access sensitive user data. The app's Info.plist file should contain a 
NSMicrophoneUsageDescription key with a user-facing purpose string explaining clearly and 
completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that 
access user data are required to include a purpose string. If you're using external libraries or SDKs, 
they may reference APIs that require a purpose string. While your app might not use these APIs, a 
purpose string is still required. You can contact the developer of the library or SDK and request they 
release a version of their code that doesn't contain the APIs. Learn more 
(https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
           
  1. 解决方案 2020年4月开始,App Store上架的应用Apple将不再支持UIWebView,如项目中使用到UIWebView的功能,需替换成WKWebview实现。
13. 
 ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. 
Instead, use WKWebView for improved security and reliability. Learn more 
(https://developer.apple.com/documentation/uikit/uiwebview).
           
  1. 解决方案 因项目中使用了面容识别,但是App的隐私政策没有对面容识别进行使用说明,需在隐私政策中增加面容识别条款 可以从以下方向入手:1、使用目的 2、面容信息存储在哪 3、是否会与第三方共享 4、在隐私条款中增加面容条款
14. 
Guideline 2.1 - Information Needed 
We have started the review of your app, but we are not able to continue because we need additional
information about how your app uses face data.
Next StepsTo help us proceed with the review of your app, please provide complete and detailed responses to the following questions.
• What face data is your app collecting?
• For what purposes are you collecting this information? Please provide a complete and clear 
explanation of all planned uses of this data.
• Will the data be shared with any third parties? Where will this information be stored?
• Which are the relevant ps of your privacy policy that explain collection, use, disclosure, sharing,
and retention of face data? 
• Please quote the specific language in your privacy policy that concerns face data.
Once you reply to this message in Resolution Center with the requested information, we can proceed 
with your app's review.
           
  1. 解决方案 App中删除HealthKit所有相关的信息 其中比如证书取消支持HealthKit,项目中取消支持HealthKit
15.  
Guideline 2.5.1 - Performance - Software Requirements
We noticed that your app uses HealthKit, but your app does not appear to include any primary 
features that require health or fitness data. 
The intended use of HealthKit is generally to share health or fitness data with other apps or devices as 
a part of the app's core functionality.
 Next StepsTo 
resolve this issue, please remove any HealthKit functionality from your app, as well as any references 
to this app’s interactivity with HealthKit from the app or its metadata. This includes removing any 
HealthKit-related keys in your app's Info.plist as well as removing any calls to HealthKit APIs, 
including those from 3rd party platforms, from your app.
           
  1. 解决方案 删除App中plist audio相关配置
16.  
Guideline 2.5.4 - Performance - Software Requirements
Your app declares support for audio in the UIBackgroundModes key in your Info.plist but did not 
include features that require persistent audio.
Next Steps
The audio key is intended for use by apps that provide audible content to the user while in the 
background, such as music player or streaming audio apps. 
Please revise your app to provide audible content to the user while the app is in the background or 
remove the "audio" setting from the UIBackgroundModes key."
           
  1. 解决方案 删除App中plist VoIP相关配置
17.
Guideline 2.5.4 - Performance - Software Requirements
Your app declares support for VoIP in the UIBackgroundModes key in your Info.plist, but it does not 
include any Voice over IP services.
Next Steps
To resolve this issue, please revise your app to either add VoIP features or remove the "voip" setting 
from the UIBackgroundModes key.
We recognize that VoIP can provide "keep alive" functionality that is useful for many app features. 
However, using VoIP in this manner is not the intended purpose of VoIP.
           
  1. 解决方案 因App Store上架检测出你使用了面容识别功能,并且面容识别没有使用苹果自带的面容识别【LocalAuthentication】,Apple强制必须使用Apple官方的【LocalAuthentication】,目前已使用Apple自带的LocalAuthentication进行面容识别认证。
18.
Guideline 2.5.13 - Performance - Software Requirements
We noticed that your app includes facial recognition for account authentication, but it does not use 
LocalAuthentication as the app's primary authentication mechanism. 
LocalAuthentication must be your app's primary biometric authentication method, and any other 
custom facial recognition mechanism should be optional for login and cannot replace 
LocalAuthentication.  
Next Steps
To resolve this issue, please revise your app to use LocalAuthentication as the primary mechanism for 
any biometric account authentication.  
Resources  
LocalAuthentication offers users secure, effortless access to their devices. Visit Apple Developer for 
resources more on [using LocalAuthentication](https://developer.apple.com/documentation/localauthentication).
           
  1. 解决方案 Apple检测出了应用中使用了screenshot,我这边是以前项目用到了,临时做了隐藏操作,本项目暂时用不到
19.Guideline 4.0 - Design
We noticed that your app offers a custom screenshot-initiated interface when the user takes a 
screenshot in the app.  
Next Steps  
To resolve this issue, please ensure your app only displays the iOS system-provided screenshot 
interface. 
The iOS Human Interface Guidelines include more details about [screenshot best practices](https://developer.apple.com/ios/human-interface-guidelines/system-capabilities/screenshots/).
           
  1. 解决方案 还是隐私政策,回复:您好,感谢您对App进行审核,我们已对隐私政策进行更新,敬请复查。
20.
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
Your app includes a facial manipulation feature but the provided privacy policy does not include all of 
the information required by [Guideline 5.1.1 of the App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#data-collection-and-storage) and [Section 3.3.10 of the Apple Developer Program License Agreement](https://developer.apple.com/terms/).  
Next Steps  
To resolve this issue, please update the Privacy Policy URL p of App Store Connect to link to your 
privacy policy and ensure it includes all of the requisite information.  
If your privacy policy includes this information, please respond to this message in Resolution Center 
with the relevant ps quoted in your reply.  
Resources  
For your convenience, we’ve included Section 3.3.10 of the Apple Developer Program License 
Agreement below:
           
  1. 解决方案 因使用了相机,但是权限说明不明确,在info.plist中进行了补充权限说明。
21. 
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
We noticed that your app requests the user’s consent to access their camera and location but does not 
clarify the use of the camera and location in the applicable purpose string.  
Next Steps  
Please revise the relevant purpose string in your app’s Info.plist file to specify why the app is requesting access to the user's camera and location. You can modify your app's Info.plist file using the 
property list editor in Xcode.  
To help users understand why your app is requesting access to their personal data, all permission 
request alerts in your app should specify how your app will use the requested feature.  
Resources  
For additional information and instructions on requesting permission, please review the 
[Requesting Permission](https://developer.apple.com/ios/human-interface-guidelines/app-architecture/requesting-permission/) p of the iOS Human Interface Guidelines and the [Information Property List Key Reference](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyRefere
nce/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW18). 
You may also want to review 
the [Technical Q&A QA1937: Resolving the Privacy-Sensitive Data App Rejection](https://developer.apple.com/library/archive/qa/qa1937/_index.html) page for details on how to provide a usage description for permission request alerts.
           
  1. 解决方案 因App中有几个地方需要进行登录才可以查看,Apple认为你应该打开权限,针对这些问题,进行阐述说明,反馈给Apple就好了
22. 
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
We noticed that your app requires users to register or log in to access features that are not account-
based.
Next Steps
To resolve this issue, please revise your app to let users freely access your app’s non account-based 
features. 
Apps may not require users to enter personal information to function, except when directly relevant to 
the core functionality of the app or required by law. 
You should allow users to freely access your app’s non account-based features. For example, an e-
commerce app should let users browse store offerings and other features that are not account-based 
before being asked to register, or a restaurant app should allow users to explore the menu before 
placing an order. Registration must then only be required for account-specific features, such as saving 
items for future reference or placing an order.
           
  1. 解决方案 苹果认为身份证号码数据隐私隐私,查看登录不需要认为不需要身份证号码信息,针对这些问题,进行阐述说明,反馈给Apple就好了
23. 
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
We noticed that your app requires users to register with personal information that is not directly 
relevant to your app’s core functionality. Specifically, the following fields or actions are required but do 
not appear to be directly relevant to your app’s core functionality:
身份证号码
Next StepsTo 
resolve this issue, please either remove all required fields that are not relevant to the app or make those 
fields optional. Information requested during registration must be relevant to the features the app 
provides. 
           
  1. 解决方案 Apple检测到你的App中使用了第三方登录,根据Apple官方说明,使用了第三方登录就必须支持Apple登录,故需要支持Apple登录。但是,但是如果满足以下条件,则无需使用Apple登录: 1.您的应用专门使用公司自己的帐户设置和登录系统。2.您的应用是教育,企业或商业应用,要求用户使用现有的教育或企业帐户登录。3.您的应用程序使用政府或行业支持的公民身份识别系统或电子ID来对用户进行身份验证。4.您的应用是特定第三方服务的客户端,要求用户直接登录其邮件,社交媒体或其他第三方帐户 才能访问其内容。
24.
Guideline 4.8 - Design - Sign in with Apple
We noticed that your app uses a third-party login service but does not offer Sign in with Apple. Apps
 that use a third-party login service for account authentication must offer Sign in with Apple to users as 
an equivalent option.  
Next Steps  
To resolve this issue, please revise your app to offer Sign in with Apple as an equivalent login option.  

Resources 
 - Review the [sample code](https://developer.apple.com/documentation/authenticationservices/implementing_user_authentica
tion_with_sign_in_with_apple) on Apple Developer Support to learn more about implementing Sign 
in with Apple in your app.  
- Read the Sign in with Apple [Overview](https://developer.apple.com/sign-in-with-apple/) to learn 
more about the benefits Sign in with Apple offers users and developers.  Please see attached 
screenshots for details.
           
  1. 解决方案 Apple检测你的App支持推送,但是没有在开发者中心上传推送证书。创建并在开发者中心上传推送证书
25.
ITMS-90078: 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 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/Remot
eNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1."
           

相关阅读

1 海外开发者账号上架总结

2 Google Play 上架的那些坑

3 APP上架到各大应用市场技巧

4 双 11 快到了,不给你的 APP 加上自动换图标的功能吗?

5 JetBrains 的这个软件是真的香!(附教程)

如果你有写博客的好习惯
欢迎投稿
赞+在看,小生感恩❤️
           

继续阅读