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:
Začínáme s
Programování pro iOS - 9. Jak dostat aplikaci do iPhone
29. září 2010, 00.00 | Prvá verze bouřkoměru je hotová. Před odesláním aplikace do AppStore je ale samozřejmě zapotřebí ji vyzkoušet na skutečném hardwaru. V našem případě v iPhone.
Jak uvidíme, není to vůbec tak jednoduché, jak by se na první pohled mohlo zdát. Pokud totiž nepoužíváme "jailbreak" (neoficiální "odemčení" operačního systému iPhone), neexistuje způsob, jak do něj dostat spustitelný kód, který není podepsán certifikátem, vydaným společností Apple. (O digitálním podepisování jsme si něco málo řekli zde.)
Abychom takový certifikát získali, musíme absolvovat následující kroky:
Založení konta u Apple
Prvým z kroků je založení konta, které reprezentuje vývojářskou firmu, u Apple; bez toho není možné (vyjma hraní si se simulátorem, jímž jsme se zabývali v předcházejících dílech) ani začít.
Tento krok není plně automatizovaný, a také není zdarma: zájemce se musí přihlásit na stránce developer.apple.com/programs/ios, počkat na schválení firmou Apple, a zaplatit 99 dolarů. To je cena, kterou si za možnost vývoje pro iOS Apple účtuje každým rokem.
Poté, co nám Apple vytvoří odpovídající konto, získáme přístup do samostatné webové aplikace "iPhone Provisioning Portal"; jakmile se přihlásíme k vývojářským stránkám developer.apple.com/devcenter/ios s uživatelským jménem, které má do této aplikace přístup, standardně uvidíme v pravém horním rohu odpovídající odkaz:
Hlásíme se tedy týmž jménem ("apple id"), které už používáme dávno; jediný rozdíl spočívá právě v tom, že firma Apple nám přidělila právo k přístupu do aplikace "iPhone Provisioning Portal".
Alternativou samozřejmě je se připojit k některé již existující firmě, která pro iOS aplikace vyvíjí; v takovém případě nám přístup do aplikace "iPhone Provisioning Portal" v rámci jejího konta mohou přidělit její vlastní správci.
Jen pro úplnost neuškodí se zmínit o tom, že Apple korektně podporuje i případ, kdy je jeden člověk (přesněji, jedno přihlašovací jméno) členem více týmů: v takovém případě portál developer.apple.com prostě po přihlášení nechá uživatele vybrat, v rámci kterého z týmů chce v této session pracovat.
Nadále tedy budeme předpokládat, že přístup do aplikace "iPhone Provisioning Portal" již máme, a ukážeme si, co a jak je zapotřebí udělat v ní.
Certifikát vývojáře
Každý programátor, který chce sestavovat aplikace pro zařízení s operačním systémem iOS, musí mít vlastní certifikát (co je to certifikát?), jehož prostřednictvím bude podepisovat sestavené aplikace. Jelikož jde o certifikát vydaný společností Apple, iPhone či iPad umožní instalaci a spuštění kódu, který je takto podepsán – při splnění některých dalších podmínek, jež si vysvětlíme níže.
Pozor! Máte-li dostatečně aktuální verzi vývojového prostředí Xcode, může za vás tuto práci zajistit skoro automaticky; k tomu se vrátíme na konci článku v odstavci "Podpora v Xcode". Teď si ale nejprve vysvětlíme, co vše je pro vývoj zapotřebí a jak to lze prostřednictvím portálu získat; je velmi vhodné tomuto mechanismu rozumět, byť i některé z následujících kroků není nutné dělat "ručně", ale lze je ponechat na Xcode.
Vystavení certifikátu si vyžádáme pomocí standardizovaného požadavku ve formátu CSR. Ten musíme sestavit na vlastním počítači; jeho součástí je totiž vygenerování privátního klíče (co je to privátní klíč?) – ten je naším hlavním "tajemstvím" a neměl by nikdy opustit náš vlastní počítač (jinak, než v dobře zašifrované záložní kopii).
Požadavek na vystavení certifikátu dokáže vytvořit aplikace Certificate Assistant. Nenalezneme ji ale ve standardní složce "Utilities", kam by logicky patřila; namísto toho se spouští pomocí samostatné položky v nabídce aplikace Keychain Access:
Zde pak do polí dialogového okna zapíšeme e-mailovou adresu a jméno, jež budou součástí vydaného certifikátu – firma Apple zároveň požaduje, aby šlo o adresu a jméno, jež jsou uloženy jako součástí vývojářského konta na developer.apple.com. Naopak e-mailovou adresu certifikační autority ("CA Email Address") nevyplňujeme – tou je Apple a dobře to ví :)
Z toho také nepřímo plyne, že výsledný certifikát si musíme nechat uložit na disk. Položka "Let me specify..." není zapotřebí – ta nám umožní určit délku klíče a šifrovací algoritmus; standardní hodnoty – algoritmus RSA a klíč délky 2048 – by měly být standardní výchozí hodnotou. Chceme-li mít jistotu, můžeme samozřejmě "Let me..." zaškrtnout a RSA/2048 si v následujícím dialogovém okně ověřit; jinak se rovnou sestaví veřejný i tajný klíč, oba se uloží do standardního keychainu (co to je?), a do souboru, jehož jméno můžeme zvolit pomocí standardního panelu "Save", se uloží požadavek.
Mimochodem: máme-li již vygenerovaný pár klíčů, který bychom chtěli použít, není to problém: zobrazíme si privátní klíč v keychainu, označíme jej, a teprve pak spustíme Asistenta – již položka v nabídce bude odlišná (namísto "Request a Certificate From a Certificate Authority..." uvidíme "Request a Certificate From a Certificate Authority With “jméno zvoleného klíče”"), a při následné akci se nebude generovat nový pár klíčů, ale použije se ten zvolený.
Pak jen požadavek pošleme Apple pomocí tlačítka "Request Certificate" ve stránkách aplikace "iPhone Provisioning Portal" po přepnutí do režimu "Certificate":
Webová aplikace po přijetí požadavku zobrazí v tabulce řádek pro nový certifikát, přičemž ve sloupci "Status" bude "Pending Issuance" – vystavení certifikátu chvilku trvá (typicky jen několik desítek sekund).
Zatímco na něj budeme čekat, stáhneme si pomocí odkazu "click here to download now" certifikát Apple WWDR: ten potřebujeme jako součást řetězu certifikačních autorit (jak to funguje?), jímž bude náš vývojářský certifikát podepsán. To uloží na disk soubor "AppleWWDRCA.cer"; stačí na něj poklepat ve Finderu, a aplikace Keychain Access jej automaticky otevře a certifikát, který je v něm zabalen, uloží do zvoleného keychainu.
Mezitím už určitě máme certifikát u Apple připraven; pokud se obsah stránky neobnovil automaticky, můžeme překlepnout třeba na "History" a zpět na "Development". Ve sloupci "Status" pak uvidíme "Issued", a ve sloupci "Action" tlačítko "Download" (a odkaz "Revoke", jímž bychom mohli platnost certifikátu zrušit, kdybychom chtěli):
Použijeme tlačítko "Download", jež nám na počítač uloží další soubor ve formátu CER (obvykle se jmenuje nějak jako "developer_identity"); uložíme jej opět do keychainu stejně jako certifikát WWDR, stačí soubor prostě jen otevřít.
Už můžeme tedy sestavovat aplikace, jež poběží na iPhone?
Ale kdež. To bychom to měli moc jednoduché. Apple nejenže vývojářům nedovoluje sestavovat aplikace bez certifikátu; navíc i s ním je vývoj vázán jen na konkrétní, předem pevně danou skupinu konkrétních zařízení!
Správa zařízení
Máme-li vývojářský certifikát, je to teprve první krok k možnosti sestavovat aplikace pro iPhone či iPad (o iPodu Touch či naopak případných budoucích zařízeních nemluvě). Ve druhém kroku musíme do aplikace "iPhone Provisioning Portal" zapsat identifikační čísla všech zařízení, pro něž chceme aplikace sestavovat.
Každé zařízení se systémem iOS má vlastní identifikační číslo; říká se mu "UDID" ("Unique Device IDentifier"), a je generováno interně, způsobem, o němž Apple tvrdí, že je prý bezpečně anonymní v tom smyslu, že ze známého UDID nelze zjistit žádné konkrétní detaily o zařízení, jemuž patří.
Nejjednodušší způsob, jak UDID pro konkrétní zařízení zjistit, nabízejí iTunes: připojíme přístroj k počítači, otevřeme iTunes, zařízení najdeme ve skupině Devices a aktivujeme záložku "Summary". Zde normálně vidíme jedenáctimístné sériové číslo; stačí na ně ale klepnout myší, a zobrazení se ihned přepne na UDID:
Pokud v tomto režimu použijeme příkaz "Copy", UDID se uloží do schránky, takže jeho čtyřicet hexadecimálních číslic není zapotřebí opisovat ručně.
Ze schránky můžeme UDID rovnou uložit do aplikace "iPhone Provisioning Portal": přepneme ji do panelu "Devices", kde je pomocí tlačítka "Add Devices" můžeme – spolu se jménem, podle nějž zařízení rozpoznáme – přímo zadat do webového formuláře.
Pozor na to, že aplikace "iPhone Provisioning Portal" nám nedovolí zapsat více, než sto zařízení ročně: pro samostatného vývojáře nebo malou firmu je to ovšem dostatečná rezerva; pokud bychom ale chtěli využívat služby řady betatesterů, navíc třeba pro každou z aplikací jiné skupiny lidí, můžeme zjistit, že je to limit nepříjemně nízký.
Identifikátor aplikace
Každá aplikace nebo skupina aplikací potřebuje mít vlastní identifikátor – v podstatě jde o textový řetězec, který (spolu s "bundle id", jenž nastavujeme v projektu) slouží pro rozpoznání aplikace
• při přístupu ke službám In-App purchase;
• při přístupu ke službám Game Centre;
• pro rozesílání tzv. "push notifikací" ze serveru;
• při přístupu k šifrovaným položkám v keychainu.
U jednoduchých aplikací, jež nic z toho nepotřebují, je nejjednodušší pro vývoj používat obecný identifikátor, který se skládá z náhodně vygenerovaného textu v části "Bundle Seed ID" – tu webová aplikace na vyžádání vytvoří sama –, a z hvězdičky v části "Bundle Identifier":
S tím pak vystačíme pro všechny aplikace.
Profily
Propojení mezi aplikacemi, vývojáři a konkrétními zařízeními zajišťují tzv. profily: speciální dokumenty, jež obsahují
• identifikátor aplikace (nebo skupiny aplikací), pro než profil slouží;
• seznam (certifikátů) vývojářů, kteří mohou tento profil používat;
• seznam UDID zařízení, pro něž tento profil platí;
• typ profilu.
Při práci s aplikací "iPhone Provisioning Portal" běžně pracujeme se dvěma typy profilů: provozní ("provisioning") profil umožní spuštění a instalaci aplikace, která byla při vývoji podepsána některým z vývojářů, jejichž certifikáty jsou součástí profilu, na některém ze zařízení, jejichž UDID v němž jsou uložena. Distribuční profil pak slouží k distribuci aplikace na AppStore; tím se budeme zabývat později.
Sestavení provozního profilu ve webové aplikaci je jednoduché: vyžádáme si jeho vytvoření v záložce "Provisioning" pomocí tlačítka "New Profile", určíme jeho jméno, a vybereme identifikátor aplikace, vývojáře a zařízení, jež profil má obsahovat. Jeho sestavení opět chvilku trvá – stejně jako tomu bylo u certifikátu – a pak si jej můžeme stáhnout pomocí tlačítka "Download":
Tyto profily mají typ "mobileprovision" a po otevření se automaticky nainstalují do Xcode.
Co tedy vše potřebujeme?
Dříve, než sestavíme prvou aplikaci pro iPhone, musíme tedy mít
• v keychainu certifikát Apple WWDR;
• tamtéž vlastní vývojářský certifikát, vygenerovaný Apple;
• a také pár klíčů, umožňující tímto certifikátem šifrovat a podepisovat;
• v Xcode pak musíme mít instalovaný provozní profil, v němž je odkaz na náš vývojářský certifikát, UDID zařízení, pro nějž chceme aplikaci sestavit, a identifikátor aplikace, který je s ní kompatibilní (nejjednodušší je výše zmíněná hvězdička).
Certifikát potřebujeme proto, aby vývojový systém při sestavování aplikace mohl vygenerovat digitální podpis.
Profil je nutné nainstalovat do cílového zařízení; jeho systém pak přijme jen ty aplikace, jež jsou podepsány certifikátem, který je v některém z profilů v zařízení instalovaných.
Konečně už tedy můžeme otevřít cíl projektu, přepnout jej do záložky "Build", v ní vyhledat oddíl "Code Singing", a v tom zvolit vhodný certifikát pro podepisování (obvykle budeme mít jen jeden; já jich mám více, neboť jsem členem více vývojářských týmů) a profil, odpovídající právě sestavované aplikaci:
Pak můžeme v levém horním rohu okna Xcode přepnout na "Device". Ověříme, že zařízení je připojeno k počítači, a pomocí příkazu "Build & Run" necháme aplikaci přeložit pro cílovou architekturu ARM. Xcode automaticky hotovou aplikaci i zvolený provozní profil instaluje do zařízení a aplikaci spustí.
Jednoduché, že?
Já vím. Ani trochu.
Zřejmě to tak připadalo mnoha vývojářům, a ti si tak dlouho stěžovali, až se firma Apple rozhodla jim život alespoň trochu usnadnit: v poslední době máme v Xcode k dispozici podporu, která řadu výše popsaných služeb automatizuje.
Podpora v Xcode
Od verze 3.2.3 nahoru nám Xcode dokáže ušetřit spoustu práce pomocí automatizovaných služeb, jejichž uživatelské rozhraní je k dispozici prostřednictvím okna Organizer: zde je možné si vyžádat automatické přidání UDID nového zařízení do aplikace "iPhone Provisioning Portal", vygenerování obecného profilu pro vývoj libovolné aplikace (jež nepotřebuje služby in-app purchase apod.), a řadu dalších služeb.
Nejprve se postaráme o to, aby v okně Organizer v záložce "Provisioning Profiles" byla zaškrtnuta volba "Automatic Device Provisioning":
Pak nové zařízení připojíme k počítači; Xcode načte jeho informace, zobrazí nám je v okně v seznamu "DEVICES", a tam také nalezneme tlačítko "Use for Development". Po jeho stisknutí
• si Xcode vyžádá vložení přihlašovacího jména a hesla pro portál developer.apple.com;
• automaticky se pak přihlásí k aplikaci "iPhone Provisioning Portal";
• je-li to zapotřebí, vyžádá si vytvoření vývojářského certifikátu;
• na Web uloží UDID nového zařízení;
• vytvoří profil jménem "Team Provisioning Profile: *", do nějž automaticky uloží certifikáty všech vývojářů z týmu a UDID všech zařízení – včetně toho nového. Pokud již profil existuje, zařízení do něj přidá;
• tento profil stáhne z Webu, uloží jej, a instaluje jej do daného zařízení.
Ostatní vývojáři si mohou tento profil stáhnout nebo obnovit po změnách pomocí tlačítka "Refresh".
Obsah seriálu (více o seriálu):
- Nastal čas na kakao...
- Tak nejdřív kakao ochutnáme...
- Programovací jazyk C: velmi, velmi stručně
- Objective C: to si vysvětlíme podrobněji
- Co jsme si o Objective C ještě neřekli...
- Nastal čas na kakao - Vznik a zánik objektů
- Nastal čas na kakao - Kopírování objektů
- Nastal čas na kakao - Skryté podtřídy
- Nastal čas na kakao - Základní služby objektů
- Nastal čas na kakao - Jak správně psát v Objective C
- Nastal čas na kakao - Jak správně importovat
- Nastal čas na kakao - Podtřídy, delegáti, vkládání, jak se to rýmuje?
- Nastal čas na kakao - Využití kategorií namísto dědičnosti
- Nastal čas na kakao - Vkládání objektů a přesměrování zpráv
- Nastal čas na kakao - Inicializace a rušení objektů
- Nastal čas na kakao - Metody initWith... a designovaný inicializátor
- Nastal čas na kakao - Inicializace: tipy a triky
- Nastal čas na kakao - Accesory: přístup k proměnným instancí
- Nastal čas na kakao - Šedá je teorie, zelený je strom života...
- Nastal čas na kakao - Více o XCode: inspektory
- Nastal čas na kakao - Aplikace RSS2: datový model
- Nastal čas na kakao - Aplikace RSS: implementace datového modelu
- Nastal čas na kakao - Aplikace RSS: parsování XML
- Nastal čas na kakao - Interface Builder a uživatelské rozhraní
- Nastal čas na kakao - Interface Builder: atributy objektů
- Nastal čas na kakao - Interface Builder: atributy objektů
- Nastal čas na kakao - Druhý kontrolér a dokončení aplikace
- Nastal čas na kakao - Drobná vylepšení a zdokonalení...
- Nastal čas na kakao - Ladění
- Nastal čas na kakao - Třídy Foundation Kitu
- Nastal čas na kakao - Třídy Foundation Kitu (2)
- Nastal čas na kakao - Textové řetězce: NS(Mutable)String
- Nastal čas na kakao - Čísla, binární data a další...
- Nastal čas na kakao - Archivace objektů
- Nastal čas na kakao - Trocha magie, aneb distribuované objekty
- Nastal čas na kakao - Málem bychom zapomněli: NSAutoreleasePool
- Nastal čas na kakao - Zpracování výjimek: NSException
- Nastal čas na kakao - NSInvocation a černá magie
- Nastal čas na kakao - Kakao v Tygrovi
- Nastal čas na kakao - Notifikace: nepřímé předávání zpráv
- Nastal čas na kakao - NSUserDefaults
- Nastal čas na kakao - Co nového ve Foundation Kitu
- Nastal čas na kakao – s Intelem, s Intelem, jedeme do...
- Co nového v Xcode
- Začínáme s AppKitem
- Jak MVC v Kakau vypadá doopravdy?
- Jak MVC v Kakau vypadá doopravdy: dokončení
- Přehled tříd AppKitu
- Nastal čas na kakao - Přehled tříd AppKitu 2
- Přehled tříd AppKitu 3: zbývající třídy GUI
- Přehled tříd AppKitu 4: textový systém
- Nastal čas na kakao - Přehled tříd AppKitu 5: hlavně grafika
- Přehled tříd AppKitu 6: dokumentový systém
- Přehled tříd AppKitu 7: dokončení
- Pojmenované vlastnosti objektů
- Pojmenované vlastnosti objektů: implementace
- Pojmenované vlastnosti objektů: relace 1:N
- Pojmenované vlastnosti objektů: řazení jmen a agregační funkce
- Sledování změn objektů
- Sledování změn objektů – ukázka
- Sledování změn objektů – zdrojový kód
- Sledování změn objektů: kód modelu
- Sledování změn objektů: přímý přístup
- Kontroléry a vazby
- Vázání vazeb
- Další vazby s jednoduchým kontrolérem
- Implementace a použití převodu hodnot
- Validace hodnot
- Validace a chyby, a jedna hezká vazba...
- Práce s polem objektů
- Základní vazby NSArrayControlleru
- Převodníky, přepínače, placeholdery
- Mírná vylepšení v mezích zákona
- Objective C 2.0 - novinky z Leoparda
- NSTreeController
- Programování v Cocoa - Pár tipů a triků
- Programování v Cocoa - Základy kreslení
- Kterak nakreslit modrý obdélník...
- Další služby pro kreslení
- Obrázky a písmenka...
- Události a myš
- Lepší práce s myší
- Události klávesnice
- Input Management
- Příkazy a schránka
- Další události
- Táhni a padni
- Byli jsme na tahu; nyní padneme.
- Zvolme si, jak vhodit
- Drobnosti a chybičky
- Speciální případy tahání či házení
- Kterak táhnout něco, co neexistuje?
- Jak na sítě...
- NSURLConnection
- Safari za minutu
- Služby WebKitu
- Kakao v Leopardu
- Druhé Objective C
- Druhé Objective C: různé drobnosti
- Druhé Objective C: kategorie a protokoly
- Druhé Objective C: nový příkaz cyklu
- Druhé Objective C: atributy a accesory
- Druhé Objective C: atributy a accesory
- 64 je dvakrát 32
- Ubicumque dulce est, ibi et acidum invenies...
- Irbis: že prý žádné novinky?
- Blok sem, blok tam, nám už je to všechno jasné...
- Bloky jsou i v AppKitu
- Irbis a Foundation Kit
- Kde jsou má data?
- Kde jsou má data? V NSCache!
- Soubor, jméno, URL, jak se to rýmuje...
- Další podpora NSURL
- Zabíjení!
- A máme tady i...OS!
- Systémové prvky GUI
- Programování pro iOS 1. díl - Rozdíly mezi "i" a "Mac"
- Programování pro iOS - 2. Začínáme programovat
- Programování pro iOS - 3. základní ovladače a propojení GUI s kódem
- Programování pro iOS - 4. Varovná hlášení
- Programování pro iOS - 5. Rámce a jejich řídicí objekty
- Programování pro iOS - 6. Ukládání dat
- Programování pro iOS - 7. Správa paměti a starý restík
- Programování pro iOS - 8. Dokončení aplikace
- Programování pro iOS - 9. Jak dostat aplikaci do iPhone
- Programování pro iOS - 10. Instalace aplikace do cizího iPhone
- Programování pro iOS - 11. Jak dostat aplikaci do libovolného iPhone
- Programování pro iOS - 12. Touching!
- Programování pro iOS - 13. Kreslíme na iPhone
- Programování pro iOS - 14. Udělejme gesto
- Programování pro iOS - 15. Další gesta
- Programování pro iOS - 16. Více prstů, více zábavy
- Programování pro iOS - 17. Podpora standardních gest
- Programování pro iOS - 18. Recognizery v iOS
- Programování pro iOS - 19. Další standardní recognizery
- Programování pro iOS - 20. Co nového v iOSu
- Programování pro iOS - 21. "Multitasking"
- Programování pro iOS - 22. Nulla est honesta avaritia nisi temporis
- Programování pro iOS - 23. Jak se aktivovat, jsme-li v pozadí
- Programování pro iOS - 24. Zbývající drobnosti
- Programování pro iOS - 25. Řídicí objekty rámců
- Programování pro iOS - 26. Jak se dělá UIViewController
- Programování pro iOS - 27. Kde vzít rámce
- Programování pro iOS - 28. Základní služby
- Programování pro iOS - 29. Práce s rámci
- Programování pro iOS - 30. Rotace zařízení
- Programování pro iOS - 31. Správa paměti v rámcích
- Programování pro iOS - 32. Řídicí objekt pro tabulky
- Programování pro iOS - 33. Řídicí objekt pro strom
- Programování pro iOS - 33. Více o UINavigationControlleru
- Programování pro iOS - 35. Ještě jednou UINavigationController
- Programování pro iOS - 36. Po navigátoru taby
- Programování pro iOS - 37. Více o UITabBarControlleru
- Programování pro iOS - 38. Dokončení UITabBarControlleru
- Programování pro iOS - 39. UIPopoverController
- Programování pro iOS - 40. Další triky UIPopoverControlleru
- Programování pro iOS - 41. Zbývající služby UIPopoverControlleru
- Programování pro iOS - 42. UISplitViewController
- Programujeme v
iTunesXcode 4 - Programování pro iOS - 44. Předvolby Xcode 4
- Programování pro iOS - 45. Práce v Xcode 4
- Xcode 4: projekt a cíle
- Xcode 4: práce s cíli
- Xcode 4: Build Settings
- Xcode 4: Build Phases
- Xcode4: Build Phases podruhé
- Xcode 4: Co jsou to Build Rules?
- Xcode4: taje editoru
- Xcode4: automatické doplňování v editoru
- XIBy chyby
- Více o XIBech
- Editor XIBů
- Inspektory pro XIBy
- Vazby mezi objekty v XIBech
- Vazby mezi objekty v kódu
- Paletky Xcode pro XIBy
- Xcode 4: levý sloupec
- Xcode 4: okno Organizer
- Xcode 4: okno Organizer, část druhá
- Xcode 4: co je to Workspace?
- Xcode 4: základy schémat
- Xcode 4: akční schémata