iOS應用跳轉“prefs:root”無效的問題--審核被拒絕

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.

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.


記錄AppStore審核被拒絕經歷

AppStore Rejected

背景:

2017年10月17號提交審核,18號審核中,24號被拒絕。

以往提交審核,通常都會在48小時內得到結果,這次審核在審核中狀態,停留了6天。(在此期間通過iTunesConnect資源和幫助向Apple發送了2次反饋,并詢問了審核進度),最終得到了下面的郵件。

2017年10月24日 上午12:05

發件人 Apple

2. 3 Performance: Accurate Metadata

2. 5 Performance: Software Requirements

Guideline 2.3.1 - Performance

We discovered that your app contains hidden features.

The next submission of this app may require a longer review time.

Next Steps

- Review the Performance 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.

If you believe your app is compliant with the App Store Review Guidelines, you may submit an appeal. Alternatively, you may provide additional details about your app by replying directly to this message.

Guideline 2.5.1 - Performance - Software Requirements

//////////--------------------重要描述--------------------//////////

Additionally, your app uses or references the following non-public APIs:

IOServiceMatching, IOServiceGetMatchingService, IORegistryEntryCreateCFProperties, IOObjectRelease

//////////--------------------重要描述--------------------//////////


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.

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

If you are using third-party libraries, please update to the most recent version of those libraries. If you do not have access to the libraries' source, you may be able to search the compiled binary using the "strings" or "otool" command line tools. The "strings" tool can output a list of the methods that the library calls and "otool -ov" will output the Objective-C class structures and their defined methods. These tools can help you narrow down where the problematic code resides. You could also use the "nm" tool to verify if any third-party libraries are calling these APIs.

Resources

For information on the "nm" tool, please review the "nm tool" Xcode manual page.

If there are no alternatives for providing the functionality your app requires, you can file an enhancement request.

Guideline 2.5.1 - Performance - Software Requirements

//////////--------------------重要描述--------------------//////////

Your app also 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.

//////////--------------------重要描述--------------------//////////


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.

一、排查問題

首先,來看一下上面的Apple發送的審核被拒原因郵件,其中提到了兩個重要的點:

這次Apple審核,相對以往來說更為嚴格,以下提到的兩個問題,在以往的版本迭代中,沒有被拒絕過。

問題 ①:

Additionally, your app uses or references the following non-public APIs:

IOServiceMatching, IOServiceGetMatchingService, IORegistryEntryCreateCFProperties, IOObjectRelease

您的應用程序使用或引用以下非公開API:

IOServiceMatching, IOServiceGetMatchingService, IORegistryEntryCreateCFProperties, IOObjectRelease

問題 ②:

Your app also 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=?非公開URL方案,這是一個私有實體。

在App Store中不允許使用非公開API,因為如果這些API發生變化,可能會導致用戶體驗不佳。

二、解決問題 ①

首先打開終端,cd到項目的當前目錄中:

cd (drag and drop your project folder here) Your_Project_Path

分別輸入以下命令行,來找到使用了(私有API)的SDK或者.a的靜態庫:

find . | grep -v .svn | grep "\.a" | grep -v "\.app" | xargs grep (私有API)

grep -lr "(私有API)" * | grep -v .svn | grep -v .md

根據終端的提示找到對應的地方,將SDK替換成官方最新的SDK,然后再用第2步再確認一遍,確認無誤后提交代碼。

若SDK中依舊包含私有API,根據實際情況做相應的處理。

解決方案:

目前ATSDK的使用場景,用于幫助開發人員快速查找分析性能,UI等方面問題,暫時在發布環境中棄用ATSDK,其中包含的測試入口,FLEX調試工具,調整到其他位置。

?

三、解決問題 ②

打開項目工程,全局搜索?prefs:root=?,結果如下:

在SJPermissionManager類中,針對iOS8以前的系統,使用了prefs:root=的方案,跳轉系統設置頁面。

解決方案:

目前項目兼容iOS8以上的系統,所以直接刪除即可。

四、AppStore審核指南

Apple官方 AppStore審核指南

Apple官方 公有API

轉自:http://www.chijinggu.cn/a/4888.html

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容