我用Swift语言创建了一个xcframework。我也用@objc标记了.swift类。
我试着在目标c项目中使用,但是它显示的是Module。
有谁能帮助我们如何使用Objective代码的xcframework?
发布于 2021-01-08 16:08:31
在创建xcframework并开始将它们集成到您的项目之前,做好库非常重要。
静态库(.a)
您的类及其方法应该是公共的,并使用@objc标记,以便在Objc中可见:
@objc public class SwiftHelloStatic : NSObject {
@objc static public func hello() {
print("Hello Static Library!")
}
}首先,将“Objective生成的接口头”(例如SwiftHelloStatic-Swift.h)添加到“构建阶段>复制文件”,例如从目的地或DeviredData文件夹:

构建所需的arch (arm64/x86_64),然后在包含头的库中找到"include“文件夹:

从库和头构建xcframework:
xcodebuild -create-xcframework
-library arm64/libSwiftHelloStatic.a -headers arm64/include
-library x86_64/libSwiftHelloStatic.a -headers x86_64/include
-output SwiftHelloStatic.xcframework在验证之后,您的SwiftHelloStatic.xcframework在主文件夹中有“Header”文件夹:

现在,只需将xcframework拖放到"General >Framework、Libraries和Embedded Content“和”不要嵌入“,因为您有静态库要链接。
最后一步,将"Build > Header搜索路径“设置为"
最后,可以将头添加到objc文件中:
#import <SwiftHelloStatic/SwiftHelloStatic-Swift.h>
...
[SwiftHelloStatic hello];
动态框架(.framework)
它类似于静态库,但更简单,因为框架已经有了头。首先将Build Library for Distrubution设置为YES,然后为所需的archs构建框架(arm64,x86_64,.)并从它们构建xcframework,例如:
xcodebuild -create-xcframework
-framework arm64/SwiftHello.framework
-framework x86_64/SwiftHello.framework
-output SwiftHello.xcframework
现在,只需将xcframework拖放到"General >Framework、Libraries和Embedded Content“和”Embedded& Sign“中。
在objc项目中,下一步应该导入xcframework:
#import <SwiftHello/SwiftHello.h>
这是因为一个有效的xcframework包含针对其所有目标平台的单独的动态框架,并在编译时将所需的动态框架链接起来,以便将头导入到代码中与常规框架相同。
还请验证您的类是否可以在"SwiftHello-Swift.h“中访问,例如:
SWIFT_CLASS("_TtC10SwiftHello5Hello")
@interface Hello : NSObject
+ (void)hello;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@endhttps://stackoverflow.com/questions/65624785
复制相似问题