什么是伞头?有什么用?我收到了一个警告,如下所示。这是什么意思?
<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"
答案 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 library
或Objective-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语法相同。