前言:“2017年最新讓你加急在蘋果app store中上架的app教程”作者我作為一名業(yè)余的iOS開發(fā)者,把開發(fā)出來的App上傳到App Store是必須的。下面就來詳細介紹下具體流程。
因為最近蘋果app store商店出現(xiàn)大量的app泛濫上架,蘋果app應用上架的比較多,審核比較慢且不易通過,現(xiàn)在基本每一個app從提交到上架短則7到8天,長則半個月。小編最近我在實際上線應用時,總結(jié)了一個非常實用的小技巧,可以加快上架時間,最快可以三天,最近使用這種方法后,我們基本上從提交應用到上架基本上控制在1個星期以內(nèi)。
現(xiàn)在一般發(fā)布app流程:
1:app開發(fā)測試完成2.0。
2:在iTunesconnect上增加新版本更新2.0。
3:上傳應用
4:應用進入 Waiting for review 狀態(tài) (2-9天)
5:應用進入In review 狀態(tài) (2-5天)
6:Processing for App store(10分鐘)
7:Ready for sale (5分鐘)
8:For Sale
app store審核中,主要費時的是第4到第5步驟。在4步驟中,請注意的是我們說的排隊時間,這個時間和這段時間上傳的應用有數(shù)量有關(guān),如果數(shù)量多,排隊時間就比較長。如果數(shù)量少,排隊時間就少。沒有經(jīng)驗的通過+【Q.2.2.0.5.3.5.7.0.0.7】就能加急免審核上架app,排隊結(jié)束后,直接進入In Review狀態(tài),這個和應用本身設(shè)計有關(guān),設(shè)計復雜的應用,審核時間稍微長些,并且還有其他一些因素影響,如果被打回,會重新進入4步的隊列中,不過根據(jù)我的觀察,應該有個專門被打回應用的隊列,這個隊列的優(yōu)先級高于新上傳的應用,所以,即使應用被打回,也會有較高優(yōu)先級進入In Review,但是這個不是我們想看到的。
在整個上述過程中,花費的總時間我們沒有辦法控制,但是我們可以通過一些技巧,盡量做到,我們真實提交app時,我們的應用,處在4中隊列的前面。所以,我們的做法是
1:開發(fā)應用的同時,在在iTunesconnect上增加新版本更新2.0,并在當前版本上簡單升級版本號,上傳應用(這樣做的目的:及時審核通過,用戶也可以正常使用應用)
2:應用進入Waiting for review狀態(tài),同時開發(fā)測試新版本應用(這個時間控制在5天左右)
3:新版本應用開發(fā)完畢。
4:從iTunesconnect上撤銷用于排隊版本應用,上傳新版本app(一般3天左右)
5:應用進入In review 狀態(tài) (2-5天)
6:Processing for App store(10分鐘)
7:Ready for sale (5分鐘)
8:For Sale
這個改變非常簡單,整個流程,由應用開發(fā)和蘋果審核的串行過程修改為并行進行,從而加快app上線速度
蘋果的審核策略和流程一直在變化,我們要做的是在變化過程中尋找技巧,解決 app 應用上線最后一公里的問題。
順便給大家說一下“應用提交 App Store 上架被拒的原因都有哪些?”
以下為詳細原因列表以及所占比例:
1、信息提交不全(14%)
2、應用存在漏洞(8%)
3、不遵守《開發(fā)者項目授權(quán)協(xié)議》(6%)
4、用戶界面太復雜或不夠好(6%)
5、名稱、描述、截屏與應用內(nèi)容或功能不相關(guān)(5%)
6、包含錯誤、欺詐或誤導性內(nèi)容,或者使用與其他應用相似的的名稱或圖標(5%)
7、iTunes Connect中的應用名與設(shè)備上顯示的應用名不相似,引發(fā)困擾(4%)
8、包含占位文本(4%)
9、評級不合適(3%)
10、beta、demo、trail或test版軟件也會被拒
而且“【Q.2.2.0.5.3.5.7.0.0.7】.”卻能夠上架被拒絕多次的app
之前應用維護一下,被拒了,說是什么得支持IPV6,好吧。。。果然是蘋果打個哈欠,iOS行業(yè)內(nèi)就得起一次風暴呀。自從5月初Apple明文規(guī)定所有開發(fā)者在6月1號以后提交新版本需要支持IPV6-Only的網(wǎng)絡(luò),大家便開始熱火朝天的研究如何支持IPV6,以及應用中哪些模塊目前不支持IPV6。
一、IPV6-Only支持是啥?
首先IPV6,是對IPV4地址空間的擴充。目前當我們用iOS設(shè)備連接上Wifi、4G、3G等網(wǎng)絡(luò)時,設(shè)備被分配的地址均是IPV4地址,但是隨著運營商和企業(yè)逐漸部署IPV6 DNS64/NAT64網(wǎng)絡(luò)之后,設(shè)備被分配的地址會變成IPV6的地址,而這些網(wǎng)絡(luò)就是所謂的IPV6-Only網(wǎng)絡(luò),并且仍然可以通過此網(wǎng)絡(luò)去獲取IPV4地址提供的內(nèi)容。客戶端向服務(wù)器端請求域名解析,首先通過DNS64 Server查詢IPv6的地址,如果查詢不到,再向DNS Server查詢IPv4地址,通過DNS64 Server合成一個IPV6的地址,最終將一個IPV6的地址返回給客戶端。如圖所示:
2017年最新讓你加急在蘋果app store中上架的app教程
NAT64-DNS64-ResolutionOfIPv4_2x.png
在Mac OS 10.11+的雙網(wǎng)卡的Mac機器(以太網(wǎng)口+無線網(wǎng)卡),我們可以通過模擬構(gòu)建這么一個local IPv6 DNS64/NAT64 的網(wǎng)絡(luò)環(huán)境去測試應用是否支持IPV6-Only網(wǎng)絡(luò),大概原理如下:
2017年最新讓你加急在蘋果app store中上架的app教程
local_ipv6_dns64_nat64_network_2x.png
參考資料:
https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1
二、Apple如何審核支持IPV6-Only?
首先第一點:這里說的支持IPV6-Only網(wǎng)絡(luò),其實就是說讓應用在 IPv6 DNS64/NAT64 網(wǎng)絡(luò)環(huán)境下仍然能夠正常運行。但是考慮到我們目前的實際網(wǎng)絡(luò)環(huán)境仍然是IPV4網(wǎng)絡(luò),所以應用需要能夠同時保證IPV4和IPV6環(huán)境下的可用性。從這點來說,蘋果不會去掃描IPV4的專有API來拒絕審核通過,因為IPV4的API和IPV6的API調(diào)用都會同時存在于代碼中(不過為了減小審核被拒風險,建議將IPV4專有API通過IPV6的兼容API來替換)。
其次第二點:Apple官方聲明iOS9開始向IPV6支持過渡,在iOS9.2+支持通過getaddrInfo方法將IPV4地址合成IPV6地址(The ability to synthesize IPv6 addresses was added to getaddrinfo in iOS 9.2 and OS X 10.11.2)。其提供的Reachability庫在iOS8系統(tǒng)下,當從IPV4切換到IPV6網(wǎng)絡(luò),或者從IPV6網(wǎng)絡(luò)切換到IPV4,是無法監(jiān)控到網(wǎng)絡(luò)狀態(tài)的變化。也有一些開發(fā)者針對這些Bug詢問Apple的審核部門,給予的答復是只需要在蘋果最新的系統(tǒng)上保證IPV6的兼容性即可。
最后第三點:只要應用的主流程支持IPV6,通過蘋果審核即可。對于不支持IPV6的模塊,考慮到我們現(xiàn)實IPV6網(wǎng)絡(luò)的部署還需要一段時間,短時間內(nèi)不會影響我們用戶的使用。但隨著4G網(wǎng)絡(luò)IPV6的部署,這部分模塊還是需要逐漸安排人力進行支持。
追加第四點:如果應用一直直接使用IPV4地址通過NSURLConenction或者NSURLSession進行網(wǎng)絡(luò)請求(一般需要服務(wù)器允許,且客戶端需要在header中偽裝host);經(jīng)測試,IPV6網(wǎng)絡(luò)環(huán)境下,直接使用IPV4地址在iOS9及以上的系統(tǒng)仍然能夠正常訪問;在iOS8.4及以下不能正常訪問;這一點蘋果的解釋和建議是這樣的:
Note: In iOS 9 and OS X 10.11 and later, NSURLSession and CFNetwork automatically synthesize IPv6 addresses from IPv4 literals locally on devices operating on DNS64/NAT64 networks. However, you should still work to rid your code of IP address literals.
三、應用如何支持IPV6-Only?
對于如何支持IPV6-Only,官方給出了如下幾點標準:(這里就不對其進行解釋了,大家看上面的參考鏈接即可)
1. Use High-Level Networking Frameworks;2. Don’t Use IP Address Literals;3. Check Source Code for IPv6 DNS64/NAT64 Incompatibilities;4. Use System APIs to Synthesize IPv6 Addresses;
3.1 NSURLConnection是否支持IPV6?
官方的這句話讓我們疑惑頓生:
using high-level networking APIs such as NSURLSession and the CFNetwork frameworks and you connect by name, you should not need to change anything for your app to work with IPv6 addresses
只說了NSURLSession和CFNetwork的API不需要改變,但是并沒有提及到NSURLConnection。 從上文的參考資料中,我們看到NSURLSession、NSURLConnection同屬于Coc
OA的url loading system,可以猜測出NSURLConnection在ios9上是支持IPV6的。
應用里面的API網(wǎng)絡(luò)請求,大家一般都會選擇AFNetworking進行請求發(fā)送,由于歷史原因,應用的代碼基本上都深度引用了AFHTTPRequestOperation類,所以目前API網(wǎng)絡(luò)請求均需要通過NSURLConnection發(fā)送出去,所以必須確認NSURLConnection是否支持IPV6. 經(jīng)過測試,NSURLConnection在最新的iOS9系統(tǒng)上是支持IPV6的。
3.2 Cocoa的URL Loading System從iOS哪個版本開始支持IPV6?
目前我們的應用最低版本還需要支持iOS7,雖然蘋果只要求最新版本支持IPV6-Only,但是出于對用戶負責的態(tài)度,我們?nèi)匀恍枰闱宄诘桶姹旧蟄RL Loading System的API是否支持IPV6.
(to fix me, make some experiments)待續(xù)~~~
3.3 Reachability是否需要修改支持IPV6?
我們可以查到應用中大量使用了Reachability進行網(wǎng)絡(luò)狀態(tài)判斷,但是在里面卻使用了IPV4的專用API。
在Pods:Reachability中AF_INET Files:Reachability.mstruct sockaddr_in Files:Reachability.h , Reachability.m
那Reachability應該如何支持IPV6呢?
(1)目前Github的開源庫Reachability的最新版本是3.2,蘋果也出了一個Support IPV6 的Reachability的官方樣例,我們比較了一下源碼,跟Github上的Reachability沒有什么差異。
(2)我們通常都是通過一個0.0.0.0 (ZeroAddress)去開啟網(wǎng)絡(luò)狀態(tài)監(jiān)控,經(jīng)過我們測試,在iOS9以上的系統(tǒng)上IPV4和IPV6網(wǎng)絡(luò)環(huán)境均能夠正常使用;但是在iOS8上IPV4和IPV6相互切換的時候無法監(jiān)控到網(wǎng)絡(luò)狀態(tài)的變化,可能是因為蘋果在iOS8上還并沒有對IPV6進行相關(guān)支持相關(guān)。(但是這仍然滿足蘋果要求在最新系統(tǒng)版本上支持IPV6的網(wǎng)絡(luò))。
(3)當大家都在要求Reachability添加對于IPV6的支持,其實蘋果在iOS9以上對Zero Address進行了特別處理,官方發(fā)言是這樣的:
綜上所述,Reachability不需要做任何修改,在iOS9上就可以支持IPV6和IPV4,但是在iOS9以下會存在bug,但是蘋果審核并不關(guān)心。
四、底層的socket API如何同時支持IPV4和IPV6?
由于在應用中使用了網(wǎng)絡(luò)診斷的組件,大量使用了底層的 socket API,所以對于IPV6支持,這塊是個重頭戲。如果你的應用中使用了長連接,其必然會使用底層socket API,這一塊也是需要支持IPV6的。 對于Socket如何同時支持IPV4和IPV6,可以參考谷歌的開源庫CocoaAsyncSocket.
下面我針對我們的開源 網(wǎng)絡(luò)診斷組件, 說一下是如何同時支持IPV4和IPV6的。
開源地址:https://github.com/Lede-Inc/LDNetDiagnoService_IOS.git
這個網(wǎng)絡(luò)診斷組件的主要功能如下:
本地網(wǎng)絡(luò)環(huán)境的監(jiān)測(本機IP+本地網(wǎng)關(guān)+本地DNS+域名解析);
通過TCP Connect監(jiān)測到域名的連通性;
通過Ping 監(jiān)測到目標主機的連通耗時;
通過traceRoute監(jiān)測設(shè)備到目標主機中間每一個路由器節(jié)點的ICMP耗時;
4.1 IP地址從二進制到符號的轉(zhuǎn)化
之前我們都是通過inet_ntoa()進行二進制到符號,這個API只能轉(zhuǎn)化IPV4地址。而inet_ntop()能夠兼容轉(zhuǎn)化IPV4和IPV6地址。 寫了一個公用的in6_addr的轉(zhuǎn)化方法如下:
4.2 本機IP獲取支持IPV6
相當于我們在終端中輸入ifconfig命令獲取字符串,然后對ifconfig結(jié)果字符串進行解析,獲取其中en0(Wifi)、pdp_ip0(移動網(wǎng)絡(luò))的ip地址。
注意:
(1)在模擬器和真機上都會出現(xiàn)以FE80開頭的IPV6單播地址影響我們判斷,所以在這里進行特殊的處理(當?shù)谝淮斡龅讲皇菃尾サ刂返腎P地址即為本機IP地址)。
(2)在IPV6環(huán)境下,真機測試的時候,第一個出現(xiàn)的是一個IPV4地址,所以在IPV4條件下第一次遇到單播地址不退出。
4.3 設(shè)備網(wǎng)關(guān)地址獲取獲取支持IPV6
其實是在IPV4獲取網(wǎng)關(guān)地址的源碼的基礎(chǔ)上進行了修改,初開把AF_INET->AF_INET6, sockaddr -> sockaddr_in6之外,還需要注意如下修改,就是拷貝的地址字節(jié)數(shù)。去掉了ROUNDUP的處理。 (解析出來的地址老是少了4個字節(jié),結(jié)果是偏移量搞錯了,糾結(jié)了半天),具體參考源碼庫。
4.4 設(shè)備DNS地址獲取支持IPV6
IPV4時只需要通過res_ninit進行初始化就可以獲取,但是在IPV6環(huán)境下需要通過res_getservers()接口才能獲取。
4.4 域名DNS地址獲取支持IPV6
在IPV4網(wǎng)絡(luò)下我們通過gethostname獲取,而在IPV6環(huán)境下,通過新的gethostbyname2函數(shù)獲取。
//ipv4phot = gethostbyname(hostN);//ipv6phot = gethostbyname2(hostN, AF_INET6);
4.5 ping方案支持IPV6
Apple的官方提供了最新的支持IPV6的ping方案,參考地址如下:
https://developer.apple.com/library/mac/samplecode/SimplePing/Introduction/Intro.html
只是需要注意的是:
(1)返回的packet去掉了IPHeader部分,IPV6的header部分也不返回TTL(Time to Live)字段;
(2)IPV6的ICMP報文不進行checkSum的處理;
4.6 traceRoute方案支持IPV6
其實是通過創(chuàng)建socket套接字模擬ICMP報文的發(fā)送,以計算耗時;
兩個關(guān)鍵的地方需要注意:
(1)IPV6中去掉IP_TTL字段,改用跳數(shù)IPV6_UNICAST_HOPS來表示;
(2)sendto方法可以兼容支持IPV4和IPV6,但是需要最后一個參數(shù),制定目標IP地址的大。灰驗榍耙粋參數(shù)只是指明了IP地址的開始地址。千萬不要用統(tǒng)一的sizeof(struct sockaddr), 因為sockaddr_in 和 sockaddr都是16個字節(jié),兩者可以通用,但是sockaddr_in6的數(shù)據(jù)結(jié)構(gòu)是28個字節(jié),如果不顯式指定,sendto方法就會一直返回-1,erroNo報22 Invalid argument的錯誤。
關(guān)鍵代碼如下:(完整代碼參考開源組件)
如果說你已經(jīng)按照上邊步驟操作完成并且在本地用IPV6網(wǎng)絡(luò)測試成功,但是app還是沒有通過審核的話,那你就只能和蘋果交涉了,可以寫郵件說我此app已經(jīng)支持iPV6網(wǎng)絡(luò),讓他們重新測試,也可以直接回復他們。
2017年最新讓你加急在蘋果app store中上架的app教程
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.oesoe.com/
本文標題:在蘋果app store中上架的教程
本文網(wǎng)址:http://www.oesoe.com/html/support/11121521059.html