Automator naposled: pro programátory - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

Automator naposled: pro programátory

23. listopadu 2005, 00.00 | Dnešním dílem náš seriál, věnovaný aplikaci Automator a jejím možnostem, ukončíme. Nakonec se podíváme na aplikaci z hlediska programátora: ukážeme si, jak vytvářet pro Automator vlastní akce, které budeme moci využívat v pracovních postupech stejně snadno, jako ty standardní.

Dnešním dílem náš seriál, věnovaný aplikaci Automator a jejím možnostem, ukončíme. Podobně, jako tomu bylo u série článků věnovaných aplikaci Quartz Composer, i zde se nakonec podíváme na aplikaci z hlediska programátora: ukážeme si, jak vytvářet pro Automator vlastní akce, které budeme moci využívat v pracovních postupech stejně snadno, jako ty standardní.

Přímá podpora v Xcode

Vývojové prostředí Xcode "ví", jak má takový projekt vypadat, a dokáže nám automaticky připravit jeho výchozí strukturu na základě projektového vzoru. Prostě si vyžádáme vytvoření nového projektu příkazem "New Project", a pak z možných vzorů, jež se objeví v okně projektového asistenta, zvolíme "Action / Cocoa Automator Action".

Xcode sestaví projekt, který obsahuje

  • připravenou kostru kódu třídy, která vlastní akci implementuje;
  • soubor "Info.plist", obsahující potřebné náležitosti akce Automatoru (a že jich je ☺);
  • soubor "main.nib" se standardním "view", v jehož rámci se zobrazuje grafické uživatelské rozhraní akce uvnitř aplikace Automator.

Kromě toho samozřejmě projekt obsahuje všechny ostatní potřebné náležitosti; nejdůležitější jsou však ty výše uvedené:

Uživatelské rozhraní

Jak je při programování v Cocoa poměrně běžné, můžeme začít sestavením grafického uživatelského rozhraní. Jeho obsah samozřejmě závisí na konkrétní akci, kterou se rozhodneme naprogramovat; my si dnes ukážeme velmi jednoduchou akci, která zobrazí přesně a detailně svůj vstup (tedy výstup akce předcházející) – tak se bude poněkud podobat standardní akci View Results; na rozdíl od ní se však nebude snažit výstup "chytře" formátovat, což sice v běžných případech není dobře, ale narazíme-li na nějaké nečekané problémy, může se nám naopak detailní znalost konkrétního objektu a jeho třídy hodit.

Proto otevřeme soubor "main.nib" v InterfaceBuilderu – stačí na něj samozřejmě poklepat – a do view vložíme pouze textový objekt (v němž právě data zobrazíme). Přidáme "outlet" jménem "tv", "natáhneme dráty" (pro propojení outletu "tv" z "File Owner" na textový objekt), nastavíme rozumně atributy – a to je všechno:

Vlastní kód

Kód, který zobrazí přijatá data a opět je předá další akci, je velmi jednoduchý (samozřejmě jsme volili ukázkovou akci tak, abychom se nezapletli do komplikovaného programování).

Provedení akce knihový kód vždy zajistí tak, že nejprve podle potřeby vytvoří objekt, který akci representuje – ten se vytvoří automaticky na základě třídy, jež je uvedena v souboru "Info.plist" jako NSPrincipalClass – můžeme si to ověřit, avšak o tato nastavení se obecně nemusíme starat, neboť je pro nás korektně připravil Xcode na základě projektového vzoru. Kdykoli se má akce provést, knihovní kód prostě objektu pošle standardní zprávu runWithInput:fromAction:error:; odpovídající hlavičkový soubor vidíme na prvém obrázku.

Implementace může vypadat třeba takto:

@implementation OCSDetailedDisplay
-(id)runWithInput:(id)input fromAction:(AMAction *)anAction error:(NSDictionary **)errorInfo {
    NSMutableString *ms=[NSMutableString stringWithString:@"Detailed Display v1.0 (c) OCSoftware\n\n"];
    [ms appendFormat:@"Input class %@\n\n",NSStringFromClass([input class])];
    if ([input isKindOfClass:[NSArray class]]) {
        int i,n=[input count];
        [ms appendFormat:@"Array of %d items:\n",n];
        for (i=1;i<=n;i++) {
            id o=[input objectAtIndex:i];
            [ms appendFormat:@"  %d: %@ -- (%@)\n",i,NSStringFromClass([o class]),o];
        }
    } else [ms appendFormat:@"(%@)",input];
    [tv setString:ms];
    return input;
}
@end

Jak vidíme, kód je zcela prostý – sestaví text, popisující data, do textového objektu "ms": nejprve zobrazí třídu přijatého objektu, a pak, pokud náhodou jde o pole, vypíše jednotlivé objekty v něm. Nakonec metoda vrátí přesně táž data, jež získala na vstupu. Samozřejmě by bylo možné tento kód zásadně vylepšit; toto je jen výchozí princip ☺

Soubor Info.plist

Řada velmi důležitých nastavení je v souboru Info.plist. Jelikož Xcode zatím neobsahuje specializovaný editor pro nastavení, které se týkají právě Automatoru (nezkoušel jsem dosud současnou nejnovější versi 2.2, která se objevila právě v době, kdy tento článek píši) – musíme proto vedle inspektoru targetu, v němž můžeme určit základní informace (jako je výše zmíněná "principal class" nebo identifikátor, který je velmi důležitý), musíme použít i textový editor, a další proměnné v souboru Info.plist nastavit ručně:

  • AMName je "interní" jméno akce; v Automatoru se ale samozřejmě zobrazuje lokalizované jméno ze souboru InfoPlist.strings – v našem případě "Detailed Data Display for Action Programmers");
  • AMAccepts určuje možné hodnoty vstupních dat. Jelikož naše akce "spolkne" prakticky cokoli, je vhodným nastavením dictionary obsahující "Container"="List", "Optional"=false a "Types"=("*");
  • AMProvides jsou možné hodnoty dat, jež akce dokáže produkovat; protože data předáváme beze změny, bude hodnotou stejný dictionary, jako u AMAccepts;
  • AMApplication je aplikace, pro niž je plugin určen – "Automator";
  • AMDescription obsahuje podrobnější popis akce; podobně AMIconName může obsahovat speciální ikonu a AMKeywords seznam klíčových slov, podle nichž bude Automator akci schopen nalézt.

To je vlastně všechno...

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

Diskuse k článku

 

Vložit nový příspěvek   Sbalit příspěvky

 

Pro zvedave

Autor: Ondra Soukup Muž

Založeno: 23.11.2005, 00:08
Odpovědí: 0

v XCode 2.2 je to s Info.plist to samy, mozna si udelat nejaky AppleScript na vytvareni (ale ja radsi bash ;)

Odpovědět na příspěvek

RE: Pro zvedave

Autor: OC Muž

Založeno: 23.11.2005, 22:16

Ono se to dá v XML editovat docela dobře; hlavně že už to není jako v ProjectBuilderu asi před dvěma roky zakopáno v projektu, kde to šlo editovat jen zcela nepoužitelným Property List Editorem :)

Jinak specializovaný editor na nastavení Automatoru by mi ani tak nechyběl, ale IMHO je ****velmi**** špatné, že tam není specializovaný editor na nastavení Services :((((

Odpovědět na příspěvek

 

 

Vložit nový příspěvek

Jméno:

Pohlaví:

,

E-mail:

Předmět:

Příspěvek:

 

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: