AppStore上架審核過(guò)程中常見(jiàn)問(wèn)題整理
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
一 、iOS APP 上架流程簡(jiǎn)介 1. 申請(qǐng)開(kāi)發(fā)者賬號(hào) 蘋(píng)果的開(kāi)發(fā)者賬號(hào)主要分為個(gè)人(Individual)、公司(Company)、企業(yè)(Enterprise)、高校(University)四種類型。一般開(kāi)發(fā)者申請(qǐng)的都是個(gè)人或者公司的,企業(yè)的開(kāi)發(fā)者賬號(hào)開(kāi)發(fā)應(yīng)用不能發(fā)布到App Store,只能企業(yè)內(nèi)部使用。這個(gè)申請(qǐng)過(guò)程一般可能需要一個(gè)星期左右。公司和企業(yè)的需要鄧白氏碼,如果鄧白氏碼未申請(qǐng),請(qǐng)先申請(qǐng)鄧白氏碼,這個(gè)過(guò)程需要一到兩個(gè)星期。 這里插一句,如果有App代上架需求的,可以找我 2. 創(chuàng)建證書(shū)、AppID、生成描述文件 通過(guò) Mac的鑰匙串工具,生成證書(shū)請(qǐng)求文件,下載證書(shū),這里需要注意的是下載下來(lái)的證書(shū)只能在請(qǐng)求該證書(shū)的電腦上使用,如果想給其他開(kāi)發(fā)者使用需要將已經(jīng)導(dǎo)入的證書(shū)導(dǎo)出為個(gè)人信息交換(.p12)格式供他人使用。AppID 的創(chuàng)建需要用到項(xiàng)目的Bundle ID,之后便可以創(chuàng)建描述文件了。 3. 在開(kāi)發(fā)者中心的iTunes Connect 中配置 App 相關(guān)信息 在開(kāi)發(fā)者中心里的iTunes Connect 里的 APP 選項(xiàng)中新建 APP 項(xiàng)目并配置相應(yīng)的信息(需要各個(gè)版本的屏幕截圖,運(yùn)行模擬器,調(diào)到最大(command+1),用 command+s截圖,還有就是一個(gè)1024*1024的圖標(biāo),不能有圓角) 4. 使用 Xcode 打包上傳 App 將 2 步驟中申請(qǐng)好的證書(shū)和描述文件正確配置到 Xcode 中,設(shè)置好Xcode的一些屬性: 1.在Xcode中選擇iOS Device(這里不能選擇模擬器); 2.如果應(yīng)用不支持橫屏,請(qǐng)?jiān)?General 選項(xiàng)中將 Landscape Left 和 Landscape Right 兩項(xiàng)的勾選去掉; 3.查看版本號(hào)和構(gòu)建版本號(hào); 4.將斷點(diǎn)、全局?jǐn)帱c(diǎn)、僵尸模式等都去掉; 5.設(shè)置為 Release 模式。 之后便可選擇 Xcode->Product->Archive打包項(xiàng)目,打包完成后選擇 Upload to App Store上傳。如果不想使用 Xcode上傳的話,也可以選擇 Export導(dǎo)出ipa文件, 需要注意的是在導(dǎo)出時(shí),必須選擇 Save for iOS App Store Deployment。然后通過(guò)Application Loader 工具上傳 ipa 文件。 5. 提交審核 以上步驟完成后,返回 iTunes Connect 上查看自己的 App 信息,在構(gòu)建版本中選擇剛剛上傳的 App 版本,此時(shí)有可能顯示正在處理,這時(shí)可能需要等幾分鐘再回來(lái)查看。選擇好版本后點(diǎn)擊提交以供審核,這時(shí) App 會(huì)變成等待審核狀態(tài)。 6. 后續(xù) 后續(xù)就是等待蘋(píng)果的審核人員審核應(yīng)用了,如果一切順利的話,這個(gè)過(guò)程需要一到兩個(gè)工作日便可完成審核,當(dāng)然前提是你的應(yīng)用符合蘋(píng)果的審核條款。如果審核不通過(guò),請(qǐng)及時(shí)根據(jù)反饋信息修改應(yīng)用,再次提交直到符合要求。審核通過(guò)后,如果之前選擇已經(jīng)選擇好自動(dòng)發(fā)布,便可在 AppStore 上查看和下載應(yīng)用了。 二 、iOS 上架審核過(guò)程常見(jiàn)的坑與解決方法 1. 問(wèn)題:用戶生成內(nèi)容(UGC)缺少必要的審核 為了防止非法濫用用戶生成的內(nèi)容,從而給用戶提供虛假信息、盜取用戶的知識(shí)產(chǎn)權(quán),社交應(yīng)用以及應(yīng)用當(dāng)中包含用戶生成的信息的應(yīng)用必須包括下述功能: 1.過(guò)濾不良內(nèi)容 2.提供舉報(bào)機(jī)制 3.后臺(tái)服務(wù)可以提供阻止騷擾用戶的行為 4.提供官方聯(lián)系方式,讓用戶可以快速聯(lián)系到開(kāi)發(fā)商 解決方案: 維秀直播 App 提供了用戶實(shí)時(shí)彈幕功能,所以涉及到了 UGC,他們的處理方法是增加關(guān)鍵詞過(guò)濾,還有通過(guò)房管的方式人工審核,處理違規(guī)用戶。 2. 問(wèn)題:應(yīng)用中使用了 IDFA 被拒絕 IDFA 主要被用于廣告中區(qū)分設(shè)備的作用。AppStore 禁止沒(méi)有使用廣告而采集 IDFA 的 App 上架,所以如果 App 本身沒(méi)有廣告的話,使用第三方 SDK 要注意檢查是否含有 IDFA 廣告模塊。 解決方案: 如果應(yīng)用本身有集成廣告的話,只需要在提交審核的時(shí)候勾選正確的廣告標(biāo)識(shí)符選項(xiàng)即可。 如果應(yīng)用本身未集成廣告,卻包含 IDFA的話。這種情況一般都是集成的第三方 SDK中包含IDFA 導(dǎo)致的。首先尋找是否有不包含 IDFA 的SDK 版本,如果沒(méi)有的話可以參考 ShareSDK 的解決方法,通過(guò)后臺(tái)配置在審核期間為應(yīng)用添加廣告,審核完成過(guò)后將廣告展示去掉。 3. 問(wèn)題:應(yīng)用不支持 IPv6網(wǎng)絡(luò)下使用 2016年6月1號(hào)起,蘋(píng)果的審核人員會(huì)在 IPv6 網(wǎng)絡(luò)上審核你的應(yīng)用,所以如果你的應(yīng)用程序無(wú)法使用 IPv6 協(xié)議,可能會(huì)被拒絕。 解決方案: 我上架的卓易奪寶和小帶魚(yú)手機(jī)現(xiàn)金貸款軟件 App 上架過(guò)程中就因?yàn)?IPv6 的支持原因被拒。我的解決方案是: 協(xié)調(diào)后端人員添加對(duì) IPv6 網(wǎng)絡(luò)的支持。 App 端更新相關(guān)的第三方 SDK,比如使用ASI 或者 AFN 的版本太低,使用最新的AFN即可解決問(wèn)題。當(dāng)然這些做完之后最好在Mac 上面搭建 IPv6網(wǎng)絡(luò)供測(cè)試人員進(jìn)行完測(cè)試再重新發(fā)布。 4. 問(wèn)題:第三方登錄、支付、分享未安裝應(yīng)用,提示下載被拒 這個(gè)問(wèn)題其實(shí)被拒的原因有兩種,第一種是未安裝應(yīng)用沒(méi)有任何提示,這種情況下相當(dāng)于應(yīng)用有無(wú)效的按鈕所以會(huì)被拒;第二種是提示下載對(duì)應(yīng)的第三方 App,這也是蘋(píng)果所不允許的。 解決方案: 最新的第三方登錄等相關(guān)的 SDK 目前已知的(微信,QQ,微博)都已經(jīng)對(duì)這種情況做了處理,在未安裝的情況下會(huì)調(diào)用 web 進(jìn)行登錄,所以如果測(cè)試過(guò)程中發(fā)現(xiàn)可以成功在 web 上登錄的話可以不做處理。以前在沒(méi)有這種處理機(jī)制的情況下需要開(kāi)發(fā)者調(diào)用對(duì)應(yīng)接口,先判斷是否安裝了相應(yīng)的第三方 APP,如果未安裝,需要隱藏按鈕,這樣便可輕松過(guò)審。 5. 問(wèn)題:虛擬產(chǎn)品未使用應(yīng)用內(nèi)支付(IAP)被拒 根據(jù)蘋(píng)果官方最新的審核條款:如果你希望通過(guò)付費(fèi)才可以解鎖你的應(yīng)用當(dāng)中的一些功能(例如,訂閱內(nèi)容,游戲貨幣,游戲關(guān)卡,獲取優(yōu)質(zhì)內(nèi)容,解鎖完整版本),你必須使用應(yīng)用內(nèi)付費(fèi)(IAP)。如果這種情況下,應(yīng)用使用了其他的第三方支付,應(yīng)用將被拒絕上架。 解決方案: 審核的時(shí)候,把相應(yīng)的虛擬產(chǎn)品隱藏起來(lái),通過(guò)后再放出來(lái),此招有風(fēng)險(xiǎn),可能會(huì)受到警告信,甚至被封號(hào),如果用戶量小就無(wú)所謂了,先把App 搞上架! 審核的時(shí)候,走 IAP 的支付方式,審核完成后再通過(guò)服務(wù)器配置動(dòng)態(tài)切換到支付寶、微信等第三方支付。該法類似于方案1,也存在風(fēng)險(xiǎn)。 學(xué)習(xí)58同城,讓用戶去網(wǎng)站購(gòu)買產(chǎn)品,買了產(chǎn)品的賬號(hào)到移動(dòng)端使用功能。 老老實(shí)實(shí)的使用 IAP 吧。 6. 問(wèn)題:使用后臺(tái)定位被拒 關(guān)于位置服務(wù)蘋(píng)果的審核條款原文如下: 使用位置服務(wù)的應(yīng)用程序必須提供和位置服務(wù)直接相關(guān)的功能。使用基于位置的API不允許用于提供緊急服務(wù),或者實(shí)現(xiàn)自動(dòng)控制車輛、飛行器以及其他設(shè)備(小型的設(shè)備例如小型無(wú)人機(jī)和玩具例外),遠(yuǎn)程控制汽車警報(bào)系統(tǒng)等。在收集、傳輸和使用用戶的位置數(shù)據(jù)之前,請(qǐng)確保你已經(jīng)取得了用戶的同意。如果應(yīng)用程序使用了后臺(tái)定位服務(wù),務(wù)必在應(yīng)用當(dāng)中闡明其目的。并且使用后臺(tái)定位的話需要提供一個(gè)明確的提醒告訴用戶這么做會(huì)加快電量消耗。 一般應(yīng)用在這一塊被拒的原因有以下幾種: 1.應(yīng)用根本不需要定位功能。 2.應(yīng)用需要定位功能,但是只需要短暫的獲取少數(shù)的用戶的位置,比如美團(tuán),新聞?lì)惖膽?yīng)用需要獲得當(dāng)前用戶的所在城市,卻使用了后臺(tái)定位模式。 3.應(yīng)用確實(shí)需要使用后臺(tái)定位,比如打車類軟件,但是應(yīng)用中卻沒(méi)有任何界面展示這些定位數(shù)據(jù)。 解決方案: 4.如果你的應(yīng)用根本不需要定位功能,但是還是在info.plist里面添加了location in theUIBackgroundModes key ,那么在plist文件里面移除UIBackgroundModes key就可以,這中情況較少,新手小白會(huì)犯這種錯(cuò)誤。 5.如果只是簡(jiǎn)單獲取位置不需要使用后臺(tái)定位,只需要去掉info.plist 的文件中的 UIBackgroundModes 即可。 6.這種情況比較復(fù)雜,推薦的做法是通過(guò)表格或者軌跡展示出后臺(tái)定位的數(shù)據(jù),再提交審核的時(shí)候告訴蘋(píng)果那個(gè)功能需要后臺(tái)定位,具體展示后臺(tái)定位的數(shù)據(jù)在那個(gè)界面,最后需要 Continued use of GPS running in the background can dramatically decrease battery life加到 App 描述里面,可以參考滴滴出行的描述,否則也會(huì)被拒絕。 7. 問(wèn)題:info.plist 權(quán)限配置被拒 iOS 10 之后如果需要調(diào)用相機(jī),藍(lán)牙等設(shè)備時(shí),需要在 info.plist 文件中進(jìn)行相應(yīng)的配置,否則應(yīng)用會(huì)直接崩潰,在 iOS 10 之前則是無(wú)法訪問(wèn)。另外,如果在 info.plist 中調(diào)用了配置了權(quán)限在應(yīng)用中卻沒(méi)有使用到也是會(huì)被拒的。 解決方案: 一定要注意自己的 App 在使用中用到了哪些權(quán)限,不要添加無(wú)用的權(quán)限,也不要缺少必要的權(quán)限。 8. 問(wèn)題:應(yīng)用提示更新被拒 應(yīng)用內(nèi)不能有任何提示更新應(yīng)用的字樣,且應(yīng)用的更新只能通過(guò) AppStore。因?yàn)樘O(píng)果對(duì)于應(yīng)用的更新有自己的一套策略,所以禁止應(yīng)用本身提供更新方式,只要應(yīng)用內(nèi)出現(xiàn)。 解決方案: 如果不是很必要的話,盡量將應(yīng)用內(nèi)涉及到應(yīng)用更新的部分去掉。如果真的需要使用應(yīng)用更新,推薦的方法是應(yīng)用啟動(dòng)的時(shí)候獲取下應(yīng)用在 AppStore上面的版本號(hào),與自己的版本號(hào)進(jìn)行比較,當(dāng)自己的版本號(hào)小于 AppStore 上面的版本號(hào)時(shí),提示更新,否則的話不顯示更新相關(guān)的內(nèi)容。 9. 問(wèn)題:奪寶(抽獎(jiǎng))類應(yīng)用被拒 根據(jù)AppStore 審核準(zhǔn)則 20.4 的規(guī)定,抽獎(jiǎng)卷或抽獎(jiǎng)參與權(quán)的購(gòu)買,不論是透過(guò)第三方支付渠道或者余額扣款實(shí)現(xiàn),都不能夠在 app 內(nèi)執(zhí)行。 解決方案: 卓易奪寶 App 上架過(guò)程中遇到的問(wèn)題,最后的解決方法是在審核過(guò)程中,所有的支付行為都跳轉(zhuǎn)到 Safari瀏覽器上面進(jìn)行,審核完成后再使用支付寶等 app 平臺(tái)支付。 10. 問(wèn)題:隱私條款問(wèn)題被拒 在未獲得用戶事先允許,或未告知用戶信息將被如何,在哪里使用的情況下,應(yīng)用不可以傳輸用戶數(shù)據(jù)。 解決方案: 《網(wǎng)站服務(wù)協(xié)議》《隱私條款》這些都不要少,注冊(cè)時(shí)候讓用戶可勾選。另外注明需要的用戶信息用來(lái)做什么。 11. 問(wèn)題:未提供測(cè)試賬號(hào)被拒 如果應(yīng)用中有需要用到賬號(hào)或者其他資源的(例如:一個(gè)二維碼)才能使用的一些功能,但未提供給蘋(píng)果,可能會(huì)被拒絕上架。原因是蘋(píng)果審核人員無(wú)法測(cè)試這些功能。 解決方案: 提供一個(gè)有效的測(cè)試帳號(hào)以及登錄信息,并提供測(cè)試功能必要的的硬件和資源(例如,一個(gè)測(cè)試用的二維碼) 12. 問(wèn)題:未通過(guò) HTTPS 訪問(wèn)被拒 App Transport Security(ATS) 是 Apple 為增強(qiáng) iOS App 網(wǎng)絡(luò)通信安全提出的安全功能,適用于iOS App 和 App Extension;在啟用 ATS 之后,它會(huì)強(qiáng)制應(yīng)用通過(guò)HTTPS(而不是 HTTP )連接網(wǎng)絡(luò)服務(wù)。 WWDC 2016上提出,2016年底或2017年初,具體時(shí)間未定。App Store上架審核加強(qiáng)對(duì)ATS 配置的review,即強(qiáng)制應(yīng)用必須通過(guò)HTTPS連接網(wǎng)絡(luò)服務(wù),而不是隨手將NSAllowsArbitraryLoads置為 YES,否則審核不予通過(guò)。 解決方案: ATS 的提出,是為了在系統(tǒng)層面保障iOS APP 網(wǎng)絡(luò)通信的安全;Apple 只所以加強(qiáng)對(duì)ATS 配置的審核,是為了防止開(kāi)發(fā)者們遇到ATS相關(guān)的場(chǎng)景時(shí),只是簡(jiǎn)單地將 ATS完全關(guān)閉(只要沒(méi)有強(qiáng)制性措施,開(kāi)發(fā)者會(huì)這么做);在此基礎(chǔ)上,App審核同樣會(huì)遵循原則:App Review will require "reasonable justification" for most ATS exceptions。 Apple 官方給出的可以通過(guò)審核的聲明 demo 如下: 1.必須使用第三方提供的服務(wù),但是其沒(méi)有支持 HTTPS; 2.必須通過(guò)域名連接到設(shè)備,但該設(shè)備不能支持安全連接; 3.必須展示不同來(lái)源的網(wǎng)頁(yè)內(nèi)容,但是不能基于 NSAllowsArbitraryLoadsInWebContent支持的類(UIWebView / WKWebView)實(shí)現(xiàn); 4.載入加密的媒體資源并且其中不涉及個(gè)人信息。 由于 Apple 官方并沒(méi)有給出 ATS 審核的完整說(shuō)明,ATS 審核時(shí)什么才是合適合理的聲明也沒(méi)有明確的客觀定義,以上 demo 描述僅能作為參照。 查看原文 該文章在 2023/10/25 14:36:47 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |