我正在编写一个也有今日扩展程序(或小部件)的应用程序。 Apple推荐的在扩展和包含应用程序之间共享代码的方法是将共享代码放在嵌入式框架中,应用程序和扩展程序都可以使用它。据我了解,我应该编写共享代码并使共享代码以框架为目标,然后让app和extension都将框架声明为依赖。但是,在实践中,我发现虽然应用程序可以很好地识别框架,但今天的扩展程序却没有。
更具体一点:我将一个简单的表格视图放在我今天的扩展程序(我将调用' Widget')内的控制器中,并作为我应用程序中的一个标签(其中)我将使用共享代码调用“应用程序”,然后调用框架(我将调用#39; Framework')。 Widget附带一个包含表视图的TodayViewController。此表视图有一个自定义单元格,我调用CalendarCell。所以相关的共享类/文件是:
然后,当然,我有我的Widget故事板和App故事板,这些都没有共享。
所以,在我的App目标构建阶段,我将Framework作为目标依赖项,并将Widget作为目标依赖项(当我创建目标时它就是这样,删除它似乎没有帮助任何东西)。类似地,在Widget目标构建阶段,我将Framework作为目标依赖项。 Framework将TodayViewController.m和CalendarCell.m列为编译源,将CalendarCell.xib列为bundle资源。
所以出现了什么问题:如果Widget没有也将CalendarCell.m,TodayViewController.m和CalendarCell.xib列为编译源和捆绑资源,那么小部件不起作用。具体来说,如果没有列出TodayViewController.m,那么应用程序甚至无法在模拟器中运行(我得到相同的错误this person)。如果列出了TodayViewController.m,但任何其他源文件/资源都没有,那么我得到一个没有正文的扩展(与this other person相同)。请注意,App确实很好地识别了框架,并且不必将这些文件列为编译源或捆绑资源 - 它只是失败的Widget。
如果有人对此有任何想法,我会很感激。 Xcode 6 / iOS 8的错误?或者我做错了什么?
答案 0 :(得分:4)
实际上,您在Target Dependencies中添加了框架。那是错的。 Target Dependencies是我们应该指定一些其他目标的地方,这些目标应该被编译以运行我们的主目标。
将您的框架添加到链接二进制文件库,如有必要,在构建设置中设置框架搜索路径
答案 1 :(得分:0)
我有非常类似的问题。 尝试在“今日”视图中为所有项添加约束。它对我有用。