Apple 在 WWDC 2014 中引入了“小部件”的概念。小部件用于快速访问具有急需信息的应用程序。我试图将小部件添加到我的应用程序中。当我们在应用程序中只有一个 Target 时,这很容易。
但是,如果我们有多个 Target,似乎我们需要为每个 Target 添加单独的 Widget。是否可以添加单个小部件并使其与所有目标共享?
提前致谢。
Apple 在 WWDC 2014 中引入了“小部件”的概念。小部件用于快速访问具有急需信息的应用程序。我试图将小部件添加到我的应用程序中。当我们在应用程序中只有一个 Target 时,这很容易。
但是,如果我们有多个 Target,似乎我们需要为每个 Target 添加单独的 Widget。是否可以添加单个小部件并使其与所有目标共享?
提前致谢。
这当然是可能的。我有一个名为DD-WRT的应用程序,它有 3 个单独的目标。基本上 1 用于 iPhone,1 用于 iPad,1 是免费的“精简版”。(我已经将 iPhone 和 iPad 制作为同一个通用应用程序,但仍需要在 App Store 上维护所有 3 个应用程序)。
我想为today widget
所有 3 个应用程序添加一个,但只有一个代码库,就像应用程序本身一样。
那我是怎么做到的...
首先today widget
为您的应用目标之一添加目标。您可以通过从部分中选择Editor > Add Target
和选择来执行此操作。Today Extension
Application Extension
为小部件目标命名,然后选择该小部件将分配到的应用程序目标之一。
您现在将在文件检查器中看到一组新文件,您将在其中编写小部件
现在,对您拥有的每个其他应用程序构建目标执行完全相同的过程,但为每个应用程序指定一个稍微不同的名称并为每个应用程序目标选择不同的应用程序目标。你应该有这样的东西
现在您还将拥有多个我们不想要的小部件文件。我们只想使用一组文件。这里的秘密在于Info.plist
小部件的文件。bundle identifier
必须与包含应用程序的匹配bundle identifier
。因此,重命名每个小部件的Info.plist
文件,以便您知道哪个是哪个目标,然后将它们全部移动到您创建的第一个小部件的文件夹中。您现在可以删除额外小部件的文件和文件夹。
你现在应该有这样的东西:
现在您需要告诉每个扩展目标您更改了.plist
文件名。
在Build Settings
选项卡下,输入plist
搜索框,然后将条目编辑Info.plist file
为此目标的 plist 名称。
现在您必须将所有小部件文件设置为每个目标的成员。对于默认值TodayViewController.m
和MainInterface,storyboard
文件,选择它们,然后在File inspector
窗口中勾选每个目标。像这样:
添加新文件时,请记住选择所有扩展目标。
我发现我必须做的最后一件事(我花了很长时间看着崩溃,直到我弄明白了)。在General
选项卡中,对于每个扩展目标,单击Main Interface
下拉框并重新选择MainInterface
情节提要。尽管它看起来已经被选中,但它实际上是选中了你删除的那些。重新选择它可以确保您指向唯一剩下的那个。
希望就是这样。给每个目标一个Clean
然后构建并运行每个目标。
我有同样的问题。实现今天的小部件并希望将其与目标设置一起用于开发/部署和测试(Testflight)。
我最终创建了第二个小部件,添加了所有需要的文件,并使用与另一个小部件完全相同的 StoryBoard。所以唯一需要维护的是第二个 info.plist。我想不出任何更简单的方法来实现这一点。
在一切正常之前,由于某些原因,我不得不清理目标并重置模拟器。
希望这可以帮助。
我通过每个目标都有一个扩展来解决这个问题,然后只有一个扩展具有所有类,并且每个类的目标成员资格包括每个扩展目标。
这有一个额外的好处,我可以在其关联的扩展中使用一些资源,例如来自主要目标的颜色资产目录。