MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf ·...

47
MAC OS X DLA DEVELOPERÓW Architektura systemu, podstawy tworzenia aplikacji z wykorzystaniem " ameworków: Cocoa, Carbon. Podstawy tworzenia Widgetów oraz skryptów w języku AppleScript. Marcin Krzych Informatyka Stosowana EAIiE AGH-UST Kraków Grudzień 2007/Styczeń 2008 http://krzymar.net Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 1

Transcript of MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf ·...

Page 1: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

MAC OS XDLA DEVELOPERÓW

Architektura systemu, podstawy tworzenia aplikacji z wykorzystaniem "ameworków: Cocoa, Carbon.

Podstawy tworzenia Widgetów oraz skryptów w języku AppleScript.

Marcin KrzychInformatyka Stosowana

EAIiEAGH-UST

KrakówGrudzień 2007/Styczeń 2008

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 1

Page 2: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

WSTĘP

Cel opracowaniaNiniejsze opracowanie ma na celu wprowadzić czytelnika w architekturę systemu Mac OS X w wersji 10.4 (Tiger) oraz pokazać podstawowe zastosowanie udostępnianych przez firmę Apple frameworków oraz API.

Poruszane zagadnienia1. Narzędzia developerskie w systemie Mac OS X 10.4

2. Architektura systemu Mac OS X 10.4

3. Podstawy Objective-C

4. Frameworki

• Cocoa

• Carbon

• Java

5. Dashboard i Widgety

6. AppleScript

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 2

Page 3: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

NARZĘDZIA DEVELOPERSKIETen rozdział zawiera krótką charakterystykę narzędzi wykorzystywanych

przez developerów w trakcie tworzenia aplikacji.

Wstęp

S Ł Ó W K I L K A O O R G A N I Z A C J I A K A P I T UWszytkie poniżej przedstawione programy są dołączone do każdej dystrybucj systemu Mac OS X.

Pakiet ten nie jest skomplikowany w obsłudze, korzysta się z niego bardzo przyjemnie, lecz początkującego developera może nieco przytłaczać. Warto poświęcić czas na naukę i poznanie możliwości narzędzi developerskich Apple. Czas poświęcony na to, na pewno zwróci się potem w szybkości tworzenia aplikacji.

XCode

C O T O J E S T X C O D E ?XCode to zintegrowane środowisko programistyczne służące developerom do tworzenia aplikacji na Mac OS X.

Xcode podczas pracy nad projektem

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 3

Page 4: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

C O W C H O D Z I W S K Ł A D X C O D E ?W skład XCode wchodzą m.in.: eksplorator projektu, edytor tekstu.

W ekploratorze projektu, mamy do dyspozycji zaawansowane funkcjonalności:

• Ustawienie kilku celów kompilacji, np. część serwerowa aplikacji może być oddzielnym celem, a część kliencka oddzielnym.

• Build Results - okno to wyświetla wszystkie błędy które wystąpiły podczas kompilacji, umożliwia podgląd i edycję plików z błędami. W jednym oknie możemy poprawić błędy w różnych plikach w całym projekcie.

XCode jest również nakładką na gdb - GNU Debuger. Umożliwia debugowanie pro-gramu w wygodny i intuicyjny sposób.

XCode wspiera pisanie aplikacji m.in. w językach: C, C++, AppleScript, Java.

Interface Builder

D O C Z E G O S Ł U Ż Y ?Interface Builder jest aplikacją wspierającą projektowanie GUI do programów.

Wykorzystanie Interface Buildera.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 4

Page 5: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

SharkShark jest bardzo ciekawym i bardzo użytecznym programem ułatwiającym analizę wy-dajności i optymalizację napisanych przez nas programów. Dlaczego inżynierowie Apple nazwali tę aplikację Shark? Ponieważ, według nich, proces optymalizacji, usprawniania, tuningowania aplikacji wymaga mentalności myśliwego, jakim właśnie jest rekin.

Główne okno programu Shark

Sposoby analizy programu.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 5

Page 6: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Przykładowe okno prezentujące wyniki analizy

PackageMakerPackageMaker jest program do budowania pakietów instalacyjnych napisanych przez nas aplikacji.

Okno startowe programu PackageManager.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 6

Page 7: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

ARCHITEKTURA SYSTEMUWarstwy Mac OS X’a, najważniejsze elementy składowe warstw oraz ich

przeznaczenie

WstępSystem Mac OS X jest silnie zakorzeniony w systemach Unixo-podobnych. Jest oparty o mikrojądro Mach 3, filozofię FreeBSD (szczegóły w opisie Darwina), czerpie również z innowacyjnego systemu NeXTStep, z którego odziedziczył m.in. frameworki w Objective-C oraz tak dobrze znany Dock, który jest rozpoznawalnym znakiem Mac OS. Także podejście do interfejsu użytkownika, z którego narodził się Quartz Extreme - ba-zujący na PDF1 silnik renderujący okna przy użyciu tylko i wyłącznie procesora grafic-znego (karty graficznej) pochodzi z NeXTStep’u.

Dock

Warstwowa budowaSystem Mac OS X jest systemem unix’owym. Budowę systemu oparto o cztery podsta-wowe warstwy zawierające w sobie logicznie powiązane elementy Mac OS X.

Cztery warstwy systemu Mac OS X. © Apple Inc.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 7

1 Portable Document Format - http://pl.wikipedia.org/wiki/Portable_Document_Format

Page 8: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Dzięki podzieleniu zadań systemu operacyjnego na współpracujące ze sobą warstwy, enkapsulowano odpowiednie części jego architektury na właściwym dla nich poziomie abstrakcji.

Warstwy te nie są od siebie odizolowane, lecz ze sobą ściśle współpracują. Developerzy mają dostęp do tych warstw poprzez rozbudowane frameworki i API.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 8

Page 9: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Darwin

C O T O J E S T D A R W I N ?Darwin to serce i najważniejszy element całego systemu operacyjnego. Zawiera jądro sys-temu (XNU2 ), sterowniki do urządzeń, mechanizmy bezpieczeństwa systemu, mechanizmy komunikacji między procesami oraz nisko poziomowe komendy i usługi do-stępne dla aplikacji.

Warstwa ta udostępnia mechanizmy zarządzania kolekcjami, formatowaniem danych, zarządzaniem pamięcią, operacjami na łańcuchach znaków, zarządzanie procesami, parsowaniem XMLi, strumieni IO oraz niskopoziomowej komunikacji sieciowej.

