在 Xcode 5.0.1 中创建 OS X Cocoa App Web 视图
Posted
技术标签:
【中文标题】在 Xcode 5.0.1 中创建 OS X Cocoa App Web 视图【英文标题】:Creating a OS X Cocoa App Web View in Xcode 5.0.1 【发布时间】:2013-11-01 03:49:52 【问题描述】:我创建了一个 html5 网络应用程序,我试图将它封装在一个网络视图中并提交到 Mac App Store。
我做了以下事情:
1) 打开 Xcode 5.0.1 并选择“Create a new Xcode project”
2) 在“OS X”下,我选择了“Application”,然后选择了“Cocoa Application”,然后选择了“Next”
3) 我输入了“产品名称”和“公司标识符”,然后选择“下一步”(我保留所有其他设置不变),然后选择“创建”
4) 在“常规”>“部署信息”>“部署目标”下,我选择了 10.6——因为我希望该应用程序与支持 Mac App Store 的所有 OS X 版本兼容
5) 我点击“MainMenu.xib”并选择“Window - My App”
6) 从“对象库”中,我将“Web View”对象添加到我的窗口中,并使其填充窗口大小
7) 我保存了我的项目,然后点击 Xcode 左上角的 Play 按钮
应用程序尝试打开但死机。我在 Xcode 中没有收到错误,但它确实打开了“main.m”并突出显示“return NSApplicationMain(argc, argv);”以绿色显示“线程 1:信号 SIGABRT”
我希望有人能澄清为什么这不起作用?并为我提供链接 Web 视图对象的最后一步?我搜索了谷歌,找到了 iOS 的教程和一些 OS X 的教程,但针对不同版本的 Xcode。
【问题讨论】:
【参考方案1】:有几点:
在您的 xib 中,选择“文件检查器”并确保您的 xib 部署版本与您的应用部署版本匹配。如果您不这样做,您将无法在较旧的部署版本上运行您的应用程序。
对于您的崩溃,如果您查看 Xcode 的调试控制台,您可能会看到如下所示的内容:
2013-10-31 23:07:10.654 Product[19035:303] *** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (WebView)
2013-10-31 23:07:10.654 Product[19035:303] (
0 CoreFoundation 0x00007fff8eeab41c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff97daee75 objc_exception_throw + 43
2 CoreFoundation 0x00007fff8eeab2cc +[NSException raise:format:] + 204
3 Foundation 0x00007fff96b83d69 _decodeObjectBinary + 2349
4 Foundation 0x00007fff96b84f2f -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1774
5 Foundation 0x00007fff96b8512b -[NSArray(NSArray) initWithCoder:] + 202
6 Foundation 0x00007fff96b83e22 _decodeObjectBinary + 2534
7 Foundation 0x00007fff96b832dd _decodeObject + 288
8 AppKit 0x00007fff946985bc -[NSView initWithCoder:] + 1949
9 Foundation 0x00007fff96b83e22 _decodeObjectBinary + 2534
10 Foundation 0x00007fff96b832dd _decodeObject + 288
11 AppKit 0x00007fff9469e458 -[NSWindowTemplate initWithCoder:] + 1043
12 Foundation 0x00007fff96b83e22 _decodeObjectBinary + 2534
13 Foundation 0x00007fff96b84f2f -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1774
14 Foundation 0x00007fff96b84567 -[NSSet(NSSet) initWithCoder:] + 203
15 Foundation 0x00007fff96b83e22 _decodeObjectBinary + 2534
16 Foundation 0x00007fff96b832dd _decodeObject + 288
17 AppKit 0x00007fff94670780 -[NSIBObjectData initWithCoder:] + 155
18 Foundation 0x00007fff96b83e22 _decodeObjectBinary + 2534
19 Foundation 0x00007fff96b832dd _decodeObject + 288
20 AppKit 0x00007fff9467059f loadNib + 232
21 AppKit 0x00007fff9466fb9c +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 288
22 AppKit 0x00007fff9466f98c -[NSBundle(NSNibLoading) loadNibNamed:owner:topLevelObjects:] + 197
23 AppKit 0x00007fff9466f77b +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 357
24 AppKit 0x00007fff9466b617 NSApplicationMain + 448
25 Product 0x00000001000012c2 main + 34
26 Product 0x0000000100001294 start + 52
27 ??? 0x0000000000000003 0x0 + 3
)
在这种情况下,这是因为应用在加载 nib 时不知道 WebView
是什么。要解决此问题,您需要链接到 WebKit
框架。
返回您的目标设置并选择“构建阶段”。展开“将二进制文件与库链接”,然后单击“+”。搜索 Mac WebKit
框架并添加它。该应用现在应该能够取消归档笔尖中的WebView
。
【讨论】:
另外,为了帮助避免在旧部署目标上使用新 API(从而导致崩溃),请查看 deploymateapp.com 完全忘记添加修复第一个问题的 Webkit.framework。知道如何链接网络视图吗? 我想您的意思是如何将WebView
连接到您的代码。您可以像使用任何IBOutlet 一样执行此操作。 (本文适用于 ios,但 Mac OS 的过程相同。以上是关于在 Xcode 5.0.1 中创建 OS X Cocoa App Web 视图的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib