HelloWorld 2.0

| Комментариев: 12 | Нет трекбэков
Инструкции по сборке тулчейна под Linux для iPhone 2.0 можно получить здесь. А я начинаю очередной урок.
Итак, имеется аппарат с прошивкой 2.0, собранный тулчейн и желание что-нибудь получить.
main.m
#import <Foundation/Foundation.h>

#import "HelloApp.h"

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int ret = UIApplicationMain(argc, argv, @"HelloApp", @"HelloApp");
    [pool release];
    return ret;
}
HelloApp.h
#import <Foundation/Foundation.h>
#import <UIKit/UIApplication.h>
#import <UIKit/UIWindow.h>

@class MainView;

@interface HelloApp : UIApplication
{
	UIWindow *mainWindow;
	MainView *mainView;
}
@end
HelloApp.m
#import <Foundation/NSGeometry.h>
#import <UIKit/UIHardware.h>
#import <UIKit/UIScreen.h>
#import <UIKit/UIColor.h>

#import "HelloApp.h"
#import "MainView.h"

@implementation HelloApp

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
	CGRect frame = [[UIScreen mainScreen] bounds];
	mainWindow = [[UIWindow alloc] initWithContentRect:frame];
	mainView = [[MainView alloc] initWithFrame:frame];

	mainWindow.contentView = mainView;
	[mainWindow makeKeyAndVisible];
}

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

@end
MainView.h
#import <Foundation/Foundation.h>
#import <UIKit/UIView-Hierarchy.h>

@interface MainView : UIView
{

}

- (id)initWithFrame:(CGRect)frame;

@end
MainView.m
#import <UIKit/UILabel.h>
#import <UIKit/UIColor.h>

#import "MainView.h"

#define CENTER 1

@implementation MainView

- (id)initWithFrame:(CGRect)frame
{
	if ((self = [super initWithFrame:frame]) != nil)
	{
		UILabel *text = [[UILabel alloc] initWithFrame:frame];
		text.text = @"Hello, world!";
		text.textColor = [UIColor blackColor];
		text.textAlignment = CENTER;
		[self addSubview:text];
	}
	return self;
}

@end
После того, как приложение скомпилировано, его необходимо подписать. Для этого на аппарате нужно установить пакет ldid (в Cydia), залить на аппарат и выполнить в командной строке аппарата (через SSH или с помощью MobileTerminal) команду:

ldid -S HelloWorld
Далее заливаем все файлы в /Applications, как обычно (бинарник HelloWorld берём подписанный).

Makefile'ы и остальные сопутствующие файлы смотрим в архиве.

Скачать: helloworld2.0.zip
Лицензия: GPLv3

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

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

Комментариев: 12

чего-то не получилось у меня воспользоваться инструкцией саурика для тулчейна, а вы делали всё по инструкции и всё заработало? (пробовал на kubuntu 8.04.1 и на opensuse 11.0)

Привет ещё раз. А как вы получили iphonefs=/usr/local/share/iphone-2.0 ? это файловая система 2.0 ведь насколько я понимаю? откуда? из iPhone1,2_2.0_5A347_Restore.ipsw ? если да то каким средством декриптнул 018-3782-2.dmg? если vfdecrypt - то с каким ключом? спасибо.

нашел вроде. во первых iPhone1,1_2.0_5A347_Restore.ipsw а во вторых тут все ключи вроде есть: http://www.theiphonewiki.com/wiki/index.php?title=VFDecrypt_Keys

Я поставил с помощью Cydia тулчейн 2.0 на iPhone и попытался скомпелировать HelloWorld.
Вылетает с ошибкой
HelloApp.m:3:27: error: UIKit/UIScreen.h: No such file or directory
HelloApp.m:4:26: error: UIKit/UIColor.h: No such file or directory
и этих файлов действительно на телефоне нет.
Это я что то сделал не так?

странно но /private/var/include/UIKit/ есть и там полно файлов с расширение .h но UIScreen.h и UIColor.h нет

на этот раз я дошел значительно дальше - я дошел до компиляции самого hello world. HelloApp.m:2:29: error: UIKit/UIHardware.h: Нет такого файла или каталога
HelloApp.m:3:27: error: UIKit/UIScreen.h: Нет такого файла или каталога
HelloApp.m:4:26: error: UIKit/UIColor.h: Нет такого файла или каталога
In file included from HelloApp.m:6:
HelloApp.h:2:32: error: UIKit/UIApplication.h: Нет такого файла или каталога
HelloApp.h:3:27: error: UIKit/UIWindow.h: Нет такого файла или каталога
причем UIHardware.h у меня действительно нету. Другие есть но находятся в
например /home/speakus/idev/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIScreen.h и не были оттуда скопированы скриптом в папку ${sysroot} разумеется в скрипте было export iphoneplt=/home/speakus/idev/Platforms/iPhoneOS.platform
возможно у меня какой-то не такой sdk ?
iphone_sdk_final.dmg (9M2199a) в нем взял iPhoneSDKHeadersAndLibs.pkg содержимое которого получил командами:
xar -xf iPhoneSDKHeadersAndLibs.pkg
zcat Payload | cpio -id
Или откуда получить правильные хеадеры? спасибо

Честно говоря не очень понимаю о чем речь... У меня есть файл из sdk - iPhoneSimulatorPlatform.pkg - как-то из него нужно выдернуть UIKit? причем сделать это нужно с помощью http://www.codethecode.com/projects/class-dump/ ? эта тулза вроде как для макос-а... у меня макос-а нету, хакинтоши на мою тачку не встали... Я так понял не совсем ведь получается по сауриковской инструкции toolchain для HelloWorld собирается... А нету ли случайно ещё отличий от сауриковской инструкции кроме дампа UIKit? И не могли бы вы скинуть куда-нибудь для скачивания UIKit дамп, или (лучше) инструкцию как его получить самому. Спасибо.

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

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

Сообщение опубликовано 07.08.2008 00:40. Автор — Narmo.

Предыдущая запись — Resurrection

Следующая запись — Репозиторий Cydia / Cydia repository

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

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