fbpx Skip to content

Már jó fél éve annak, hogy elhatároztam: szeretnék az iPhone-ra programozni. Viszont – mint tudjuk – ember tervez, Isten végez – így a kezdeti nagy lelkesedésem kissé lelohadt, amikor a Google több heti használatából csak annyira tudtam következtetni, hogy akkor kéne N*100000 forintot szerezni Macre (N>=4 valós szám). Ezért hát belekezdtem egy közel 4 hónapos “Canossa-járásba” — aminek így utólag örülök, hiszen minden egyes lépésre magamtól kellett rájönnöm. Próbálkoztam webalkalmazások készítésével — akkor hol marad a GPS, gyorsulásmérő, stb…? Megpróbáltam szeretett Linuxomon elkészíteni az iPhoneSDK fontosabb komponenseit — nem sikerült. Végül, több homályos linkelgetés, utalgatás után, különböző tutorialokból “fejben összevágva” a lényeget, sikerült az Open Toolchaint feltenni a szifonomra. (rájöttem, hogy a Cydiában nem véletlenül van fenn a GNU C Compiler: tavaly nyáron még C laikusként próbálgattam egy Hello World-öt, persze a header-ök nélkül nem ment, úgyhogy töröltem.)

Amikor ennyi – élvezetes, érdekes – “szenvedés” után végre lefutott az első, GUI-val is rendelkező programom, akkor nagyon boldog voltam. Viszont röviddel ez után jöttem rá, hogy mi bántott még egész idő alatt: nekem ez a nyelv nem tetszik. Sehogy sem tudtam kibékülni az Objective-C szintaxisával, az OOP implementálásával. Viszont eszembe jutott, hogy nagyon is szeretem a C- és C++ nyelveket. A C kiesett, mivel nem volt objektumorientált, de nagy örömömre az Apple developer oldalán találtam rá a fél megoldásra: a GCC engedi keverni az Objective-C és a C++ kódot! Ezek után már csak rajtam múlik a megoldás másik fele: írni kell egy C++ felületet az iPhone programozásához.

Röviden ennyi a története az Objective-X frameworknek. (X: eXtension, tehát kiegészítés az ObjC nyelvhez) Remélem – és a munkám elsődleges célja ez lenne – , hogy sikerül ezzel pár lelkes és jó C++ fejlesztőt, akit csak az ObjC, vagy a Cocoa Touch vélt vagy valós furcsa mivolta riasztott el – az iPhone platform felé csábítanom.

A framework használata egyszerű: csupán a mellékelt csomagban található fájlokat kell hozzákompilálni a saját C++ kódodhoz, valamint a főprogramot tartalmazó fájlba be-#import-olni az ObjX.h header fájlt. Az Objective-C++ nyelv használata miatt minden implementációs fájl (.m és .cpp) kiterjesztését át kell írni .mm-re, és a GCC helyett a G++-t használni compilerként, egyébként linker errort dob!

A csomag még NAGYON ALPHA és v0.0.1! Egyelőre néhány GUI elem van implementálva, ezért még hasznosan nem igazán használható. Viszont folyamatosan dolgozom rajta, illetve GNU GPL 3 alatt van, tehát magatok is fejlesztgethetitek, a kritikákat örömmel fogadom (nem vagyok gyakorlott programozó, eddig főleg szkriptnyelvekkel dolgoztam, tehát ha valahol “pocsék” a kód, memory leak van, stb, szóljatok nyugodtan!). Viszont afféle proof-of-conceptnek jó lesz.

Mivel nekem nincs Macem, ezért a hivatalos SDK tulajoktól előre is elnézést kívánok 😉 de Makefile-ok csak iPhone-ra telepített Open Toolchainhez vannak.

Kicsit a használatról:

A programok megírásához mindössze az ObjX.h beimportálására van szükség. Ezután írni kell egy void GUIApplicationMain() függvényt, melyet a főprogram automatikusan meghív. Minden ebben e függvényben történik, így a GUI felépítése, saját függvények/osztályok felhasználása, osztályok példányosítása.

Példaképp: hogyan néz ki egy Hello World Objective-C-ben:

HW_ObjC.h
———
#import
#import
#import
#import

@interface HelloWorld: UIApplication {

}

@end

HW_ObjC.m
———
#import “HW_ObjC.h”

@implementation HelloWorld

– (void)applicationDidFinishLaunching: (id)sender {

UIWindow* mainWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIView* mainView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[mainWindow addSubview:mainView];
[mainWindow makeKeyAndVisible];

UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(60, 60, 200, 40)];
[label setText:@”Hello World!”];
[mainView addSubview:label];

}

main.m
——
#import “HW_ObjC.h”

int main(int argc, char* argv[]) {

int exitCode = UIApplicationMain(argc, argv, @”HelloWorld”, @”HelloWorld”);
rerurn(exitCode);

}

Ugyanez C++-ban:

HW_CPP.h
——–
#import “/var/include/ObjX.h”

HW_CPP.mm
———
#import “HW_CPP.h”

void GUIApplicationMain() {

GUIScreen MainScreen;
GUILabel label;
MainScreen.init();
label.init();

label.set_position(60, 60, 200, 40);
label.set_text(@”Hello World!”);

MainScreen.addGUIControl(label.object());

label.destroy();

}

Természetesen, egyelőre Objective-C-ben sokkal felxibilisebb a dolog, hiszen amíg pl. az ObjX-be nincs implementálva, addig az app csak álló helyzetű lehet. Viszont aki szívesebben dolgozik C++-szal, annak jól jöhet.

A mellékletben megtaláljátok az ObjX-framework forráskódját, egy példaprogramot (Hello World-jellegű, nagyon egyszerű, ne várjatok sokat…), valamint két PNG-képet (IMG_0275 és IMG_0276) az elkészült példaprogramról, ha esetleg nem sikerülne lekompilálni (márpedig olyan nincs… ;D). JB iPhone felhasználók előnyben: nekik csak a megfelelő helyre kell másolni a fájlokat, majd SSH-ból a Sample könyvtárban egy make-make install kombót nyomni. A fordítás viszonylag sokáig tart, mert a szifon prociját nem C++ kompilálásra tervezték (kb. 30s alatt van kész), de a make install után (ha root vagy), a /Applicationsban lesz a tesztapp.

Üdv: H2CO3 (Árpi)

Csatolt fájlok:

ObjX_v0.0.1-alpha

Olvasd el a hozzászólásokat is

