HTML

Hackstock

Hack the planet! Hackers unite!

Címkék

Címkefelhő

HelloWorld alkalmazás

2007.12.02. 11:47 :: theshadow

Az elméletekről térjünk át a gyakorlatra. Minden programnyelven szokás elkészíteni a Hello Világ alkalmazást. Ne legyen ez most sem másként.
Nézzük meg, hogy néz ki a fő függvényt és file-t, ami elindítja az alkalmazásunkat:
HelloWorld.m
#import <UIKit/UIKit.h>
#import "HelloApplication.h"

int main(int argc, char **argv)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retval = UIApplicationMain(argc, argv, [HelloApplication class]);
    [pool release];
    return retval;
}
Egyszerűnek tünik. Úgy néz ki a függvény szignatúrája, mint más C alkalmazások esetében; argc a paraméterek száma, argv a paramétereket tartalmazó tömb.
Az NSAutoreleasePool objektum létrehozásával automatikus memóriaszemét-gyüjtés lép életbe, tehát ha egy objektumot a release metódussal fel akarunk számolni csak akkor fog a memóriából törlődni, ha már más referencia nem mutat rá.
A UIApplicationMain fogja elindítani az alkalmazásunkat, amit egy másik forrásfile-ban deklaráltunk.
HelloApplication.h
#import <UIKit/UIApplication.h>

@interface HelloApplication : UIApplication {

}
@end
Az objektum header file-jában nem definiáltunk semmit.
HelloApplication.m
#import <UIKit/UIWindow.h>
#import <UIKit/UIHardware.h>
#import <UIKit/UITextView.h>
#import <UIKit/UIView-Hierarchy.h>
#import "HelloApplication.h"

@implementation HelloApplication

- (void) applicationDidFinishLaunching: (id) unused
{
    CGRect rect = [UIHardware fullScreenApplicationContentRect];

    UIWindow *window = [[UIWindow alloc] initWithContentRect: rect];
   
    rect.origin.x = rect.origin.y = 0.0f;
    UITextView *tvMessage = [[UITextView alloc] initWithFrame: rect];
   
    [tvMessage setText:@"Hello Hackstock!"];
   
    [window orderFront: self];
    [window makeKey: self];
    [window _setHidden: NO];
   
    [window setContentView: tvMessage];

}
Ez itt a lényeg.
A felület felépítését a applicationDidFinishLaunching metódusban kezdjük el, amely akkor hívódik meg, amikor az alkalmazás már betöltődött.
A rect változóba lekérdezzük a teljes képernyőterület méretét, amit egy alkalmazás használghat és már inicializálunk is egy UIWindow-t erre a területre. Ez után egy UITextView-t inicializálunk ugyancsak erre a területre, ami azt jelenti, hogy ő fogja elfoglalni az egész képernyőt. Ráírjuk, hogy "Hello Hackstock!". Az ablak néhány alapbeállítása (előtérbe helyezés és láthatóvá tétel) után a szöveges mezőt is elhelyezzük rajta.
Szinte már kész is van. Már csak le kell fordítani.  Erre a feladatra egy make file-t készjtettem, amit a későbbiekben is felhasználhatunk egy kis átalakjtás után.
make
CC=arm-apple-darwin-gcc
LD=$(CC)
LDFLAGS=-lobjc -framework CoreFoundation -framework Foundation -framework UIKit

all:    Hello

Hello:  build/HelloWorld.o build/HelloApplication.o
    $(LD) $(LDFLAGS) -o prod/HelloWorld $^

build/%.o:    %.m
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

clean:
        rm -f build/*.o prod/HelloWorld
Mielőtt futtatnánk, a forráskódok könyvtárában hozzunk létre egy build és prod könyvtárat. Úgy készítettem el a make file-t, hogy az átmeneti és lefordított alkalmazást már könyvtárakban helyezze el és ne keveredjenek a forrással. Most jutott eszembe, hogy ez még tovább ésszerüsíthető, de ezt legközelebb fogom elkövetni.
Ha hiba nélkül lefutott, akkor a prod könyvtárban elkészül a HelloWorld alkalmazás. Készítsük el mellé a szükséges file-okat, amelyeket már a korábbiakban említettünk (icon.png, Info.plist, PkgInfo).
Utolsó lépésként másoljuk a telefonra az Application könyvtáron belül egy alkönyvtárba (ezt is említettük körábban) és nem feledjük el beálljtani, hogy a programfile-on futtatási jogokkal rendelkezzen legalább a root (a legjobb, ha 755-ös jogot kap). SpringBoard újraindjtását követően látható és elindjtható a remekmű.
   

Szólj hozzá!

Címkék: iphone appdev

A bejegyzés trackback címe:

https://hackstock.blog.hu/api/trackback/id/tr58249544

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.