最近被蘋果拒絕的條款和解決方法

Misaki發表於2019-03-22

    最近一週上架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

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

相關文章