ios - 在 Swift 框架中加载资源(例如 Storyboard)

标签 ios swift

我正在尝试制作一个将捆绑 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/

相关文章:

ios - 整数文字存储到 'Int'错误时溢出

ios - 编码器 : unrecognized selector sent to instance

ios - 在 Swift 中使用 Firebase 实时数据库时如何获取数组数据?

iphone - willAnimateToRotation 没有被调用

ios - 使用核心数据 Swift 从 UITextView 保存文本

ios - Xcode Playground : new pages cannot refer to source files

ios - Swift 中的有限区域 Pinchview

iOS SDK(xcodebuild): Clang error cannot specify -o when generating multiple output files

ios - 存在 Xib 文件的自定义绘图

ios - Swift 4/5 设置向 WKWebview 添加代理