iOS8 - 适用于多个目标的单个小部件

时间:2014-07-03 09:36:18

标签: ios widget ios8 ios-app-extension wwdc

Apple在WWDC 2014中引入了“Widgets”的概念.Widgets用于快速访问具有急需信息的应用程序。我试图将Widgets添加到我的应用程序中。当我们在应用程序中只有一个Target时很容易。

但是,如果我们有多个目标,似乎我们需要为每个目标添加单独的Widget。是否可以添加一个Widget并使其与所有目标共享?

提前致谢。

3 个答案:

答案 0 :(得分:12)

这当然是可能的。我有一个名为DD-WRT的应用,它有3个不同的目标。基本上1用于iPhone,1用于iPad,1用于免费''版。 (我已经将iPhone和iPad设为相同的通用应用程序,但仍然需要在App Store上维护所有3个)。

我想为所有3个应用添加today widget,但只有1个代码库,就像应用本身一样。

那我是怎么做到的......

首先为您的某个应用目标添加today widget目标。您可以选择Editor > Add Target并从Today Extension部分选择Application Extension来执行此操作。

为窗口小部件目标指定一个名称,然后选择将为此窗口小部件分配的一个应用程序目标。

Add target

现在,您将在文件检查器中看到一组新文件,您可以在其中对窗口小部件进行编码 File inspector

现在为您拥有的每个其他应用构建目标执行完全相同的过程,但为每个应用构建目标指定一个略有不同的名称,并为每个目标选择不同的应用目标。你应该有这样的东西 All targets

现在您还有多个小部件文件,这是我们不想要的。我们只想使用1组文件。这里的秘密在于小部件的Info.plist文件。 bundle identifier必须与包含应用的bundle identifier匹配。因此,重命名每个窗口小部件的Info.plist文件,以便您可以确定哪个目标是哪个目标,然后将它们全部移动到您创建的第一个窗口小部件的文件夹中。您现在可以删除额外小部件的文件和文件夹。

你现在应该有这样的事情: Info.plist files

现在您需要告诉每个扩展目标您更改了.plist文件名。

Build Settings标签下,在搜索框中输入plist,然后将Info.plist file的条目编辑为此目标的plist名称。 edit plist name

现在,您必须将所有窗口小部件文件设置为每个目标的成员。对于默认的TodayViewController.mMainInterface,storyboard文件,选择它们,然后在File inspector窗口中勾选每个目标。像这样: File targets

请记住在添加新文件时选择所有扩展目标。

我发现我必须做的最后一件事(我花了很多时间看着崩溃,直到我发现它)。在General标签中,针对每个扩展目标,点击Main Interface下拉框,然后重新选择MainInterface故事板。即使看起来它已经被选中,但它实际上选择了你删除的那些。重新选择它可确保您指向唯一剩余的。

希望是这样的。给每个目标Clean然后构建并运行每个目标。

答案 1 :(得分:0)

我有完全相同的问题。实现今天的小部件,并希望将其与目标设置一起用于开发/部署和测试(Testflight)。

我最终创建了第二个小部件,添加了所有需要的文件,并使用与其他Widget完全相同的StoryBoard。所以唯一需要维护的是第二个info.plist。我无法想出任何更简单的方法来实现这一目标。

在一切正常之前我必须清理目标并重置模拟器以获得一些原因。

希望这有帮助。

答案 2 :(得分:0)

我通过在每个目标中都有一个扩展来解决此问题,然后只有一个扩展具有所有类,并且每个类的目标成员资格都包含每个扩展目标。

这具有额外的好处,我可以使用一些资源,例如主要目标中与其关联扩展中的颜色资产目录。