Můj toolchain – AppCode – 1. část

Po čase se opět dostáváme k sérii Můj toolchain a konečně se zaměříme na můj milovaný AppCode a nenáviděný Xcode. Zopakuji to, co říkám vždy. Ať si každý používá co mu vyhovuje, nikomu to nenutím, jen ukazuji rozdíly. AppCode je dle mého názoru lepší, ale má i své stinné stránky. Co je nemá? Neznám produkt, který by vyhověl každému ve všech oblastech.

Co je AppCode? Objective-C IDE done right by JetBrains. Základem je IntelliJ IDEA s podporou Objective-C, projektů z Xcode, atd. A proč zrovna tohle IDE tak vychvaluji?

Přístup JetBrains

IDE je můj denní chleba a jsem za něj ochoten zaplatit nemalé peníze. AppCode stojí 89 € bez DPH a je to cena na 1 rok. Po uplynutí této doby se musí obnovit licence a to za cenu 53 € bez DPH. Pro někoho nemalé peníze, ale podle mě to je ještě levné. Vemte v potaz, že si tím vyděláváte na chleba. Je to váš nástroj, stejně jako pro jiného vrtačka, auto, apod. Uvedené ceny jsou pro individuální vývojáře. Firemní licence je o něco málo dražší.

Tady ještě trochu odbočím a zmíním menší vychytávku ze strany JetBrains, která není tak úplně zřejmá. V lednu 2015 si koupíte roční licenci. Ta vyprší k poslednímu prosinci 2015 a musíte obnovit. Pokud zapomenete, chvíli AppCode nepoužíváte a licenci si obnovíte až v březnu 2016, platnost licence je i tak navázaná na licenci předchozí. To znamená, že obnovená licence nebude platná do března 2017, ale do posledního prosince 2016. Přesně rok po skončení platnosti licence, kterou obnovujete. Se přiznám, že jsem se taky už nachytal a zaplatil 2x obnovení a stálo mě to víc než kdybych koupil zcela novou licenci.

JetBrains v průběhu vývoje AppCode vydává EAP verze. EAP znamená Early Access Program. Máte možnost sledovat jakým směrem se AppCode ubírá. Ale co je důležitější, mají otevřený systém na reportování chyb a nových požadavků. Reportovat můžete jak pro stable verze, tak i pro EAP verze. Používají na to svůj systém YouTrack (ten jsem v rámci série Můj toolchain popisoval zde). Systém je otevřený. To znamená, že vidím kdo co reportoval, neztrácím čas s duplikáty, můžu hlasovat. A hlavně, JetBrains týpci reagují promptně. Ještě se mi nestalo, aby tam něco viselo bez povšimnutí několik dnů, týdnů nebo měsíců. V případě chyby dojde k brzké nápravě a nové požadavky, pokud jsou rozumné, jsou také naimplementovány.

Teď to srovnejte s Applem. Jedna velká, černá, nereagující díra. Jejich systém na reportování chyb jménem Radar je něco příšerného. Funkčně je to pořád stejně debilní a to už hezkou řádku let. Nedávno Apple změnil design, ale jinak je to pořád ten stejný Radar. Vidíte pouze svoje reporty, nemůžete hledat duplikáty, nemůžete vlastně vůbec nic. To nemluvím o pocitu marnosti, který vzniká po nahlášení problému. Buď se neděje vůbec nic a váš report tam visí dny, týdny, měsíce a roky. Nebo je zavřen, že jde o duplikát. Bohužel nemáte přístup k tomu duplikátu, takže nemůžete zkontrolovat, že tomu tak opravdu je. A pokud máte štěstí, Apple reaguje, požaduje nějaké detaily jako sysdiagnose, … a potom zase nic. Když to náhodou fixnou, nevíte v jaké verzi se to objeví. Připadáte si jak pitomec.

Proto vznikají šílenosti jako Open Radar. Jinak řečeno vyplníte report do Radaru, ten samý report zkopírujete do Open Radaru spolu s číslem vyplněného reportu z Radaru. Vývojáři tak můžou hledat duplikáty, řešení, … Proč to Apple neotevře a neudělá stejně jako JetBrains? Protože na vývojáře z vysoka kašle. Ačkoli těmto věcem fandím, nepoužívám je. Já osobně totiž na Apple dlabu a reportuju jenom kritické věci, které se týkají běhu samotného OS. Všechno ostatní je ztráta času. A tento názor nemám jenom já. Příkladem budiž třeba Mike Ash.

mike-fuck-apple

O rozšiřitelnosti, nějakém rozumném API pro pluginy, raději pomlčím. Pro někoho prkotiny. Ale pokud mám tu možnost používat něco jiného s tím, že tvůrce normálně komunikuje, vychází vývojářům vstříc, proč bych to neudělal? AppCode není dokonalý. Ale tohle je obrovské plus a svým způsobem i obrovská úleva, protože se nemusím zabývat černou dírou a frustrovaně reportovat problémy Applu. Můj čas je drahý a nehodlám tímto směrem investovat ani minutu.

Kontexty

