Инструкции по сборке тулчейна под Linux для iPhone 2.0 можно получить здесь. А я начинаю очередной урок.
Итак, имеется аппарат с прошивкой 2.0, собранный тулчейн и желание что-нибудь получить.
Итак, имеется аппарат с прошивкой 2.0, собранный тулчейн и желание что-нибудь получить.
main.m
Makefile'ы и остальные сопутствующие файлы смотрим в архиве.
Скачать: helloworld2.0.zip
Лицензия: GPLv3
#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

чего-то не получилось у меня воспользоваться инструкцией саурика для тулчейна, а вы делали всё по инструкции и всё заработало? (пробовал на kubuntu 8.04.1 и на opensuse 11.0)
Да, по инструкции. Я написал скрипт на основе этой инструкции. Можете скачать его здесь: http://weho.ru/build.sh
Внимательно посмотрите, какие исходники от Apple я использовал, и скачайте их с сайта Apple.
Привет ещё раз. А как вы получили 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
Я просто скачал файловую систему со свежеджейлбрейкнутого аппарата и положил её в указанную директорию. Прошивка была 2.0.1, аппарат iPhone 2G.
Я поставил с помощью 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
Или откуда получить правильные хеадеры? спасибо
Мы снимали дамп с UIKit сами. Вы тоже можете это сделать. Дамп можно снять утилитой class-dump с фреймворков iPhone Simulator.
Честно говоря не очень понимаю о чем речь... У меня есть файл из sdk - iPhoneSimulatorPlatform.pkg - как-то из него нужно выдернуть UIKit? причем сделать это нужно с помощью http://www.codethecode.com/projects/class-dump/ ? эта тулза вроде как для макос-а... у меня макос-а нету, хакинтоши на мою тачку не встали... Я так понял не совсем ведь получается по сауриковской инструкции toolchain для HelloWorld собирается... А нету ли случайно ещё отличий от сауриковской инструкции кроме дампа UIKit? И не могли бы вы скинуть куда-нибудь для скачивания UIKit дамп, или (лучше) инструкцию как его получить самому. Спасибо.
Ну нормал, да. Напиши мне на почту (wolf.step [ at ] gmail.com).