如何解决将 XCFramework 与目标 C 一起使用
我用 Swift 语言创建了一个 xcframework。 我也用@objc 标记了 .swift 类。
我尝试在目标 c 项目中使用
任何人都可以帮助如何使用带有 Objective-C 代码的 xcframework。
解决方法
在制作 xcframework 并开始将它们集成到您的项目之前制作您的库非常重要。
静态库 (.a)
你的类和它的方法应该是公共的并且用 @objc
标记以便在 Objc 中可见:
@objc public class SwiftHelloStatic : NSObject {
@objc static public func hello() {
print("Hello Static Library!")
}
}
首先将您的“Objective-c Generated Interface Header”(例如 SwiftHelloStatic-Swift.h)添加到“Build Phases > Copy Files”,例如从您的目的地或 DeviredData 文件夹:
构建您需要的架构(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 在 arch 文件夹中有“Headers”文件夹:
现在只需将您的 xcframework 拖放到“General > Frameworks,Libraries and Embedded Content”,并选择“Do not Embed”,因为您有静态库要链接。
最后一步是将“Build Settings > Header Search Path”设置为“
最后,您可以向 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 拖放到“常规 > 框架、库和嵌入内容”即可。
在您的 objc 项目中,您应该接下来导入您的 xcframework:
#import <SwiftHello/SwiftHello.h>
那是因为一个有效的 xcframework 包含针对其所有目标平台的单独动态框架,并且在编译时链接它们中的一个需要的框架,以便将标头导入您的代码与常规框架相同。
还要验证您的类是否可以在“SwiftHello-Swift.h”中访问,例如:
SWIFT_CLASS("_TtC10SwiftHello5Hello")
@interface Hello : NSObject
+ (void)hello;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。