当我将我的框架编译成iOS应用程序项目时,我不断收到这些链接器警告:
<module-includes>:1:1: warning: umbrella header for module 'MyFramework' does not include header 'MyClass+StateAccess.h'
…/AppProject/AppClass.m:123:456 warning: missing submodule MyFramework.MyClass_BackdoorExtension' [-Wincomplete-umbrella]
#import <MyFramework/MyClass+BackdoorExtension.h>
然而,与这些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 module
s&amp; explicit header
在我的框架module.modulemap
中无效。
这是我当前的框架module.modulemap
:
module MyFramework {
umbrella header "MyFramework.h"
export *
}
和框架伞标题MyFramework.h
:
#import <Foundation/Foundation.h>
#import <MyFramework/BaseClass.h>
#import <MyFramework/MyClass.h>
#import <MyFramework/AnotherClass.h>
这是框架的MyClass+BackdoorExtension.h
(它具有框架的公共目标成员资格):
#import <Foundation/Foundation.h>
#import "MyClass.h"
@interface MyClass (BackdoorExtension)
@property(nonatomic, assign, readonly) BOOL backdoorMember;
@end
我正在使用带有Apple LLVM 8.0.0版的Xcode 8.1(clang-800.0.42.1)。