Darwin jest dostępny za darmo (wraz ze źródłami) do pobrania ze strony http://www.opensource.apple.com/darwinsource/

Kolejne wersje Darwina dostępne na stronie www firmy Apple

N A C Z Y M O P A R T Y J E S T D A R W I N ?Darwina stworzono opierając się na:

• Mach 3.03

‣ Jest to mikrojądro systemu operacyjnego. Przy jego rozwoju dążono do przesunięcia zbędnych funkcji jądra do warstwy użytkownika. Wspiera wieloprocesorowość, w tym również systemy rozproszone.

‣ Z Mach 3.0 wykorzystano m.in. zarządzanie wątkami i procesami, przesyłanie wia-domości w komunikacji międzyprocesowej, mechanizmy pamięci chronionej, pa-mięci wirtualnej.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 9

2 http://en.wikipedia.org/wiki/XNU

3 http://en.wikipedia.org/wiki/Mach_%28kernel%29

Page 10: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

• FreeBSD 54

‣ Z systemu FreeBSD Mac OS X odziedziczył głównie: POSIX API, zarządzanie użytkownikami i grupami, mechanizm uprawnień, stos protokołów sieciowych, itp.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 10

4 http://pl.wikipedia.org/wiki/FreeBSD

Page 11: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Graphics and Media

1. Q U I C K T I M EQuickTime to nie tylko program do odtwarzania multimediów, to cała technologia do tworzenia i odtwarzania wideo, dźwięku, animacji. Wspiera bardzo wiele formatów kom-presji.

2. C O R E A U D I OUsługi systemowe wspierające developerów w wykorzystaniu obróbki dźwięku w aplik-acjach.

3. C O R E I M A G ETechnologia wspierająca przetwarzanie obrazów. API zapewnia dostęp do gotowych fil-trów dla obrazów jak i wideo.

4. C O R E V I D E OWsparcie dla pobierania strumienia wideo i jego wyświetlania. Do transformacji klatek używa Core Image lub OpenGL.

5. O P E N G LWysoko zoptymalizowana nowoczesna impementacja standardu OpenGL dla grafik 2D i 3D.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 11

Page 12: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Application Frameworks

C O O Z N A C Z A T O M A G I C Z N E S Ł O W O F R A M E W O R K ?Aby to wyjaśnić posłużę się definicją5 z Wikipedii:

Framework6 (rama projektowa, szkielet) to w programowaniu struktura wspomagająca twor-zenie, rozwój i testowanie powstającej aplikacji. Z reguły na "amework składają się programy wspomagające, biblioteki kodu źródłowego i inne podobne narzędzia.

To szkielet działania aplikacji, który zapewnia podstawowe mechanizmy i może być wypełniany właściwą treścią programu. Np. w programowaniu gier na szkielet może składać się utworzenie pustego okna, kod inicjalizacji i finalizacji biblioteki graficznej (jak na przykład OpenGL), a także dodatkowe moduły wspomagające, jak wczytywanie tekstur z różnych formatów plików, funkcje rysujące podstawowe figury geometryczne, tekst itp.

J A K I E F R A M E W O R K I U D O S T Ę P N I A M A C O S X ?W Mac OS X wyróżnić można 3 główne frameworki. Przy czym pisząc apikację opartą o jeden z nich - można wykorzystywać funkcjonalność innych, np. aplikacja oparta o Co-coa może z powodzeniem wykorzystywać potrzebne funkcjonalności z frameworka Car-bon jak i używać funkcji BSD.

1. C O C O AJest to obiektowo orientowany framework zapewniający dostęp do pełnej funkcjonal-ności systemu Mac OS X. Został napisany w Objective-C i wspiera architekturę 32 jak i 64 bitową oraz garbage collection z Objective-C 2.0 ( niektóre części frameworka zostały napisane w innych językach, jak np. C z powodów wydajności lub kompatybil-ności).

Framework Cocoa może być wykorzystywany nie tylko przez aplikacje w Objective-C, ale również skrypty w językach AppleScript, Ruby, czy Python.

2. C A R B O NCarbon to 32 bitowe proceduralne API. Jego obecność w systemie 10.4 jest podyktowana głównie zapewnieniem kompatybilności wstecz. Umożliwia developerom C/C++ dostęp do takich funkcjonalności jak:

• Quartz - biblioteka do grafiki 2D,

• mechanizmy obsługi zdarzeń oraz wielowątkowość,

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 12

5 pozwoliłem sobie wprowadzić do tej definicji niewielkie zmiany

6 http://pl.wikipedia.org/wiki/Framework

Page 13: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

• OpenGL,

• mikrojądro Mach,

• usługi BSD.

3. J A V AMac OS X to system operacyjny, w który Java jest wbudowana, tzn. zawiera zainstalow-aną, pełną wersję J2SE wraz z JDK i wirtualną maszyną HotSpot.

HotSpot to implementacja JVM (wirtualnej maszyny Javy) wykonana przez firmę Apple.

Więcej szczegółów można przeczytać w rozdziale Application Frameworks.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 13

Page 14: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

User Experience

1. A Q U AAqua to mechanizm wizualizacji GUI systemu Mac OS X.

2. D A S H B O A R DTo środowisko umożliwiające wykorzystanie i tworzenie małych programików - tzw. Widgetów. W Windows Vista wprowadzono ich odpowiedniki w postaci Gadgetów.

3. S P O T L I G H TWraz z systemem plików HSF+ tworzy system indeksowania i katalogowania plików, aby ich wyszukiwanie było proste i jednocześnie BARDZO wydajne.

Spotlight udostępnia swoje API, które można wykorzystać we własnych aplikacjach.

4. A C C E S S I B I L I T YAccessibility to zbiór API i technologii ułatwiających korzystanie z komputera m.in. osobom niepełnosprawnym. Umożliwia wykorzystanie oprogramowania czytającego ek-ran, nawigację po aplikacji przy pomocy skrótów klawiaturowych, itp.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 14

Page 15: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

OBJECTIVE -CPodstawy języka

WstępAby zrozumieć w pełni następny rozdział tego opracowania, należy posiadać wiedzę z zakresu podstaw programowania obiektowego oraz języka Objective-C. Zakładam, że programowanie obiektowe nie jest Ci obce, dlatego wprowadzę tutaj tylko podstawy języka Objective-C niezbędne do zrozumienia przykładowych aplikacji zaprezentow-anych później.

