Ios 动态加载的Swift框架包';s的主类为零

Ios 动态加载的Swift框架包';s的主类为零,ios,objective-c,swift,cocoa-touch,nsbundle,Ios,Objective C,Swift,Cocoa Touch,Nsbundle,iOS应用程序需要按需加载/执行/卸载捆绑代码的罕见情况。虽然它与Objective-C框架一起工作,但Swift框架被证明是一个障碍:Bundle。principleClass始终返回nil 我在这篇博文中引用了这个例子,还有其他类似的来源 需要3个单独的项目(而不是单个项目中的3个目标): 您可以在此处签出代码: Xcode项目设置: 如果您尝试构建并运行,控制台将讲述以下故事: Loaded bundle: FrameworkObjC.framework , principal c

iOS应用程序需要按需加载/执行/卸载捆绑代码的罕见情况。虽然它与Objective-C框架一起工作,但Swift框架被证明是一个障碍:
Bundle。principleClass
始终返回
nil

我在这篇博文中引用了这个例子,还有其他类似的来源

需要3个单独的项目(而不是单个项目中的3个目标):

您可以在此处签出代码:

  • Xcode项目设置:

    如果您尝试构建并运行,控制台将讲述以下故事:

    Loaded bundle: FrameworkObjC.framework , principal class: PluginObjC
    Loaded bundle: FrameworkSwift.framework , principal class: N/A
    
    关于Swift框架的一些细节:

    • 类是公共的,并扩展了NSObject
    • 主体类在Info.plist中设置
    • 框架没有链接,它们作为二进制文件嵌入
    • 框架项目被拖到主项目中

    Swift框架的Info.plist中的主体类名称应以其模块名称开头。换句话说,如果您在Info.plist中将principal类从“PluginSwift”更改为“FrameworkSwift.PluginSwift”,那么对principalClass的调用将返回该类而不是nil。

    太好了!非常感谢。我已经更新了存储库,现在一切都正常了。
    Loaded bundle: FrameworkObjC.framework , principal class: PluginObjC
    Loaded bundle: FrameworkSwift.framework , principal class: N/A