Amarengo

Articles and news

Jak zbudować rozszerzenie iOS Share w Swift

pierwotnie opublikowane przez Scotty Fister na Lipiec 30th 2016 24,887 czyta

Uwaga: Aktualizacja dla Swift 4.

na dzień hack w pracy postanowiłem spróbować swoich sił w tworzeniu rozszerzenia share. Odkryłem, że nie było tam w pełni funkcjonalnego samouczka, w wyniku czego musiałem zebrać informacje (wiele z nich przypisano, co zaskakujące, dokumentacji Apple).

celem

jest zapisanie adresu URL strony internetowej jako bogatej zawartości w naszej aplikacji i umożliwienie konfiguracji kilku opcji. Początkowo myślałem, że potrzebna jest akcja rozszerzenia – ale wydaje się, że lepiej nadaje się do modyfikowania treści (takich jak usuwanie efektu czerwonych oczu na zdjęciu jednym dotknięciem). Wygląda na to, że inni, w tym Apple, używają rozszerzenia share do tworzenia elementów.

to zbudujemy do końca:

ukończone rozszerzenie

jak widać, trochę dostosowałem projekt i dodałem coś, co jest określane jako „element konfiguracji”, które są komórkami na dole arkusza; powszechnie używane do wyboru z kont lub innych opcji. Jest on używany tutaj, aby wybrać z istniejących „talii” użytkownika, aby zapisać. Czego nie widzisz, to to, że uruchamia on również kod JavaScript, aby pobrać bieżący adres URL przeglądarki, który wysyłamy później na serwer. Zajmiemy się tym!

kroki początkowe

utwórz nowy projekt lub otwórz istniejący, do którego chcesz dodać rozszerzenie. Następnie naciśnij plik > Nowy > cel. Na karcie iOS wybierz opcję Udostępnij rozszerzenie i naciśnij przycisk Dalej. Nadaj mu nazwę; zdecydowałem się na prosty „ShareExtension”.

zapyta, czy chcesz aktywować program. Oznacza to, że po uruchomieniu aplikacji będzie można otworzyć bezpośrednio do Safari lub podobne do testowania rozszerzenia, w przeciwieństwie do głównej aplikacji. Chcemy to-dotknij Aktywuj.

przetestuj to, co masz do tej pory, uruchamiając projekt Cmd + R – jak wspomniano, daje opcje aplikacji do przetestowania, wybierz Safari i dotknij Uruchom.

okno dialogowe wyświetlane podczas uruchamiania rozszerzenia.

po otwarciu przeglądarki Safari stuknij ikonę Udostępnij, a na liście powinna pojawić się nazwa rozszerzenia z ikoną symbolu zastępczego. Jeśli nie, stuknij pozycję Więcej i włącz ją. Stuknięcie w ikonę pokaże domyślną implementację SLComposeServiceViewController, która jest całkiem fajna od razu po wyjęciu z pudełka.

uzyskiwanie adresu URL

arkusz udostępniania automatycznie pobiera tytuł strony i ustawia go jako tekst główny, ale ogólnie będziesz chciał więcej — niezależnie od tego, czy jest to adres URL, czy obraz na stronie. W tym celu Safari może uruchomić plik JavaSript, aby przeanalizować dokument i pobrać wszystko, czego potrzebujemy.

najpierw kliknij prawym przyciskiem myszy folder rozszerzeń w Xcode i wybierz nowy plik. Znajdziesz pusty wewnątrz karty inne, naciśnij Dalej i nazwij plik ” GetURL.js”.

musisz edytować informacje o rozszerzeniach.plik plist i w „Nsextension” znajduje się inny słownik o nazwie „NSExtensionAttributes” — Dodaj klucz „NSExtensionJavaScriptPreprocessingfile” z wartością naszego właśnie utworzonego pliku, „GetURL” (zwróć uwagę na brak rozszerzenia).

Dodaj również wiersz słownika „NSExtensionActivationRule”, który powinien zawierać klucz „NSExtensionActivationSupportsWeburlwithmaxcount” z numerem 1:

jak informacje o Twoim rozszerzeniu.plist powinien wyglądać jako lista właściwości

NSExtensionJavaScriptPreprocessingfile: pozwala to naszej aplikacji poznać plik JavaScript, który powinien być uruchomiony podczas wykonywania rozszerzenia.

NSExtensionActivationRule: użyj tego słownika, aby dodać klucze rozszerzeń akcji, które pomagają systemowi określić, dla jakich typów treści należy aktywować rozszerzenie.

Wklej Poniższy tekst do ” GetURL.js”:

w połączeniu z kluczami ustawionymi powyżej, iOS będzie teraz szukał obiektu o nazwie „ExtensionPreprocessingJS”, który będzie działał w środowisku wykonawczym. Jest to bardziej szczegółowo wyjaśnione w dokumentacji Apple.

