链接具有相同产品名称的双重(iphoneos 和 watchos)框架

Linking dual (iphoneos and watchos) frameworks with same product name

我最近不得不复制我自己的框架,以便能够从原生 watchOS 2 扩展中 link 它们,因为平台不同。因此,对于每个框架 X,我都有一个对应的 X-watchos。 在模拟器中以及直接构建到我的设备时一切正常,直到我尝试存档时我才收到这个 linking 错误:

我 运行 lipo -i 在构建的 watchOS 框架上,果然,它的拱门是 arm7arm64 而不是 armv7k.

当我进一步查看构建目录时,我注意到了这一点:

两个版本是同一个文件的符号link,并且因为它们具有相同的产品名称,所以它们被覆盖了。我可以让它们有不同的名字,但这会使 import 给它们命名真的很麻烦。

请注意,这对于第 3 方框架来说不是问题,因为 Carthage 已经在单独的目录中构建它们。

编辑 2015 年 8 月 22 日:我已经提交了带有示例项目的雷达:http://www.openradar.me/22392501

编辑 08/24/2015:这已在 Xcode 7 Beta 6 发行说明中确认为已知问题:

编辑 2015 年 9 月 9 日:Xcode 7.1 Beta 发行说明暗示这是固定的,但我还没有确认。

我在自己的框架中使用了类似的配置,但在每个平台(MyFramework 和 MyFramework-watchOS)中创建它时我设置了不同的名称。不要忘记在每个框架的构建设置选项卡中手动设置通用产品名称(我的都是 MyFramework)。

这在 Xcode 7.1 中对我有用。