导入Objc-C二进制文件的Swift框架没有正确生成Obj-c头,错过了@import Cocoa;

时间:2016-04-13 19:26:08

标签: objective-c swift macos cocoa compiler-errors

我正在构建一个Mac OS X应用程序(二进制)。 Skit是Swift框架,Pal是包含.m文件的Application。编译器找不到NSArray或NSDictionary,这意味着编译器找不到Foundation模块。如果我转到Pal-Swift.h中的错误(生成)并手动添加@import Foundation或@import Cocoa,二进制文件编译得很好,我可以按照预期使用objc框架中的类,并且我通常可以继续迭代,直到我需要进行干净的构建。

错误看起来像这样。

    While building module 'SKit' imported from /Users/mtozer/Library/Developer/Xcode/DerivedData/Pal-dznqzplhixgqpgduvvxjqiknvhrr/Build/Intermediates/Pal.build/Debug/Pal.build/DerivedSources/Pal-Swift.h:90:
In file included from <module-includes>:1:
/Users/mtozer/Library/Developer/Xcode/DerivedData/Pal-dznqzplhixgqpgduvvxjqiknvhrr/Build/Products/Debug/SPluginKit.framework/Headers/SKit-Swift.h:97:26: error: expected a type
- (void)executeCommands:(NSArray * __nonnull)commands;
                         ^
/Users/mtozer/Library/Developer/Xcode/DerivedData/Pal-dznqzplhixgqpgduvvxjqiknvhrr/Build/Products/Debug/SKit.framework/Headers/SKit-Swift.h:115:4: error: expected a type
+ (NSDictionary<NSString *, id <SPlugin>> * __nonnull)loadPluginsInDirectory:(NSString * __nonnull)directory sAPI:(id <SAPI> __nonnull)sAPI;
   ^
2 errors generated.
In file included from /Users/mtozer/Pal/Pal/AppDelegate.m:43:
/Users/mtozer/Library/Developer/Xcode/DerivedData/Pal-dznqzplhixgqpgduvvxjqiknvhrr/Build/Intermediates/Pal.build/Debug/Pal.build/DerivedSources/Pal-Swift.h:90:9: fatal error: could not build module 'SKit'
@import SKit;
 ~~~~~~~^~~~~~~~~~~~~~~~~~
3 errors generated.

2 个答案:

答案 0 :(得分:2)

我相信这是一个编译器错误,但我再次使用BUCK,它没有正式支持swift。

只需在我的Framework源代码中添加一个空的扩展名,就会导致生成器正确地将基础依赖项放在标题中

extension NSArray {

}

答案 1 :(得分:0)

请记住将@objc添加到Swift中的类和协议声明中。

@objc public class YourClassName: NSObject { ... }

@objc public protocol YourProtocolName { ... }

如果问题仍然存在,那么尝试在所使用的协议末尾添加: class,因为Swift协议不仅可以通过Objc中的类实现。

@objc public protocol YourProtocolName: class { ... }