主頁 > 公司新聞 > 技術前沿 >

那些年提交App Store審核踩過的坑

時間:2017-04-11 作者:創杰科技 來源:互聯網 瀏覽次數:
       1、未遵守蘋果iOSAPP數據儲存指導方針。
 
       如果你的App有離線數據下載功能,尤其需要關注這一點。因為離線數據一般占用存儲空間比較大,可以被重新下載和重建,但是用戶往往希望系統存儲空間緊時也依然能夠妥妥的存在著,不會被IOS系統自動清理掉。所以不能放在/Library/Caches目錄下(該目錄在系統空間緊張時可能會被iOS系統清除)。那就只能放在主目錄/Documents或主目錄/Library/自定義文件夾下,這樣才不會被iOS系統自動清理掉。但是這些數據可能會很大,如果放在主目錄/Documents或主目錄/Library/自定義的文件夾下,會被iCoud自動同步,那么用戶需要為了同步消耗不少流量,蘋果可能會因此拒絕你的應用上架。所以需要在程序中給自定義的目錄設置“donotbackup”屬性。
 
       關于數據存儲需要注意的點,總結在下面:
 
       關鍵數據
 
       內容:用戶創建的數據文件,無法在刪除后自動重新創建
 
       路徑:主目錄/Documents
 
       管理:iOS系統即時遇到存儲空間不足的情況下,也不會清除,同時會備份到iTunes或iCloud中
 
       緩存數據
 
       內容:可用于離線環境,可被重復下載重復生成,即使在離線時缺失,應用本身也可以正常運行
 
       路徑:主目錄/Library/Caches
 
       管理:在存儲空間不足的情況下,會清空,并且不會被自動備份到iTunes和iCloud中
 
       臨時數據
 
       內容:應用運行時,為完成某個內部操作臨時生成的文件
 
       路徑:主目錄/tmp
 
       管理:隨時可能被iOS系統清除,且不會自動備份到iTunes和iCloud,盡量在文件不再使用時,應用自己清空,避免對用戶設備空間的浪費
 
       離線數據
 
       內容:與緩存數據類似,可以被重新下載和重建,但是用戶往往希望這些數據即使在存儲緊張時也不會被系統自動刪除
 
       目錄:主目錄/Documents或主目錄/Library/自定義的文件夾
 
       管理:與關鍵數據類似,即使在存儲空間不足的情況下也不會被清除,應用自己應該清除已經不再使用的文件,以免浪費用戶設備空間。需要設置”不備份到iCoud",否則會審核不過。
 
       2、未提供測試賬號
 
       如果你的App有部分功能需要登錄才能使用,那么你需要再提交審核時,勾選演示賬戶,并提供對應信息,如下圖:
 
 
       測試賬號填寫
 
       現在很多app為了更方便快捷,防止用戶忘記密碼,都采用手機號+驗證碼的方式,這樣的話就沒有辦法給蘋果提供演示賬戶了,除非賬戶系統后臺做修改提供支持。這種情況,就不需要勾選演示賬戶了,但是要在備注信息里跟蘋果好好解釋一下,說我們也是為了提升用戶體驗的,所以對賬戶系統做了改進,用戶有手機就能登錄,不需要注冊啥的,如下圖。如果你啥也不說的話,那就乖乖等著被拒吧。
 
 
       測試賬號說明
 
       3、跟相關硬件配合使用的app,未提供演示視頻
 
       這里指的硬件是不需要MFi認證的,通過BLE(低功耗藍牙)或者WiFi連接的硬件。直接在備注里提供相關功能的演示視頻即可,如下圖。
 
 
       硬件連接演示視頻
 
       演示視頻需要把完整的連接過程操作以及連接硬件之后跟硬件相關的功能演示都包含在內。從截圖可以看到我的“褲寶”演示視頻我是直接放在優酷上了。所以并不像傳聞中那樣,需要翻墻放到YouTube上,直接放優酷土豆或者百度網盤都行。也不需要用英文,用中文即可。
 
       4、跟相關硬件配合使用的app,未提供PPID.(ProductPlanID)
 
       如果你的App是需要跟通過MFi認證的硬件進行交互,即使用了EA框架(ExternalAccessory.framework),配置了協議字符串(Supportedexternalaccessoryprotocols),那么你需要在備注信息里提供PPID。
 
 
       ppid說明
 
       很多時候,我們的App可以同時適配很多型號的硬件,每個型號的硬件對應的PPID不一樣。如果AppStore提交審核通過之后,又新增了一款型號硬件支持怎么辦呢?是否需要單獨發一個版本,把對應的PPID增加上去了?答案是不需要,因為App支持的PPID列表信息是放在備注信息里面的,往列表中新增PPID并不需要修改到二進制文件信息,蘋果在這里也比較人性化,可以在不提交新版本的情況下增加PPID信息。
 
       5、使用了后臺定位服務,但是沒有具體說明原因
 
       之前使用后臺定位功能的app都是只需要在在Info.plist中配置Requiredbackgroundmodes-Appregistersforlocationupdates即可.但是從2016年的某個時候開始蘋果突然要求如果App要使用定位功能,除了程序里做配置,還需要在界面上顯式告訴用戶你的后臺定位是用來干啥的,否則你就會收到類似下面的郵件。
 
       1.1-Appsusingbackgroundlocationservicesmustprovideareasonthatclarifiesthepurposeoftheuse,usingmechanismsdescribedintheHumanInterfaceGuidelines.
 
