Watchkit - 共享代码 - 框架、应用程序扩展、应用程序组、添加目标或只是复制文件?

Posted

技术标签:

【中文标题】Watchkit - 共享代码 - 框架、应用程序扩展、应用程序组、添加目标或只是复制文件?【英文标题】:Watchkit - shared code - framework, app extension, app groups, add target or just copy files? 【发布时间】:2015-04-07 14:27:52 【问题描述】:

我有一个现有的应用程序,我正在向它添加一个 Watch 应用程序。我有几个 .swift 文件,其中包含来自我的主应用程序的代码,我需要将它们用于 watchkit 应用程序(函数和一些常量等)。我对共享此代码的选项感到困惑 - 我怎么知道要尝试和使用哪一个?

创建一个应用组、我自己的框架、应用扩展?实际上,我开始只是将 .swift 文件复制到我的 watchkit 应用程序文件夹中,并注意到当您在出现的对话框中将文件添加到 Xcode 时,您会看到“添加到目标”的复选框,这让我开始思考 - 有没有只是在主应用程序部分更改我的 .swift 文件的属性并在“添加到目标”上检查 WatchKit 应用程序的方法?

这似乎是要走的路,对吧?

感谢您的帮助

【问题讨论】:

【参考方案1】:

我解决了只需单击文件并将它们添加到两个目标中。 (iphone app target 和 apple watch extension target)。

为了解决 sharedapplication 问题,我使用了这个:

#if (SL_TARGET_APP_EXTENSION == NO)
    [[UIApplication sharedApplication] .....
#endif 

SL_TARGET_APP_EXTENSION 是苹果手表扩展目标中添加的预处理宏。

希望对你有帮助。

【讨论】:

我正在尝试这个并在我添加到手表扩展目标的一个文件中遇到了这行代码的问题:让 appDelegate = UIApplication.sharedApplication().delegate as AppDelegate - 它给我错误“sharedApplication() 不可用:在适当的地方使用基于视图控制器的解决方案。我现在正在阅读这个..bah 所以我想这意味着对于您的应用程序,您不需要手表应用程序的 sharedApplication 吗?如果需要,我该怎么办? 你不能,看看这个链接:developer.apple.com/library/prerelease/ios/documentation/…“访问一个 sharedApplication 对象,因此不能使用该对象上的任何方法” 我只使用这个 sharedApplication 从核心数据中删除对象。这也是你碰巧使用它的目的吗?你做了什么来解决这个问题? 本库使用watchkit中的coredata,无法访问sharedApplicaton:github.com/aalittle/CoreDataWatchKit希望对您有帮助【参考方案2】:

要在 Apple Watch 应用和您的主应用之间共享代码,您需要使用该共享代码创建一个框架。你自己说过,Apple Watch 应用是一个全新的目标——它不会知道你现有的代码。

创建一个应用组,你也可以使用initWithSuiteName共享NSUserDefaults:,对于Coredata,你可以走共享容器路线。

【讨论】:

好的,明白了 - 谢谢。不过,为了帮助我理解 - 为什么我不能将 watchkit 扩展添加到文件的“目标成员”中? 别管这个评论问题,我现在明白了——你是对的。我只是还没有所有的碎片。非常感谢。

以上是关于Watchkit - 共享代码 - 框架、应用程序扩展、应用程序组、添加目标或只是复制文件?的主要内容,如果未能解决你的问题,请参考以下文章

Watchkit 扩展的嵌套框架问题

如何使 watchkit 扩展应用程序和我的 iphone 应用程序共享相同的 icloud 数据库

WatchKit 的社交框架

如何从 WatchKit Extension 调用 CoreData 代理框架?

WatchKit 中的本地通知

WatchKit 核心数据同步