在 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 视图的主要内容,如果未能解决你的问题,请参考以下文章

捆绑包无效 Mac OS X

Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib

如何在 OS X 目标中创建 CFDictionary?

在 Xcode 8.2 beta 中创建 NSManaged 子类时出错

如何重新打开在 OS X 的故事板中创建的关闭窗口

在 Mac OS X 中创建反应应用程序时出现 EACCESS 权限错误