/ / Xcode 7.3 ne peut pas créer de référence __weak dans un fichier à l'aide du comptage manuel de références - objective-c, xcode, cocoapods

Xcode 7.3 ne peut pas créer de référence __weak dans un fichier à l'aide du comptage manuel de références - objective-c, xcode, cocoapods

Après la mise à jour vers Xcode 7.3, l'erreur est renvoyée. Cannot create __weak reference in file using manual reference counting dans les fichiers pod. Quelqu'un a-t-il résolu ce problème?

Réponses:

167 pour la réponse № 1

Ensemble Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release à YES.

Exemple visuel

Pris à partir de Forums des développeurs Apple - Xcode 7.3b4, sans arc, ne peut pas créer de référence __weak.


20 pour la réponse № 2

C'est la réponse officielle d'Apple à partir du lien:

Ce problème se comporte comme prévu en fonction de laNous sommes dans le processus d'implémentation de références faibles dans tous les langages Objective-C modes. Depuis, «__weak» a toujours été ignoré dans les pays non-ARC (et langages non GC), nous avons ajouté cette erreur pour signaler des endroits où la sémantique va changer dans le futur. Veuillez mettre à jour votre bug signaler pour nous faire savoir si cela est toujours un problème pour vous.

En résumé, si vous utilisez Pod pour des bibliothèques tierces, vous devez supprimer __weak dans une version non ARC ou attendre la mise à jour.

Mettre à jour @ 3/23

Je devrais "faire plus de recherches sur les drapeaux que je peux passer au complier afin de contourner ce genre de choses. Mais fondamentalement, vous ne devriez pas utiliser __weak en mode non-ARC à partir de maintenant pour éviter tout conflit inattendu. Pour les utilisateurs de cocoapodes, vous n'avez pas besoin de supprimer __weak ou attendez la mise à jour mais définissez Weak References in Manual Retain Release drapeau dans les paramètres de construction à YES comme dit Lean. J'espère que cette aide.


20 pour la réponse № 3

La meilleure façon de résoudre ce problème est d’ajouter un post_install script à votre Podfile qui définit la Weak References in Manual Retain Release drapeau à yes dans toutes vos cibles de pod. Pour ce faire, il suffit de coller le code suivant au bas de votre Podfile.

post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["CLANG_ENABLE_OBJC_WEAK"] ||= "YES"
end
end
end

Parfois, cela entraîne l'erreur -fobjc-weak is not supported on the current deployment target. Vous pouvez résoudre ce problème en ajoutant une autre option de configuration, forçant tous les pods à cibler la version de votre choix (basé sur cette réponse):

post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["CLANG_ENABLE_OBJC_WEAK"] ||= "YES"
config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = "9.3"
end
end
end

8 pour la réponse № 4

Solution de contournement pour les références faibles de Facebook dans FBSettings.m

Pour Podfile, il est possible d’écrire un script à exécuter après l’installation / la mise à jour du pod.

 
post_install do | installer |
classy_pods_target = installer.pods_project.targets.find {| target | target.name == "Facebook-iOS-SDK"}
classy_pods_target.build_configurations.each do | config |
config.build_settings["CLANG_ENABLE_OBJC_WEAK"] ||= "YES"
end
end

CLANG_ENABLE_OBJC_WEAK comment trouver les mots de la magie que. XHTML valide.


7 pour la réponse № 5

J'ai trouvé ça.

Je suppose que cela signifiait supprimer __ faible

https://forums.developer.apple.com/thread/38934

Euh, y a-t-il jamais eu une référence de variable faible sous MRR [main-conservation manuelle]? "__weak" signifie une ou deux choses:

  1. Une référence non possédée (c'est-à-dire ne représentant pas un nombre de retenues).

  2. Une référence de mise à zéro (c’est-à-dire que le runtime est à zéro lorsque l’objet référencé est désalloué).

N ° 1 ne s'applique pas à MRR, car vous ne conservez pas la variable de toute façon.

Le numéro 2 ne s'applique pas non plus à MRR, car le support d'exécution est en GC et ARC [comptage automatique des références], que vous n'utilisez pas.

On dirait que le compilateur est maintenant justese plaindre de ne pas pouvoir faire ce qu’il ne pourrait jamais faire (et dans le cas d’un délégué d’application, vous ne pourriez pas faire la différence au moment de l’exécution, car le délégué d’application n’est généralement jamais désalloué.


0 pour la réponse № 6

Allez simplement dans "Build Phases" votre cible, recherchez les fichiers de pod dans "Compiler les sources", cliquez sur ces fichiers et ajoutez l'indicateur de compilation "-fobjc-arc".


0 pour la réponse № 7

Ou changer __weak à __unsafeunretained. Cela résoudra le problème dans la tradition. Depuis MRC (avant xCode 4 -), __weak n’était pas dans iOS.