我正在尝试制作一个将捆绑 Storyboard的框架。我已经检查过,创建的 .framework 包括我的 .storyboard 文件(作为 .storyboardc
文件),并且已经获得了在运行时加载 Storyboard的框架。然而,这是一个框架,我希望代码尽可能多才多艺,我觉得我目前的解决方案有点老套。目前,我正在使用以下代码加载 Storyboard:
let mainBundlePath: String = NSBundle.mainBundle().resourcePath
let frameworkBundlePath = mainBundlePath.stringByAppendingPathComponent("Frameworks/AuthenticationManager.framework")
let frameworkBundle = NSBundle(path: frameworkBundlePath)
let storyboard = UIStoryboard(name: "Storyboard", bundle: frameworkBundle)
我注意到有几件事可能是陷阱:
- 框架的路径 (
Frameworks/
) 将来可能会发生变化,不应该依赖? - 框架的名称可以更改,但如果不先获取框架的
NSBundle
,就无法获取产品名称吗? - 框架并不是真正的 bundle (?),因此将它们作为 bundle 加载可能会在未来产生无法预料的后果?
可能还有其他的问题,上面的问题的解决方法,或者上面的问题可能根本就不是问题,但是我一直想不出来。
这个问题可能更适合Code Review ,但我觉得它也很适合这里。如果需要将它移到那里,请随时这样做或告诉我这样做。
最佳答案
框架(从“Cocoa Touch Framework”模板创建)有一个包标识符, 它存储在生成的框架包的 Info.plist 中。
包标识符在通用目标设置中配置。
默认情况下,它是 <organization prefix>.<framework name>
.
您可以使用此标识符定位框架,例如:
let frameworkBundle = NSBundle(identifier: "com.duffy.AuthenticationManager")
let storyboard = UIStoryboard(name: "Storyboard", bundle: frameworkBundle)
关于ios - 在 Swift 框架中加载资源(例如 Storyboard),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24982848/