一 、iOS APP 上架流程簡介
1. 申請開發(fā)者賬號
蘋果的開發(fā)者賬號主要分為個人(Individual)、公司(Company)、企業(yè)(Enterprise)性置、高校(University)四種類型,每年資費(fèi)分別為$99揍堰、$99嗅义、$299、免費(fèi))隐砸。一般開發(fā)者申請的都是個人或者公司的之碗,企業(yè)的開發(fā)者賬號開發(fā)應(yīng)用不能發(fā)布到App Store,只能企業(yè)內(nèi)部使用季希。這個申請過程一般可能需要一個星期左右褪那。公司和企業(yè)的需要鄧白氏碼,如果鄧白氏碼未申請式塌,請先申請鄧白氏碼武通,這個過程需要一到兩個星期。
2. 創(chuàng)建證書珊搀、AppID、生成描述文件
通過 Mac 的鑰匙串工具尾菇,生成證書請求文件境析,下載證書,這里需要注意的是下載下來的證書只能在請求該證書的電腦上使用派诬,如果想給其他開發(fā)者使用需要將已經(jīng)導(dǎo)入的證書導(dǎo)出為個人信息交換(.p12)格式供他人使用劳淆。
AppID 的創(chuàng)建需要用到項(xiàng)目的 Bundle ID,之后便可以創(chuàng)建描述文件了默赂。
3. 在開發(fā)者中心的 iTunes Connect 中配置 App 相關(guān)信息
在開發(fā)者中心里的 iTunes Connect 里的 APP 選項(xiàng)中新建 APP 項(xiàng)目并配置相應(yīng)的信息(需要各個版本的屏幕截圖沛鸵,運(yùn)行模擬器,調(diào)到最大(command+1)用 command+s 截圖缆八,還有就是一個1024*1024的圖標(biāo)曲掰,不能有圓角)
4. 使用 Xcode 打包上傳 App
將 2 步驟中申請好的證書和描述文件正確配置到 Xcode 中,設(shè)置好Xcode 的一些屬性:
- 在Xcode中選擇iOS Device(這里不能選擇模擬器)
- 如果應(yīng)用不支持橫屏奈辰,請?jiān)?General 選項(xiàng)中將 Landscape Left 和 Landscape Right 兩項(xiàng)的勾選去掉
- 查看版本號和構(gòu)建版本號
- 將斷點(diǎn)栏妖、全局?jǐn)帱c(diǎn)、僵尸模式等都去掉
- 設(shè)置為 Release 模式
之后便可選擇 Xcode->Product->Archive 打包項(xiàng)目奖恰,打包完成后選擇 Upload to App Store 上傳吊趾。如果不想使用 Xcode 上傳的話,也可以選擇 Export 導(dǎo)出 ipa 文件瑟啃, 需要注意的是在導(dǎo)出時论泛,必須選擇 Save for iOS App Store Deployment。然后通過Application Loader 工具上傳 ipa 文件蛹屿。
5. 提交審核
以上步驟完成后屁奏,返回 iTunes Connect 上查看自己的 App 信息,在構(gòu)建版本中選擇剛剛上傳的 App 版本错负,此時有可能顯示正在處理了袁,這時可能需要等幾分鐘再回來查看朗恳。選擇好版本后點(diǎn)擊提交以供審核,這時 App 會變成等待審核狀態(tài)载绿。
6. 后續(xù)
后續(xù)就是等待蘋果的審核人員審核應(yīng)用了粥诫,如果一切順利的話,這個過程需要一到兩個工作日便可完成審核崭庸,當(dāng)然前提是你的應(yīng)用符合蘋果的審核條款怀浆。如果審核不通過,請及時根據(jù)反饋信息修改應(yīng)用怕享,再次提交直到符合要求执赡。審核通過后,如果之前選擇已經(jīng)選擇好自動發(fā)布函筋,便可在 AppStore 上查看和下載應(yīng)用了沙合。
二 、iOS 上架審核過程常見的坑與解決方法
1. 問題:用戶生成內(nèi)容(UGC)缺少必要的審核
為了防止非法濫用用戶生成的內(nèi)容跌帐,從而給用戶提供虛假信息首懈、盜取用戶的知識產(chǎn)權(quán),社交應(yīng)用以及應(yīng)用當(dāng)中包含用戶生成的信息的應(yīng)用必須包括下述功能:
- 過濾不良內(nèi)容
- 提供舉報機(jī)制
- 后臺服務(wù)可以提供阻止騷擾用戶的行為
- 提供官方聯(lián)系方式谨敛,讓用戶可以快速聯(lián)系到開發(fā)商
解決方案:
維秀直播 App 提供了用戶實(shí)時彈幕功能究履,所以涉及到了 UGC,他們的處理方法是增加關(guān)鍵詞過濾脸狸,還有通過房管的方式人工審核最仑,處理違規(guī)用戶。
2. 問題:應(yīng)用中使用了 IDFA 被拒絕
IDFA 主要被用于廣告中區(qū)分設(shè)備的作用炊甲。AppStore 禁止沒有使用廣告而采集 IDFA 的 App 上架泥彤,所以如果 App 本身沒有廣告的話,使用第三方 SDK 要注意檢查是否含有 IDFA 廣告模塊卿啡。
解決方案:
- 如果應(yīng)用本身有集成廣告的話全景,只需要在提交審核的時候勾選正確的廣告標(biāo)識符選項(xiàng)即可。
- 如果應(yīng)用本身未集成廣告牵囤,卻包含 IDFA 的話爸黄。這種情況一般都是集成的第三方 SDK 中包含 IDFA 導(dǎo)致的。首先尋找是否有不包含 IDFA 的 SDK 版本揭鳞,如果沒有的話可以參考 ShareSDK 的解決方法炕贵,通過后臺配置在審核期間為應(yīng)用添加廣告,審核完成過后將廣告展示去掉野崇。
3. 問題:應(yīng)用不支持 IPv6網(wǎng)絡(luò)下使用
2016年6月1號起称开,蘋果的審核人員會在 IPv6 網(wǎng)絡(luò)上審核你的應(yīng)用,所以如果你的應(yīng)用程序無法使用 IPv6 協(xié)議,可能會被拒絕鳖轰。
解決方案:
卓易奪寶和樂動聽 App 上架過程中就因?yàn)?IPv6 的支持原因被拒清酥。他們的解決方案是:
- 協(xié)調(diào)后端人員添加對 IPv6 網(wǎng)絡(luò)的支持。
- App 端更新相關(guān)的第三方 SDK蕴侣,比如使用 ASI 或者 AFN 的版本太低,使用最新的 AFN 即可解決問題焰轻。
當(dāng)然這些做完之后最好在Mac 上面搭建 IPv6網(wǎng)絡(luò)供測試人員進(jìn)行完測試再重新發(fā)布。
4. 問題:第三方登錄昆雀、支付辱志、分享未安裝應(yīng)用,提示下載被拒
這個問題其實(shí)被拒的原因有兩種狞膘,第一種是未安裝應(yīng)用沒有任何提示揩懒,這種情況下相當(dāng)于應(yīng)用有無效的按鈕所以會被拒;第二種是提示下載對應(yīng)的第三方 App挽封,這也是蘋果所不允許的已球。
解決方案:
最新的第三方登錄等相關(guān)的 SDK 目前已知的(微信,QQ辅愿,微博)都已經(jīng)對這種情況做了處理智亮,在未安裝的情況下會調(diào)用 web 進(jìn)行登錄,所以如果測試過程中發(fā)現(xiàn)可以成功在 web 上登錄的話可以不做處理渠缕。以前在沒有這種處理機(jī)制的情況下需要開發(fā)者調(diào)用對應(yīng)接口,先判斷是否安裝了相應(yīng)的第三方 APP褒繁,如果未安裝亦鳞,需要隱藏按鈕,這樣便可輕松過審棒坏。
5. 問題:虛擬產(chǎn)品未使用應(yīng)用內(nèi)支付(IAP)被拒
根據(jù)蘋果官方最新的審核條款:如果你希望通過付費(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)用將被拒絕上架碗啄。
解決方案:
- 審核的時候,把相應(yīng)的虛擬產(chǎn)品隱藏起來稳摄,通過后再放出來稚字,此招有風(fēng)險,可能會受到警告信,甚至被封號胆描,如果用戶量小就無所謂了瘫想,先把App 搞上架!
- 審核的時候,走 IAP 的支付方式昌讲,審核完成后再通過服務(wù)器配置動態(tài)切換到支付寶国夜、微信等第三方支付。該法類似于方案1剧蚣,也存在風(fēng)險支竹。
- 學(xué)習(xí)58同城,讓用戶去網(wǎng)站購買產(chǎn)品鸠按,買了產(chǎn)品的賬號到移動端使用功能礼搁。
- 老老實(shí)實(shí)的使用 IAP 吧。
6. 問題:使用后臺定位被拒
關(guān)于位置服務(wù)蘋果的審核條款原文如下:
使用位置服務(wù)的應(yīng)用程序必須提供和位置服務(wù)直接相關(guān)的功能目尖。使用基于位置的API不允許用于提供緊急服務(wù)馒吴,或者實(shí)現(xiàn)自動控制車輛、飛行器以及其他設(shè)備(小型的設(shè)備例如小型無人機(jī)和玩具例外)瑟曲,遠(yuǎn)程控制汽車警報系統(tǒng)等饮戳。在收集、傳輸和使用用戶的位置數(shù)據(jù)之前洞拨,請確保你已經(jīng)取得了用戶的同意扯罐。
如果應(yīng)用程序使用了后臺定位服務(wù),務(wù)必在應(yīng)用當(dāng)中闡明其目的烦衣。并且使用后臺定位的話需要提供一個明確的提醒告訴用戶這么做會加快電量消耗歹河。
一般應(yīng)用在這一塊被拒的原因有以下幾種:
- 應(yīng)用根本不需要定位功能。
- 應(yīng)用需要定位功能花吟,但是只需要短暫的獲取少數(shù)的用戶的位置秸歧,比如美團(tuán),新聞類的應(yīng)用需要獲得當(dāng)前用戶的所在城市衅澈,卻使用了后臺定位模式键菱。
- 應(yīng)用確實(shí)需要使用后臺定位,比如打車類軟件今布,但是應(yīng)用中卻沒有任何界面展示這些定位數(shù)據(jù)经备。
解決方案:
- 如果你的應(yīng)用根本不需要定位功能,但是還是在 info.plist 里面添加了 location in the
UIBackgroundModes key 部默,那么在 plist 文件里面移除 UIBackgroundModes key 就可以弄喘,這中情況較少,新手小白會犯這種錯誤甩牺。 - 如果只是簡單獲取位置不需要使用后臺定位蘑志,只需要去掉info.plist 的文件中的 UIBackgroundModes 即可。
- 這種情況比較復(fù)雜,推薦的做法是通過表格或者軌跡展示出后臺定位的數(shù)據(jù)急但,再提交審核的時候告訴蘋果那個功能需要后臺定位澎媒,具體展示后臺定位的
數(shù)據(jù)在那個界面,最后需要 Continued use of GPS running in the background can dramatically decrease battery life加到 App 描述里
面,可以參考滴滴出行的描述波桩,否則也會被拒絕戒努。
7. 問題:info.plist 權(quán)限配置被拒
iOS 10 之后如果需要調(diào)用相機(jī),藍(lán)牙等設(shè)備時镐躲,需要在 info.plist 文件中進(jìn)行相應(yīng)的配置储玫,否則應(yīng)用會直接崩潰,在 iOS 10 之前則是無法訪問萤皂。另外撒穷,如果在 info.plist 中調(diào)用了配置了權(quán)限在應(yīng)用中卻沒有使用到也是會被拒的。
解決方案:
一定要注意自己的 App 在使用中用到了哪些權(quán)限裆熙,不要添加無用的權(quán)限端礼,也不要缺少必要的權(quán)限。
8. 問題:應(yīng)用提示更新被拒
應(yīng)用內(nèi)不能有任何提示更新應(yīng)用的字樣入录,且應(yīng)用的更新只能通過 AppStore蛤奥。因?yàn)樘O果對于應(yīng)用的更新有自己的一套策略,所以禁止應(yīng)用本身提供更新方式僚稿,只要應(yīng)用內(nèi)出現(xiàn)凡桥。
解決方案:
如果不是很必要的話,盡量將應(yīng)用內(nèi)涉及到應(yīng)用更新的部分去掉蚀同。如果真的需要使用應(yīng)用更新缅刽,推薦的方法是應(yīng)用啟動的時候獲取下應(yīng)用在 AppStore 上面的版本號,與自己的版本號進(jìn)行比較唤崭,當(dāng)自己的版本號小于 AppStore 上面的版本號時拷恨,提示更新脖律,否則的話不顯示更新相關(guān)的內(nèi)容谢肾。
9. 問題:奪寶(抽獎)類應(yīng)用被拒
根據(jù) AppStore 審核準(zhǔn)則 20.4 的規(guī)定,抽獎卷或抽獎參與權(quán)的購買小泉,不論是透過第三方支付渠道或者余額扣款實(shí)現(xiàn)芦疏,都不能夠在 app 內(nèi)執(zhí)行。
解決方案:
卓易奪寶 App 上架過程中遇到的問題微姊,最后的解決方法是在審核過程中酸茴,所有的支付行為都跳轉(zhuǎn)到 Safari 瀏覽器上面進(jìn)行,審核完成后再使用支付寶等 app 平臺支付兢交。
10. 問題:隱私條款問題被拒
在未獲得用戶事先允許薪捍,或未告知用戶信息將被如何,在哪里使用的情況下,應(yīng)用不可以傳輸用戶數(shù)據(jù)酪穿。
解決方案:
《網(wǎng)站服務(wù)協(xié)議》《隱私條款》這些都不要少凳干,注冊時候讓用戶可勾選。另外注明需要的用戶信息用來做什么被济。
11. 問題:未提供測試賬號被拒
如果應(yīng)用中有需要用到賬號或者其他資源的(例如:一個二維碼)才能使用的一些功能救赐,但未提供給蘋果,可能會被拒絕上架只磷。原因是蘋果審核人員無法測試這些功能经磅。
解決方案:
提供一個有效的測試帳號以及登錄信息,并提供測試功能必要的的硬件和資源(例如钮追,一個測試用的二維碼)
12. 問題:未通過 HTTPS 訪問被拒
App Transport Security(ATS) 是 Apple 為增強(qiáng) iOS App 網(wǎng)絡(luò)通信安全提出的安全功能预厌,適用于 iOS App 和 App Extension;在啟用 ATS 之后畏陕,它會強(qiáng)制應(yīng)用通過 HTTPS(而不是 HTTP )連接網(wǎng)絡(luò)服務(wù)配乓。 WWDC 2016上提出,2016年底或2017年初惠毁,具體時間未定犹芹。App Store 上架審核加強(qiáng)對 ATS 配置的 review,即強(qiáng)制應(yīng)用必須通過 HTTPS 連接網(wǎng)絡(luò)服務(wù)鞠绰,而不是隨手將 NSAllowsArbitraryLoads 置為 YES腰埂,否則審核不予通過。
解決方案:
ATS 的提出蜈膨,是為了在系統(tǒng)層面保障 iOS APP 網(wǎng)絡(luò)通信的安全屿笼;Apple 只所以加強(qiáng)對 ATS 配置的審核,是為了防止開發(fā)者們遇到ATS相關(guān)的場景時翁巍,只是簡單地將 ATS完全關(guān)閉(只要沒有強(qiáng)制性措施驴一,開發(fā)者會這么做);在此基礎(chǔ)上灶壶,App 審核同樣會遵循原則:App Review will require "reasonable justification" for most ATS exceptions肝断。
Apple 官方給出的可以通過審核的聲明 demo 如下:
- 必須使用第三方提供的服務(wù),但是其沒有支持 HTTPS驰凛;
- 必須通過域名連接到設(shè)備胸懈,但該設(shè)備不能支持安全連接;
- 必須展示不同來源的網(wǎng)頁內(nèi)容恰响,但是不能基于 NSAllowsArbitraryLoadsInWebContent 支持的類(UIWebView / WKWebView)實(shí)現(xiàn)趣钱;
- 載入加密的媒體資源并且其中不涉及個人信息。
由于 Apple 官方并沒有給出 ATS 審核的完整說明胚宦,ATS 審核時什么才是合適合理的聲明也沒有明確的客觀定義首有,以上 demo 描述僅能作為參照燕垃。
參考文章:
http://www.reibang.com/p/b1b77d804254
https://github.com/wg689/Solve-App-Store-Review-Problem