"Hello, world!" - говорит iPhone

| Нет комментариев | Нет трекбэков
Для того, чтобы начать программировать под iPhone, вам понадобятся:
  1. Мозги
  2. Руки
  3. Компьютер (с операционной системой Linux или MacOS X 10.x; программировать под M$-OS не рекомендуется, ибо сие есть извращение)
  4. Тулчейн (вы можете собрать его сами, следуя инструкциям здесь, либо скачать торрент здесь)
  5. Аппарат, чтобы тестировать приложения
Будем считать, что всё вышеуказанное у вас имеется. Поехали. Пишем стандартный "Hello, World".
Пакет приложения для iPhone выглядит следующим образом:
Default.png - фон, который отображается во время загрузки программы (320х460)
Info.plist - файл информации о пакете
PkgInfo - непонятно зачем, но пусть будет
icon.png - иконка программы, которая будет отображаться на рабочем столе (65х65)

В файле Info.plist пишем следующее:

<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>Russian</string>
	<key>CFBundleExecutable</key>
	<string>Hello</string>
	<key>CFBundleIdentifier</key>
	<string>com.wndev.hello</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>0.1</string>
</dict>
</plist>


CFBundleDevelopmentRegion - регион разработки
CFBundleExecutable - имя исполняемого файла (принципиально важно!)
CFBundleIdentifier - уникальный идентификатор приложения
CFBundleInfoDictionaryVersion - версия файла описания (не менять!)
CFBundlePackageType - тип пакета (не менять!)
CFBundleSignature - по идее должна быть цифровая подпись, но у нас её нет
CFBundleVersion - версия вашей программы

PkgInfo - внутри лично у меня во всех программах вписана строчка APPL???? (именно так, с четырьмя знаками вопроса). И всё работает. Так что пишем так же и не паримся.

А дальше собственно код приложения по файлам. Разрабатывается всё это дело на языке программирования Objective-C.

main.m
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "HelloApp.h"

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int ret = UIApplicationMain(argc, argv, [HelloApp class]);
    [pool release];
    return ret;
}
HelloApp.h
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <CoreGraphics/CGEventTypes.h>
#import <GraphicsServices/GraphicsServices.h>
#import <UIKit/CDStructures.h>
#import <UIKit/UIKit.h>
#import "MainView.h"

@interface HelloApp : UIApplication
{
	UIWindow *mainWindow;
	MainView *mainView;
}
@end
HelloApp.m
#import "HelloApp.h"

@implementation HelloApp

- (void)applicationDidFinishLaunching:(GSEventRef)event;
{
    struct CGRect frame = [UIHardware fullScreenApplicationContentRect];
    frame.origin.x = frame.origin.y = 0.0;
    
    mainWindow = [[UIWindow alloc] initWithContentRect:frame];
    mainView = [[MainView alloc] initWithFrame:frame];
    
    [mainWindow setContentView:mainView];
    [mainWindow orderFront:self];
    [mainWindow makeKey:self];
}

- (void)applicationWillTerminate;
{
	[mainView release];
    [mainWindow release];
}

@end
MainView.h
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <CoreGraphics/CGEventTypes.h>
#import <GraphicsServices/GraphicsServices.h>
#import <UIKit/CDStructures.h>
#import <UIKit/UIKit.h>

@interface MainView : UIView
{

}

- (id)initWithFrame:(struct CGRect)frame;

@end
MainView.m
#import "MainView.h"

@implementation MainView

- (id)initWithFrame:(struct CGRect)frame
{
	if ((self == [super initWithFrame:frame]) != nil)
	{
		frame.origin.x = frame.origin.y = 0.0f;

		UITextLabel *text = [[UITextLabel alloc] initWithFrame:frame];
		[text setText:@"Hello, world!"];
		float white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
		float black[4] = {0.0f, 0.0f, 0.0f, 1.0f};
		[text setBackgroundColor:CGColorCreate(CGColorSpaceCreateDeviceRGB(),white)];
		[text setColor:CGColorCreate(CGColorSpaceCreateDeviceRGB(),black)];
		[text setCentersHorizontally:YES];
		[self addSubview:text];
	}
	return self;
}

@end
Makefile
PRODUCT_NAME = Hello
BUNDLE_NAME    = $(PRODUCT_NAME).app
SOURCES    = $(wildcard *.m)
INFOPLIST_FILE = Info.plist
PNGS = $(wildcard *.png)

CC = arm-apple-darwin-gcc
CXX = arm-apple-darwin-g++

CFLAGS = -Wall -pipe -O3

LD = ${CC}
LDFLAGS = -Wl,-syslibroot,/usr/local/share/iphone-filesystem \
          -I/usr/local/arm-apple-darwin/include \
          -lobjc \
          -larmfp \
          -framework CoreFoundation \
          -framework Foundation \
          -framework CoreGraphics \
          -framework GraphicsServices \
          -framework UIKit

EXECUTABLE_NAME = $(PRODUCT_NAME)

OBJECTS = \
    $(patsubst %.c,%.o,$(filter %.c,$(SOURCES))) \
    $(patsubst %.cc,%.o,$(filter %.cc,$(SOURCES))) \
    $(patsubst %.cpp,%.o,$(filter %.cpp,$(SOURCES))) \
    $(patsubst %.m,%.o,$(filter %.m,$(SOURCES))) \
    $(patsubst %.mm,%.o,$(filter %.mm,$(SOURCES)))

all: $(PRODUCT_NAME) bundle

$(PRODUCT_NAME): $(OBJECTS)
    $(LD) $(LDFLAGS) -o $(PRODUCT_NAME) $(OBJECTS)

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

clean:
    rm -f *.o $(EXECUTABLE_NAME)
    rm -rf $(BUNDLE_NAME)
    rm -f *~

bundle:
    mkdir -p $(BUNDLE_NAME)
    cp $(INFOPLIST_FILE) $(BUNDLE_NAME)/
    cp $(PNGS) $(BUNDLE_NAME)/
    cp $(EXECUTABLE_NAME) $(BUNDLE_NAME)/
    cp PkgInfo $(BUNDLE_NAME)/


Загрузить тут:
helloworld.zip

Нет трекбэков

URL для трекбэков: http://weho.ru/cgi-bin/mt/mt-tb.cgi/64

Комментировать

Об этой записи

Сообщение опубликовано 16.04.2008 20:38. Автор — Narmo.

Предыдущая запись — Зачем это всё

Следующая запись — Локализация приложений iPhone

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.

Работает на Movable Type 5.01
Хороший хостинг