macOS NSExtensionMainStoryboard 无法加载

Posted

技术标签:

【中文标题】macOS NSExtensionMainStoryboard 无法加载【英文标题】:macOS NSExtensionMainStoryboard fails to load 【发布时间】:2018-08-08 06:40:19 【问题描述】:

与尝试使用 .xib 创建 ios 扩展的许多问题不同,我正在尝试与使用 StoryBoard 创建 macOS 扩展完全相反。当 Xcode 为我的 macOS 项目创建 App Extension 目标时,它只有一个 .xib 和一个 .xib 中 ViewController 的 NSExtensionPrincipalClass

所以我创建了一个 New -> File -> Storyboard,并将 NSExtensionMainStoryboard 添加到 plist 和 StoryBoard 的名称没有扩展名,我得到了模糊的 Widget Simulator 错误:

"TodayExt[76374:5145083] Failed to load extension view controller"

我已经确认:StoryBoard 名称、StoryBoard 自定义类、StoryBoard 的目标成员资格、NSExtensionMainStoryboard直接在下面NSExtension。

来自我的 plist:

<dict>
    <key>NSExtensionMainStoryboard</key>
    <string>TodayStoryboard</string>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionPointVersion</key>
        <string>2.0</string>
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.widget-extension</string>
    <key>com.apple.notificationcenter.widget.description</key>
    <string>TodayExt</string>
</dict>

【问题讨论】:

【参考方案1】:

这不是答案,而是一种变通方法。 The answer on Apple Dev forums 说“你总是可以定义一个自定义故事板并使用一些胶水代码将其嵌入到你的根视图控制器中。”

对于那些想知道“胶水代码”是什么的人,您可以在 *ExtensionController 中添加如下内容:

override func viewDidLoad() 
    super.viewDidLoad()

    let myStoryboard = NSStoryboard.init(name: NSStoryboard.Name("MyStoryboard"), bundle: Bundle.main)
    let myStoryboardVC = myStoryboard.instantiateInitialController() as! MyStoryboardViewController
    self.view.autoresizesSubviews = true
    self.view.addSubview(myStoryboardVC.view)
    self.insertChildViewController(myStoryboardVC, at: 0)

我仍然很想知道不用胶水的正确方法。

【讨论】:

以上是关于macOS NSExtensionMainStoryboard 无法加载的主要内容,如果未能解决你的问题,请参考以下文章

macos如何看睡眠日志

一览表macOS代号macOS版本苹果电脑各型号对应的macOS版本列表

macos安装失败一直重启 快来看看吧

macos 如何读取网络版本

sh [macOS - Unbind OD]从OD服务器#macOS取消绑定macOS客户端

如何在macos升级和安全?