Představte si následující situaci. Na něčem pracujete, máte otevřeno několik oken a přijde za vámi kolega s urgentním problémem. Co teď? V Xcode okna pozavíráte, zrušíte break pointy, přepnete branch, kolegovi pomůžete a potom si to všechno zase pracně vrátíte. Takže přijdete o celý kontext. A to nemusí být jenom kolega, ale i klient, prostě kdokoli kým jste ochotni se nechat vyrušit. Žijeme v 21. století, máme mocné nástroje a ty by nám měli sloužit. Ne my jim. U JetBrains to pochopili a AppCode (stejně tak jako IntelliJ IDEA) nabízí Tasks & Context Switching. Kontextem se rozumí:

  • changelist,
  • otevřené soubory,
  • pohled na projekt v navigátoru,
  • konfigurace
  • a break pointy.

To vše si AppCode pamatuje v rámci kontextu. A vy si můžete vytvořit kolik kontextů chcete a přepínat se mezi nimi. Výrazně tak za určitých okolností šetříte čas.

Úkoly a integrace

S kontexty úzce souvisí úkoly a integrace. AppCode spojuje kontext s úkolem (zmiňovaný Task & Context Switching). Pod úkolem si představte jakoukoli činnost, kterou musíte provést. Opravit chybu, naimplementovat novou fičuru, … Běžně to vídávám lidi dělat tak, že:

  • otevřou prohlížeč, najdou si úkol na kterém budou pracovat,
  • změní mu stav na In Progress, pokud to jejich systém umožňuje,
  • začnou to mastit v branchi master,
  • potom to pushnou do masteru a
  • nakonec zase vlezou do prohlížeče a označí úkol jako splněný.

Proboha proč? Na všechno výše uvedené mi stačí AppCode, který nemusím vůbec opustit. BTW hlavně, že Apple přidal do Xcode build boty, ale podobné věci neřeší.

Příklad použití. Chci v projektu PL- (každý projekt v YouTracku má svoji zkratku) fixnout jeden crash, ale nepamatuji si ani číslo, ani popis, … V AppCode dám otevřít úkol, on si obnoví jejich seznam a já jenom zadám PL- crash. Úkoly jsou vyfiltrovány, já si najdu ten, který mě zajímá a potvrdím.

appcode-task-search

 

V dalším dialogu si nastavím co se má přesně stát. V tomhle případě chci začít na čisté ploše, stav úkolu přepnout na In Progress a chci pro něj vytvořit branch. Potvrdím a je hotovo. Můžu začít pracovat. V YouTracku je úkol označen jako In Progress, takže zbytek týmu je informován. Management ví, co se děje, apod.

appcode-task-open

 

V tuhle chvíli mám možnost úkoly přepínat aniž bych ztratil kontext. Což je obrovská výhoda, protože se sami přepínají branche, otevřené soubory, … Vše co kontext drží (viz. výše). A když mám hotovo, v menu vyberu, že chci aktivní úkol zavřít.

appcode-task-close

Close issue říká AppCode, že má můj úkol v YouTracku označit za Fixed. Commitnout zbývající věci, pokud jsem zapomněl a pokud chci, veškeré změny mergnout do masteru. V téhle chvíli moje práce na daném úkolu končí, protože v YouTracku si to po Fixed automaticky přebírá QA (viz. vlastní workflow) a zároveň si to převzal Travis, který to otestuje a udělá z toho build pro stage. Takže i ostatní to můžou zkoušet rovnou na telefonech, na počítačích, protože náš Travis to rovnou uploaduje do HockeyApp. Viz. první článek série Můj toolchain. AppCode sám o sobě podporuje následující služby:

appcode-task-servers

A konfigurace je přímočará. Zadáte adresu, jméno, heslo a filtr. V dalších záložkách si můžete nastavit jak bude vypadat commit message nebo vybrat vlastní stavy pro In Progress a Fixed z pohledu AppCode.

appcode-task-server

Ono se to nezdá, ale zkuste si to všechno sečíst. Kolik času trávíte přepínáním branchů, stashováním změn, otvíráním / zavíráním oken, … Hodně. Proč to neautomatizovat.

Interface Builder

AppCode neobsahuje interface builder, resp. ještě nedávno neobsahoval. Já to neřeším, protože nepoužívám a když už, tak na chvíli pustím Xcode a rychle se vrátím do AppCode. Každopádně tu máme early preview pluginu, který se jmenuje UI Designer. Má pár much a nepodporuje XIB z Xcode 5.1. JetBrains pracuje na AppCode 3.0 EAP, který má vyjít brzy, velmi brzy. A ten už bude podporovat XIB Xcode 5.1.

Jinak AppCode ještě neumí editovat Core Data model. Spouští na to Xcode.

Jak dalece jsou pozadu za Xcode

Pokud se někdo bojí, že JetBrains nestíhá vydávat nové verze spolu s Applem, tak se nebojte. Žádné velké zdržení se nekoná a pokud nastane, je to v řádech několika dnů. A to spíš přeháním. Pokud je netrpělivost vaše vlastnost, tak se na tu chvíli přepnete do Xcode. Já neaktualizuju hned. Dělám to v době, kdy AppCode potvrdí, že všechny změny podporuje.

Koukám, že jsem se trochu rozvášnil a je z toho něco mnohem delšího než jsem předpokládal. Dneska to ukončím a rozdělím to na několik částí. V příští části si popíšeme co v Xcode stojí za starou bačkoru a jak děsně prudí. Věci jako refaktoring, … Enjoy!

2 responses

Leave a Reply