最近被苹果拒绝的条款和解决方法

7,403 阅读9分钟

    最近一周上架3个不同类型的App,其中2个还在审核中,不同的理由被拒绝多次,被苹果爸爸折磨的死去活来。下面记录这些心酸的历程。

2. 5 Performance: Software Requirements

Guideline 2.5.1 - Performance - Software Requirements

Your app uses the "prefs:root=" non-public URL scheme, which is a private entity. The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change. prefs:root=privacy&path=camera prefs:root=privacy&path=photos Continuing to use or conceal non-public APIs in future submissions of this app may result in the termination of your Apple Developer account, as well as removal of all associated apps from the App Store. Next Steps To resolve this issue, please revise your app to provide the associated functionality using public APIs or remove the functionality using the "prefs:root" or "App-Prefs:root" URL scheme. If there are no alternatives for providing the functionality your app requires, you can file an enhancement request.

解决方法

    这个prefs:root问题之前也有遇到过,使用的选择图片第三方库TZImagePickerController历史版本里面有关于判断iOS 8.0 版本以下的代码有使用到prefs:root。直接pod更新到最新的版本就可以。

2. 1 Performance: App Completeness

Guideline 2.1 - Performance - App Completeness

Your app or its metadata does not appear to include final content. Before you submit your app to the App Store, all of its content and metadata must be final. Your app must not include placeholder or incomplete information. For example, an app with “lorem ipsum” text in the app description field will be rejected. Likewise, an app with placeholder screenshots, such as “screenshot coming soon,” will be rejected. Instead, you should only submit an app with complete information and content throughout. Next Steps To resolve this issue, please review your app and metadata to ensure that all of its content is final.

解决方法

    这个完全是自己的锅,打包的时候环境没有切换正式环境,测试环境的商品图片都是占位图,切换到正式环境就行。

2. 3 Performance: Accurate Metadata

Guideline 2.3.3 - Performance - Accurate Metadata

We noticed that your screenshots do not sufficiently reflect your app in use. Specifically, your 6.5-inch iPhone and 5.8-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 example, a gaming app should feature screenshots that capture actual gameplay from within the app. Marketing or promotional materials that do not reflect the UI of the app are not appropriate for screenshots. 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 6.5-inch display assets for iPhone XS Max are optional, and can scale down to iPhone XR, iPhone XS, and iPhone X. Screenshots that include features like rounded corners or sensor housing should only be used for the 6.5-inch or 5.8-inch display. App Store screenshots should accurately communicate your app’s value and functionality. Use text and overlay images to highlight your app’s user experience, not obscure it. Make sure app UI and product images match the corresponding device type in App Store Connect. This helps users understand your app and makes for a positive App Store experience.

解决方法

    苹果表示6.5英寸和5.8英寸的应用截图不准确,没有反映出App的价值和功能。我当时上传的截图是这样的,是UI设计师给出的应用轮播图。实际上App的截图和设计图没有多少差别,但是为了上架,还是用模拟器把每个尺寸的真实截图保存下来,传上去。

屏幕快照 2019-03-22 下午3.52.11.png

2. 1 Performance: App Completeness

Guideline 2.1 - Performance - App Completeness

We discovered one or more bugs in your app when reviewed on iPhone running iOS 12.1.4 on Wi-Fi. Specifically, your app did not fetch content appropriately.  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.

解决方法

    苹果提供的截图是搜索页面除了输入框,没有任何搜索结果。苹果认为是网络问题。我没有重新打包提交,直接在底下的输入框回复是输入的关键字没有匹配任何商品,所以不显示。然后提供了相关搜索的截图。第二天就直接上架通过了,苹果还是蛮好说话的。

1553241829947.jpg

2. 5 Performance: Software Requirements

Guideline 2.5.2 - Performance - Software Requirements

During review, your app installed or launched executable code, which is not permitted on the App Store. Specifically, your app uses the itms-services URL scheme to install an app. Please note that while educational apps designed to teach, develop, or allow students to test executable code may, in limited circumstances, download code, such code may not be used for other purposes and such apps must make the source code completely viewable and editable by the user. The next submission of this app may require a longer review time, and this app will not be eligible for an expedited review until this issue is resolved. Next Steps Review the Software Requirements section of the App Store Review Guidelines. Ensure your app is compliant with all sections of the App Store Review Guidelines and the Terms & Conditions of the Apple Developer Program.  Once your app is fully compliant, resubmit your app for review. Submitting apps designed to mislead or harm customers or evade the review process may result in the termination of your Apple Developer Program account. Review the Terms & Conditions of the Apple Developer Program to learn more about our policies regarding termination.

解决方法

    被这个问题卡了两次,第一次还以为是NSURLProtocol分类中使用了私有API,但是下面的代码中没有直接用私有API,而是用了类名反射机制躲避审查。后来第二次被拒绝,并且附带了下面一条了4.0 设计条款才意识到不是这个问题。

FOUNDATION_STATIC_INLINE Class ContextControllerClass() 
{
    static Class cls;
    if (!cls) 
    {
       cls = [[[WKWebView new] valueForKey:@"browsingContextController"] class];
    }
    return cls;
}

FOUNDATION_STATIC_INLINE SEL RegisterSchemeSelector() 
{
    return NSSelectorFromString(@"registerSchemeForCustomProtocol:");
}

FOUNDATION_STATIC_INLINE SEL UnregisterSchemeSelector() 
{
    return NSSelectorFromString(@"unregisterSchemeForCustomProtocol:");
}

@implementation NSURLProtocol (WebKitSupport)

+ (void)wk_registerScheme:(NSString *)scheme 
{
    Class cls = ContextControllerClass();
    SEL sel = RegisterSchemeSelector();
    if ([(id)cls respondsToSelector:sel]) 
    {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        [(id)cls performSelector:sel withObject:scheme];
#pragma clang diagnostic pop
    }
}

+ (void)wk_unregisterScheme:(NSString *)scheme
{
    Class cls = ContextControllerClass();
    SEL sel = UnregisterSchemeSelector();
    if ([(id)cls respondsToSelector:sel])
    {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [(id)cls performSelector:sel withObject:scheme];
#pragma clang diagnostic pop
    }
}

4.0 Performance: Design

4.0 Performance: Design

Your app includes an update button or alerts the user to update the app, but the update button or alert does not link directly to the app’s page on the App Store. Next Steps To resolve this issue, please ensure that tapping the update button takes the user directly to the app’s page on the App Store to update the app.

解决方法

    这个和上面的是联动的条款。原因是在App启动的时候,会检查更新版本,假如有最新版本,会跳转到App Store更新。但是,这个App是第一次上架,目前没有App Store的下载地址,当时为了测试,填写了蒲公英的项目托管地址,后来也忘了修改过来。解决方法是删除更新版本的代码,等待第一次上架后,获得App的下载链接后,再将代码加回来。这一次真的是踩了苹果底线,这次的审核时间更长,而且这个问题解决前,没有申请加急审核的资格。在更新这篇文章的时候,App依然在审核当中。

2. 1 Performance: Information Needed

Guideline 2.1 - Information Needed

We were unable to sign in to review your app with the demo account information you provided. In order for us to continue the review, you will still need to provide a functional demo account that gives us access to all parts of your app so that we may fully review its content, features, and functionality. If your app is restricted to a specific location, you will still need to provide a whitelisted demo account that gives us access to your app. Note that providing a demo video showing your app in use is not enough for us to continue the review. Next Steps To help us proceed with the review of your app, please provide a user name and password in the App Review Information section for your app in App Store Connect. Please be sure to include content in your app that demonstrates the features and functionality available in your app. To provide demo account information: Log in to App Store Connect Click "My Apps" Select your app Click on the app version on the left side of the screen Scroll down to "App Review Information" Select the "Sign-in required" box Enter demo credentials in the "User name" and "Password" fields Once you've completed all changes, click the "Save" button at the top of the Version Information page.

解决方法

    这个是没有提供正确的登录演示账号,这个App是一年前上了第一版,然后现在准备上第二版。时间长了,以前提供给苹果的测试账号不能用了,提供一个新的演示账号就行。

5. 1 Performance: Legal - Privacy

Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage

We noticed that your app requests the user’s consent to access their camera but does not clarify the use of the camera 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. 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.

解决方法

    这个问题以前也遇到过,最初始的版本是,开启相机、相册、麦克风等没有告知用户权限。在plist文件里面添加相关权限,例如“App需要您的同意,才能访问相机”。现在苹果还要求请求权限的同时,来说明用于什么服务。相关权限修改为“App需要您的同意,才能访问相机,以便上传您的用户头像或者商品评价图片。”

2. 5 Performance: Software Requirements

Guideline 2.5.1 - Performance - Software Requirements

We still 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 to share health or fitness data with other apps or devices, and it should be used only in apps that require this data as a part of the app's core functionality. Next Steps To 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.

解决方法

    接手这个App的时候,上个维护代码的人早就离职了。在App代码中全局搜索HealthKit,没有任何结果,比较郁闷。应用中没有集成HealthKit苹果的健康框架,检查podfile也没有发现相关第三方库,被这个问题卡了两次。第一次没有重新打包,直接回复苹果说明没有加入HealthKit到App中。然后被打回ㄟ( ▔, ▔ )ㄏ。后来发现plist文件中,写这个App的哥们真是小心,把相机、相册、摄像头、定位、日历、麦克风、通讯录、健康等权限全给加上了,真是哭欲无泪。删除健康的两条权限重新上架。

Privacy - Health Share Usage Description
Privacy - Health Update Usage Description

2. 3 Performance: Accurate Metadata

Guideline 2.3.6 - Performance - Accurate Metadata

The rating you have selected, 12+, is inconsistent with the content of your app. Since your app includes content and features involving alcohol products, it should be rated appropriately for this subject.

解决方法

    这个App是电商类的,但是有考虑到出现酒的可能,所以在应用分级中【使用或提及烟、酒或毒品】那一档选的是【偶尔/轻微的】。最终的年龄分级是12+。但是苹果提供的截图显示测试账号的首页全部都是酒类的商品,🙄🙄🙄。没有办法,将【使用或提及烟、酒或毒品】那一档选【频繁/强烈的】,最终的年龄分级是17+。不得不说,苹果对于App的分级扣得非常严。

1553246234308.jpg

文章会在以下渠道同步更新