Amarengo

Articles and news

Jak vytvořit rozšíření sdílení iOS ve Swiftu

původně publikoval Scotty Fister 30. července 2016 24,887 čte

Poznámka: Aktualizováno pro Swift 4.

pro hack den v práci jsem se rozhodl vyzkoušet si ruku při vytváření rozšíření sdílení. Zjistil jsem, že tam není plně vybavený výukový program, a v důsledku toho jsem musel dát dohromady informace (většina z nich byla překvapivě připisována dokumentaci Apple).

cílem

uložit URL webové stránky jako bohatý obsah do naší aplikace a umožnit konfiguraci několika možností. Zpočátku jsem si myslel, že je potřeba rozšíření – ale zdá se, že je vhodnější pro úpravu obsahu (například odstranění červených očí na fotografii jedním klepnutím). Zdá se, že ostatní, včetně Apple, používají rozšíření sdílení k vytváření položek.

to je to, co budeme mít postavený do konce:

dokončené rozšíření

jak vidíte, design jsem trochu přizpůsobil a přidal to, co se označuje jako „konfigurační položka“, což jsou buňky ve spodní části listu; běžně se používá k výběru z účtů nebo jiných možností. Používá se zde k výběru ze stávajících „balíčků“ uživatele, do kterých chcete uložit. To, co nevidíte, je také spuštěn nějaký kód JavaScript pro načtení aktuální adresy URL prohlížeče,kterou později pošleme na server. Všechno to pokryjeme dopředu!

počáteční kroky

buď vytvořte nový projekt, nebo otevřete existující projekt, do kterého chcete rozšíření přidat. Poté stiskněte soubor > nový > cíl. Na kartě iOS vyberte Rozšíření sdílet a stiskněte další. Dejte mu jméno; rozhodl jsem se pro jednoduché „ShareExtension“.

zeptá se, zda chcete schéma aktivovat. To znamená, že při spuštění aplikace vám umožní otevřít přímo do Safari nebo podobně a otestovat rozšíření, na rozdíl od hlavní aplikace. Chceme to-klepněte na Aktivovat.

Otestujte, co máte dosud spuštěním projektu Cmd + R-jak již bylo zmíněno, poskytuje vám možnosti, ze které aplikace chcete testovat, vyberte Safari a klepněte na Spustit.

dialog zobrazený při spuštění rozšíření.

když se Safari otevře, klepněte na ikonu sdílení a v seznamu by se měl objevit název rozšíření s ikonou zástupného symbolu. Pokud ne, klepněte na více a povolte jej. Klepnutím na ikonu představíte výchozí implementaci SLComposeServiceViewController, která je docela elegantní hned po vybalení z krabice.

získání adresy URL

list sdílení automaticky načte název stránky a nastaví jej jako text těla, ale obecně budete chtít víc než to-ať už se jedná o adresu URL nebo obrázek na stránce. Za tímto účelem můžete nechat Safari spustit soubor JavaSript, který analyzuje dokument a načte vše, co potřebujeme.

Nejprve klikněte pravým tlačítkem myši na složku rozšíření v Xcode a vyberte nový soubor. Na druhé kartě najdete prázdné, stiskněte Další a pojmenujte soubor “ GetURL.js“.

budete muset upravit informace o rozšíření.soubor plist a v „NSExtension“ je další slovník nazvaný „NSExtensionAttributes — – přidejte klíč „NSExtensionJavaScriptPreprocessingfile“ s hodnotou právě vytvořeného souboru „GetURL“ (všimněte si nedostatku přípony).

přidejte také řádek slovníku „NSExtensionActivationRule“, který by měl obsahovat klíč „NSExtensionActivationSupportsWeburlwithmaxcount“ s číslem 1:

jak jsou informace o vašem rozšíření.plist by měl vypadat při pohledu jako seznam vlastností

NSExtensionJavaScriptPreprocessingfile: to umožňuje naši aplikaci vědět o souboru JavaScript, který by měl být spuštěn při spuštění rozšíření.

NSExtensionActivationRule: pomocí tohoto slovníku přidejte klávesy rozšíření akce, které pomáhají systému určit, pro jaké typy obsahu chcete rozšíření aktivovat.

vložte následující text do “ GetURL.js“:

spolu s klávesami, které jsme nastavili výše, bude iOS nyní hledat objekt s názvem „ExtensionPreprocessingJS“, který bude provádět za běhu. To je podrobněji vysvětleno v dokumentaci společnosti Apple.