Objecite-C

C O T O J E S T ?Jest to rozszerzenie języka C, wprowadzające obiektowość. Oprócz frameworka Cocoa systemu Mac OS X, nie jest raczej szerzej wykorzystywany. Język ten wzorowany był na Smalltalk’u.

C Z Y M S I Ę R Ó Ż N I O D C I C + + ?Objective-C wprowadza do języka C m.in.:

• Symbol [] - służy do wywoływania metod,

• Symbol @ - wykorzystuje się do definiowania struktur specyficznych dla Objective-C,

• Nowe typy, jak np typ id. ( typ id jest wskaźnikiem do obiektu ),

• Wszystie klasy niejawnie dziedziczą po klasie Object (podobnie jak w Javie),

• Podobny składniowo do Smalltalka, z niego przejął też częściowo możliwości,

• Dziedziczenie wyłącznie jednokrotne (klasa nie może dziedziczyć po więcej niż jednej klasie), lecz istnieje mechanizm @protocol, którego odpowiednikiem w Javie są inter-fejsy, dzięki czemu, de facto, klasa może być dzieckiem jednej klasy oraz dodatkowo implementować jakiś interfejs.

• Obiekt niezainicjalizowany (pusty) jest reprezentowany przez słowo kluczowe nil.

• Dynamiczna typizacja przy deklaracji obiektu, nie definiuje się stricte jego typu. Mówi się jedynie, że zmienna będzie reprezentowała obiekt. Decyzja jakiego typu to jest obiekt dokonuje się podczas pracy programu.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 15

Page 16: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

P O J Ę C I A O B J E C T I V E - C

T E R M I N D E F I N I C J A

Wiadomość (ang. Message) Prośba przesyłana do obiektu, aby wy-wołał swoją metodę.

Metoda (ang. Method) Funkcja zdefiniowana w ciele klasy

Zmienna instancji (ang. Instance Variable) Pola klasy, zmienne zdefiniowane w ciele klasy

D E F I N I C J A I D E K L A R A C J A K L A SDeklarację klasy zamieszczamy w pliku nagłówkowym .h a jej definicję w pliku .m.

K O D W O B J E C T I V E - C O P I S

@interface Klasa : KlasaBazowa { float zmienna1; float zmienna2; InnaKlasa* zmienna3;}+ foo;- (float)pobierzZmienna1;- (void)ustawZmienna1:(float)zm1;

@end

deklaracja interfejsu (atrybutów i metod) klasy Klasa, dziedziczącej po klasie KlasaBazowa

miejsce na deklarację zmiennych klasy (pól)

miejsce na deklarację metod klasy:metoda statyczna klasy, rozpoczęta znakiem +metoda bezargumentowa, zwraca zmienną typu floatmetoda przyjmująca 1 argument typu float

zakończenie bloku deklaracji

Plik Klasa.h

Metody statyczne klasy rozpoczyna się od znaku “+” a pozostałe (niestatyczne) od znaku “-”.

Zwracam jeszcze raz szczególną uwagę to, że instrukcja @interface nie rozpoczyna dek-laracji interfejsu w sensie takim jak np. w języku Java. Do tego służy instruckja @protocol. Tutaj (w Objective-C) odpowiada ono raczej słowu kluczowemu: class z języka Java.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 16

Page 17: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

K O D W O B J E C T I V E - C O P I S

#import “Klasa.h”