aby pobrać dane zeskrobane za pomocą powyższego pliku javascript, musisz uruchomić ten blok kodu w „ShareViewController.funkcja swift ” viewDidLoad:

będziesz również potrzebował tego importu dla kUTTypePropertyList:

import MobileCoreServices

uruchomienie rozszerzenia powinno teraz pomyślnie wydrukować adres URL do konsoli!

Uwaga: dodaj poniższy fragment, jeśli chcesz dostosować pasek nawigacji, tak jak ja (zastępując własnym obrazem lub tylko tytułem).

dodawanie komórek konfiguracyjnych

Płyta kotłowa dostarczona wraz z utworzeniem rozszerzenia udostępniania będzie zawierała metodę opcjonalnego dostarczania elementów konfiguracji (komórki na dole arkusza udostępniania)

override func configurationItems() -> ! {

wstaw poniższy fragment, który zwraca tablicę „SLComposeSheetConfigurationItem”:

Uruchom aplikację ponownie, a zobaczysz komórkę na dole.

Model dla pozycji konfiguracji

Utwórz podstawowy model o nazwie ” Deck.swift”, który służy do przekazywania danych między kontrolerami widoków.

Widok TableView

w pliku gif na początku zauważysz, gdy stukniesz komórkę konfiguracji, którą wypycha do nowego widoku z widokiem tableview. Utwórz nowy plik dziedziczący po ” UIViewController „o nazwie” ShareSelectViewController.swift”. Utwórz właściwość tableview i dodaj ją do widoku.

ustawiłem również tytuł i kolor tytułu dla tego widoku i wolę trzymać stałe, takie jak identyfikatory komórek w strukturze:)

Utwórz właściwość do przechowywania talii przekazanej z oryginalnego kontrolera widoku:

var userDecks = ()

i zgodne z wymaganymi protokołami dla tableview:

z powrotem w ” ShareViewController.swift”, Utwórz właściwość do przechowywania fałszywych danych i zapełnij je w viewDidLoad:

na koniec, wewnątrz taphandlera dla utworzonego przez nas elementu konfiguracji, Utwórz instancję kontrolera ShareSelectViewController i poproś go o naciśnięcie przycisku, przekazując również talie:

Uruchom aplikację. Stuknięcie komórki konfiguracyjnej powinno wypchnąć do widoku tableview z danymi atrapy.

zauważysz jednak, że komórka konfiguracyjna jest nadal zakodowana na „Tytuł talii”. Aby uzyskać tę aktualizację, Utwórz właściwość do przechowywania wybranej talii i wybierz pierwszą domyślnie:

i zaktualizuj komórkę konfiguracji wewnątrz configurationItems (), aby jej użyć:

deck.value = selectedDeck?.title 

Uruchom aplikację ponownie, a zobaczysz, że została zaktualizowana.

protokół do aktualizacji wybranej talii

będziesz potrzebował sposobu na wycofanie z powrotem do ShareViewController, gdy nowa talia jest dotknięta, i poproś o aktualizację interfejsu użytkownika. Protokół wystarczy. Dodaj następujące elementy do swojego ShareSelectViewController:

na koniec dostosuj Shareselectviewcontroller do protokołu, który właśnie został wykonany i upewnij się, że delegat dla ShareSelectViewController jest ustawiony na self:

wybrana talia jest aktualizowana, a elementy konfiguracji są przeładowywane, aby zaktualizować wartość. Następnie pop, aby wrócić do głównego ekranu.

Uruchom aplikację i teraz powinieneś być w stanie zmienić talię, która zaktualizuje się, aby pokazać poprawnie wybraną talię 🙂

kończąc

wszystko, co pozostało, to wysłać zebrane informacje do serwera lub aplikacji, aby coś zrobić, co możesz zrobić w innej metodzie boilerplate:

override func didSelectPost()

Nie będę wdawać się w szczegóły na ten temat, ale użyłem NSURLSession, aby opublikować na naszym serwerze. I również zastąpione dane atrapy z prawdziwych pokładów tworząc grupę aplikacji i za pomocą współdzielonego NSUserDefaults do przechowywania i pobierania danych wcześniej pobranych w głównej aplikacji iOS.

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

na koniec zauważysz, że moje rozszerzenie nazywa się” Vurb ” w oknie dialogowym akcji i ma ikonę. Możesz ustawić ikonę, wykonując ten post. Aby zmienić nazwę, po prostu zmień „Display Name” w ustawieniach projektu rozszerzenia.

to wszystko, jeśli uznałeś to za pomocne, pomóż innym znaleźć to, polecając.

projekt można obejrzeć w całości tutaj.

Tagi

Dołącz do Hacker Noon

Utwórz darmowe konto, aby odblokować niestandardowe wrażenia z czytania.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.