我的项目有多个构建目标,因此我可以促进共享相同代码的“品牌”构建,但每个目标具有唯一的捆绑标识符和资产。我为我的一个应用目标创建了一个手表应用程序,它运行得很好。现在我正在尝试为我的其他目标使用相同的手表应用程序和扩展程序。我以为我可以轻松复制监视目标(监视和扩展)并简单地更改所有的bundle id引用以匹配其他目标,但它似乎是隐藏的引用,在某些地方。
我只想为我所有不同的品牌目标使用一个手表应用程序。
旁注:手表应用也需要正确标记(资产文件夹)。
有什么想法吗?感谢。
解决方案更新
所以,我解决了。当我复制我的监视目标(监视和扩展),并更改了捆绑ID,目标依赖关系,一切使其与旧目标相同(但当然指向新目标),由于某种原因,新的监视目标没有' t指向正确的手表扩展目标。在任何地方都无法改变它。我试图重新复制目标,但仍有同样的问题。
所以我做的是打开project.pbxproj文件,搜索对我的watch扩展(和bundle id)的任何引用,并手动更新连接。我的手表目标依赖于错误的手表扩展,而新的手表扩展程序以某种方式指向旧手表扩展。我后来还发现我必须将构建指向正确的productreference(appex reference),因为这也是错误的。
所以新的监视目标,指向错误的监视扩展,并且正确的监视扩展指向错误的appex(输出文件)。所有这些我不得不在项目文件中手动更改。这听起来极端而且很难,但是一旦你记下了不同的UUID,它实际上并不难。
我希望这可以帮助那些可能偶然发现同样奇怪问题的人。
答案 0 :(得分:6)
你绝对不能将一个Watch应用程序用于多个目标。因为Xcode使用的唯一因素是试图找出是否将Watch伴侣应用程序包含到捆绑包中,这是Watch应用程序的捆绑ID。所以有一对一的关系。
接下来,您应该为每个iOS应用目标复制每个WatchOS应用和扩展目标(仅更改捆绑ID)。但您仍然可以使用Target Membership
在目标之间共享代码(包括故事板和资产),它也解决了品牌Watch应用程序的问题。最后,您将获得最小的代码重复开销。
更新:我发现您正在尝试通过右键单击目标并选择Duplicate
选项来复制Watch目标。它由于某种原因确实无法运作。
我只是尝试克隆一个Watch目标执行以下步骤:
Embed in Companion Application
。 Target Membership
选项将所有文件添加到新创建的目标。之后,一个项目已经构建并运行,没有任何新的Watch目标问题。
这样您就不必手动更改捆绑包ID - Xcode会自动平滑地创建所有内容。
答案 1 :(得分:1)
您可以通过以下方式使用一个目标:为项目创建环境变量,并在plist文件中分配如下图所示的图像。
另外,您可以通过使用像这样的助手来根据捆绑包标识符在代码中进行所有品牌标记
extension AppInfo {
static var develop: Bool {
return (self.CFBundleIdentifier?.contains("Dev") ?? false)
}
答案 2 :(得分:0)
遇到类似问题“Error = MultipleWatchKitTwoApps ...(〜/ Library / Logs / CoreSimulator / CoreSimulator.log)”,当我最终复制主目标&手动添加OS套件。
解决方案:观察到主要目标构建阶段 - >目标依赖项将引用其他watchkit应用程序。删除&确保正确添加新的watchOS工具包应用程序作为依赖项。
同样在Embed观看内容部分中删除其他目标watchOSapp参考。
这将解决问题“Error = MultipleWatchKitTwoApps ...”
答案 3 :(得分:0)
我几次遇到这个帖子并尝试了一切没有成功,最后,我找到了解决方法。我假设您正在使用iOS应用程序和Apple手表应用程序,并且您需要添加更多Apple手表应用程序而无需重复代码。
步骤1:文件/新/目标选择" WatchOS"选项卡,然后选择" WatchKit App"选择要与此新Apple Watch应用程序链接的应用程序单击下一步
第2步:查看为新Apple Watch应用创建的新文件夹,并删除所有* .swift和* .storyboard
步骤3:选择最初工作的拳头Apple Watch应用程序的.storyboard和.swift文件,您应该为他们分配新的和旧的目标成员资格。将来,您的所有观看应用文件都应该选择这些目标。