什么是伞头?

时间:2015-07-06 06:10:14

标签: ios objective-c

什么是伞头?有什么用?我收到了一个警告,如下所示。这是什么意思?

<module-includes>:1:1: warning: umbrella header for module 'XCTest' does not include header 'XCTextCase+AsynchronousTesting.h' [-Wincomplete-umbrella]
#import "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework/Headers/XCTest.h"

2 个答案:

答案 0 :(得分:60)

umbrella header是框架的“主”头文件。它的用途是你可以写

#import <UIKit/UIKit.h>

而不是

#import <UIKit/UIViewController.h>
#import <UIKit/UILabel.h>
#import <UIKit/UIButton.h>
#import <UIKit/UIDatePicker.h>

等等。

对我而言,<XCTest/XCTestCase+AsynchronousTesting.h>中包含<XCTest/XCTest.h>。也许它不适合你?在这种情况下,添加

#import <XCTest/XCTestCase+AsynchronousTesting.h>

手动

答案 1 :(得分:3)

umbrella header-framework上的iOS libraryObjective-C可以具有一个头文件,其中包含对该项目中所有其他头文件的引用。

创建框架目标时,Xcode将自动生成<targer_name.h>文件。它应该与Product Name

同名

Build Settings

  • Product Name-默认值为$(TARGET_NAME:c99extidentifier)
  • Product Module Name-默认值为$(PRODUCT_NAME:c99extidentifier)

例如<umbrella_name.h>的样子

#import "header_1.h"
#import "header_2.h"

因此,您可以使用下一种语法

#import <umbrella_name.h>

代替

#import <header_1.h>
#import <header_2.h>

典型的umbrella header结构[About] [Manually creation]

也需要module map

在实践中,当您在Framework [Example]Objective-C [Example]上创建Swift时,将使用<product_name>自动创建此文件

Importing Objective-C into Swift within a Framework Target

在伞状标题中,导入要公开给Swift的每个Objective-C标题。

  

Swift会在您的伞形标题中看到您公开公开的每个标题。该框架中的Objective-C文件的内容可从该框架目标内的任何Swift文件自动获得,而无需导入语句。将Objective-C代码中的类和其他声明与系统类所使用的Swift语法相同。