iOS 8 beta - Today 扩展无法识别嵌入式框架
Posted
技术标签:
【中文标题】iOS 8 beta - Today 扩展无法识别嵌入式框架【英文标题】:iOS 8 beta - Today extension doesn't recognize embedded framework 【发布时间】:2014-07-03 16:53:27 【问题描述】:我正在编写一个应用程序,它也有一个 Today 扩展(或小部件)。 Apple 推荐的在扩展程序和包含应用程序之间共享代码的方法是将共享代码放入应用程序和扩展程序都可以使用的嵌入式框架中。所以据我了解,我应该编写共享代码并使共享代码以框架为目标,然后让应用程序和扩展都将框架声明为依赖项。然而,在实践中,我发现虽然应用程序可以很好地识别框架,但 Today 扩展程序却不能。
更具体地说:我将一个简单的表格视图放在我的 Today 扩展(我将其称为“Widget”)和我的应用程序中的一个选项卡(我将其称为“App”)中的控制器中,然后是一个带有共享代码的框架(我将称之为“框架”)。 Widget 带有一个 TodayViewController,其中包含表格视图。这个表视图有一个自定义单元格,我称之为 CalendarCell。所以相关的共享类/文件是:
TodayViewController.h/m CalendarCell.xib CalendarCell.h/m当然,我还有我的小部件故事板和应用故事板,它们不共享。
因此,在我的 App 目标构建阶段,我将 Framework 作为目标依赖项,并将 Widget 作为目标依赖项(当我创建目标时就出现了这种情况,删除它似乎没有任何帮助)。同样,在 Widget 目标构建阶段,我将 Framework 作为目标依赖项。框架将 TodayViewController.m 和 CalendarCell.m 列为编译源,将 CalendarCell.xib 列为捆绑资源。
这就是问题所在:如果小部件也没有将 CalendarCell.m、TodayViewController.m 和 CalendarCell.xib 列为编译源和捆绑资源,那么小部件就无法工作.具体来说,如果 TodayViewController.m 未列出,则应用程序甚至无法在模拟器中运行(我收到相同的错误 this person got)。如果 TodayViewController.m 已列出,但没有列出任何其他源文件/资源,那么我会得到一个没有正文的扩展名(与 this other person got 相同)。请注意,App 确实可以很好地识别框架,并且不必将这些文件列为编译源或捆绑资源 - 只是 Widget 失败了。
如果有人对此有任何想法,我将不胜感激。 Xcode 6 / ios 8 错误?还是我做错了什么?
【问题讨论】:
在 Xcode6-beta3 中,这似乎有所改善。我仍然需要将 TodayViewController.m 作为 Widget 的编译源,否则我会收到“NSMachErrorDomain code=5”错误;但是,我不再需要在 Widget 中列出 CalendarCell.m 或 CalendarCell.xib。它们现在只是在框架中。 【参考方案1】:实际上,您是在 Target Dependencies 中添加框架。那是错误的。 Target Dependencies 是我们应该指定一些其他目标的地方,这些目标应该被编译以运行我们的主目标。
将您的框架添加到 Link Binary With Libraries 中,如有必要,请在构建设置中设置框架搜索路径
【讨论】:
在我发布这个问题七个月后,我已经转移到另一个项目,我在共享框架方面遇到了类似的问题,这就是为我解决这个问题的答案。感谢您的帮助!【参考方案2】:我遇到了非常相似的问题。 尝试在“今天”视图中为所有项目添加约束。它对我有用。
【讨论】:
以上是关于iOS 8 beta - Today 扩展无法识别嵌入式框架的主要内容,如果未能解决你的问题,请参考以下文章
iOS 8 beta 5 Game Center Sandbox 无法识别我的应用
iOS 8 Today Extension:是否可以添加可编辑的文本字段?
在 iOS 8 的 Today 扩展(小部件)中为按钮添加操作?