更改框架的目标名称或产品名称时未找到伞头

时间:2016-09-13 10:31:04

标签: ios objective-c xcode cocoa frameworks

我有这个代码库,我决定变成一个框架,以便在我未来的应用程序中重用。

所以我继续为Cocoa Touch Framework创建了一个Xcode项目。

为了保持简单(并且工作空间不在图片中,至少在我掌握框架的基础知识之前),我创建了一个"测试床" iOS应用程序嵌入/依赖/链接到框架作为其他目标到同一项目(单独的项目)。当然,这个想法是使用这个应用程序来测试我的框架功能,因为我添加或修改它们。

所以我的项目有两个目标:

  • MyFramework
  • MyTestApp

......当然,还有两个方案(每个方案一个):

我也在修改代码,以便它可以在iOS和macOS上运行。 警告:找不到目标' MyFramework(macOS)'的伞标题,将不会生成模块图。

到目前为止,非常好。

此外,我还修改了代码,以便它可以在iOS和macOS上运行。

所以我又增加了两个目标:

  • MyFrameworkMac
  • MyTestMacApp

... aslo设置,以便应用程序目标 - 依赖,链接和嵌入框架。

还是,好。

接下来,我决定进行一些清理和文件重新排序,以便在文件数量开始进一步增长之前保持整洁和有意义。

然后,麻烦就开始了。

经过一些反复试验,我发现了一些事情:

1)如果我更改iOS Framework的目标名称并尝试构建iOS应用程序,我会收到以下警告:

  

/用户/ ME /项目/ MyFramework /代码/ MyFramework /:1:1:   模块的伞形标题' MyFramework'不包括标题   ' PublicHeaderXX.h'

...对于我的主标题中包含的每个公共标题:

    // In this header, you should import all the public headers of your framework
    // using statements like #import <MyFramework/PublicHeader.h>

    #import <MyFramework/PublicHeader01.h>
    #import <MyFramework/PublicHeader02.h>
    #import <MyFramework/PublicHeader03.h>
    ...

2)如果我在Build Settings中更改iOS框架的产品名称,我会收到错误:

  

词法或预处理器问题| &#39; MyFramework / MyFramework.h&#39;找不到文件

...指向我在应用源代码中导入它的位置:

    #import <MyFramework/MyFramework.h>

对于Mac框架目标,我可以更改目标名称,但如果我更改产品名称,我会收到警告:

  

警告:找不到目标&#39; MyFrameworkMacRenamed&#39;的伞头,   不会生成模块图

所以我问......

有没有办法为每个框架目标设置我想要的目标名称和产品名称?

我确定必须有某些地方我应该修改以匹配&#34;并且消除了一些差异,但我对框架不熟悉并且无法弄清楚......(无论如何,这是一个&#39;伞头&#39;)

2 个答案:

答案 0 :(得分:6)

事实证明,“伞头”只不过是第一次创建项目或框架目标时由Xcode自动创建的框架的“主”头,而它必须具有相同的名称。目标(例如,here)。

至于为什么两个目标产品必须我的名字相同,我只能猜测它与保持链接不太复杂(应用程序不是'链接'有关反对',所以我想产品名称中没有任何损坏是你想要的。)

我试图使用单个标题来统治所有(平台),使用TargetConditionals.h等来导入Cocoa.h或UIKit.h,这是不可能的,因为Xcode不允许您为两个目标使用相同的名称,并且这些名称必须与其标题的名称相匹配!

所以,我决定:

  • <MyFramework/MyFramework.h>经典。不接受替代品。适用于iOS

  • <MyFrameworkMac/MyFrameworkMac.h>现在也可在Mac上使用! - 来自给你带来MyFramework的人

答案 1 :(得分:0)

我做了很多阅读和尝试。我的解决方案是结合在一起的:

  1. 清理构建
  2. 关闭XCode
  3. 在任何地方删除DerivedData-在项目文件夹,用户文件夹(〜/ Library / Developer / Xcode)和根文件夹中 / Library / Developer /...
  4. 打开XCode并再次清洁
  5. 从测试设备中删除应用

现在可以了。