Mettre à jour la bibliothèque SPPermission et hater

- " Une sorte de bibliothèque, quelqu'un mis à jour ... Qu'est-ce que Haiter avait à voir avec ça?" Pourquoi dois-je, un excellent développeur, passer du temps sur cet article? "

vous pourriez penser, mon cher ami. Pas besoin de perdre du temps. Ce n'est qu'une lecture en soirée avec une part de rires drôles. Le texte portera sur la bibliothèque RequestPermission et son mystérieux auteur.

Commençons par l'essentiel - le rebranding! La bibliothèque a été renommée SPPermission . Je ne sais pas si c'est le cas ou non, mais après avoir changé le nom, il s'est accroché au sommet de GitHub la deuxième semaine. Oui, il y a un tel sommet, il est conditionnel, mais des projets intéressants peuvent encore y être trouvés. L'auteur (personne mystérieuse), a mis à jour les bannières sur la page du projet , la description, une énorme section du donat inséré. Quel gourmand!

Mais passons au projet lui-même:



Comme vous pouvez le voir sur la taille énorme des gifs (4 mégaoctets non orthodoxes) , le projet demande une liste d'autorisations, il y a des icônes, du texte. Vous pouvez même dire que ça a l'air bien.

Installer


Vous pouvez simplement faire glisser le code source vers votre projet, il s'agit d'un dossier de fichiers structurés. Et vous ne pouvez pas souffrir de bêtises pour construire la bibliothèque en utilisant SocoaPods . Je ne dirai pas le pour et le contre, pas cet article. Ajoutez la ligne au fichier pod :

pod 'SPPermission' 

et mettre à jour les dépendances. Il s'agit très probablement de l'étape la plus difficile à venir)

Utiliser


Si vous venez de faire glisser les fichiers dans le projet, le module SPPermission est déjà disponible. Si vous n'avez pas souffert de bêtises, vous avez utilisé ocoaPods , alors vous devez importer la bibliothèque dans le contrôleur:

 import SPPermission 

Maintenant, dans la fonction viewDidAppear , nous appelons la construction suivante:

 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) SPPermission.Dialog.request( with: [.camera, .calendar, .notification], on: self ) } 

Nous passons la liste des autorisations et le contrôleur sur lequel nous présenterons la boîte de dialogue. Reste à démarrer le projet.

Personnalisation


Si vous, cher ami, avez travaillé avec des tables ou des collections, les mots Delegate et DataSource ne vous feront pas peur. Et si vous êtes un peu obsédé par les motifs, vous allez même crier:

- « Wow! Approche basée sur le protocole! "

Vous voyez! Tu vois? Mais j'ai dit que ce ne serait pas drôle. Mais une fois que j'ai lu cette ligne, passons à autre chose.

Commençons par le protocole SPPermissionDialogDataSource , il sera responsable de la personnalisation de la boîte de dialogue et permettra une intégration plus fidèle de la bibliothèque dans le projet. Regardons les paramètres:

 @objc public protocol SPPermissionDialogDataSource: class { @objc optional var dialogTitle: String { get } @objc optional var dialogSubtitle: String { get } @objc optional var dialogComment: String { get } @objc optional var allowTitle: String { get } @objc optional var allowedTitle: String { get } @objc optional var bottomComment: String { get } @objc optional var showCloseButton: Bool { get } @objc optional func name(for permission: SPPermissionType) -> String? @objc optional func description(for permission: SPPermissionType) -> String? @objc optional func image(for permission: SPPermissionType) -> UIImage? } 

Pour être honnête, je ne vois aucune raison de m'attarder sur tout le monde, puisque leurs noms parlent. Analysons quelques uns ambigus: bottomComment et showCloseButton .

Le premier paramètre est responsable du commentaire sous la boîte de dialogue, par exemple, vous pouvez mettre l'invite " Glisser pour fermer ":



Le deuxième paramètre, showCloseButton , est responsable du bouton de fermeture dans le coin supérieur droit de l'écran. J'ai aussi une photo avec un exemple:



Certaines fonctions permettent de retourner nil , cela est nécessaire si vous n'avez pas besoin de personnaliser tous les en-têtes / icônes ou le texte. Il suffit de retourner nil pour laisser la valeur par défaut:

 func description(for permission: SPPermissionType) -> String? { if permission == .calendar { return "" } lse { return nil } } 

Il reste à passer l'objet DataSource à la structure principale:

 SPPermission.Dialog.request( with: [.camera, .calendar, .microphone, .notification], on: self, dataSource: self ) 

Délégué


Il vous permet de suivre certains événements. Regardons le protocole:

 @objc public protocol SPPermissionDialogDelegate: class { @objc optional func didHide() @objc optional func didAllow(permission: SPPermissionType) } 

