Most, hogy már az iPhone fejlesztését is tanulgatom elég sok információm gyűlt össze a "belsejéről". Összegyűjtöttem a szélesebb kört is érdeklő, azaz nem fejlesztőknek, inkább csak gépnyomóknak szóló darabokat egy csokorba. Úgy gondolom, hogy ezeknek a birtokában jobb rálátást fogsz kapni az iPhone piaci elhelyezkedéséről és másképpen fogod összehasonlítani mondjuk egy Nokia készülékkel. Vigyázat, hosszú írás, én szóltam.
Alapszabályként úgy érdemes tekinteni az iPhone-ra, hogy ez egy kis laptop érintőképernyővel. Sokkal inkább számítógép, mintsem mobiltelefon, annyira, hogy a mobiltelefon részek (= baseband, kezeli a SIM kártyát, satöbbi) teljesen külön vannak benne.
Ugyanaz az OSX operációs rendszer fut rajta, mint a "rendes" Mac-eken, de ez leginkább csak a feltört telefonokon kezelhető. Nagyon sok szoftver lefordítható rá, pl. Apache vagy Lighttpd webszerver. A feltört telefonokra az OpenSSH feltelepítése után be lehet jelentkezni és ott ugyanaz a Bash parancssor fogad, mint a legtöbb Unix/Linux operációs rendszeren. Itt lehet a legjobban látni, hogy jé, tényleg.
Persze sok képesség egyáltalán nem vagy másképpen érhető el, mert ez mégsem egy asztali gép. Ezek egy része műszaki sajátosság miatt van (pl. az eltérő és igen egyedi felhasználói felület eltérő módszereket kíván), más része pedig az Apple üzleti döntése miatt (pl. nem érhetők el a tárolt MP3-ak, a Bluetooth vagy az USB-s szinkronizáció).
ARM architektúra lakik bent (ez egy mobil eszközökben igen széles körben használt dolog, sok okostelefon erre épül), ARM11-es processzort használ. Az ARM11 maximális sebessége 620 Mhz, de az iPhone-okban csak 412 Mhz-en ketyeg.
Feltételezem, hogy erre a hőelvezetés és a kedvezőbb akku élettartam miatt volt szükség. Érdekes kivétel a második generációs iPod Touch, abban már 532 Mhz-re engedték a procit.
Van benne még 128 MB RAM és 8, 16 vagy 32 GB Flash HDD. A HDD sebessége: olvasás 11 MB/s, írás 3 MB/s. Egy sima 5400-es laptop vinyó a huszas tartományban mozog, így ez az érték igen-igen lassú. A RAM sebessége: 120 MB/s.
Az Apple nagyon tart a Flash lemezek limitált élettartamától (egy cella kb. 500 000 írást/törlést bír jelenleg, utána meghal), ezért a fejlesztői doksiban többször felhívja a figyelmet, hogy csak akkor írjunk a lemezre, ha nagyon muszáj és lehetőleg egy menetben.
Valószínűleg emiatt nincs benne virtuális memória, nincs memória swap! (Háttérinfó).
Van kb. 30-50 MB szabad memória a programok részére és kész, de egy fejlesztő sem bízhat abban, hogy ennyi valóban rendelkezésre is áll. Kevés hely esetén minden alkalmazás üzenetet kap, amit érdemes lekezelni. Ha elfogy a RAM, akkor kilövi a programunkat, tehát erre fokozottan kell figyelni.
Nincs benne garbage collection sem, azaz a fejlesztő lelkiismeretes és aprólékos munkáján múlik a memória hatékony kezelése. Memóriaszivárgás esetén nagyon gyorsan elfogyhat a RAM és akkor a rendszer leállítja a programot.
A fentiek miatt teljesen hibás az az állítás, hogy az iPhone teljesítménye hasonlítana a 8 évvel ezelőtt általános 400 Mhz-es 128MB RAM-os 4GB HDD-s asztali gépekéhez. Már a Win 3.1 is használt memóriaswap-et és garbage collectiont, ami itt nincs.
Ha mindenképpen hasonlítani kell valamilyen asztali masinához, akkor inkább egy 486-ost képzeljünk el 16 MB RAM-mal és MS DOS-szal. Kb. ennyi teljesítményre lehet számítani egy saját alkalmazás részére.
Pontosan ezen okok miatt nem hagyja az Apple, hogy háttérben futó szoftvereket is készítsünk az iPhone-ra, egyszerűen nincs hozzá elegendő erőforrás, nagyon könnyen instabillá lehet tenni a rendszert és tönkrevágni az Apple által szigorúan vett felhasználói élményt.
A fejlesztés a csak OSX-en futó XCode fejlesztői rendszerben történik, ebben fejlesztik az OSX-es asztali alkalmazásokat is. Az Apple-nek szerintem amúgy sem lett volna ereje egy külön valamire, most meg van egy nagy integrált izéje, amiben fejleszthetünk asztalra és mobilra. Minden egyben, így szép.
Mint minden hasonló rendszernek, ennek is megvan a sajátos logikája, először átláthatatlanul kusza, aztán ha belejössz minden összeáll szépen. A tesztelés történhet az asztali gépeden szimulált környezetben (iPhone Simulator) és magán a készüléken is.
Kényelmes az Interface builder, ahol grafikus felületen lehet összerakni a felhasználói felületet. Nagyon hasznos az Instruments, ahol többek között a CPU használatot és a memóriaszivárgást lehet monitorozni (nem csak a szimulátorban, hanem magán a telefonon is).

