Mam problem z rozszerzeniem udziału w iOS mojej aplikacji. Mam następujący kod w rozszerzeniu udziału Info.plist
.Rozszerzenie udziału w iOS nie wyświetla się/nie może odbierać adresu URL
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
</dict>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
Głównym problemem jest to, że rozszerzenie nie pojawia się w Google Chrome, NYTimes, WSJ i wielu innych aplikacjach. Wszystkie powinny zawierać stronę internetową lub adres internetowy.
Czytałem gdzieś, że muszę dodać następujące do dyktando NSExtensionActivationRule.
<key>NSExtensionActivationSupportsText</key>
<true/>
Jeśli dodam, rozszerzenie udziału pojawi się w wymienionych powyżej aplikacjach, ale po prostu zwraca ciąg do mojego rozszerzenia. Na przykład, jeśli przejdę do wersji apple.com
w przeglądarce Google Chrome i używam mojego rozszerzenia, udostępniam tylko Apple
jako ciąg do mojego rozszerzenia, którego moja aplikacja tak naprawdę nie obsługuje. Powinien zawierać pewien typ adresu URL lub coś podobnego. A w aplikacji NYTimes wystarczy wysłać nagłówek artykułu na rozszerzenie.
Rozszerzenie działa idealnie w Safari. Po prostu nie niektóre aplikacje innych firm.
Poniżej znajduje się główny kod do otrzymywania adresu URL w pliku SWIFT mojego rozszerzenia.
if let item = extensionContext?.inputItems.first as? NSExtensionItem {
if let itemProvider = item.attachments?.first as? NSItemProvider {
if itemProvider.hasItemConformingToTypeIdentifier("public.url") {
itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? NSURL {
print (shareURL.absoluteString!)
Stamtąd obsługuję adres URL, jak moja aplikacja powinna.
Kiedy dodałem opcję NSExtensionActivationSupportsText
Zmieniłem kod powyżej nieznacznie od public.url
do public.text
wraz z kilkoma innymi przetestować go i to właśnie powrocie Super nieprzydatnych sznurki.
Wiem, że można uzyskać adres URL z tych aplikacji, ponieważ nawet w NYTimes ma opcję Google Chrome, który wyzywająco potrzebuje URL, a nie tylko nagłówek artykułu. Wszelkie pomysły, jak zdobyć ten adres URL?
Otrzymanie następującego komunikatu o błędzie z przykładem kodu: '(null): nie można przeanalizować zawartości 'Share Extension/Info.plist': Nie można odczytać danych, ponieważ nie ma poprawnego formatu. '. Byłoby również pomocne, gdybyś mógł podać więcej szczegółów i wyjaśnić, dlaczego ten kod może zadziałać. Nie jestem pewien, czy to działa, ponieważ daje ten komunikat o błędzie. –
@CharlieFish to jest kopiowane z mojego projektu z Xamarin na Windows. Możliwe, że problemy z wierszami w systemie Windows powodują ten problem, więc spróbuj skopiować wiersz po wierszu, ale powinno działać, ponieważ ostateczna wersja poprawnie kompiluje się na Macu z Xcode. Prawdopodobnie zrobiłeś coś nie tak z kopiowaniem i wklejaniem. –
@CharlieFish biorąc pod uwagę wyjaśnienie - Chrome po prostu nie ustawia danych w tym formacie. W przypadku Chrome musisz dodać jeszcze jeden format danych (według mnie jest to zwykły tekst). Ale nawet to nie zadziała dla wszystkich aplikacji, np. Apple News. To oznacza, że aplikacja działa tak długo, jak długo istnieje tylko jeden załącznik z adresem URL. –