我试图删除 Storyboard 文件和相关的Info.plist条目,但是这次扩展名停止了工作;它甚至没有从XCode启动。
The operation couldn’t be completed. (LaunchServicesError error 0.)
在常规应用程序(包含应用程序)上,这很容易,因为我们看到它是入口点和应用程序委托(delegate),但是如何在扩展上做到这一点呢?

最佳答案

我做了以下步骤:

  • 从您的项目
  • 中删除 Storyboard 文件
  • 修改info.plist:

  • 转到NSExtension词典,删除以下项:NSExtensionMainStoryboard。用此键NSExtensionPrincipalClass替换它,然后将ViewController添加为值,例如TodayViewController。

    前:
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionMainStoryboard</key>
        <string>MainInterface</string>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.widget-extension</string>
    </dict>
    

    后:
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionPrincipalClass</key>
        <string>TodayViewController</string>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.widget-extension</string>
    </dict>
    
  • 如果使用的是Swift,则必须在目标的“构 build 置”中启用“嵌入的内容包含Swift代码”。将其设置为是。
  • 另外,我还必须在TodayViewController类中添加@objc (TodayViewController)(在导入之后)。

  • 该应用程序应立即运行。但是我还必须做两件事:
  • 创建一个 View 。显然,没有自动创建的 View 。

  • 因此,添加以下行:
    override func loadView()
    {
        view = UIView(frame:CGRect(x:0.0, y:0, width:320.0, height:200.0))
    }
    
  • 并在viewDidLoad方法中设置小部件的高度:self.preferredContentSize = CGSizeMake(0, 200)
  • 关于ios - 如何在iOS8上以无 Storyboard的方式以编程方式创建Today小部件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26037321/

    10-15 15:24