Hmm, pas beaucoup ... Et pourtant, que faut-il d'autre?) Je ne pense pas que cela vaille la peine d'expliquer quels événements les fonctions seront appelées. Les noms parlent. J'attire votre attention - le délégué ne doit pas oublier d'indiquer:

 SPPermission.Dialog.request( with: [.camera, .calendar, .microphone, .notification], on: self, delegate: self dataSource: self ) 

Autorisations




La liste sera réapprovisionnée s'il y a des suggestions ou des critiques de la bibliothèque, cela vaut la peine de créer un nouveau numéro ici

Brioches


Il convient de prêter attention à une fonction utile:

 func isAllow(_ permission: SPPermissionType) -> Bool 

Il vous fera savoir si l'utilisateur a donné l'autorisation. Pour augmenter la fidélité, il est recommandé de demander des autorisations non pas dans un bundle, mais avant utilisation. Et pas plus de 3 ex! Bien que je trouve difficile de trouver une situation où j'en ai besoin de plus) Utilisez ceci:

 let isAvailableCamera = SPPermission.isAllow(.amera) 

Pourquoi mettre à jour


L'ancienne version ressemblait à ça, et il y a peut-être un an, ce n'était rien:



En fait, je ne l'ai pas mis à jour pendant un an (enfin, ne prétendez pas que vous ne compreniez pas que j'étais l'auteur de la bibliothèque), mais plus récemment, j'ai reçu une lettre ... bien que parlons de cette histoire un peu plus tard. Nous faisons des affaires sérieuses ici!

L'architecture


Il y a environ un an, j'ai écrit un article dans lequel j'ai vaincu directement les amoureux de l'utilisation injustifiée de l'architecture. Mais seulement je le pensais, et le message principal n'a pas été entendu. Mon désir de simplifier cette année ne s'est pas arrêté. Quand j'ai conçu la refonte, j'ai réalisé que le projet devait être réécrit dans son ensemble. Il s'agit d'une sorte de plate-forme de forage capable d'écouter la radio, de couper des légumes et un radiateur à demi-débit. Je l'ai vu un an plus tard! Maintenant, il me semble stupide d'écrire cet article , ayant un exemple si complexe. Probablement dans une autre année, je vous faciliterai la tâche. Voyons voir)

Alors, quelle est l'histoire?


Le tutoriel sobsna est terminé et nous passons au bavardage. Il y a quelques semaines, j'ai reçu une lettre me demandant d'expliquer le fonctionnement de la bibliothèque. C'était une question étrange, et depuis que j'ai abandonné la bibliothèque, j'ai simplement répondu avec un modèle:

- « Cher ami, je ne supporte pas la bibliothèque maintenant, je n'ai pas de temps libre. Meilleurs vœux »

Je viens de l'écrire correctement, uniquement à Zabugorsk. Et j'ai oublié. En entrant dans le pavot, j'en ai vu une dizaine !!! messages dans le dossier spam. Eh bien, tout, évidemment, certains portails ont divergé, comment puis-je me désinscrire de leur mailing! Et nnnet ... Le même gars m'a écrit, mais cette fois avec colère. Dans des lettres, j'ai appris que je ne suis pas l'auteur de la bibliothèque (par conséquent, je ne peux pas vous le dire), j'ai découvert que des gens comme moi sont les personnes les plus terribles (et nous devons interdire l'enregistrement sur GitHub), j'ai découvert que je voulais beaucoup d'argent pour mon travail sans valeur. De l'argent? Sur l'ancienne page, il n'y avait même pas de formulaire de donut. Mais j'ai compris le point, l'homme était juste en colère.

J'ai décidé d'aider, mais pas par gentillesse - j'étais incroyablement intéressé par ce qui était incroyable qui devait être personnalisé, ce qui a provoqué une énorme vague de colère. Il s'est avéré qu'il cherchait une méthode qui est appelée lorsque la boîte de dialogue est fermée. Il n'y avait aucune limite à mon rire à travers les larmes! Le délégué a été décrit dans la première version.

L'histoire est triste, mais encore plus triste! Oui oui Je lui ai décrit en détail personnellement comment utiliser les délégués, pour ainsi dire, le cours général. Je n'ai pas manqué l'occasion de m'amuser et j'ai dit que tout cela était sur la page principale du projet depuis le tout début. J'ai eu la réponse ... mais je voulais pleurer encore plus:

« J'ai récemment commencé la programmation et je ne veux pas comprendre la documentation. Au revoir »

J'ai ri longtemps.

Nous finissons


Un petit programme pédagogique a été introduit, pour les attentifs je laisserai des liens vers le laps de temps avec le design (je lèche sans scrupules les retraits et les couleurs des e-applications) et un tutoriel qui montrera tout ce que j'ai décrit ici, mais clairement.

Toutes les migrations réussies vers le nouveau Swift!

Source: https://habr.com/ru/post/fr430886/


All Articles