Chcete-li načíst data poškrábaná výše uvedeným souborem javascript, musíte spustit tento blok kódu v „ShareViewController.swift “ viewDidLoad funkce:

budete také potřebovat tento import pro kUTTypePropertyList:

import MobileCoreServices

spuštění rozšíření nyní by mělo úspěšně vytisknout adresu URL do konzoly!

boční poznámka: přidejte následující úryvek, pokud chcete přizpůsobit navigační lištu jako já (nahrazení vlastním obrázkem nebo jen titulem).

přidání konfiguračních buněk

kotlová deska, která byla dodána s vytvořením rozšíření sdílení, bude obsahovat metodu pro volitelné dodávání konfiguračních položek (buňky ve spodní části listu sdílení)

override func configurationItems() -> ! {

vložte níže uvedený úryvek, který vrací pole „SLComposeSheetConfigurationItem“:

Spusťte aplikaci znovu a uvidíte buňku v dolní části.

Model pro konfigurační položku

vytvoří základní model s názvem “ Deck.swift“, který se používá k předávání dat mezi řadiči zobrazení.

TableView

v gif na začátku jste si všimli, když klepnete na konfigurační buňku, která tlačí na nové zobrazení pomocí tableview. Vytvořte nový soubor, který zdědí z „UIViewController“ s názvem “ ShareSelectViewController.rychlý“. Vytvořte vlastnost tableview a přidejte ji do zobrazení.

také jsem nastavil barvu názvu a názvu pro toto zobrazení a raději ponechávám konstanty jako identifikátory buněk ve struktuře:)

Vytvořte vlastnost pro uložení předaného balíčku z původního řadiče zobrazení:

var userDecks = ()

a v souladu s požadovanými protokoly pro tableview:

zpět v “ ShareViewController.a konečně, uvnitř tapHandler pro konfigurační položku, kterou jsme vytvořili, vytvořte instanci ShareSelectViewController a nechte ji tlačit na kohoutek, procházející balíčky také:

Spusťte aplikaci. Klepnutím na konfigurační buňku byste měli tlačit na tabulkupohled s fiktivními daty.

všimnete si však, že konfigurační buňka je stále pevně zakódována na „Název balíčku“. Chcete – li mít tuto aktualizaci, vytvořte vlastnost pro uložení vybraného balíčku a ve výchozím nastavení vyberte první:

a aktualizujte konfigurační buňku uvnitř configurationItems (), abyste ji mohli použít:

deck.value = selectedDeck?.title 

Spusťte aplikaci znovu a uvidíte, že byla aktualizována.

protokol pro aktualizaci vybraného balíčku

budete potřebovat způsob, jak odmítnout zpět na ShareViewController, když je nový balíček poklepán, a nechte jej aktualizovat uživatelské rozhraní. Bude stačit protokol. Přidejte do svého ShareSelectViewController následující:

nakonec Přizpůsobte ShareViewController právě vytvořenému protokolu a ujistěte se, že delegát pro ShareSelectViewController je nastaven na self:

vybraný Balíček je aktualizován a konfigurační položky jsou znovu načteny, aby aktualizovaly hodnotu. Pak se vrátíme zpět na hlavní obrazovku.

Spusťte aplikaci a nyní byste měli být schopni změnit balíčky, které se aktualizují, aby zobrazily správně vybraný balíček 🙂

dokončení

vše, co zbývá, je poslat shromážděné informace na váš server nebo aplikaci, abyste s tím něco udělali, což můžete udělat v jiné metodě kotle:

override func didSelectPost()

nebudu se o tom podrobně zabývat, ale použil jsem NSURLSession k odeslání na náš server. Také jsem nahradil fiktivní data skutečnými balíčky vytvořením skupiny aplikací a použitím sdíleného NSUserDefaults pro ukládání a načítání dat dříve načtených v hlavní aplikaci pro iOS.

let userDefaults = NSUserDefaults(suiteName: "some.group.name")
let decks = userDefaults?.objectForKey("userDecks") as? NSArray

nakonec si všimnete, že moje rozšíření je v dialogovém okně akce pojmenováno „Vurb“ a má ikonu. Ikonu můžete nastavit následováním tohoto příspěvku. Chcete-li změnit název, jednoduše změňte „Zobrazovaný název“ v nastavení projektu pro rozšíření.

to je všechno, pokud jste to považovali za užitečné, pomozte ostatním najít to doporučením.

celý projekt si můžete prohlédnout zde.

tagy

přidejte se k Hacker poledne

Vytvořte si zdarma účet odemknout vlastní zážitek ze čtení.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.