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;
}
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
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];
}
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-gccLD=$(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
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ű.
![]() |