J'ai un cadre dynamique mixte Objective-C et Swift. Et le cadre mixte était lié à deux cadres dynamiques purs Objective-C.
Lorsque j'ai essayé de marquer une classe dans le cadre mixte avec IB Designable et d'utiliser cette classe dans le storyboard ou dans le pli, le Xcode dit toujours que le rendu de l'instance a échoué.
Et il y avait le message d'erreur:
IB Designables: Impossible de restituer une instance de WZUITokenField: dlopen (WZUIKit.framework, 1): Bibliothèque non chargée: /Library/Frameworks/WZFoundation.framework/WZFoundation Référencé par: WZUIKit.framework Raison: image non trouvée
IB Designables: Échec de la mise à jour du statut de présentation automatique: dlopen (WZUIKit.framework, 1): Bibliothèque non chargée: @ rpath/WZFoundation.framework/WZFoundation Référencé par: WZUIKit.framework Raison: image non trouvée
Le framework WZUIKit est un framework mixte Objective-C et Swift et la WZFoundation est purement Objective-C.
De plus, tous ces éléments fonctionnent sur l’appareil ou sur le simulateur.
Enfin, j'ai résolu ce problème en ajoutant $(CONFIGURATION_BUILD_DIR)
dans le champ Runpath Search Paths
du paramètre de génération de la cible.
De plus, vous devrez peut-être effectuer certaines étapes supplémentaires avec votre Xcode.
~/Library/Developer/Xcode/DerivedData
Editor
et faites Refresh All Views
; attendez que la construction soit terminée et que les erreurs disparaissentcrédit de @Mojtaba
Si vous rencontrez le même problème lors de la création d'une application Mac, l'ajout de @loader_path/../Frameworks
à Runpath Search Paths
a résolu ce problème.
pour moi, cela fonctionne pour fermer xcode et le rouvrir à nouveau. Pas d'erreurs après .. .. Merci.
Intéressant.
Premièrement, la réponse de WeZZard m'a permis d'aller dans la bonne direction mais n'était pas exactement ma solution.
Dans mon projet iOS, quelque chose avait remplacé le champ Runpath Search Paths
dans ma cible. Cela ressemblait à ceci:
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
J'ai essayé sa solution d'ajouter la $(CONFIGURATION_BUILD_DIR)
mais cela n'a pas fonctionné pour moi. Comme cela ne fonctionnait pas, par habitude, j'ai simplement supprimé l'entrée de configuration (pour revenir aux valeurs par défaut du projet). Quand je l'ai fait, il s'est réinitialisé à ceci:
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
qui, si je fouille dans mes fichiers xcconfig, semble provenir des Cocoapods.
Il semble identique à Alex que le @loader_path
est la clé, mais le chemin est légèrement différent sur iOS que sur Mac OS X.
J'ai eu le même problème Dans Xcode 6.4, l'ajout de l'appartenance à la cible Test au storyboard a corrigé ces erreurs pour moi.
De plus, ma cible de test a @loader_path/Frameworks
défini dans Runpath Search Paths
pour la cible de test et non dans la cible d'origine.
Je viens de comprendre une autre raison dans mon cas:
Lorsque j'ai utilisé 'Editor -> Debug Selected Views', j'ai constaté qu'il se bloquait, car j'utilisais CoreGraphics pour créer une image et l'utiliser comme image d'arrière-plan pour un bouton:
class func imageWithColor(color: UIColor, size: CGSize) -> UIImage {
let rect = CGRectMake(0.0, 0.0, size.width, size.height);
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
let context = UIGraphicsGetCurrentContext(); // It's alraedy nil here :(
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
La raison en est simplement que la taille est (0.0, 0.0). Pourquoi donc? j'appelle
super.setBackgroundImage(UIImage.imageWithColor(bgColor, size: self.bounds.size), forState: .Normal)
Mais dans IB, self.bounds.size est toujours égal à 0! J'ai donc changé une ligne:
let rect = CGRectMake(0.0, 0.0, max(size.width, 1.0), max(size.height, 1.0));
Et maintenant ça marche :)
Apple devrait fournir une liste de choses à faire et à ne pas faire concernant l'IB ...
J'ai aussi expérimenté cela sur un projet Mac et Xcode 7.3.1. Dans mon cas, la structure référencée dans le message d'erreur Echec du rendu n'était pas du tout liée au dessin.
Le simple fait de passer à l'onglet Général/Liés de la cible et aux bibliothèques de la cible et de changer le statut de la structure en cause de obligatoire à facultatif a permis à IBDesignables de se mettre à jour et de dessiner correctement dans IB.
J'ai eu ce problème dans un projet OS X.
Dans mon cas, le problème était un vieux projet ( NMSSH ) contenant une cible de structure avec de mauvais paramètres de construction. Plus précisément:
INSTALL_PATH
a été défini sur @executable_path/../Frameworks
, mais le paramètre correct est /Library/Frameworks
SKIP_INSTALL
n'a pas été défini et sa valeur par défaut est NO
, mais le paramètre correct est YES
DYLIB_INSTALL_NAME_BASE
n'a pas été défini, mais le paramètre correct est @rpath
Notez que tous les paramètres corrects sont ceux que vous obtenez automatiquement pour une cible de structure nouvellement créée.
Après avoir modifié les paramètres avec les valeurs correctes, Xcode a pu charger ma vue @IBDesignable
dans le storyboard.
Dans mon cas, je faisais le suivant dans les méthodes initWithFrame/initWithCoder pour créer la vue:
className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
Mais il semble que je n'étais pas censé utiliser le paquet principal mais le paquet de la classe. J'ai donc remplacé ce code par ce qui suit:
bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];
Je pensais que cela pourrait peut-être aider quelqu'un.
Effacer les données dérivées. Quittez Xcode, Rouvrez à nouveau.
Dans mon cas, c'est à l'intérieur du pod privé. Xcode version 10.3 (10G8)
La colution est très simple dans mon cas - J'oublie juste d'ajouter public
entre-deux de @IBInspectable var
bonne variante:
import UIKit
@IBDesignable public class BorderedView: UIView {
@IBInspectable public var borderColor: UIColor? = UIColor.white {
didSet {
if let actualColor = borderColor {
layer.borderColor = actualColor.cgColor
} else {
layer.borderColor = UIColor.white.cgColor
}
setNeedsDisplay()
}
}
@IBInspectable public var borderWidth: CGFloat = 1 {
didSet {
layer.borderWidth = borderWidth
setNeedsDisplay()
}
}
}
P.S .: Editeur -> Déboguer les vues sélectionnées n'a rien fait dans mon cas
P.S.2: Le pod AlignedCollectionViewFlowLayout de la dépendance de mon pod privé et sans aucun rapport avec ce problème.
P.S.3: La question est toujours là
J'ai frappé cette erreur sur un framework contenant IBDesignables.
Je devais ajouter $(FRAMEWORK_SEARCH_PATHS)
au paramètre LD_RUNPATH_SEARCH_PATHS
sur ma cible de structure.
Après la mise à jour du paramètre de chemin d'exécution, de la construction et de l'actualisation de la vue dans le storyboard, l'erreur a disparu. N'a même pas eu à nettoyer le dossier de construction.
J'ai eu une erreur similaire provoquée par les vues de mon Framework n'ayant pas d'initialisateurs publics:
public override init(frame: CGRect) {
super.init(frame:frame)
commonInit()
}
required public init(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
Suivez les étapes ci-dessous: