2016-11-19 23 views
8

Szukam sposobu implementacji architektury wtyczek w Swift.Architektura wtyczki Swift

Use Case

Aplikacja, fx. CLI, ma folder, z którego jest wykonywany, gdzie można umieścić wtyczki i zostanie załadowany po uruchomieniu aplikacji.

Wymagania

  • jest możliwe określenie protokołu lub zestaw protokołów wtykowych ins musi lub może stosować.
  • Pure Swift.
  • Introspect to, jakie protokoły implementuje dana wtyczka.
  • Załadowano dynamicznie po uruchomieniu aplikacji.
  • Komunikuj się ze wzorem uczestnika.
  • Programiści wtyczek powinni móc importować protokoły, implementować je, kompilować i umieszczać plik binarny w folderze wtyczek.

Co Próbowałem

Użyłem Process aby uruchomić plik wykonywalny, gdzie można również dodać argumenty. Ale to nie spełnia moich wymagań.

Natknąłem się na to post, jak można to zrobić, ale to wymaga użycia NSBundle i Objective-C, więc to też nie jest dobre.

Nie jestem pewien, jak go o to. Każda pomoc lub wskazówki we właściwym kierunku będą bardzo mile widziane.

+0

Czy planujesz pracować nad Linuksem? A co z App Store? – Kametrixom

+0

@Kametrixom Linux jest celem. App Store nie jest wymogiem. –

+0

Witam. Czy jesteś w stanie osiągnąć tę architekturę wtyczek w Swift? Właśnie na tym muszę teraz popracować. Jakieś sugestie, które masz dla mnie? – Subi

Odpowiedz

1

Swift obecnie nie ma stabilnego ABI, więc nie można jeszcze polegać na natywnych interfejsach. (Oczekuje się, że zostanie rozwiązany przez Swift 4.)

Mogę teraz wymyślić dwie opcje, ale obie polegają na zdefiniowaniu jakiegoś protokołu komunikacyjnego między hostem a wtyczką. Będziesz musiał również samodzielnie wdrożyć swoje wymagania (introspekcję funkcji itp.), Jeśli nie możesz użyć Objective-C.

  1. Niższy do C ABI. Dla każdej funkcji trzeba, wdrożyć go na stronie w nazwie Swift z @convention(c) adnotacji i zadeklarować je na stronie rozmówcy w nagłówku zewnętrznego łącznika. Nie będziesz w stanie zaimplementować funkcji dwa razy, więc powinieneś zdefiniować interfejs API oparty na oddzwanianiu, do którego wtyczki się rejestrują.

  2. Definiowanie (na przykład, gniazdka-based) protokół komunikacyjny i zapisuje Swift plików, które mają być importowane każdego dodatku. Utwórz plik wykonywalny wtyczek, który po uruchomieniu przez aplikację hosta rozpocznie komunikację.

ja osobiście wolę opcję 2, ponieważ nie wymagają łączników i mieszając się z takim, a otrzymasz dodatkowy bonus definiowania Swift rodzaje i funkcje do użycia wtyczek w za. Ponadto, ponieważ plug-in jest rozwidlony dziecko może upaść bez szkody dla gospodarza.