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…
@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ó. 🙂
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! 😀