【发布时间】:2018-07-03 02:25:07
【问题描述】:
iOS 应用需要按需加载/执行/卸载捆绑代码的罕见情况。虽然它适用于 Objective-C 框架,但事实证明 Swift 框架是一个障碍:Bundle.principleClass 始终返回 nil。
我遵循了这篇博文Plugin Architecture in Swift(ish) 中的示例以及类似Apple forum post 的其他一些来源。
需要的是 3 个单独的项目(而不是单个项目中的 3 个目标):
FrameworkSwift - framework A
FrameworkObjC - framework B
Main App - loads frameworks on demand
您可以在这里查看代码:
Xcode 项目设置:
如果您尝试构建并运行,控制台将讲述故事:
Loaded bundle: FrameworkObjC.framework , principal class: PluginObjC
Loaded bundle: FrameworkSwift.framework , principal class: N/A
关于 Swift 框架的一些细节:
- 类是公共的并且扩展了 NSObject
- 在 Info.plist 中设置了主体类
- 框架未链接,它们作为二进制文件嵌入
- 框架项目拖入主项目
【问题讨论】:
标签: ios objective-c swift cocoa-touch nsbundle