我尝试删除故事板文件和相关的Info.plist
条目,但这次延期停止了工作;它甚至没有从XCode启动。
The operation couldn’t be completed. (LaunchServicesError error 0.)
在常规应用程序(包含应用程序)上很容易,因为我们看到它的入口点和应用程序委托,但是如何在扩展程序上执行此操作?
答案 0 :(得分:36)
我做了以下步骤:
转到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>
@objc (TodayViewController)
(在导入之后)。该应用应该立即运行。但我还有另外两件事要做:
所以添加这些行:
override func loadView()
{
view = UIView(frame:CGRect(x:0.0, y:0, width:320.0, height:200.0))
}
self.preferredContentSize = CGSizeMake(0, 200)
答案 1 :(得分:19)
从NSExtensionMainStoryboard
移除Info.plist
添加NSExtensionPrincipalClass = YourViewController
不要忘记在loadView
答案 2 :(得分:5)
FWIW,在我为Swift视图控制器类添加了模块名称的前缀之前,它对我没有用,例如
<key>NSExtension</key>
<dict>
<!-- ... -->
<key>NSExtensionPrincipalClass</key>
<string>SafariActionExtension.RootViewController</string>
<!-- ... -->
</dict>
这可能是因为Swift模块的类查找将模块名称转换为类名的前缀。例如。要在代码中创建您的类,您可以编写NSStringFromClass("SafariActionExtension.RootViewController")
,因此使用前缀。