我正在构建一个Mac OS X应用程序(二进制)。Skit是Swift框架,Pal是包含.m文件的应用程序。编译器找不到基础或NSDictionary,这意味着编译器找不到基础模块。如果我转到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.
发布于 2016-04-14 15:43:10
我相当确信这是一个编译器错误,但我还是使用了BUCK,它并没有正式支持swift。
只需在框架的源代码中放置一个空扩展,生成器就会将基础依赖项正确地放入标头中
extension NSArray {
}
发布于 2017-01-27 15:45:28
记住在Swift中的类和协议声明前面加上@objc。
@objc public class YourClassName: NSObject { ... }
@objc public protocol YourProtocolName { ... }
如果问题仍然存在,那么尝试在协议的末尾附加: class
,因为Swift协议不仅可以通过类实现,就像在Objc中发生的那样。
@objc public protocol YourProtocolName: class { ... }
https://stackoverflow.com/questions/36607801
复制