要修改也可以簡單,根據你的app需要在info.plist中配置,NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription字段說明。如下圖
 
 
       定位目的說明
 
       6、上傳的屏幕快照跟App具體使用截屏相差太遠
 
       AppStore提供的屏幕快照功能是為了用戶在未下載時可以直觀的了解這個App的功能、界面大概是什么樣的。所以蘋果也允許開發者對屏幕截屏做一些加工美化,并不一定要是原始截屏。但是這里有個限度,就是不能相差太遠,具體尺度蘋果沒有給出量化標準。公司項目中有個大版本上線了一個比較大的新功能,為了突出宣傳這個功能,設計師就重新設計了一套非常Q版的功能演示截圖。結果上傳后被蘋果告知,屏幕快照不符合App本身的功能。
 
       以上這些是本人在AppStore審核時親自踩過的一些坑,當然還有很多坑,我和我的團隊注意到了所以努力避免了,但是個人認為也是非常需要注意的,我簡單列在下面供大家參考。
 
       使用未公開的API被發現
 
       使用和系統接近的圖標
 
       界面太丑或者交互太過復雜
 
       不穩定,容易崩潰
 
       跟應用市場上其他App太過雷同
 
       App內有檢測更新
 
       出現第三方操作系統的名字或圖標
 
       測試不充分,某些App聲明支持的操作系統版本有兼容性問題
 
 
       我們說了這么多踩過的坑,或者差點踩過的坑,無非就是想在以后App開發中盡可能的避免。這里介紹本人的一些經驗總結,供大家參考。
 
       1、預防在先
 
       對產品經理規劃的功能,首先需要判斷是否在技術上可以實現,或者說在不使用非公開API的前提下實現。因為很多時候,即使你通過函數名動態拼接等技術手段在提交審核時躲過API掃描,但是也難免被蘋果從功能上發現或者被競爭對手舉報。然后對交互設計和UI效果圖需要有自己的判斷,界面不能太丑,交互不能太復雜,不能使用跟系統太過雷同的Icon。
 
       2、發版前過checklist
 
       每個項目都需要沉淀發版前的checklist,把之前踩過的坑進行備忘,也可以通過網絡資訊等手段了解最近時間被拒的一些主要原因,把可能跟自己APP相關的部分進行備注,然后在發版前逐條檢查一遍。
 
       3、預提交AppStore審核
 
       如果也預防了,發版前也過了checklist,但是有時候還是難免百密一疏有所遺漏,特別是新功能較多的版本。這里我要重點推薦的就是預提交AppStore審核。項目的版本都是有發版周期的,一般在發版前一周左右App版本基本穩定,只是還需要修改一些bug并回歸測試。這個時候完全可以先提交一個版本到AppStore去審核,反正版本號是用不完的,只要不占用產品經理定的版本號就行。預提交審核有什么好處呢?
 
       可以幫助暴露潛在的問題。
 
       這個版本可能開發了一些新功能,然后有些地方可能沒有考慮到審核相關的風險。如果等待項目都要結束正式發版時才暴露出來,就追悔莫及了。
 
       在迫不得已的情況下,可以試探一下蘋果的界限。
 
       蘋果審核條款其實很多時候是沒有一個量化標準的,比如屏幕快照不能跟App具體使用時的截屏相差太遠,拿到UI設計師給到屏幕快照時,我們有時候也沒有辦法確定到底是否真的符合蘋果的規范,但是沒有關系,我們先提交一個版本試一試就知道了;還有再比如前段時間,蘋果要求6月1號以后提交的App都要支持IPV6-Only的網絡。但是由于歷史原因,項目中有個功能用的是第三方的SDK,他們沒有辦法在我們發版前提供新的支持IPV6的版本。然后我看網上也有人分享說蘋果對這個要求并不是非常嚴格,只需要在iOS9下主要功能能支持IPV6就行了。當然作為項目負責人,肯定也不能說直接把這個功能砍掉不要了,亦或輕信網友所言忽視風險。怎么辦呢?趕緊先預提交一個版本試一下再做決定。結果是確實可以通過審核,所以最終版本沒有砍掉這個功能,保證了產品的完整性上線了。
 
       4、關于AppStore加急審核
 
       如果經過前面的努力,你還是被拒了,或者App的發布要趕上某個時間運營節點,但是由于各種原因導致預留給App審核的時間太少了。這個時候你需要使用到蘋果的加急審核通道。
 
       你在百度里搜索iOS加急審核,你會發現有很多宣稱可以幫你快速審核的人,24小時通過審核,審核通過后付款,不通過不要錢。如果你不知道蘋果有官方的加急審核功能,你就很容易被這些空手套白狼的人所騙,而且收費都是5000RMB起步。那我真的很想對你說,找我吧,給你友情價打5折。
 
       蘋果的加急審核如何使用呢?在iTunesconnect頁面,點擊右上角的“?”圖標,在彈出菜單中選擇“聯系我們”,
 
 
       聯系我們
 
       然后在ContactUs頁面,選擇“AppReview”—>“AppStoreReview”—>”RequestExpeditedReview”,
 
 
       加急審核選項
 
       最后在表格里填寫相關信息,其中最重要的寫你需要加急審核的原因。一般是寫要趕某個重大節日運營節點,或者緊急修復某個嚴重的閃退問題,然后注明閃退現象復現的詳細步驟,就可以了。
 
       關于具體加急審核有沒有次數限制,次數是跟App相關還是跟開發賬號相關,蘋果并沒有官方的說明。但是可以肯定的是,網上傳聞一年只有兩次加急審核的機會是不正確的。不過為了讓好鋼用在刀刃上,還是慎用這個功能,以防到時真的有需要加急審核時卻得不到響應。
 
       從今年上半年開始,app審核時間大大縮短了,一般都不需要用到這個功能了。百度CarLife最近幾個版本都是3天就通過審核了,尤其是最新的支持EAP連接的版本V2.1.0,一個晚上就審核通過了。
 
       毛主席告訴我們“與天奮斗,其樂無窮!與地奮斗,其樂無窮!與人奮斗,其樂無窮!”,但是作為iOS開發者,跟蘋果奮斗,還是小心謹慎為好。最后提一句,如果你知道你的app存在某個審核風險,但是通過了蘋果審核,那么不要存在僥幸心理,請盡快修改。因為畢竟蘋果是人工審核,這個版本過了可能是審核人員心情好,并不代表下個版本審核時心情也這么好。
 
       其實想想最近的廣電總局手游審查新政,對AppStore的審核規則也就沒有啥可以抱怨的了。
一本一本久久a久久精品宗合于田真里