IPhone SDK (12-14) 2008/2009
Z JASR Wiki
<<< Powrót do Tworzenie aplikacji wielowarstowych 2008/2009
Spis treści |
Wprowadzenie
iPhone SDK to zbiór aplikacji i bibliotek wymaganych do tworzenia aplikacji na urządzenia iPhone i iPod Touch.
Wymagania sprzętowe
Do korzystania z iPhone SDK wymagany jest Macintosh z procesorem Intel, oraz system operacyjny Mac OS X w wersji conajmniej 10.5 Leopard.
Zasady korzystania z iPhone SDK
Aby uzyskać dostęp do iPhone SDK 2.2.1, dokumentacji, przykładów i oficjalnych tutoriali (także video tutoriale) należy zarejestrować się na stronie http://developer.apple.com/iphone/ iPhone SDK pozwoli na tworzenie aplikacji przy użyciu narzędzi Xcode (IDE), Interface Builder (tworzenie interfejsów), Instruments i Shark (mierzenie wydajności aplikacji, wycieki pamięci), Symulator iPhone. Sam iPhone SDK nie pozwala na instalowanie aplikacji na rzeczywistym urządzeniu!!!
Wykupienie rocznej licencji do iPhone Developer Program w wersji Standard ($99) daje następujące możliwości
- Instalacja aplikacji na rzeczywistych urządzeniach
- Dostęp do najnowszych nie oficjanlych wersji iPhone SDK (aktualnie iPhone SDK 3.0 Beta 5)
- Możliwość sprzedawania aplikacji przy pomocy Apple Store
Wykupienie licencji w wersji Enterprise ($299) pozwala dodatkowo na samodzielne rozprowadzanie aplikacji wewnątrz firmy na max. 100 urządzeniach (przydatne w rozwiązaniach korporacyjnych do tworzenia wewnętrznych aplikacji)
Hardware
Najważniejsze parametry:
- Wielodotykowy ekran 480x320
- Procecor ARM (ok. 400MHz)
- Akceleracja grafiki (PoverVR)
- 128MB RAM (aplikacje mają dostęp do ok. 22MB, brak automatycznego swapowania!!!)
- Akcelerometr
- WiFi
- GPS (tylko iPhone 3G)
- aparat (tylko iPhone >=)
- głośnik (tylko iPhone >=)
Objective-C
Objective-C to połączenie jezyka C z SmallTalkiem. Pozwala na korzystanie z całej składni języka C dodając obiektowość inne swoje rozszerzenia.
Podstawy języka
Wywoływanie metod obiektów:
[obiekt metodaBezParametrowa]; [obiekt metodaZ: jednymParametrem]; [obiekt metodaZ: pierwszym i: drugimParametrem]; [obiekt metoda: nieograniczoną, liczbą, parametrów, nil]; [[obiekt zwrocInnyObiekt] iWywolajNaZwroconymObiekcieMetode];
Stringi:
NSString *nowyString = @"Hello world"; NSString *pustyString = [NSString string]; NSString *formatowanyString = [NSString stringWithFormat: @"To jest %d string z %d", 3, 4]; NSString *konkatenacjaStringów = [nowyString stringByAppendingString: formatowanyString];
Jeżeli obiekty zdefiniują akcesory get i set zamiast korzystać z wywoływania metod, można korzystać z notacji kropki
[obiekt setMojLicznik: [obiekt mojLicznik] + 1]; obiekt.mojLicznik = obiekt.mojLicznik + 1;
Deklaracja klas
Wszystkie metody są wirtualne.
Plik nagłówkowy .h
@interface NowaKlasa : KlasaBazowa <ewentualna lista intefejsow ktore implementujemy> {
int poleInstacji;
NSString* poleInstacji2;
}
@property(readwrite,assign) int poleInstacji;
+(id) nowaKlasa; // Konstruktor
+(int) innaMetodaKlasowa;
-(id) init; // Inicjalizacja
-(void) innaPublicznaMetoda;
-(NSString *) publicznaMetodaZ: (int) jednymParametrem;
@end
@protocol PrawieIntefejs <PrawieInterejs2, PrawieInterfejs3>
-(int) zwrocCos;
@end
Plik implementacji .m
@interface NowaKlasa (Private) -(int) prywatnaMetoda; @end
@implementation NowaKlasa
@synthesize poleInstacji; // automatyczne generowanie, setterów i getterów
+(id) nowaKlasa
{
return [[[self alloc] init] autorelease];
}
+(id) init
{
if( ! (self=[super init]) )
return nil;
// inicjalizacja
}
// inne metody
@end
Zarządzanie pamięcią
Wszystkie klasy w Objective-C powinny dziedziczyć po NSObject. Dzięki temu otrzymują odrazu retain couter służący do zarządzania pamięcią.
NSString *nowyString; // nil
nowyString = @"bla bla"; // @"cos" zwraca obiekt ustawiony do pool autorelease, i ma retain counter ustawiony na 1
nowyString = @"aaa"; // pamięć nie ucieka, bo autorelease powoduje,
// że na obiekcie zwroconym przez @"" zostanie później wykonane release
zapiszGdziesObiekt = [nowyString retain]; // retain counter ++
// ... jak skoncze z niego korzystac
[zapiszGdziesObiekt release]; // retain counter --, gdy osiagnie 0 wywolywane jest dealloc
Dodatkowe rozszerzenia
foreach
for (TypObiektu obiekt in tablica) {
// ciało pętli
}
typ logiczny
BOOL typlogiczny = YES; // TRUE, true lub NO, FALSE, false
import lepszy include
#import <jakisNaglowek.h> #import "lokalnyNaglowek.h" // zamiast #ifndef NAGLOWEK_H #define NAGLOWEK_H #include <jakisInclud.h> #endif
Odnośniki do materiałów o objective-c
- http://cocoadevcentral.com/d/learn_objectivec/ - Krótki opis właściwości języka i dobrych praktyk
- Dokumetnacja z http://developer.apple.com/iphone/
Konfiguracja środowiska pracy
Prezentacja następujących materiałów:
- Narzedzia z SDK
- Konfiguracja certyfikatów do podpisywania aplikacji
Tworzenie aplikacji w iPhone SDK
Specyfika aplikacji
Aplikacje nie mogą pracować w tle. Jednocześnie w pamięci może pracować tylko jedna aplikacja!
Prezentacje
Prezentacja następujących materiałów:
- Prosta aplikacja "okienkowa"
- Tworzenie gier przy użyciu http://code.google.com/p/cocos2d-iphone/ (+ akcelerometr)
- Korzystanie z aplikacji Instruments w poszukiwaniu memory leaków