3
votes

L'extension de l'application Safari ne se charge pas la deuxième fois

J'ai eu un problème étrange où la deuxième fois que j'exécute mon extension d'application Safari, elle n'apparaîtra pas dans Safari.

  1. Ouvrez Xcode.
  2. Nouveau> Projet.
  3. Sous Autre, sélectionnez Safari Extension App, puis cliquez sur "Suivant".
  4. Entrez ce que vous voulez sur cet écran "nom du produit", puis cliquez sur "Suivant".
  5. Cliquez sur "Créer".
  6. Exécutez le projet en cliquant sur l'icône Lire en haut à gauche de Xcode.
  7. Il ouvrira une petite application avec un seul bouton en bas avec le texte: "Ouvrir dans les préférences des extensions Safari".
  8. Il n'apparaîtra probablement pas. Si c'est le cas, passez à 10.
  9. Accédez à Développer dans le menu des titres de Safari, cliquez sur "Autoriser les extensions non signées".
  10. Une fois affiché, cochez la case pour l'activer.
  11. Arrêtez Xcode de s'exécuter en cliquant sur l'icône d'arrêt en haut à gauche.
  12. Modifiez une valeur dans le fichier Info.plist du plugin, par exemple en changeant le SFSafariWebsiteAccess.Level de "Some" à "All".
  13. Cliquez sur l'icône Lecture dans Xcode.
  14. Safari vous indiquera que les autorisations d'extension ont changé. Acceptez ces modifications et l'extension n'apparaîtra plus.

La même chose se produit si je change d'autres valeurs. Si je laisse le code d'extension et les paramètres inchangés, aucun problème ne se produit. Mais dès que je change une valeur, ça casse complètement même si je modifie ces paramètres.

Cela se produit pour moi sur deux Mac différents, tous les deux 10.13 et 10.14 avec le dernier Xcode.


1 commentaires

Normalement, les paramètres du projet n'auraient pas à être modifiés lorsqu'une extension a été publiée / livrée aux utilisateurs (autorisations, nom d'extension, ...) sinon elle pourrait être gravement abusée par les développeurs d'extensions. C'est donc le comportement que les développeurs de Safari ont choisi pour protéger les utilisateurs. Si un développeur crée une application avec des autorisations très peu nombreuses et inoffensives, puis change les autorisations en autorisations nuisibles lorsque suffisamment d'utilisateurs ont installé son application, ce serait mal ... c'est pourquoi Safari (pas Xcode) restreint ceci en désactivant l'extension automatiquement.


3 Réponses :


2
votes

La seule façon dont j'ai pu corriger ce problème est d'aller dans votre répertoire de construction et de supprimer les fichiers de construction.

Vous devrez d'abord arrêter votre projet, puis supprimer ce répertoire: ~ / Library / Xcode / DerivedData / [VOTRE_PROJECT_NAME] / Build / Projects / Debug

YOUR_PROJECT_NAME sera le nom de votre projet plus un tas de caractères aléatoires, vous devrez donc rechercher vous-même le vrai nom de ce dossier.


0 commentaires

5
votes

J'ai rencontré ce problème exact avec Xcode sur Mojave. Ce que je dois faire, c'est aller dans Product> Clean Build Folder. C'est probablement la même chose que vous faites, mais un peu plus facile.


1 commentaires

C'est, pour moi, la bonne réponse. Je suppose qu'une fois que l'extension est exécutée, elle est conservée en mémoire, donc la recompilation ne fait rien. Vous devez le supprimer pour que Safari comprenne que quelque chose a changé, puis recharge la nouvelle version.



0
votes

Vous pouvez modifier le schéma de _____ extension.appex , et définir son exécutable sur Safari.app . Cela ouvrira une nouvelle instance de Safari à chaque fois que vous construisez / exécutez l'extension (pas le wrapper). Cela permettra également à la console Xcode d'afficher la sortie de l'extension. Soyez prudent cependant; si Safari plante, vous risquez de perdre tous les onglets que vous aviez ouverts. Vous n'avez pas besoin de nettoyer le dossier de construction (ou de supprimer manuellement les fichiers dans le Finder) de cette façon.


0 commentaires