我有一个Objective-C和Swift混合动态框架。混合框架与两个纯Objective-C动态框架相关联。
当我尝试使用IB Designable在混合框架中标记任何类并在storyboard或nib中使用该类时,Xcode总是说它的实例无法呈现。
并且出现了错误消息:
IB Designables:无法呈现WZUITokenField的实例:dlopen(WZUIKit.framework,1):未加载库:/Library/Frameworks/WZFoundation.framework/WZFoundation 参考自:WZUIKit.framework 原因:未找到图像
IB Designables:无法更新自动布局状态:dlopen(WZUIKit.framework,1):未加载库:@ rpath / WZFoundation.framework / WZFoundation 参考自:WZUIKit.framework 原因:未找到图像
框架WZUIKit是Objective-C和Swift混合框架,WZFoundation是纯Objective-C。
另外,所有这些sutff都适用于任何设备或模拟器。
答案 0 :(得分:76)
最后,我通过在目标的构建设置中添加$(CONFIGURATION_BUILD_DIR)
来解决了这个问题。 Runpath Search Paths
字段。
另外,您可能需要对Xcode执行一些其他步骤。
~/Library/Developer/Xcode/DerivedData
Editor
菜单并执行Refresh All Views
;等待构建完成,错误应该消失归功于@Mojtaba
答案 1 :(得分:17)
如果您在构建Mac App时遇到同样的问题,将@loader_path/../Frameworks
添加到Runpath Search Paths
可以解决此问题。
答案 2 :(得分:13)
对我而言,它可以关闭xcode并重新打开它。之后没有错误。 感谢。
答案 3 :(得分:5)
我在包含IBDesignables的框架上遇到此错误。
我必须将$(FRAMEWORK_SEARCH_PATHS)
添加到我的框架目标的LD_RUNPATH_SEARCH_PATHS
设置中。
更新运行路径设置,构建并刷新故事板中的视图后,错误就消失了。甚至不用清理构建文件夹。
答案 4 :(得分:4)
我有同样的问题在Xcode 6.4中,为故事板添加测试目标成员资格为我修复了这些错误。
此外,我的测试目标在@loader_path/Frameworks
中为测试目标设置了Runpath Search Paths
,而不是在原始目标中。
答案 5 :(得分:4)
有趣。
首先,WeZZard的回答让我朝着正确的方向前进,但并不是我的解决方案。
在我的iOS项目中,某些内容覆盖了目标中的Runpath Search Paths
字段。它看起来像这样:
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
我尝试了添加$(CONFIGURATION_BUILD_DIR)
的解决方案,但它对我没用。由于它没有工作,出于习惯我刚刚删除了配置条目(回到项目默认值)。当我这样做时,重置为:
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
如果我深入研究我的xcconfig文件,它似乎来自Cocoapods。
似乎与@loader_path
是关键的Alex相同,但它在iOS上的路径与Mac OS X略有不同。
答案 6 :(得分:3)
我刚刚在我的案例中找到了另一个原因:
当我使用'编辑 - >调试所选视图'我看到它崩溃了,因为我使用CoreGraphics创建一个图像并将其用作按钮的背景图像:
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;
}
原因很简单,大小是(0.0,0.0)。这是为什么?我在打电话
super.setBackgroundImage(UIImage.imageWithColor(bgColor, size: self.bounds.size), forState: .Normal)
但在IB中,self.bounds.size在此时仍为0!所以我换了一行:
let rect = CGRectMake(0.0, 0.0, max(size.width, 1.0), max(size.height, 1.0));
现在它有效:)
Apple应该提供一份关于IB的Dos和Don'ts的清单......
答案 7 :(得分:2)
我也在Mac项目和Xcode 7.3.1上体验过这一点。就我而言,“无法渲染”错误消息中引用的框架与绘图完全无关。
只需转到目标的常规/链接框架和库选项卡,并将违规框架的状态从必需更改为可选,允许IBDesignables在IB中正确更新和绘制。
答案 8 :(得分:1)
就我而言,我在initWithFrame / initWithCoder方法中执行下一步创建视图:
className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
但看起来我不应该使用主捆绑,而是使用类捆绑。所以我替换了以下代码,它起作用了:
bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];
我想也许这对某些人有帮助。
答案 9 :(得分:1)
我在OS X项目中遇到了这个问题。
就我而言,问题是一个旧项目(NMSSH),其中包含具有错误构建设置的框架目标。具体做法是:
INSTALL_PATH
设置为@executable_path/../Frameworks
,但正确设置为/Library/Frameworks
SKIP_INSTALL
未设置且默认为NO
,但正确的设置为YES
DYLIB_INSTALL_NAME_BASE
未设置,但正确的设置为@rpath
请注意,所有正确的设置都是您为新创建的框架目标自动获得的设置。
将设置更改为正确的值后,Xcode可以在故事板中加载我的@IBDesignable
视图。
答案 10 :(得分:0)
按照以下步骤操作:
答案 11 :(得分:0)
我有一个类似的错误,是由于我的框架的观点没有公共初始化程序引起的:
public override init(frame: CGRect) {
super.init(frame:frame)
commonInit()
}
required public init(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
答案 12 :(得分:0)
清除衍生数据。 退出Xcode, 再次重新打开。
答案 13 :(得分:0)
就我而言,它位于私人吊舱内。 Xcode版本10.3(10G8)
对于我来说,解决方案非常简单-我只是忘记在public
@IBInspectable var
正确的变体:
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 .:编辑器->在我的情况下,调试选定的视图没有任何作用
P.S.2:来自我的私有Pod的依赖项中的AlignedCollectionViewFlowLayout pod,并且绝对与此问题无关。
P.S.3:问题仍然在这里
答案 14 :(得分:0)
[我把这个答案放在这里给像我这样的人,他们发现这个非常相似的线程而又找不到解决方案]
在使用Cocoapods
1.9.1
时,我遇到了类似的问题,错误消息与path error
有关,如下所示(为了方便起见,我添加了NewLines ):
error: IB Designables:
Failed to render and update auto layout status for
UITableViewController (kDz-VB-YcS):
dlopen(YOUR_FRAMEWORK.framework, 1):
Library not loaded: @rpath/YOUR_FRAMEWORK.framework/YOUR_FRAMWORKReferenced
from: YOUR_FRAMEWORK.frameworkReason: image not found
这是线程的链接:Cocoapods Issue 7606
在评论中,有人发布了一个解决方案(对我有用)。您需要将此post_install
规则放在Podfile
的最后:
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
next unless config.name == 'Debug'
config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = [
'$(FRAMEWORK_SEARCH_PATHS)'
]
end
end
然后再次执行pod install
,现在应该可以了
希望有帮助〜