Ios 观看跨多个目标共享的应用程序

Ios 观看跨多个目标共享的应用程序,ios,watchkit,apple-watch,Ios,Watchkit,Apple Watch,我的项目有多个构建目标,因此我可以促进“品牌化”构建,这些构建共享相同的代码,但每个目标都有唯一的捆绑标识和资产。我已经为我的一个应用目标创建了一个watch应用程序,它运行得很好。现在我正在尝试为我的其他目标使用相同的watch应用程序和扩展。我想我可以很容易地复制监视目标(监视和扩展)并简单地更改所有bundle id引用以匹配其他目标,但似乎在某些地方有一个隐藏的引用 我只想使用一个手表应用程序来实现我所有不同的品牌目标 旁注:手表应用程序也需要正确的品牌(资产文件夹) 有什么想法吗?谢谢

我的项目有多个构建目标,因此我可以促进“品牌化”构建,这些构建共享相同的代码,但每个目标都有唯一的捆绑标识和资产。我已经为我的一个应用目标创建了一个watch应用程序,它运行得很好。现在我正在尝试为我的其他目标使用相同的watch应用程序和扩展。我想我可以很容易地复制监视目标(监视和扩展)并简单地更改所有bundle id引用以匹配其他目标,但似乎在某些地方有一个隐藏的引用

我只想使用一个手表应用程序来实现我所有不同的品牌目标

旁注:手表应用程序也需要正确的品牌(资产文件夹)

有什么想法吗?谢谢

解决方案更新

所以,我解决了它。当我复制我的监视目标(监视和扩展)并更改包ID、目标依赖项以及所有内容以使其与旧目标相同(但当然指向新目标)时,由于某种原因,新的监视目标没有指向正确的监视扩展目标。无论在哪里都没有办法改变它。我试图重新复制目标,但仍然存在相同的问题

因此,我所做的就是打开project.pbxproj文件,搜索对我的手表扩展名(和bundle id)的任何引用,并手动更新连接。我的watch目标依赖于错误的watch扩展,而新的watch扩展在某种程度上有一个指向旧watch扩展的指针。我后来还发现我必须将构建指向正确的productreference(appex reference),因为这也是错误的

因此,新的监视目标指向错误的监视扩展名,而正确的监视扩展名指向错误的appex(输出文件)。所有这些我都必须在项目文件中手动更改。这听起来很极端也很难,但一旦你记录了不同的UUID,其实就没那么难了


我希望这能帮助其他可能遇到同样奇怪问题的人。

你绝对不能将一个手表应用程序用于多个目标。因为Xcode试图确定是否将手表伴奏应用程序包含到捆绑包中的唯一因素是手表应用程序的捆绑包ID。所以有一对一的关系

因此,您应该为每个iOS应用程序目标复制每个WatchOS应用程序和扩展目标(仅更改捆绑包ID)。但是,您仍然可以使用
目标会员资格
在目标之间共享代码(包括故事板和资产),这也解决了品牌手表应用程序的问题。最后,您可以获得最小的代码复制开销

更新:我看到您试图通过右键单击目标并选择
duplicate
选项来复制监视目标。因为某种原因,它真的不起作用

我刚刚尝试克隆一个监视目标,执行以下步骤:

  • 文件->新建->目标->WatchKit应用程序
  • 指定所需目标的
    嵌入配套应用程序
    
    
  • 使用
    目标成员资格
    选项将所有文件添加到新创建的目标
  • 在这之后,一个项目已经构建并运行,没有任何问题,有了一个新的监视目标

    通过这种方式,您不必手动更改捆绑包ID—所有内容都是通过Xcode自动顺利创建的。

    遇到了类似的问题“Error=MultipleWatchKitTwoApps…(~/Library/Logs/CoreSimulator/CoreSimulator.log)”,当时我复制了主目标并手动添加了watch OS工具包

    解决方案:观察到主目标构建阶段->目标依赖项将引用其他watchkit应用程序。删除并确保正确添加了新的watchOS工具包应用程序作为依赖项

    类似地,在嵌入watch内容部分中,删除其他目标watchOSapp引用


    这将解决“Error=MultipleWatchKitTwoApps…”的问题。

    我多次看到这篇文章,尝试了所有方法都没有成功,最后,我找到了解决方法。我假设你有一个iOS应用程序和一个Apple watch应用程序,你需要添加更多Apple watch应用程序而无需重复代码

    步骤1:File/New/Target选择“WatchOS”选项卡,然后选择“WatchKit应用程序”选择要与此新Apple Watch应用程序链接的应用程序单击Next

    步骤2:查看为新Apple Watch应用程序创建的新文件夹,删除所有*.swift和*.storyboard

    第3步:选择最初运行的第一个Apple Watch应用程序的.storyboard和.swift文件,并为其分配新的和旧的目标成员资格。将来,您的所有watch应用程序文件都应该选择这些目标


    您可以通过为项目创建环境变量并在plist文件(如下图所示)中赋值来使用一个目标

    此外,您还可以根据bundle标识符在代码中创建所有品牌,方法如下

    extension AppInfo {
        static var develop: Bool {
            return (self.CFBundleIdentifier?.contains("Dev") ?? false)
    }
    
    

    我没有注意到隐藏的引用。请你现在展开一下。当然,即使在我复制了监视目标(监视和扩展)、更改了捆绑包id、它应该指向哪个应用程序以及所有目标依赖项等之后,它仍然不会生成。但是我现在已经解决了,我会更新我遇到的问题。你能把复制目标后需要手动更改的所有内容都贴出来吗?这将非常有帮助。此外,如果您将解决方案转化为答案:是的,当然。不要重复目标:D它只会在生产线下造成麻烦。只需按照@DmitryGutsulyak的建议,创建新的watchkit目标(不要重复),并将文件添加到目标成员身份。之后,您将需要更新故事板目标引用,请参见此处我的另一个问题:就像我已经写的那样,我尝试复制目标并更改捆绑ID。这不起作用。当您说