為什麼有些iOS軟體需要很高版本的iOS才能運行?

為什麼有些軟體只兼容更高版本的操作系統,windows上的我知道應該是指令集的問題,xp只支持directx9,但是為什麼有些iOS軟體也有這樣的限制(iOS8的輸入法和小工具除外)?各個版本操作系統限制的根本原因是什麼,是應用程序介面不同嗎?望iOS開發高手指教


我不知道你說的很高的 iOS 版本是什麼概念。

反正截止到我答題當天,iOS 9 + iOS 8 佔比已經超過了 90 % (其中 iOS 9 超過了 50%)。

即便是剩下的 10% 裡面,iOS 7 也是佔據了絕對的地位。

而 iOS 7、8、9 也是絕大多數正常的 app 會支持的三個大版本。

開發團隊沒有必要費時費力去照顧那 2% 左右奇特的用戶,去寫一堆噁心的兼容代碼,就這麼簡單。


一個軟體,並不是所有功能都是自己寫的,有很多部分是操作系統提供的。操作系統提供的功能通過API的讓軟體調用。API是全稱是Application Programming Interface(應用程序介面)。

打個不太恰當的比方,系統功能跟你的程序有個圍牆隔開,你不能直接進圍牆那邊,也不知道裡面是怎麼的。牆上開著一個個很窄窄窗口,API就如同這些窗口,你可以通過窗口叫裡面的人做事,裡面的人再根據約定的方式給你辦好。不同的窗口可以做不同的事情,但具體是怎麼做的,你是不知道的。你也不用關心到底是怎麼做的,只用關心事情是否真的做好了。想想你到銀行辦事。

隨著操作系統升級,系統提供的API會改變。會出現不同的情況:

  • 情況1:原來有的API,被廢掉了。(可能有了更新更好更安全的API來替代)
  • 情況2:原來的API還在,但是行為有所不同。
  • 情況3:有新的API,可以實現新的功能。

解釋一下2,為什麼同一個API,行為會有所不同。可能的原因是:

  • 原來做的方式有錯誤,現在修復了錯誤。
  • 原來做的方式無錯,但新系統升級後,出現了錯誤。

這樣API變動了。開發者要同時支持新和舊的系統。就需要:

  • 對於情況1:不能用舊的API了,因為新的系統沒有了這樣的API。也不可以用新系統提供的API,因為舊系統不存在這樣的API。這樣開發者就不能直接用系統提供的功能了。可以自己花時間將同樣的功能做一次,或者根據系統的不同選用不同的API。

  • 對於情況2:原來的API,不同的版本系統行為有所不同,就需要區分不同版本的系統,採用用不同的方式去繞過去。盡量讓他們行為一致。比如新版本版面向上偏移了44個單位,那就需要判斷出新版本,想辦法讓它調整一下。

  • 對於情況3:新的系統,就算有新的功能,也不能用了。跟1一樣,明明是系統已經提供了,但也不能直接用,需要花時間來實現一次。而有些系統功能,開發者是沒有辦法自己實現的,比如控制輸入法,比如指紋支付之類。也可以判斷系統,在舊系統中,不提供用到這個功能的特性,但這樣就引起體驗不一致。

上面只假定新舊兩個版本的系統。而要支持的系統越多,上面的工作量,是會大大增多的。每次發布App的新版本,也需要人力物力將所有的系統版本測試一次。

軟體並非寫完就一成不變的,需要不斷維護修改,明明系統現有的東西,你不能用,要自己來實現。而代碼寫得越多維護成本越高,出現Bug的數目也越多。對開發者,對用戶都不好。

系統越多,開發成本簡直是指數級增長。大公司或者可以支持多幾個版本,但對於中小開發者支持太多系統就承受不了。

iOS的升級率挺高的,只要支持兩個大版本,就可以覆蓋90%以上的用戶了。有些中小開發者就只支持2個大版本,假如是現在最新是iOS 9,就支持iOS 8, iOS 9兩個大版本。假如最新是iOS 8,就支持iOS 8, iOS 7兩個大版本。以此類推。

================

Q:那剩下的人怎麼辦,難道就不理他們了嗎,他們也是人,也有權利用好的軟體啊?

A: 開發者也是人啊,他們也有自己的利益考慮,沒有義務服務所有人,那樣做根本不值得。那些用戶不升級,怪不得他人。

Q:不是那些用戶不升級啊,他們沒有錢啊,假如升級最新系統,舊的機子會慢?或者最新系統,還沒有被破解?

A: 那是他們自己的事情,你有你自己理由,但與開發者無關。每個人都有自己的理由,但通常都會覺得自己是最有道理的。但Who cares?

Q:說來說去,都是那些開發者懶嘛?明明可以做啊,就算系統不提供,自己寫就是了。

A:每個人都想懶的啦,都想其他人圍著自己轉。但還有很多更重要的事情等著我去做,有很多電影等著我看,很多好吃的等著我去吃,很多好玩的地方等著我去玩。除了那些電影,好吃,好玩的東西之外,還要抽時間出來為軟體添加更好的東西,哦,還要改掉原來的Bug。不值得為那麼的一點點人去浪費時間啊。

可以去學學編程啊。自己動手,豐衣足食。


從開發者角度,

覺得新api貌似很強大,用吧,用了之後自己的app就有了新功能。

反正蘋果強制用戶升級的,不升級的強硬分子我就不管了。

從系統角度,

系統還處於發展階段,不夠穩定(功能上,介面上,而非運行不穩定),api介面會隨著新版本系統而改變而增加。

政策上,

比如政策變化,對app要求的細節等等也會限制了app的功能和支持的系統版本。


連iOS7的測試設備和模擬器都找不到了......


低版本兼容.我只認Windows.

一般來說,新軟體用的都是新系統的介面,老系統當然沒的用咯~


因為本身的大版本更迭,會有很多修改。而用戶也大部分升級為更好的系統。開發者如果還繼續花時間去陪著那很小很小的用戶基數去玩,那時間成本還是有點的。

還有,作為蘋果的開發者,我們遵循官方的規律,漸漸放棄低版本用戶(其實就是我們懶啦,低版本適配很麻煩的,特別是大改版的適配!)


因為有一些api是某些高級版本才有,如果要能讓低版本的系統也能跑,就需要多寫一些else。

簡而言之,因為懶。


推薦閱讀:

醫院科室級別的業務軟體如何選擇軟體架構?
360和金山的安全產品都不想用的時候,有沒有什麼好的替代方案?
電腦方面的測評可信性到底有多少?
如何看待某些人下載軟體喜歡到官網的偏好?
怎麼看一個軟體是64位的還是32位的?

TAG:iOS | 軟體 | 操作系統 | API | 應用程序Application |