'MyClass + BackdoorExtension.h'的Swift模块伞头警告

Sli*_*son 7 xcode frameworks module objective-c swift

当我将我的框架编译成iOS应用程序项目时,我不断收到这些链接器警告:

<module-includes>:1:1: warning: umbrella header for module 'MyFramework' does not include header 'MyClass+StateAccess.h'
Run Code Online (Sandbox Code Playgroud)
…/AppProject/AppClass.m:123:456 warning: missing submodule MyFramework.MyClass_BackdoorExtension' [-Wincomplete-umbrella]
#import <MyFramework/MyClass+BackdoorExtension.h>
Run Code Online (Sandbox Code Playgroud)

然而,不同于这些SO答案:1,2,3 ; 我不希望MyClass+BackdoorExtension.h与框架的所有其他标题混为一谈.  MyClass+BackdoorExtension.h是一个隐藏的"后门"界面,我的框架的MyClass- 使用的的BackdoorExtension的成员应出示error: property 'backdoorMember' not found on object of type 'MyClass *'除非特定的应用程序源文件包括MyClass+BackdoorExtension.h.

在Swift模块之前,这将按预期工作,而不会发出链接器警告; backdoorMember除非应用程序的.m文件有一个#import <MyFramework/MyClass+BackdoorExtension.h>,在添加完所有内容后编译并运行没有警告或运行时问题,否则无法访问.就目前而言,一切都按照预期编译和运行,但我想压制警告(我是那种喜欢将警告视为必须修复错误的开发者类型).我想找到一种方法来使用现有#import的应用Objective-C文件中提到的工作以及在应用程序Swift文件中的等效导入(例如import MyFramework.MyClass+BackdoorExtension).

我在我的框架中试验过explicit modules&explicit headers module.modulemap无济于事.


这是我目前的框架module.modulemap:

module MyFramework {
    umbrella header "MyFramework.h"
    export *
}
Run Code Online (Sandbox Code Playgroud)

和框架伞头MyFramework.h:

#import <Foundation/Foundation.h>

#import <MyFramework/BaseClass.h>
#import <MyFramework/MyClass.h>
#import <MyFramework/AnotherClass.h>
Run Code Online (Sandbox Code Playgroud)

这是框架MyClass+BackdoorExtension.h(它具有框架的公共目标成员资格):

#import <Foundation/Foundation.h>
#import "MyClass.h"

@interface MyClass (BackdoorExtension)

@property(nonatomic, assign, readonly) BOOL backdoorMember;

@end
Run Code Online (Sandbox Code Playgroud)

我正在使用Xcode 8.1和Apple LLVM 8.0.0版(clang-800.0.42.1).