我正在构建一个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.
答案 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 { ... }