gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:11:57 24 4
gpt4 key购买 nike

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

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

为了让事情简单化(和工作区无关,至少在我掌握框架的基础知识之前),我创建了一个“测试平台”iOS 应用程序,它嵌入/依赖于/链接到框架作为一个 其他目标到同一项目(不是一个单独的项目)。当然,我的想法是在添加或修改框架时使用此应用程序测试我的框架功能。

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

  • 我的框架
  • 我的测试应用

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

我还在修改代码,使其在 iOS 和 macOS 上都能正常工作。警告:未找到目标“MyFramework (macOS)”的伞头,将不会生成模块映射。

到目前为止,还不错。

此外,我还在修改代码,使其在 iOS 和 macOS 上都能正常工作。

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

  • MyFrameworkMac
  • MyTestMacApp

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

还是不错的。

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

然后,麻烦就开始了。

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

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

/Users/Me/Projects/MyFramework/Code/MyFramework/:1:1: Umbrella header for module 'MyFramework' does not include header 'PublicHeaderXX.h'

...对于包含在我的主 header 中的每个公共(public) header :

    // 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设置中更改 iOS 框架的产品名称,我会得到错误:

Lexical or Preprocessor Issue | 'MyFramework/MyFramework.h' file not found

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

    #import <MyFramework/MyFramework.h>

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

Warning: no umbrella header found for target 'MyFrameworkMacRenamed', module map will not be generated

所以我问...

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

我确定一定有什么地方我应该“修改以匹配”并消除一些差异,但我是框架的新手并且无法弄清楚......(什么是'伞头'无论如何?)

最佳答案

事实证明,“umbrella header”只不过是框架的“主” header ,它是在您首次创建项目或框架目标时由 Xcode 自动创建的,并且它必须与目标(如解释的那样,例如 here )。

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

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

所以,我决定:

  • <MyFramework/MyFramework.h> : 经典。接受无替代品。专为 iOS

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

关于ios - 更改框架的目标名称或产品名称时找不到伞头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39467844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com