Méthode Swizzling dans iOS 5?
Apple a bloqué la Méthode Swizzling dans iOS 5?
Je faisais un peu de jeu autour et a découvert qu'une application avec la Méthode Swizzling fonctionne sur iOS 4, mais pas sur iOS 5.
REMARQUE: L'application fonctionne sur iOS 5, mais pas de la partie lors de la Méthode Swizzling est utilisé.
Quelle classe êtes-vous cibler? Méthode swizzling est fragile en raison de la mise en œuvre privée des détails qui échappent à votre contrôle.
Pourriez-vous en dire un peu plus sur les raisons de méthode swizzling est fragile? Je ne suis pas au courant de tout ABI ou d'autres situations potentiellement fragile.
Pourriez-vous en dire un peu plus sur les raisons de méthode swizzling est fragile? Je ne suis pas au courant de tout ABI ou d'autres situations potentiellement fragile.
OriginalL'auteur Jash Sayani | 2011-10-11
Vous devez vous connecter pour publier un commentaire.
Apple a envoyé un courriel il y a un moment pour certains devs qui ont été trouvés à l'aide de la méthode swizzling dans les apps de l'App Store:
Dirait qu'ils voulaient se débarrasser d'elle, donc je dirais que les chances sont assez élevées que ce qu'ils ont maintenant bloqué complètement.
bonne question, je ne suis pas sûr de la réponse. (Bien que la méthode swizzling semble très hacky code si ce n'est pas pour contourner des limitations de l'API - êtes-vous sûr il n'y a pas de meilleure façon de structurer votre code?) Ne devrait pas être trop dur à tester tout de même, si vous poster le résultat ici, je vais mettre à jour la réponse 🙂
vous pouvez certainement utiliser, par exemple, les objets associés et
class_addMethod
ajouter un supplément de propriété au moment de l'exécution.class_addIvar
cesse de fonctionner aprèsobjc_registerClassPair
si vous êtes enfermé dehors de cela, malheureusement.il ne serait pas techniquement être un ivar, mais ont un fonctionnement getter et setter serait impossible à distinguer de toute autre propriété.
oh, désolé, associés à des objets comme
objc_setAssociatedObject
,objc_getAssociatedObject
etobjc_removeAssociatedObjects
. Le runtime pouvez lier un objet à un autre, à un faible niveau, alors vous pourriez écrire un setter et getter pour lisser les fissures. Voir developer.apple.com/library/ios/#documentation/cocoa/conceptual/... à propos de l'ancien.OriginalL'auteur Jordan Smith
Mise à JOUR: (Mon Appli utilise cette méthode et est dans l'appstore)
Méthode swizzling semble être de travailler à partir du 30 Mai 2012. c'est mon œuvre.
(Ceci est pour ceux d'entre vous qui cherchent autour et trouver mauvais code sur les pages wiki et vous voulez juste une mise en œuvre rapide.)
Swizz.h
Swizz.m
J'ai construit ce pour me permettre d'intercepter les reuseIdentifier sur le UITableViewCell avec un UITableViewCell extension.
Ici, c'est que exemple.
UITableViewCell+ReuseIdentifier.h
UITableViewCell+ReuseIdentifier.m
Comme vous pouvez le voir, le ActivateAutoSwizz() ainsi que ma swizzInit méthode à la fois l'utilisation dispatch_once pour exécuter la swizzle une fois.
Si vous exécutez deux fois. il renverse votre méthode de revenir à l'original.
J'espère que cela aide certains d'entre vous iOS devs.
REMARQUE: j'ai déterminé qu' +(void) la charge est appelée une fois à l'application de début et est un endroit merveilleux pour obtenir la méthode de swizzle. Malheureusement, dans certains dev situations +(void)charge n'est pas appelé, Vous pouvez tester votre application pour vous assurer que ces méthodes sont appelés.
OriginalL'auteur The Lazy Coder
Bien, nous avons reçu le OK sur un mont hago (début Mai 2012) pour une application qui fait beaucoup de l'utilisation de la méthode Swizzling pour personnaliser les composants de l'INTERFACE utilisateur dans iOS4 (iOS5 à l'aide de l'apparence). En outre, la méthode swizzling est une API entièrement documentée qui donne également de très puissantes fonctionnalités ne sont pas liés à Apple lui-même ou de l'utilisation des Api privées. Je trouve cela difficile à croire qu'ils pourraient rejeter une telle chose!
De toute façon, s'il vous plaît, garder tout le monde informé si vous voyez plus de rejets liés à ce! Merci!
OriginalL'auteur Angel G. Olloqui