@implementation+ foo { //definicja statycznej metody}

- (float)pobierzZmienna1 { return zmienna1;}

- (void)ustawZmienna1:(float)zm1 { if( [zmienna3 pobierzWartosc] > zm1 ) { [zmienna1 ustawWartosc: zm1]; } else { zmienna1 = [zmienna3 pobierzWartosc]; }}@end

Import deklaracji klasy, instrukcja import zawiera w sobie operacje gwarantujące włączenie danego pliku tylko raz.

Rozpoczęcie bloku implementacji

Plik Klasa.m

O P E R A T O R Y Z A K R E S UObjective-C umożliwia definiowanie dostępu do zmiennych klasy na poziomach:

P O Z I O M D O-S T Ę P U

O P I S

@private Zmienna dostępna jedynie wewnątrz klasy, w ktorej została zadeklarowana.

@protected Zmienna dostępna w klasie w ktorej została zadeklarowana oraz w klasach potomnych.

@public Zmienna dostępna dla każdego

P R O S T E P R Z Y K Ł A D Y

K O D W O B J E C T I V E - C W Y J A Ś N I E N I E D Z I A Ł A N I A

id obiekt;

Deklaracja wskaźnika do obiektu, nie wia-domo jakiej klasy. W trakcie działania pro-gramu, stanie się wiadome, jakiej klasy jest to obiekt.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 17

Page 18: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

K O D W O B J E C T I V E - C W Y J A Ś N I E N I E D Z I A Ł A N I A

Kwadrat* kwadrat;Deklaracja wskaźnika do obiektu klasy Kwad-rat

id obiekt = [Klasa alloc];Stworzenie nowej instancji klasy Klasa poprzez alokacje pamięci i inicjalizację jej składowych wartością 0 (zero)

id obiekt = [[Klasa alloc] init];Stworzenie nowej instancji i inicjalizacja jej składowych poprzez wykonanie funkcji (id)init.

[obiekt metoda];Wywołanie bezparametrowej metody “me-toda” obiektu “obiekt”

[kwadrat ustawWspolrzedne:20.0 :30.0];Wywołanie metody “ustawWspolrzedne” przy-jmującej 2 parametry, które są nienazwane, przez co metoda nie jest bardzo czytelna.

[prostokąt ustawSzerokosc:100 dlugosc:50];Tutaj widzimy metodę, która została zadekla-rowana jako “ ustawSzerokosc:dlugosc:”.

BOOL wolna;wolna = [maszyna jestWolna]

Wywołanie metody zwracającej wartości typu BOOL z przypisaniem jej rezultatu do zmien-nej.

[figura ustawKolor:[innaFigura pobierzKolor]]; Przykład zagnieżdżania wyrażeń.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 18

Page 19: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

APLICATION FRAMEWORKSOmówienie "ameworków, prezentacja przykładowych programów.

WstępDo przeczytania tego rozdziału niezbędna jest podstawowa znajomość języka Objec-tive C. Jeżeli, Czytelniku, jeszcez nie znasz tego języka, wróć proszę do poprzedniego rozdziału, gdzie wprowadzam podstawy,

Cocoa

Z C Z E G O S K Ł A D A S I Ę   C O C O A ?Cocoa to tak na prawdę zbiór frameworków. Dostarcza właściwie całego środowiska dla aplikacji, infrastruktury do pisania aplikacji kierowanych zdarzeniami (ang. event driven), gdzie działanie aplikacji jest odpowiedzią na akcję użytkownika (akcja generuje jakieś zdarzenie, jak np. kliknięcie na przycisk, wybranie pozycji z menu itp).

Można jednak wydzielić z Cocoa 2 główne części:

• Foundation (Foundation.framework) - zawiera klasy zarządzania danymi, dostępu do plików, zarządzania pamięcią, powiadamiania procesów, komunikacji sieciowej i inne powiązane z funkcjonalnościami tak niskiego poziomu.

• Application Kit (AppKit.framework) - klasy AppKit implementują głównie warstwę interfejsu użytkownika aplikacji: kontrola okien, kontrolek, menu czy obsługa zdarzeń.

Z A L E Ż N O Ś C I S Y S T E M O W E F R A M E W O R K A C O C O ACocoa nie jest niezależnym frameworkiem. Wręcz przeciwinie. Posiada powiązania zarówno poziome jak i pionowe w architekturze systemu. Najlepiej te powiązania zilus-trują poniższe diagramy.

Uproszczona architektura Mac OS X. © Apple Inc.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 19

Page 20: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Cocoa w architekturze systemu. © Apple Inc.

Architektura Cocoa - kilka najważniejszych zależności. © Apple Inc.

D L A C Z E G O O B J E C I T V E - C?Objective-C został wybrany z wielu powodów, jako język frameworka Cocoa. Do najważniejszych należą:

• obiektowość - programowanie obiektowe umożliwia pisanie kodu, który jest czytelny dla człowieka, intuicyjny. Aplikacje tworzone w z wykorzystaniem technologii OOP7 powstają szybciej, niż te pisane z wykorzystaniem języków proceduralnych.

• dynamika - struktura i właściwości języka umożliwia tworzenie wyszukanych narzędzi dla developerów. Interfejs do tzw. runtime system zapewnia dostęp do działającej aplik-acji, zatem możliwe jest stworzenie monitora, mechanizmów interweniujących i u-jawniających strukturę i czynności aplikacji w Objective-C.

• Objective-C jest prostym językiem, łatwym do opanowania w stosunkow krótkim cza-sie.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 20

7 Object Oriented Programming - programowanie orientowane obiektowo

Page 21: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

W Z O R Z E C P R O J E K T O W Y M V C - M O D E L V I E W C O N T R O L L E RAplikacje oparte o Cocoa powinny być tworzone wg założeń wzorca projektowego MVC: Model - View - Controller (tj. Model - Widok - Kontroler). Wzorzec ten, zakłada rozdzie-lenie od siebie i podział programu na 3 warstwy:

1. Model

Model jest warstwą aplikacji, w której budujemy modele opisujące obiekty, których dotyczy program. Jeżeli, na przykład, piszemy aplikację do zarządzania finansami, to modelem będzie m.in.: konto bankowe, konto depozytowe, posi-adacz konta.

2. View

Warswtwa widoku jest warstą prezentacji wyników działania programu. Dzięki wydzieleniu jej, można bez przeszkód na działanie aplikacji zmieniać prezentację (rozmiary komponentów w oknie, ich rozkład).

3. Controller

Warstwa ta zbiera wszyskie kontrolery. Kontrolerem jest każda klasa, która “kon-troluje”, tzn. przy pomocy modeli wykonuje pewne operacje na nich, a następnie wykorzystuje warstwę widoku do prezentacji otrzymanych wyników.

S C H E M A T P O S T Ę P O W A N I A P R Z Y T W O R Z E N I U A P L I K A C J I Z G U I1. Wykonanie GUI w InterfaceBuilder

2. Stworznie klas - kontrolerów dla GUI.

3. Powiązanie klas - kontrolerów z obiektami i zdarzeniami w GUI.

4. Testowanie rozwiązań

P I E R W S Z A A P L I K A C J A O P A R T A N A C O C O A - P R O S T A P R Z E G L Ą D A R A K A W W WPierwszą aplikację, jaką stworzę w oparciu o Cocoa będzie bardzo prosta przeglądarka www. Wykorzystamy do tego wszystkie możliwości jakie dało nam Apple. Poniżej opisze tylko najważniejsze kroki tworzenia tej aplikacji.

Zacznę od stworzenia nowego projektu w XCode.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 21

Page 22: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Nowy projekt - Cocoa Application

Po stworzeniu projektu pokaże się główne okno XCode.

Okno projektu.

Przechodzimy do budowania interfejsu graficznego przeglądarki. Z okna projektu, poprzez podwójne kliknięcie na pliku MainMeu.nib. Otworzony zostanie program Inter-face Builder, dzięki któremu stworzymy GUI dla użytkowników. Na okno aplikacji prze-ciągamy z przybornika komponenty:

• Przycisk

• WebView

• Pole tekstowe

i otrzymujemy rezultat jak np ten poniżej.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 22

Page 23: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Przykładowy interfejs aplikacji.

Następnym krokiem jest dodanie do projektu wykorzystywanego frameworka Cocoa: WebKit posługując się menu programu XCode.

Po dodaniu frameworka tworzymy plik dla naszej klasy - kontrolera.

Dodawanie nowych plików do projektu.

Nazwijmy ten plik i klasę jako AppContro2er. Razem z plikiem .m (implementacją metod klasy) stworzony zostanie plik nagłówkowy .h.

//import frameworku Cocoa#import <Cocoa/Cocoa.h>

@interface AppController : NSObject {

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 23

Page 24: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

//wskaźnik do obiektu klasy WebView IBOutlet id webView; //wskaźnik do pola tekstowego IBOutlet id textFieldAddress;}

//główna metoda klasy - będzie otwierać wpisany przez użytkownika adres www- (IBAction) loadWWW: sender;

@end

Zawartość pliku AppContro2er.h

//import deklaracji klasy AppController#import "AppController.h"//import frameworka WebKit umożliwiającego wykorzystanie gotowych komponentów//do przeglądania www#import <WebKit/WebKit.h>

@implementation AppController

- (IBAction) loadWWW: sender { //pobranie zawartości pola tekstowego i próba otworzenia dokumentu o adresie URL wpisanym do pola tekstowego [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWith-String: [textFieldAddress stringValue] ]]];}

@end

Zawartość pliku AppContro2er.m

Plik stworzony automatycznie przez XCode main.m pozostawiamy bez zmian. A oto jest jego zawartość:

#import <Cocoa/Cocoa.h>

int main(int argc, char *argv[]) { return NSApplicationMain(argc, (const char **) argv);}

Teraz pora na powiązanie obiektów interfejsu z atrybutami klasy AppController. Aby to zrobić musimy na okno projektu Interface Buildera przenieść metodą Drag&Drop plik AppContro2er.h z XCode.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 24

Page 25: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Okno Interface Buildera na które należy przenieść plik AppContro2er.h

Zaznaczamy dodaną klasę, aby stworzyć jej instancję.

W ten sposób dołączymy naszą klasę do klas używających GUI. Aby móc ją wykorzystać, musimy na zakładce Classes odnaleźć naszą klasę, zaznaczyć ją i z menu programu wybrać Classes - Instantiate AppController

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 25

Page 26: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Rezultat powiązania obiektu GUI z atrybutem klasy widoczny na oknie Insepctor’a

Przechodzimy do ostatniego kroku - powiązania atrybutów naszej klasy z obiektami GUI. Z okna, którego zrzut widzimy powyżej, przeciągamy ikonę AppController na obiekt WebView. Musimy to zrobić trzymając klawisz Ctrl przy kliknięciu na AppCon-troller.

Po tym zabiegu, w oknie Inspector’a powinna otworzyć się zakładka, w której powiążemy obiekt WebView z GUI z atrybutem klasy AppController. Odpowiednie zrzuty ekranu prezentuję poniżej.

Przeciąganie AppControler na obiekt WebView (z wciśniętym klawiszem Ctrl)

Widok Inspector’a po przeciągnięciu obiektu klasy AppContro2er na obiekt WebView.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 26

Page 27: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Po przeniesieniu klasy AppController na obiekt WebView w oknie Inspectora wybieramy atrybut do jakiego obiekt WebView zostanie przypisany (w naszym przypadku atrybut ten nazywa się webView). Zaznaczamy go, a następnie klikamy przycisk Connect. W ten sposób obiekt GUI został związany z atrybutem klasy. Analogicznie postępujemy w przy-padku powiązania pola tekstowego.

Okno Inspector’a, w którym wiążemy obiekty GUI z atrybutami klasy.

W przypadku przycisku robimy nieco inaczej. Przycisk należy przenieść na klasę, a nie odwrotnie tj. klasę na przycisk. Tę czynność również wykonujemy z wciśniętym klawiszem Ctrl. Inspector powinien otworzyć panel Connections na zakładce Target/Action wybieramy akcję loadWWW i klikamy przycik Connect.

W ten oto sposób powiązaliśmy kod źródłowy klasy AppController z GUI. Pozostało je-dynie skompilować i uruchomić program. Poniżej zamieszczam screenshoty działającej aplikacji.

Obiekt WebView oprócz renderowania stron www umożliwia m.in. czytanie dokumentów PDF.

Każda klasa, będąca fragmentem projektu opartego o Cocoa, powinna dziedziczyć po klasie NSObject.

@interface AppController : NSObject {

Jeżeli tworzymy jakąś hierachię klas, to oczywiście, tylko klasa bazowa będzie tą, która bezpośrednio dziedziczy po NSObject.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 27

Page 28: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Okno debu4era.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 28

Page 29: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Carbon

S Ł Ó W K I L K A T Y T U Ł E M W S T Ę P UCarbon pochodzi z Mac OS 9. Składa się ze zebioru procedur napisanych w C. Nie jest to framework obiektowy! Jest przeznaczony dla programistów C/C++. Dostarcza m.in.:

• narzędzia do obsługi zdarzeń

• wsparcie wieloprocesowości,

• OpenGL,

• usługi mikrojądra Mach,

• Quartz 2D - biblioteka graficzna.

Dla skupienia uwagi, powtórzę uproszczony schemat architektury Mac OS X, aby poka-zać miejsce Carbon w tej architekturze.

Cocoa w architekturze systemu. © Apple Inc.

Carbon zawiera zbiór wielu interfejsów programistycznych, podzielonych na kategorie. Rodzaj interfejsu, który bedziesz wykorzystywać, zależy od aplikacji którą piszesz. Inżynierowie Apple przyjęli podział na:

• The Starter Kit,

• The Expansion Pack,

• Specialty and NonCarbon Interfaces,

• Utility Interfaces.

Nazw grup nie tłumaczyłem, ponieważ wykorzystując Carbon w przyszłości, angielskie nazwy są używane przez programistów, zatem warto się z nimi oswajać od początku.

T H E S T A R T E R K I TTa grupa zawiera najczęsciej wykorzystywane elementy Carbon, służące do tworzenia, modyfikowania i obsługi GUI. Acessibility ułatwia korzystanie z GUI osobom nie-

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 29

Page 30: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

pełnosprawynym. Znajdują się również tutaj interfejsy do obsługi drukowania, obsługi do-stępu do plików i inne.

Nie będę tutaj opisywał jej wszystkich składowych. Szczegóły można znaleźć na stronach http://developer.apple.com/ .

T H E E X P A N S I O N P A C KTa grupa zawiera interfejsy, które są pożądane, lecz nie koniecznie wymagane w aplik-acjach. Komercyjne produkty przeważnie je wykorzystują. Są to między innymi menedżer schowka, Open Scripting Architecture - architektura umożliwiająca stworzenie pro-gramu współpracowującego ze skryptami AppleScript, interfejsy do obsługi wyszuki-wania, tworzenie i synchronizacja wątków. i inne.

S P E C I A L T Y A N D N O N C A R B O N I N T E R F A C E STa grupa zawiera interfejsy wykorzystywane rzadko i raczej do specyficznych rozwiązań. Używając tych zasobów, będziesz tworzył aplikacje wyszukane i w pełni wykorzystujące system. Ogólnie rzecz ujmując znajdują się tutaj interfejsy do obrówki i przetwarzania multimetiów: QuickTime, Core Video, Core Audio, 3D Graphics, Disc Recording, Speech, połączenia sieciowe i inne.

U T I L I T Y I N T E R F A C E STutaj zgrupowano interfejsy, które nie są szczególnie powiązane konkretną technologią czy funkcjonalnością. Są to: Finder, usługi debugowania, Assert Macros, narzędzia mate-matyczne i logiczne.

L E G A C Y I N T E R F A C E STen zbiór interfejsów istnieje głównie z historycznych względów. Umożliwia kompatybil-ność wstecz systemu Mac OS X z jego porzednimi wersjami.

P R Z Y K Ł A D O W A A P L I K A C J APonieważ Apple radzi, by zamiast Carbon wykorzystywać Cocoa, pokażę tutaj jedynie program, który otwiera puste okno, by uwidocznić różnicę w ilości kodu, jaki trzeba zapewnić dla aplikacji w C++ na Carbon a dla aplikacji w Objective-C na Cocoa.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 30

Page 31: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Główne okno projektu aplikacji na "ameworku Carbon

Już na pierwszy rzut oka widać znacznie większą ilość elementów, z których złożona jest aplikacja. Im więcej elementów - tym więcej miejsc do popełnienia błędów - tym większe prawdopodobieństwo ich popełnienia.

Główny plik aplikacji main.cpp jest wykorzystaniem klas zawartych w plikach projektu widocznych w oknie powyżej. Plik main.cpp przedstawiam poniżej.

#include <Carbon/Carbon.h>#include "TApplication.h"#include "TWindow.h"

// Główna klasa aplikacjiclass CarbonApp : public TApplication{ public: CarbonApp() {} virtual ~CarbonApp() {} protected: virtual Boolean HandleCommand( const HICommandExtended& inCommand );};

// Klasa glownego oknaclass MainWindow : public TWindow{ public: MainWindow() : TWindow( CFSTR("MainWindow") ) {} virtual ~MainWindow() {} static void Create(); protected: virtual Boolean HandleCommand( const HICommandExtended& inCommand );};

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 31

Page 32: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

//--------------------------------------------------------------------------------------------int main(int argc, char* argv[]){ CarbonApp app; // Tworzy nowe okno MainWindow::Create(); app.Run(); return 0;}//--------------------------------------------------------------------------------------------BooleanCarbonApp::HandleCommand( const HICommandExtended& inCommand ){ switch ( inCommand.commandID ) { case kHICommandNew: MainWindow::Create(); return true; // tutaj jest miejsce na dodawanie obsługi komend default: return false; }}//--------------------------------------------------------------------------------------------voidMainWindow::Create(){ MainWindow* wind = new MainWindow(); // Ustawienie pozycji okna do wyświetlania RepositionWindow( *wind, NULL, kWindowCascadeOnMainScreen ); // Okno zostało stworzone, teraz należy je pokazać wind->Show();}//--------------------------------------------------------------------------------------------BooleanMainWindow::HandleCommand( const HICommandExtended& inCommand ) { switch ( inCommand.commandID ) { // Tutaj jest miejsce na obsługę komend default: return false; }}

Porównując zawartość tego pliku do 4 linijek aplikacji Cocoa widać znaczną różnicę, prawda? Znacznie prościej jest ogarnąć aplikację w Cocoa. Zaznczam też, że nie przed-stawiłem tutaj implementacji tych klas, które są wykorzystywane w pliku main.cpp, a które są włączone do projektu od samego początku.

Java

C O T O J E S T J A V A ?To obiektowy język programowania stworzony i rozwijany przez firmę Sun Microsys-tems8.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 32

8 http://www.sun.com/

Page 33: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

C O T O J E S T J 2 S E ?Jest to pakiet narzędzi do tworzenia plikacji w języku Java.

S K Ł A D N I K I J 2 S E W M A C O S XImplementacja platformy J2SE na Mac OS X zawiera zarówno JRE9 jak i JSDK10.

Składniki J2SE w systemie Mac OS X. © Apple Inc.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 33

9 Java Runtime Environment - środowisko do uruchamiania aplikacji napisanych w Javie

10 Java Software Development Kit - zestaw narzędzi ułatwiających tworzenie aplikacji

Page 34: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

DASHBOARD & WIDGETSCo to jest i jak stworzyć widget’a

Dashboard

C Z Y M J E S T D A S H B O A R D ?Dashboard jest środowiskiem zapewniającym miejsce do życia małym aplikacjom jakimi są widgety.

Dashboard oraz przykładowe widgety: słownik, notatnik, kalendarz, sudoku.

Widgety

C O T R Z E B A Z N A Ć , A B Y S T W O R Z Y Ć W Ł A S N Y W I D-G E T ?Widgety korzystają z technologii webowych:

• HTML

• CSS

• JavaScript

• podstawy wiedzy o XMLu, bądź tworzeniu plików .plist

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 34

Page 35: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Widget Hello World

Z C Z E G O S I Ę S K Ł A D A ?Będzie składał się z plików:

• He2o.html - plik html opisujący widget

• He2o.css - arkusz styli opisujący wygląd naszego Widgeta

• He2o.js - Skrypty w JavaScript, dzięki którym możemy wprowadzić trochę dynamiki do Widget’a. W tym przykładzie nieobecny.

• Info.plist - plik opisująct nasz Widget, dostarczający niezbędnych informacji dla śro-dowiska Dashboard, można go stworzyć ręcznie (w zwykłym edytorze tekstów), bądź w programie przeznaczonym do tych celów: /Developer/Applications/Utilities/Property List Editor

• Default.png - plik graficzny pokazywany podczas ładowania się Widgetu.

• Icon.png - plik będący ikoną naszego Widgetu, wyświetlany na pasku Widgetów.

Ważne jest, że oba pliki graficzne Default.png oraz Icon.png były w formacie Portable Net-work Graphics (PNG) i muszą być dokłanie tak, a nie inaczej nazwane.

H E L L O . H T M LPlik Hello.html ma następującą zawartość

<html> <head> <style type="text/css"> <!-- @IMPORT url("Hello.css"); --> </style> </head>

<body> <div id="mainBox"> <p>Hello World!!!</p> </div> </body></html>

H E L L O . C S S#mainBox { background: url("Default.png") no-repeat; width: 200px; height: 100px;}

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 35

Page 36: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

#mainBox p { text-align: center; color: #FFFFFF; padding-top: 40px;}

I N F O . P L I S TPoniżej źródło tego pliku. Zawiera jedynie wymagane informacje

<?xml version="1.0" encoding="UTF-8"?>< !DOCTYPE p l i s t PUBLIC " - / /App le Computer / /DTD PLIST 1 .0 / /EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>CFBundleDisplayName</key> <string>Hello</string> <key>CFBundleIdentifier</key> <string>krzymar.Hello</string> <key>CFBundleName</key> <string>Hello</string> <key>CFBundleVersion</key> <string>0.1</string> <key>MainHTML</key> <string>Hello.html</string></dict></plist>

Zapewne zastanawiasz się, co oznaczają powyższe tagi? Strutktury XMLa nie będę wy-jaśniał. Poniżej opisuję wymagane klucze, do czego służą, i jakie wartości należy im przyp-isać.

K L U C Z J A K Ą I N F O R M A C J Ę M A Z A W I E R A C

CFBundleDisplayName Nazwa Widgetu, która będzie wyświetlana w pasku z Widgetami oraz w Finderze.

CFBundleIdentifier Łańcuch tekstowy jednoznacznie identyfikujący Widget. Zaleca się aby ta nazwa byla naszą odwróconą domeną, np. com.apple.widget.Hello

CFBundleName Nazwa Widgetu, musi odpowiadać nazwie pliku .wdgt

CFBundleVersion Wersja widget’u

MainHTML Nazwa pliku html opisującego widget

Z A K O Ń C Z E N I E P R A CWszystkie utworzone pliki dla Widgetu umieszczamy w jednym folderze: He2o. Po skopiowaniu ich do niego, zmieniamy jego nazwę na He2o.wdgt i GOTOWE! Pierwszy Widget jest już gotowy!

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 36

Page 37: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Składniki Widgetu

Ikona gotowego Widgetu

Gotowy Widget umieszczony w środowisku Dashboard

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 37

Page 38: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

APPLESCRIPTPodstawy

AppleScript

C O T O T A K I E G O ?AppleScript jest językiem skryptowym zapewniającym bezpośrednią kontrolę nad aplik-acjami, które umożliwiają ich oskrytpowanie (ang. scriptable applications). Są to te aplik-acje, które odpowiadają na zdarzenia Apple (ang. Apple events) poprzez wykonywanie odpowiednich operacji i dostarczanie żądanych danych. Apple event to wiadomość wymieniana między procesami, która może zawierać zarówno polecenia jak i dane.

W C Z Y M S I Ę T O P I S Z E ?Do tworzenia skryptów AppleScript można wykorzystać zarówno XCode jak i program ScriptEdit.

Okno programu ScriptEdit

Pliki z kodem skryptu zapisuje się z rozszerzeniem .scpt.

OSA - Open Scripting Architecture

C O T O J E S T O S A ?Open Scripting Architecture to standard określający budowę aplikacji w sposób umożli-wiający reakcję i współpracę ze skryptami AppleScript. Definiuje struktury danych i funkcje, dzięki którym aplikacja może komunikować się z innymi aplikacjami, czy skryptami z wykorzystaniem Apple events.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 38

Page 39: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Podstawy AppleScript

J Ę Z Y K O P A R T Y N A Z D A R Z E N I A C HWszystko co dzieje się w języku AppleScript jest odpowiedzią na jakieś zdarzenie (ang. event).

Poniższy skrypt odpowiada reakcji na zdarzenie uruchomienia skryptu. ( zdarzenie run )

on run -- jakiś kodend run

Zdarzeń podstawowych w AppleScript jest niewiele. Ale użytkownik, może definiować swoje.

P O D S T A W O W E Z D A R Z E N I A J Ę Z Y K A A P P L E S C R I P Ton run -- to reakacja na zdarzenie odpowiadające uruchomieniu skryptuend run

on open listaReferencji(* to zdarzenie następuje, kiedy skrypt jest otwierany i będzie obsługiwał obiekty przekazane mu metodą drag & drop zmienna "listaReferencji" jest zmiennà stworzoną przez użytkownika, może mieć dowolną nazwę, zawiera ona listę referencji do przeniesionych obiektów*)end open

on quit -- zdarzenie to jest aktywowane tuż przed opuszczeniem skryptu -- aby wyjść ze skryptu, należy użyć polecenia continue quitend quit

on idle(* Jeśli skrypt jest zapisany z opcją "No exit", do stanu idle przechodzi on po wyjściu z obsługi zdarzenia: "run" albo "open". *) -- jeżeli chcemy uśpić skrypt pomiędzy kolejnymi obiegami idle używamy return 10 -- liczba 10 podaje liczbe sekund jakie skrypt bedzie czekałend idle

T Y P Y D A N Y C HAppleScript posiada podstawowe typy danych:

-- integer (liczby całkowite)set x to 5

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 39

Page 40: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

-- real (liczby rzeczywiste)set x to 3.57

-- characters (typ znakowy)set x to "f"

-- strings (typ łańcuchowy)set x to "The Hitch-hicker's Guide To The Galaxy"

-- lists (listy)set x to {"foo", 2, 3.57}

Instrukcja set (jak pokazano powyżej) służy do nadania wartości zmiennej. Można również do tego wykorzystać instrukcję copy.

copy “kopiowany lancuch znakow” to lancuch

Przykłady skryptów

U R U C H O M I E N I E A P L I K A C J I - K S I Ą Ż K A A D R E S O W A-- uruchomienie książki adresowejtell application "Address Book" activateend tell

O D C Z Y T A N I E O B E C N E J D A T Y N A G Ł O Sset volume 7copy the (current date) to theDatesay theDate as string

O D T W A R Z A N I E N A S T Ę P N E G O U T W O R U W I T U N E Stell application "iTunes" play (next track)end tell

O T W O R Z E N I E O K N A D I A L O G O W E G O

display dialog "Hello world"

Rezultat działania skryptu - okno dialogowe z rekstem “He2o World”

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 40

Page 41: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

O D L I C Z A N I E C Z A S U

property countdown : falseproperty currentDate : 0property startDate : 0property endDate : 0

(* ===== Event Handlers ===== *)

on launched theObject -- Pokaż okno set visible of window "main" to true -- Wyświetlenie okna dialogowego z prośbą o podanie czasu w formacie HH:MM:SS display dialog "Enter the amount of time for the countdown timer:" default answer "00:00:05" attached to window "main"end launched

on dialog ended theObject with reply withReply -- Sprawdzenie czy naciśnięto przycisk OK if button returned of withReply is "OK" then -- Zapisanie aktualnego czasu set currentDate to date (text returned of withReply) -- ustawienie czasu starti set startDate to current date -- wyznaczenie czasu końca odliczania set endDate to startDate + (time of currentDate) -- uaktualnienie wyśwetlania okna głównego set contents of text field "display" of window "main" to currentDate --odliczanie czasu - rozpoczęcie set countdown to true end ifend dialog ended

on idle theObject -- sprawdzenie czy możńa odliczać czas if countdown then -- jeśli określona porcja czasu już minęła - wyświetli się okno z informacją if (current date) is greater than endDate then set countdown to false display alert "Time's Up!" else -- w przeciwnym wypadku określamy ile czasu upłynęło set elapsedTime to (current date) - startDate -- uaktualniamy odmierzany czas w okienku set contents of text field "display" of window "main" to currentDate - elapsedTime end if end if -- w celu aktualizacji tzw idle event co sekundę zwracamy 1 return 1end idle

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 41

Page 42: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

Okno pytania o czas do odliczenia

Okno pokazujące czas do zakończenia odliczania

Informacja o zakończeniu odliczania

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 42

Page 43: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

PODSUMOWANIE

Pierwsze wrażenia

M A C O S X P R Z Y J A Z N Y D E V E L O P E R O W IProgramowanie z wykorzystniem frameworków systemu Mac OS X jest zajęciem bardzo przyjemnym. Dobrze przemyślane klasy oraz ich mnogość sprawia, że dla wielu prob-lemów mamy już gotowe napisane rozwiązania - co znacząco wpływa na czas tworzenia aplikacji.

Treść opracowaniaCelem tego opracowania nie było dogłębne omówienie wszystkich frameworków oraz dokładne przedstawienie architektury systemu Mac OS X. Taka pozycja mijała by się z celem, ponieważ sam podręcznik jedynie wprowadzający w Cocoa ma objętość ponad 230 stron (Cocoa Fundamentals Guide).

Chciałem przede wszystkim pokazać to, co moim zdaniem jest najważniejsze, najciekawsze, to co wyróżnia system Max OS X spośród innych komercyjnych systemów operacyjnych, jego podejście do developerów, do zagadnienia tworzenia oprogramowania, wsparcie dla programistów i na prawdę dobrą dokumentację techniczną, z której każdy ze znajomością j. angielskiego może się nauczyć tworzenia plikacji pod Mac OS X.

C Z Y I S T N I E J Ą P O L S K I E D O K U M E N T Y O P I S U J Ą C E M A C O S X ?W trakcie poszukiwań materiałów do opracowania nie znalazłem zbyt wielu interesu-jących polskojęzycznych pozycji.

Większość dokumentacji jest w języku angielskim.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 43

Page 44: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

DODATEK ANiech komputer pracuje za Ciebie

Automator

C O T O J E S T A U T O M A T O R ?Jak sama nazwa wskazuje, jest to aplikacja umożliwiająca automatyzację pewnych czyn-ności często wykonywanych przez użytkowników.

Okno Automatora.

Automator umożliwia zbudowanie sekwencji akcji tworzących tzw. workflow. Rezultat jednej akcji (jednego kroku workflow) jest przekazywany do następnej. Dzięki czemu w prosty spośob zbudujemy mechanizm, który umożliwi nam np. zmianę nazwy, czy przeniesienie grupy plików, obróbkę wielu obrazów.

S K Ą D S I Ę   B I O R Ą A K C J E ?Na początku mamy do dyspozycji pokaźny zbiór akcji dostarczany przez aplikacje, które były wbudwane w system (Finder, iPhoto, Mail, Safari, Spotlight itp). Ten zbiór można rozszerzyć na 3 sposoby:

• importując akcje wykonane przez kogoś innego,

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 44

Page 45: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

• tworząc akcje przy pomocy XCode I frameworka Cocoa,

• tworząc akcje w języku AppleScript.

Współpraca akcji tworzących workflow.

J A K Ą K O R Z Y Ś Ć M O Ż E M I E Ć D E V E L O P E R Z W Y K-O R Z Y S T A N I A A U T O M A T O R A ?Xcode udostepnia kilka akcji, z które mogą usprawnić i przyśpieszyć pracę developera. Na przykład, jeśli zawsze pod koniec dnia pracy wykonujemy update plików źródłowych projektu, a potem ich commit do repozytorium systemu kontroli wersji CVS, to możemy z tych 2 akcji stworzyć workflow. Jeśli jeszcze dodamy kilka warunków do tego, że np foldery z lokalną konfiguracją projektu NIGDY nie mogą zostać wysłane do repozyto-rium lub jakichś danych nie chcemy aktualizować z repozytorium, to okaże się, że poświęcenie kilku minut na stworzenie workflow usprawni prace, a co ważniejsze wye-liminuje ryzyko błędów.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 45

Page 46: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

SPIS ŹRÓDEŁGłównym źródłem informacji była strona firmy Apple całkowicie poświęcona devel-operom oprogramowania na ich system.

http://developer.apple.com/

Liczba dostępnych tam dokumentów, przykładów i wszelkiego rodzaju tutoriali dosyć dobrze wyczerpuje temat. W razie jakichkolwiek wątpliwości można skorzystać z listy mailingowej zrzeszającej użytkowników systemu Mac OS X. Lista ta jest również prze-glądana przez inżynierów Apple.

Większość informacji, których nie zdobyłem na stronach Apple, znalazłem na Wikipedii:

http://www.wikipedia.org/

Lub też projektach siostrzanych, np. Wikibooks.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 46

Page 47: MAC OS X DLA DEVELOPERÓW - Marcin Krzychkrzymar.net/wp-content/uploads/2008/11/MacOSX.pdf · 2011-10-14 · Accessibility to zbiór API i technologii ułatwiających korzystanie

InformacjaGrafiki oznaczone przez “© Apple Inc.” należą do Apple Inc. i zostały wykorzystane je-dynie w celach edukacyjnych.

http://krzymar.net

Architektura i "ameworki Mac OS X 10.4 Tiger - podstawy 47