Xcode 项目使用来自动态框架的主界面
Posted
技术标签:
【中文标题】Xcode 项目使用来自动态框架的主界面【英文标题】:Xcode project use main interface from dynamic framework 【发布时间】:2016-06-02 14:30:54 【问题描述】:我创建了一个动态框架(需要是动态的,因为它包含 .swift 文件),该框架工作正常,我可以像这样从 appDelegate 以编程方式加载我的故事板:
let frameworkBundle = NSBundle(identifier: "DynamicLibrary")
let s = UIStoryboard(name: "MainStoryboardName", bundle: frameworkBundle)
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
// Override point for customization after application launch.
self.window!.backgroundColor = UIColor.whiteColor()
self.window!.makeKeyAndVisible()
self.window!.rootViewController = s.instantiateInitialViewController()
但是当我更改 ViewController(移动到同一个 .storyboard 内的另一个屏幕)时,应用程序崩溃了。 我想知道是否可以将动态框架中的 .storyboard 作为主界面包含在项目设置中。或者从动态框架加载 .storyboard 作为主故事板的最佳替代方法是什么。
【问题讨论】:
【参考方案1】:提供比“应用程序崩溃”更具体的错误信息会很有帮助。
但一般来说,从包中加载 Interface Builder 文件的问题是由于文件中引用的类没有链接到输出中,因为链接器无法获取对包的引用。对此的规范补救措施是将-all_load -ObjC
添加到其他链接器标志。它有自己的一系列问题,但从某个地方开始。
【讨论】:
感谢您的回答,这次我可以避免添加这个邪恶的标志。 :)【参考方案2】:我找到了我的问题的问题,只是在这里回答,因为它可能对其他人有用。
一开始我的故事板和资产都在我的项目中,因此我可以毫无问题地加载/链接它们。但是当我将它们移动到动态库(Cocoa 框架触摸)中时,我的应用程序开始崩溃,这是因为我加载资产的方式不再是在我的项目中而是在我的框架中。 所以当我在我的项目中拥有一切时,我正在这样做:
[UIImage imageNamed:@"bar_grey_2.png"]
但在将其移至我的框架后,我必须更新为:
[UIImage imageNamed:[[NSBundle bundleForClass:[self class]] pathForResource:@"bar_grey_1" ofType:@".png" inDirectory:nil]]
只是关于动态框架的评论,它们在ios7中不受支持,苹果将拒绝接受任何针对iOS7的动态框架的应用。
【讨论】:
问题标记为“swift”:请用 Swift 编写代码示例。谢谢。以上是关于Xcode 项目使用来自动态框架的主界面的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 11,使用 Main.storyboard 修复的主界面 [重复]