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:
46 Comments
Régen olvastam olyan cikket (bárhol), amiből gyakorlatilag egy mondatot sem értek
ezzel énis így vagyok
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!
É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
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
@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
@Birkusz: Sok-sok THX!
Óóó, 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…
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.
@H2CO3: azta! gratula! minden egy alpha verzióval indul, egyszóval lesz ez még sokkal jobb is! elismerésem!
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?
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.
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.
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.
@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…

Egyébiránt értelemszerűen JB szifonom van… 

@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.
@Á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ó.
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.
@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…
grat a posthoz! Van amit értettem van amit nem de ezért külön elismerésem!
@XXMAN: köszi!
Ha nincs Maced, és valamiért kéne az SDK, töltsd le a VirtualBox-ot, azon lehet virtuális OSX-et futtatni!
@CCV-520: Köszi szépen! Kipróbálom, szerintem hamarosan!
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!
Milyen C++ programozó az, akinek probléma az objective C? Max műkedvelő, de nem szakember.
@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.
@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ó?
@Birkusz:
Megérte macet venni? Visszajött a pénzed?
É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.
@CCV-520: Tudsz esetleg egy kész VirtualBox OSX image-t hogy ne kelljen telepitgetni?
@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.
na azért ne nyissunk már flamewart!
@baggins:
Aki profitot akar termelni, nem nagyon lehet más szempontja-.-
@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.
É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.
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.
@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?
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
@sv: JB+AppSync (hackulous repo), reboot, majd műxik!
@peacetoy: na ja…
@KillYou, @tameszol: az OSX PC-re való telepítésével kapcsolatban itt rengeteg hasznos infót megtaláltok: http://forum.osx86.hu/
@H2CO3: köszönöm, feltúrom az oldalt.
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!
@H2CO3:
Nem felszinkronizálni a gond a programot,
Hanem kitenni IPA fájlba.
@sv: Az .app kiterjesztésű mappát beteszed egy Payload nevűbe, majd zip-eled, és átnevezed .zipről .ipára.
“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á
@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.
@airness23: OK, küldöm.
@rohamcsiga: Köszi a bíztatást!