Ezeken a nyelveken lehet fejleszteni: Objective-C, C++, "Pure" Java, AppleScript, Ruby és Python. Mielőtt belelkesedsz: azért Objective-C-re van kihegyezve minden. Némi ASM kód is becsempészhető, illetve a nyelveket lehet kombinálni. C-ben az összes ANSI C funkció elérhető, ugyanúgy malloc-olni és memcpy-zni kell, mint régen. Egészen alacsony szintekre is lemehetsz.
Anno a diplomamunkám egy Windows-os program volt, amit C++-ban készítettem a Windows API felhasználásával. Hiszed vagy sem, az iPhone fejlesztésben ez az ismeretanyag nagyon hasznos lett, szinte teljesen ugyanúgy történnek a dolgok...
Fontos, hogy az iPhone alkalmazások nem látják egymást, egy "homokozóban" (sandbox) futnak, csak a saját mappáikba írhatnak, csak onnan olvashatnak.
Érdekes dolog még a telefonos megszakítások kezelése, pl. ha jön egy hívás vagy naptáresemény. Ilyenkor pause állapotba kell tennünk a programot, aztán ha a felhasználó úgy dönt, hogy felveszi a hívást, akkor a rendszer leállítja az appot.
Alapvetően úgy kell megtervezni egy alkalmazást, hogy ilyen megszakítások bármikor jöhetnek, a felhasználó bármikor leállíthatja a programot és nagyon gyors válaszidők kellenek ezekre. Ez a szemlélet jól tenne sok asztali alkalmazásnak is egyébként...
Azzal is foglalkozni kell, hogy az akkut minél kevésbé terheljük. Ha azt nézzük, hogy a fejlesztői doksi szerint mi mennyire fontos (hányszor írnak róla, milyen sorrendben és nyelvezetben), akkor az akkuzabáló eszközök érdekes sorrendje alakul ki:
A legtöbb lehetőséget keretrendszerekkel, magyarul Framework-ökkel érik el a fejlesztők. Például UIKit-nek hívják a felhasználói felülettel kapcsolatosat, vagy AddressBook-nak a kontaktkezelőset.
Ezek közül néhány keretrendszer szabványos és más operációs rendszereken is elérhető, így nem kell a fejlesztőknek újat tanulni. Például van OpenGL és OpenAL, ez ismerős lehet a játékok háza tájáról, ezért emlegetik az iPhone-t mint új játék platformot. Persze van olyan, hogy teljesítmény vagy egyéb okból egy-két funkció nem érhető el, pl. az Audio Units keretrendszerből jópár audio effekt hiányzik.
Főleg üzletpolitikai dolgok miatt sok keretrendszer nem használható (Private Frameworks), de ügyes programozók megmutatták, hogy hogyan lehet ezeket használni, például hozzáférni az MP3-akhoz az iPod részben és hasonlók. Ilyen szoftverek csak feltört telefonokra telepíthetők, az AppStore nem fogad be Private Framework-öt használó programot! Igen, van rá eszközük, hogy kiderítsék.
Ha kijön egy új frissítés, mint legutóbb a 2.2, az nemcsak azt jelenti, hogy mondjuk megjelent a Google Maps-ben a Street View, hanem ilyenkor szoktak bővülni a fejlesztők lehetőségei is, azaz messze nem csak a felhasználói felületet és a csilivilit polírozzák!
A keretrendszerek folyamatosan bővülnek, és fejlesztői oldalról is szembetűnő a fejlődés. Igen messze járunk még attól, hogy az iPhone kész legyen.
Például a TV kimenet keretrendszere még csak most alakul és úgy tűnik, hogy hamarosan publikus és dokumentált lesz. Azaz jövőre jöhetnek az olyan játékok, ahol az iPhone lesz a kezelőfelület de a TV-re jön a kép. Tiszta Nintendo.
A fentiek figyelembevételével talán már másképp látod az iPhone helyzetét. Már-már hihetetlen, hogy az igen limitált hardver erőforrások mellett ennyit ki tudtak hozni belőle. Minden fejlett telefonnál, az Android platformnál is bele fognak futni (belefutottak?) a fenti problémákba és az azokra adott válaszoktól függ, hogy mennyire lesz sikeres egy platform - hiszen most már mobilplatformok versenyeznek, nem gyártók.
A hagyományos telefonokhoz képest világok választják el az iPhone (és Android) platformokat. Míg egy hagyományos telefonhoz elég volt a Nokia vagy a SonyEriccson fejlesztői kapacitása, ide alapvetően másra és bizony jóval többre van szükség. Úgy tűnik, hogy egyelőre csak az Android lesz képes felvenni a technológiai (technológiai, nem üzleti!) versenyt.
A Symbian és a Windows meg lemaradt? Mindenki az iPhoneról és az Androidról beszél, azokra jön ki a legtöbb új szoftver.
Nem csoda, ha sokan azt állítják, hogy az iPhone előnye jelenleg legalább másfél év. Az sem csoda, hogy ezidáig nem tudtak a nagy mobilgyártók egyetlen olyan modellt (vagy inkább platformot) sem kihozni, ami megszorongatná az iPhone-t. Olyan összetett fejlesztőkörnyezetet kell felmutatni, mint amit az előző bekezdésekben éppen, hogy csak megkarcoltam.
Ömlengésnek hangzik de igaz, hogy az iPhone alapjaiban változtatta meg a mobilvilágot és a hagyományos mobilgyártók válasza még mindig nem tiszta. Ezért úgy kell nekik az Android, mint egy falat kenyér.
iMect means internet, media and other cool things. We're a small company located in Hungary. There is a big footer on every page where you can discover what we do and what happens with us.
Az iMect jelentése: internet, média és egyéb király dolgok. Egy kis magyar cég vagyunk. Minden oldalon van egy nagy lábléc, ahol felfedezheted, hogy mivel foglalkozunk.