• <menu id="w2i4a"></menu>
  • logo 移動(dòng)開(kāi)發(fā)學(xué)習(xí)指南

    文檔首頁(yè)>>移動(dòng)開(kāi)發(fā)學(xué)習(xí)指南>>如何將你的應(yīng)用程序安全更新到iOS 10

    如何將你的應(yīng)用程序安全更新到iOS 10


    如何將你的應(yīng)用程序安全更新到iOS 10

    在我上一篇文章中,我強(qiáng)調(diào)了一些在iOS 10推出的開(kāi)發(fā)者可以利用的新功能。將版本沖刺到最新和最好的是很有趣,然而你也需要確保你的應(yīng)用程序是全線更新的。這意味著需要檢查任何過(guò)時(shí)的方法或類(lèi),并驗(yàn)證仍在運(yùn)行iOS現(xiàn)有版本的用戶被繼續(xù)維護(hù)。

    在你翻看所有的更新記錄之前(如果今晚你無(wú)法入睡,這是我強(qiáng)烈建議的),有幾件事情你可以做,以確保你的應(yīng)用程序準(zhǔn)備好過(guò)渡到iOS 10。

    小故事:很多年前,在一個(gè)遙遠(yuǎn)的星系,我以在幾十萬(wàn)的月活躍用戶附近的東西創(chuàng)建一個(gè)iOS應(yīng)用程序。我建立、測(cè)試和部署最新iOS 5支持的更新。我和一些同事慶祝其發(fā)布,但幾小時(shí)內(nèi),我從Apteligent得到事故通知。原來(lái),我用了一個(gè)只適用于iOS 5的方法,沒(méi)有妥善處理,于是,由于我的用戶群中30%的人使用iOS 4或更早版本,應(yīng)用程序崩潰了。哎!不用說(shuō),我的測(cè)試變得更加嚴(yán)格,(注意:無(wú)恥的插在前面)我很高興我安裝的Apteligent快速提醒了我,但這是一個(gè)慘痛的教訓(xùn)。不要讓這種事發(fā)生在你的身上!

    API的可用性檢查

    當(dāng)在iOS 10中構(gòu)建新的API時(shí),你能夠確保你的應(yīng)用程序仍然可以在舊版本上運(yùn)行的最好的辦法就是做運(yùn)行時(shí)API檢查。這將確保你將要在當(dāng)前運(yùn)行的設(shè)備上調(diào)用的類(lèi)或方法。如果你想在iOS 9中調(diào)用iOS 10的方法,你會(huì)遇到麻煩(見(jiàn)以上我的傷心故事)。

    對(duì)于類(lèi),這是一個(gè)簡(jiǎn)單的檢查,看起來(lái)就像這樣:

    if(NSClassFromString(@"MSMessage")) {
        // This class is available, go ahead and do something with it
    } else {
        // This class is not available, handle it appropriately
    }

    或者,如果你更喜歡Swift:

    if #available(iOS 10.0, *) {
      let message = MSMessage()
    } else {
        // This class is not available, handle it appropriately
    }

    如果類(lèi)(MSMessage)是弱聯(lián)系,block 外部的MSMessage引用在前iOS 10設(shè)備上不會(huì)導(dǎo)致你的應(yīng)用程序立即崩潰。這使得錯(cuò)誤更難找到,并會(huì)讓測(cè)試忽略更多的問(wèn)題。即使你避免了崩潰,你的用戶體驗(yàn)也會(huì)迅速降低,因?yàn)槟愕拇a不能識(shí)別MSMessage功能的缺失。這使得實(shí)施新的功能時(shí),處理前、后iOS 10的情況變得非常重要。

    對(duì)于現(xiàn)有的類(lèi)的新方法,有另一個(gè)簡(jiǎn)單的檢查:

    // Check if new API is available
    if ([existingClassObject respondsToSelector:@selector(newMethod:)]){
        // Yes, we can safely call this method
        [existingClassObject newMethod:@”something”];
    } else {
        // The new method is not available, handle accordingly
    }

    在Swift中,你可以使用上述相同的#available方法,如果你知道你的方法需要的SDK,這會(huì)特別有用。否則,你可以使用以下所顯示的等效方法調(diào)用:

    // Check if new API is available
    if existingClassObject.respondsToSelector(Selector(“newMethod”)){
        // Yes, we can safely call this method
        existingClassObject.newMethod()
    } else {
        // The new method is not available, handle accordingly
    }

    我們首先檢查看看如果我們調(diào)用它,該方法是否會(huì)響應(yīng),如果響應(yīng),我們就繼續(xù)并且安全地調(diào)用它。這個(gè)簡(jiǎn)單的條件也在iOS 9中處理的事件,其中該方法將不響應(yīng),在iOS 10中,該方法可以被調(diào)用。

    如果你試圖在iOS一個(gè)不受支持的版本中調(diào)用newMethod ,你的應(yīng)用程序會(huì)由于NSInvalidArgumentException而崩潰。這是一個(gè)關(guān)于iOS最常見(jiàn)的事故,它可以用這種簡(jiǎn)單的檢查來(lái)避免。

    關(guān)于宏的一個(gè)注記

    宏是由編譯器執(zhí)行的代碼位。通過(guò)iOS系統(tǒng),你可以使用這樣的東西:

    #if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0 
        // iOS 10+ code 
    #endif

    許多開(kāi)發(fā)者看到了這一點(diǎn),把它添加到他們的代碼卻沒(méi)有完全理解發(fā)生了什么,但這不應(yīng)該被用來(lái)確保用戶在iOS 10。這就是為什么:

    么,但這不應(yīng)該被用來(lái)確保用戶在iOS 10。這就是為什么: 如果應(yīng)用程序的部署目標(biāo)(deployment target)是大于或等于iOS 10,block內(nèi)的代碼只會(huì)被編譯。更有可能的是,你的應(yīng)用程序的部署目標(biāo)是低于目前的SDK。例如,你的部署目標(biāo)可低至iOS 8,因?yàn)槟闳匀灰С脂F(xiàn)有的用戶。

    如果你使用iOS 8以上支持的宏,由于宏在編譯時(shí)執(zhí)行的所有用戶,block內(nèi)的代碼將被省略。你不會(huì)看到任何警告或得到任何錯(cuò)誤提示,你的代碼將不會(huì)被包含在你的應(yīng)用程序中!

    為了管理的棄用和新的API,最好在運(yùn)行時(shí)做代碼檢查以容納你的應(yīng)用程序支持的所有的操作系統(tǒng)版本和設(shè)備。

    注意Deprecation警告

    在一點(diǎn)或另一個(gè)上,每個(gè)開(kāi)發(fā)者都沿著“別擔(dān)心,我后面會(huì)處理”的套路在走。你可能已經(jīng)在Xcode看到deprecation警告,讓開(kāi)發(fā)商知道方法或類(lèi)找到了出路。在某個(gè)點(diǎn)上的代碼將被刪除;如果它試圖在一個(gè)新的操作系統(tǒng)上引用被刪除的方法,你的應(yīng)用程序?qū)⒈罎ⅰ?/p>

    如何將你的應(yīng)用程序安全更新到iOS 10

    一般來(lái)說(shuō),這不是一個(gè)短期的過(guò)程。蘋(píng)果通常會(huì)用“過(guò)時(shí)的”類(lèi)或方法發(fā)布很多大的操作系統(tǒng),在它實(shí)際上被刪除之前,這給了開(kāi)發(fā)者時(shí)間來(lái)適當(dāng)?shù)馗滤麄兊拇a。無(wú)論如何,時(shí)間終于來(lái)了,所以它是你的雷達(dá)上應(yīng)保留的東西。

    在iOS 10有極少數(shù)的類(lèi)/方法移除,這意味著對(duì)大多數(shù)開(kāi)發(fā)者而言這些都不是問(wèn)題,但是要檢查更新記錄,以及關(guān)注你的編譯器警告以防萬(wàn)一。

    測(cè)試所有支持的iOS版本

    在一天結(jié)束時(shí),它將是適當(dāng)?shù)臏y(cè)試,以驗(yàn)證你的應(yīng)用程序可以在你支持的所有的設(shè)備和操作系統(tǒng)上運(yùn)行。不要落入“它能在我的設(shè)備上運(yùn)行,所以它是沒(méi)問(wèn)題的”的陷阱中。不幸的是,即使是最好的測(cè)試也不能抓住一切,于是Apteligent來(lái)了。我們的SDK允許你在你的應(yīng)用程序上監(jiān)控崩潰和性能問(wèn)題,快速追蹤測(cè)試忽略的錯(cuò)誤。

    完成

    我強(qiáng)烈建議搶先安裝iOS的最新版本,這樣你的應(yīng)用程序就可以利用蘋(píng)果所提供的最新的功能。只要確保你沒(méi)有忽視其余部分用戶群使用的應(yīng)用程序的穩(wěn)定性和性能。只需要一個(gè)失敗的發(fā)布就可能減少你辛辛苦苦賺來(lái)的五星評(píng)級(jí),所以請(qǐng)徹底的測(cè)試、測(cè)試、測(cè)試。

    遵循這些準(zhǔn)則,你的應(yīng)用程序都將在今年秋季iOS 10正式啟動(dòng)時(shí)被設(shè)置完成。

    本文翻譯自:How to Safely Update Your App to iOS 10

     

    PS: 關(guān)于移動(dòng)開(kāi)發(fā),這些產(chǎn)品你可以關(guān)注>>
    關(guān)于移動(dòng)開(kāi)發(fā)的最新資訊和產(chǎn)品推薦,請(qǐng)<咨詢?cè)诰€客服>!
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();