一 步脓、iOS APP 上架流程簡介
1. 申請開發(fā)者賬號
蘋果的開發(fā)者賬號主要分為個人(Individual)、公司(Company)、企業(yè)(Enterprise)、高校(University)四種類型。一般開發(fā)者申請的都是個人或者公司的,企業(yè)的開發(fā)者賬號開發(fā)應(yīng)用不能發(fā)布到App Store,只能企業(yè)內(nèi)部使用。這個申請過程一般可能需要一個星期左右嚎京。公司和企業(yè)的需要鄧白氏碼帕涌,如果鄧白氏碼未申請床绪,請先申請鄧白氏碼,這個過程需要一到兩個星期。
這里插一句,如果有App代上架需求的项鬼,可以找我
2. 創(chuàng)建證書龄毡、AppID、生成描述文件
通過 Mac的鑰匙串工具,生成證書請求文件,下載證書芜果,這里需要注意的是下載下來的證書只能在請求該證書的電腦上使用,如果想給其他開發(fā)者使用需要將已經(jīng)導(dǎo)入的證書導(dǎo)出為個人信息交換(.p12)格式供他人使用。AppID 的創(chuàng)建需要用到項目的Bundle ID,之后便可以創(chuàng)建描述文件了洼怔。
3. 在開發(fā)者中心的iTunes Connect 中配置 App 相關(guān)信息
在開發(fā)者中心里的iTunes Connect 里的 APP 選項中新建 APP 項目并配置相應(yīng)的信息(需要各個版本的屏幕截圖,運行模擬器,調(diào)到最大(command+1)域那,用 command+s截圖,還有就是一個1024*1024的圖標(biāo)被丧,不能有圓角)
4. 使用 Xcode 打包上傳 App
將 2 步驟中申請好的證書和描述文件正確配置到 Xcode 中甥桂,設(shè)置好Xcode的一些屬性:
1.在Xcode中選擇iOS Device(這里不能選擇模擬器);
2.如果應(yīng)用不支持橫屏,請在 General 選項中將 Landscape Left 和 Landscape Right 兩項的勾選去掉;
3.查看版本號和構(gòu)建版本號;
4.將斷點蝇摸、全局斷點、僵尸模式等都去掉;
5.設(shè)置為 Release 模式慧库。
之后便可選擇 Xcode->Product->Archive打包項目尉姨,打包完成后選擇 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 版本比被,此時有可能顯示正在處理色难,這時可能需要等幾分鐘再回來查看。選擇好版本后點擊提交以供審核等缀,這時 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)用必須包括下述功能:
1.過濾不良內(nèi)容
2.提供舉報機制
3.后臺服務(wù)可以提供阻止騷擾用戶的行為
4.提供官方聯(lián)系方式毫深,讓用戶可以快速聯(lián)系到開發(fā)商
解決方案:
維秀直播 App 提供了用戶實時彈幕功能,所以涉及到了 UGC毒姨,他們的處理方法是增加關(guān)鍵詞過濾哑蔫,還有通過房管的方式人工審核,處理違規(guī)用戶弧呐。
2. 問題:應(yīng)用中使用了 IDFA 被拒絕
IDFA 主要被用于廣告中區(qū)分設(shè)備的作用闸迷。AppStore 禁止沒有使用廣告而采集 IDFA 的 App 上架,所以如果 App 本身沒有廣告的話俘枫,使用第三方 SDK 要注意檢查是否含有 IDFA 廣告模塊腥沽。
解決方案:
如果應(yīng)用本身有集成廣告的話,只需要在提交審核的時候勾選正確的廣告標(biāo)識符選項即可鸠蚪。
如果應(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é)議窖维,可能會被拒絕。
解決方案:
我上架的卓易奪寶和小帶魚手機現(xiàn)金貸款軟件 App 上架過程中就因為 IPv6 的支持原因被拒妙痹。我的解決方案是:
協(xié)調(diào)后端人員添加對 IPv6 網(wǎng)絡(luò)的支持铸史。
App 端更新相關(guān)的第三方 SDK,比如使用ASI 或者 AFN 的版本太低,使用最新的AFN即可解決問題怯伊。當(dāng)然這些做完之后最好在Mac 上面搭建 IPv6網(wǎng)絡(luò)供測試人員進行完測試再重新發(fā)布琳轿。
4. 問題:第三方登錄、支付耿芹、分享未安裝應(yīng)用崭篡,提示下載被拒
這個問題其實被拒的原因有兩種,第一種是未安裝應(yīng)用沒有任何提示吧秕,這種情況下相當(dāng)于應(yīng)用有無效的按鈕所以會被拒;第二種是提示下載對應(yīng)的第三方 App琉闪,這也是蘋果所不允許的。
5.其中小帶魚手機現(xiàn)金貸款軟件這個我上架的時候當(dāng)時客戶急著轉(zhuǎn)移App不聽勸砸彬,導(dǎo)致被下架颠毙,所以大家記得在借用資質(zhì)賬號上架的時候不要急著轉(zhuǎn)移App為好,作者我親自測試無數(shù)次砂碉,在一定的時間后轉(zhuǎn)讓App較為保險蛀蜜!
解決方案:
最新的第三方登錄等相關(guān)的 SDK 目前已知的(微信,QQ增蹭,微博)都已經(jīng)對這種情況做了處理滴某,在未安裝的情況下會調(diào)用 web 進行登錄,所以如果測試過程中發(fā)現(xiàn)可以成功在 web 上登錄的話可以不做處理沪铭。以前在沒有這種處理機制的情況下需要開發(fā)者調(diào)用對應(yīng)接口壮池,先判斷是否安裝了相應(yīng)的第三方 APP,如果未安裝杀怠,需要隱藏按鈕椰憋,這樣便可輕松過審。
5. 問題:虛擬產(chǎn)品未使用應(yīng)用內(nèi)支付(IAP)被拒
根據(jù)蘋果官方最新的審核條款:如果你希望通過付費才可以解鎖你的應(yīng)用當(dāng)中的一些功能(例如赔退,訂閱內(nèi)容橙依,游戲貨幣,游戲關(guān)卡硕旗,獲取優(yōu)質(zhì)內(nèi)容窗骑,解鎖完整版本),你必須使用應(yīng)用內(nè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)品的賬號到移動端使用功能凤藏。
老老實實的使用 IAP 吧奸忽。
6. 問題:使用后臺定位被拒
關(guān)于位置服務(wù)蘋果的審核條款原文如下:
使用位置服務(wù)的應(yīng)用程序必須提供和位置服務(wù)直接相關(guān)的功能。使用基于位置的API不允許用于提供緊急服務(wù)揖庄,或者實現(xiàn)自動控制車輛栗菜、飛行器以及其他設(shè)備(小型的設(shè)備例如小型無人機和玩具例外),遠程控制汽車警報系統(tǒng)等蹄梢。在收集疙筹、傳輸和使用用戶的位置數(shù)據(jù)之前,請確保你已經(jīng)取得了用戶的同意禁炒。如果應(yīng)用程序使用了后臺定位服務(wù)而咆,務(wù)必在應(yīng)用當(dāng)中闡明其目的。并且使用后臺定位的話需要提供一個明確的提醒告訴用戶這么做會加快電量消耗幕袱。
一般應(yīng)用在這一塊被拒的原因有以下幾種:
1.應(yīng)用根本不需要定位功能暴备。
2.應(yīng)用需要定位功能,但是只需要短暫的獲取少數(shù)的用戶的位置们豌,比如美團涯捻,新聞類的應(yīng)用需要獲得當(dāng)前用戶的所在城市,卻使用了后臺定位模式望迎。
3.應(yīng)用確實需要使用后臺定位障癌,比如打車類軟件,但是應(yīng)用中卻沒有任何界面展示這些定位數(shù)據(jù)辩尊。
解決方案:
4.如果你的應(yīng)用根本不需要定位功能涛浙,但是還是在info.plist里面添加了location in theUIBackgroundModes key ,那么在plist文件里面移除UIBackgroundModes key就可以,這中情況較少蝗拿,新手小白會犯這種錯誤晾捏。
5.如果只是簡單獲取位置不需要使用后臺定位,只需要去掉info.plist 的文件中的 UIBackgroundModes 即可哀托。
6.這種情況比較復(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)用相機,藍牙等設(shè)備時补履,需要在 info.plist 文件中進行相應(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īng)用的更新有自己的一套策略,所以禁止應(yīng)用本身提供更新方式括儒,只要應(yīng)用內(nèi)出現(xiàn)绕沈。
解決方案:
如果不是很必要的話,盡量將應(yīng)用內(nèi)涉及到應(yīng)用更新的部分去掉帮寻。如果真的需要使用應(yīng)用更新乍狐,推薦的方法是應(yīng)用啟動的時候獲取下應(yīng)用在 AppStore上面的版本號,與自己的版本號進行比較规婆,當(dāng)自己的版本號小于 AppStore 上面的版本號時澜躺,提示更新,否則的話不顯示更新相關(guān)的內(nèi)容抒蚜。
9. 問題:奪寶(抽獎)類應(yīng)用被拒
根據(jù)AppStore 審核準則 20.4 的規(guī)定掘鄙,抽獎卷或抽獎參與權(quán)的購買,不論是透過第三方支付渠道或者余額扣款實現(xiàn)嗡髓,都不能夠在 app 內(nèi)執(zhí)行操漠。
解決方案:
卓易奪寶 App 上架過程中遇到的問題,最后的解決方法是在審核過程中,所有的支付行為都跳轉(zhuǎn)到 Safari瀏覽器上面進行浊伙,審核完成后再使用支付寶等 app 平臺支付撞秋。
10. 問題:隱私條款問題被拒
在未獲得用戶事先允許,或未告知用戶信息將被如何嚣鄙,在哪里使用的情況下吻贿,應(yīng)用不可以傳輸用戶數(shù)據(jù)。
解決方案:
《網(wǎng)站服務(wù)協(xié)議》《隱私條款》這些都不要少哑子,注冊時候讓用戶可勾選舅列。另外注明需要的用戶信息用來做什么。
11. 問題:未提供測試賬號被拒
如果應(yīng)用中有需要用到賬號或者其他資源的(例如:一個二維碼)才能使用的一些功能卧蜓,但未提供給蘋果帐要,可能會被拒絕上架。原因是蘋果審核人員無法測試這些功能弥奸。
解決方案:
提供一個有效的測試帳號以及登錄信息榨惠,并提供測試功能必要的的硬件和資源(例如,一個測試用的二維碼)
12. 問題:未通過 HTTPS 訪問被拒
App Transport Security(ATS) 是 Apple 為增強 iOS App 網(wǎng)絡(luò)通信安全提出的安全功能盛霎,適用于iOS App 和 App Extension;在啟用 ATS 之后赠橙,它會強制應(yīng)用通過HTTPS(而不是 HTTP )連接網(wǎng)絡(luò)服務(wù)。 WWDC 2016上提出摩渺,2016年底或2017年初简烤,具體時間未定。App Store上架審核加強對ATS 配置的review摇幻,即強制應(yīng)用必須通過HTTPS連接網(wǎng)絡(luò)服務(wù)横侦,而不是隨手將NSAllowsArbitraryLoads置為 YES,否則審核不予通過绰姻。
解決方案:
ATS 的提出枉侧,是為了在系統(tǒng)層面保障iOS APP 網(wǎng)絡(luò)通信的安全;Apple 只所以加強對ATS 配置的審核,是為了防止開發(fā)者們遇到ATS相關(guān)的場景時狂芋,只是簡單地將 ATS完全關(guān)閉(只要沒有強制性措施榨馁,開發(fā)者會這么做);在此基礎(chǔ)上,App審核同樣會遵循原則:App Review will require "reasonable justification" for most ATS exceptions帜矾。
Apple 官方給出的可以通過審核的聲明 demo 如下:
1.必須使用第三方提供的服務(wù)翼虫,但是其沒有支持 HTTPS;
2.必須通過域名連接到設(shè)備,但該設(shè)備不能支持安全連接;
3.必須展示不同來源的網(wǎng)頁內(nèi)容屡萤,但是不能基于 NSAllowsArbitraryLoadsInWebContent支持的類(UIWebView / WKWebView)實現(xiàn);
4.載入加密的媒體資源并且其中不涉及個人信息珍剑。
由于 Apple 官方并沒有給出 ATS 審核的完整說明,ATS 審核時什么才是合適合理的聲明也沒有明確的客觀定義死陆,以上 demo 描述僅能作為參照招拙。