46 Comments

  1. Régen olvastam olyan cikket (bárhol), amiből gyakorlatilag egy mondatot sem értek 😀

  2. ezzel énis így vagyok 😀

  3. Na sebaj, majd lesz ez még jobb is… 😀

    Admin: köszi szépen! Külön pluszpont, hogy megértetted a dőlt- és félkövér betűtípusokra utaló tag-eket! 😉

  4. Én speciel örülök a cikknek és még értem is 🙂 Mondjuk szívesen megtanulnám az ObjC nyelvet, nekem az egyetlen nagy bajom azzal van, hogy nincs fejlesztőkörnyezet Win-re. Ha az ember a sdk-ból a forrásfileokat bemásolja a telefonjára akkor a telefonon egy gcc simán lefordítja a kódot és futtatható is, egy hello world sample programot anno lefordítottam így. Viszont így minden kódot kézzel kell megírni amit talán nem is baj hiszen mégiscsak ez a programozás, de olyannak aki ObjC-ben még kezdő és az iPhone sdk-ban sincs nagyon otthon kicsit nehéz.
    Ha valakinek windows-os vannak tapasztalatai fejlesztőkörnyezet terén az ossza meg velünk itt! Gondolkoztam, hogy egy virtuális gépnek telepítek fel osx-et, de nem tudom mennyire lenne működőképes és lusta is vagyok nekilátni 😀

  5. Jó kis írás, bennem is egy pár hónapja fogant meg az ötlet, hogy iPhone-ra fejlesszek, de én a könnyebbik utat választottam, és vettem egy iMac-et 😛
    Villamosmérnök hallgatóként nem sok programozást tanultam (1-1 félév C és C++), így nem volt sok összehasonlítási alapom az Obj.C-vel, nekem eddig bejön, szerintem aki C++-al elboldogul, annak ez sem lesz nehezen megtanulható.
    Egyébként ha mást is érdekel a téma, futottam pár kört az egyetemen, hogy terveznek-e iPhone programozással kapcsolatos tárgat indítani, de ebben a félévben ez kimarad, viszont ajánlottak egy könyvet, ami valóban nagyon jó, kezdő iPhone programozóknak tökéletes: http://www.wrox.com/WileyCDA/WroxTitle/Beginning-iPhone-SDK-Programming-with-Objective-C.productCd-0470500972.html
    Remélem lesz olyan, aki hasznosnak találja majd 🙂

  6. @neu: Én, amíg nem voltam járatos az Obj-C-ben, addig sok szenvedéssel vadásztam össze, hogy kézzel hogyan kell ellátni az Interface Builder szerepét. 😀 Mikor ezt annyira megtanultam, hogy meg tudtam csinálni egy egyszerűbb alkalmazást (Pong jellegű idióta játék 😀 ), akkor gyorsan nekiálltam át-wrappelni C++-ba. Ha kész lesz az ObjX, esküszöm, elfelejtem az Obj-C-t! XD

  7. Óóó, mennyivel szebb a c++ forráskód. Próbálkoztam én is nézegetni ezt az objective c-t, de c# után rémálom volt úgyhogy elvettem a témát…

  8. Miért nem használsz egy kész c++ sdk-t iphonehoz?
    Ott van pl az Airplay, ami annyira univerzális hogy egy kódból fordíthatsz iphone, android és winmo verziót is: http://www.airplaysdk.com
    Illetve a DragonFire SDK, ami monnyuk fizetős és főleg játékkal van demonstrálva de jobban iphone-ra öszpontosít: http://www.dragonfiresdk.com

    Monnyuk szerintem az Obj-C se annyira rossz, de ez teljesen személyiség kérdése.

  9. @H2CO3: azta! gratula! minden egy alpha verzióval indul, egyszóval lesz ez még sokkal jobb is! elismerésem! 🙂

  10. sajnos én sem értek belőle sokat, de azért gratulálok. nem mindenki tud olyan értelmes cikket írni, amiből sokan semmit nem értenek. 🙂
    és mivel és sem beszélek programozási nyelveket, így a narancs háttérkép érdekel a legjobban. honnan lehet letölteni? kivis nincs? 🙂

  11. Egyébként az újabb ObjC már tudja a C++ jellegű szintaxist is, tehát nem kell a fejedet fognod a sok kapcsos zárójel miatt.
    Én egy komoly előnyét látom: oda van írva a paraméter neve; C++-ba azért néha vadászni kell, hogy egy foo (true, true, false) meghívásnál melyik paraméter mit jelent.

  12. gratulálok én is a fejlesztőnek, remek munka. Ha ajánlani lehet, akkor én két rendszert is ajánlanék, de csak a mac-es felhasználóknak. Az egyik az SDL (lib-sdl.org). Ezzel C nyelven lehet készíteni programokat iPhone-ra. A másik az openframeworks (openframeworks.cc). Ezzel C++ nyelven lehet kódolni. Mind a kettő frameworks beépül a hivatalos SDK-ba, tehát az ingyenes regisztrációval lehet alapból az SDK emulátorán tesztelni. Ha szeretnéd látni az eredményt az iPhone-on is, ahhoz már JB iPhone kell. Készíteni lehet a kész programból ipa fájlt, amit már fel is lehet telepíteni itunes-al.

  13. H2CO3: gratula, baromi sok munka van benne… nem irigyellek a karbantartási igénye miatt sem. Tervezed, hogy szabad forráskúdóvá teszed? Esetleg be tudnál vonni több embert is.

  14. @BandiG: próbáltam már az Airplayt, de nem nagyon értettem, hogy igazából hogyan gondolták a fejlesztői az appok megvalósítását. Nekem úgy tűnik, hogy nem natív UI elemeket használ, hanem egy OpenGL-szerű renderelő loop rajzolja fullgrafikusan az összes objektumot…
    @Jadeye: köszönöm, Mester! 😀
    @airness23: Köszi szépen! A háttér az iphone-wallpapers.com oldalról van, vagy keress rá gugliban, vagy dobj egy emailt és küldöm! 😉
    @Ákos: Ezt nem is tudtam! Szóval UIWebView.alloc().init();? Viszont ezt a tulajdonságot beszámítottam: nem nagyon vannak foo(true, true, false) jellegű metódusok, inkább set_position(x, y, dx, dy), meg set_text(@”szöveg”);
    @ioros: Köszi, de sajnos esélyem sincs Macre, max majd ha lesz saját gépem, egy hackintosh.
    🙂 Egyébiránt értelemszerűen JB szifonom van… 😀
    @Ákos: Köszi szépen! Ha letöltötted volna a zip fájlt, láttad volna, hogy csak forráskód, illetve a cikkben is benne van, hogy a licensze GNU GPL v3, tehát szabadon terjeszthető, másolható, módosítható. 🙂

  15. Szerintem csak saját magadnak bonyolítottad túl az obj c-t.
    én is kb 1 hónapja kezdtem ismerkedni vele, nulla programozói tudással és számomra pl az Interface Builder hatalmas segítség, eléggé megkönnyíti az ember dolgát sokszor.
    Ja, és még MAC-re sem kell beruházni, laptopomon simán elfut egymás mellett a Win és a Snow leo;)
    Ha pedig jó tutorialokat keresel akkor nem csak google, hanem youtube a barátod.

  16. @imi: igen, csak sajnos/szerencsére az Interface Builder ugye nem érhető el az open toolchainben, olyan géphez pedig nem nagyon van hozzáférésem, ahol a rendszer(ek)et módosíthatnám/telepíthetnék újat, mert közös gép, és semmi kedvem adatvesztést okozni a többi usernek azzal, hogy véletlen leformázom a Win-es partíciót…

  17. grat a posthoz! Van amit értettem van amit nem de ezért külön elismerésem!

  18. Ha nincs Maced, és valamiért kéne az SDK, töltsd le a VirtualBox-ot, azon lehet virtuális OSX-et futtatni!

  19. @CCV-520: Köszi szépen! Kipróbálom, szerintem hamarosan! 😉

  20. Lenne egy kérdésem!
    Szeretnék iphone-ra programokat írni (persze alap programok kezdőnek)
    VmWare-ben MAC OS-alatt lehetséges ez ?
    Az általam megírt programokat fel tudom tölteni és futtatni a iTelómon ? (mindenféle megvásárolt licensz és sz**ság nélkül)

    Köszöntem!

  21. Milyen C++ programozó az, akinek probléma az objective C? Max műkedvelő, de nem szakember.

  22. @eneekoe: Pontosan. Nem vagyok programozó. Viszont – úgy érzem – jogom van nem szeretni egy programozási nyelvet.
    @sv: csak ha jailbreakelt a telód. Egyébként (AppSync nélkül) nem engedi fel az iTunes az IPÁ-t.

  23. @eneekoe: Pontosan. Nem vagyok programozó. Viszont – úgy érzem – jogom van nem szeretni egy programozási nyelvet.
    @sv: csak ha jail breakelt a telód. Egyébként (App Sync nélkül) nem engedi fel az i Tunes az IPA fájlt. (am ebben mi a moderálni való? 😀 )

  24. @Birkusz:

    Megérte macet venni? Visszajött a pénzed?

  25. Én Borland Dephiben programozok, előtte Borland Pascal/OOP volt. Van némi Assembly vénám is, bár ebből egyre többet felejtetek, mivel egyre kevésbé használom. Én személy szerint a pascal szintaktikáját szeretem. Annak idején írtam ZH-t C++ -ból. Objektum orientált C teljesen kimaradt az életemből. Sajnos attól tartok, hogy már nem fogok szifonra fejleszteni, marad a PC, annak ellenére, hogy programozáson kívül minden egyébre MAC-et használok. A WIN XP is csak WMWare alatt fut a MAC-en, önálló PC hardverem csak a Netbookom.

  26. @CCV-520: Tudsz esetleg egy kész VirtualBox OSX image-t hogy ne kelljen telepitgetni?

  27. @tameszol: Tipikus mai szemléletmód ‘Visszajött a pénzed?’ Vannak más szempontok is az életben, még ha a világ egyre inkább a pénz körül forog is.

  28. na azért ne nyissunk már flamewart! 🙂

  29. @baggins:
    Aki profitot akar termelni, nem nagyon lehet más szempontja-.-

  30. @H2CO3:
    Segíts már nekem egy picit.
    Nekem a fejlesztó program nem engedte ki(buildelni, compilelni, exportálni, renderelni… akármelyik (nem értek hozzá annyira)), mert olyan hibára futott, hogy nincs ID-m vagy licencem vagy mi az isten nyila, hiába be volt állítva, hogy csak fejlesztőként dolgozok vele.
    Érdekelne a dolog, de itt elakadtam.

    Köszönöm segítséged előre is.

  31. Én így csinálom:

    Van egy pár éves PC-m 2 monitorral. Erre felraktam a Windows mellé a MacOSX Snow Leopard-ot, úgy hogy bootmenüben választható. (Ennek felrakása azért nem volt egyszerű, de rengeteg fórum van a témában). Majd erre az XCode-ot az SDK-val. (iPad-re fejlesztek, ezért kellett már a Snow Leopard, korábban a sima Leopard sokkal egyszerűbben felment a gépre.). Ami rohadt jó, hogy 2 monitorral nagyon megszoktam a Windows alatt a fejlesztést, és így Mac alatt is 2 monitorral tudok dolgozni. XCode-ban átállítottam a billentyűzet kiosztást, hogy ne csak Command+C (ami az én Win billentyűzetemen START+C) és hasonló kombinációk működjenek, hanem a Ctrl+C is. (azaz ahogy Visual Studioban is használom)

    A gépemen amit csak lehet Windows alatt kódolok, C++ban. Sokkal gyorsabban haladok így, és csak amikor Device-on akarok tesztelni akkor megyek át Mac-re. A saját kódjaim kb. 70ezer sort tesznek ki, ehhez jön egy vásárolt (300 dolláros) grafikai multiplatform engine. (pc+mac+iOS) Ennek az iPad platform specifikus kódjaiban van valamennyi minimális Objective C, mondjuk 500 sor, a maradék 30ezer sor benne C++ szintén.

    A játékunk kb. 2 héten belül jelenik meg iPad-re. (korábban PC-n és Mac-en már megjelent). Objective C-vel szinte semmit nem foglalkoztam a fejlesztés során, mert egyszerűen nem kellett. Meg lehet persze tanulni mindent, meg lehet az alapokkal foglalkozni, de sztem sokkal hatékonyabb (pláne ha cél a pénzkereset és nem csak a tudásszomj kielégítése) ha middleware-eket használunk amire csak lehet. Nekem így volt a leghatékonyabb. Ettől függetlenül persze nagyon érdekel az Obj-C is, meg foglalkozni is akarok vele a továbbiakban, de gondoltam leírom a módszeremet, hátha segít nektek.

  32. Bocs az offért:
    Ha valaki tudja, hogy a MobileTerminal 4.26-ot hogyan kell installálni .deb fájlból iPhone 3G-re, megköszönném.

  33. @Lala:
    Hello!
    Én töltöttem le egy osx-et de sajnos .dmg formátumban van nem .iso-ban… Van valami ötleted, hogyan írjam át?

  34. Sziasztok,

    A tegnap vettem egy Iphone 3GS-t. 🙂
    Lenne egy pár kérdésem: Nokia user voltam és abba volt olyan opció sms küldése után mindig kiírta a jelentést.ebbe van olyan?ha igen hol tudom be állítani?meg a másik, hogy amikor beszélek / utána tud olyant a teló h mutassa a másodperceket?Amúgy nagyon király a teló 😀

    Üdv nektek és köszönöm.
    Szabolcs

  35. @sv: JB+AppSync (hackulous repo), reboot, majd műxik! 😉

  36. @H2CO3: köszönöm, feltúrom az oldalt. 🙂

  37. Off:

    Ne haragudjatok az offért, de apple storeból töltögettem le telómre, meg installousból és a francért sem tudom az appokat a iphone-omról felrakni az itunesomba… Segítsetek kérlek, mit kell tennem?
    A másik hogy installousból megintcsak leszedtem az igo 2 gb-os változatát és mikor telepíteni akarom kis idő után kiírja invalid ipa, pedig egyszer már volt rajta, csak letörlődött…

    Köszönöm és bocs az offért!

  38. @H2CO3:
    Nem felszinkronizálni a gond a programot,
    Hanem kitenni IPA fájlba.

  39. @sv: Az .app kiterjesztésű mappát beteszed egy Payload nevűbe, majd zip-eled, és átnevezed .zipről .ipára.

  40. “kéne N*100000 forintot szerezni Macre (N>=4 valós szám)”

    Ez azért erős túlzás. Mint fentebb említették lehet hackintosh-sal kezdeni az ismerkedést. Aztán amikor rájössz, hogy megkerülhetetlen a mac ha komolyan akarsz foglalkozni a dologgal, akkor se kell 400 ezret kiadni érte. Én pl. 150-ért vettem egy használt macbookot és tökéletes a célra.

    Amúgy pedig tényleg eléggé öntökönszúrásnak tűnik a C++ ilyen szintű erőltetése, de ha valakinek ez kell, hajrá 🙂

  41. @H2CO3: csak nem sikerült a képet megtalálni. biztos ez az oldal címe? egyébként a hotmail-es emailem: e_andraskukachotmailpontcom
    köszönöm, ha elküldöd. 😉


Add a Comment