為什麼有些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 |