gpt4 book ai didi

ios - 将 XCFramework 与 Objective-C 一起使用

转载 作者:行者123 更新时间:2023-12-03 16:31:56 36 4
gpt4 key购买 nike

我用 Swift 语言创建了一个 xcframework。
我也用@objc 标记了.swift 类。
我尝试在 objective-c 项目中使用 ,但它显示 Module not found 错误。
任何人都可以帮助如何将 xcframework 与 Objective-C 代码一起使用。

最佳答案

在制作 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 文件夹:
enter image description here
构建您需要的拱门(arm64/x86_64),然后您可以在包含您的标题的库中找到“include”文件夹:
enter image description here
从库和头文件构建您的 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 在拱形文件夹中有“Headers”文件夹:
enter image description here
现在只需使用“请勿嵌入”将您的 xcframework 拖放到“常规 > 框架、库和嵌入式内容”,因为您有要链接的静态库。
最后一步将“build设置 > header 搜索路径”设置为“ /SwiftHelloStatic.xcframework/**”以查找您的 header 。
最后,您可以将标题添加到您的 objc 文件中:
#import <SwiftHelloStatic/SwiftHelloStatic-Swift.h>

...

[SwiftHelloStatic hello];

动态框架(.framework)
它类似于静态库,但更简单,因为框架已经有了头文件。第一组 Build Library for Distrubution是,然后为所需的拱门(arm64,x86_64,...)构建您的框架,并从它们构建您的 xcframework,例如:
xcodebuild -create-xcframework 
-framework arm64/SwiftHello.framework
-framework x86_64/SwiftHello.framework
-output SwiftHello.xcframework
现在只需使用“Embed & Sign”将 xcframework 拖放到“General > Frameworks, Libraries and Embedded Content”。
在你的 objc 项目中,你应该导入你的 xcframework 下一步:
#import <SwiftHello/SwiftHello.h>
那是因为一个有效的 xcframework 包含针对其所有目标平台的单独动态框架,并且在编译时链接其中一个所需的动态框架,以便将 header 导入代码与常规框架相同。
还要验证您的类是否可以在“SwiftHello-Swift.h”中访问,例如:
SWIFT_CLASS("_TtC10SwiftHello5Hello")
@interface Hello : NSObject
+ (void)hello;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

关于ios - 将 XCFramework 与 Objective-C 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65624785/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com