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框架的一些细节:
答案 0 :(得分:0)
Swift Framework的Info.plist中的主体类名称应以其模块名称开头。换句话说,如果将Info.plist中的主体类从“ PluginSwift”更改为“ FrameworkSwift.PluginSwift”,则对PrincipalClass的调用将返回该类,而不是nil。