首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在目标C中使用XCFramework

在目标C中使用XCFramework
EN

Stack Overflow用户
提问于 2021-01-08 07:11:56
回答 1查看 4.3K关注 0票数 5

我用Swift语言创建了一个xcframework。我也用@objc标记了.swift类。

我试着在目标c项目中使用,但是它显示的是Module。

有谁能帮助我们如何使用Objective代码的xcframework?

EN

回答 1

Stack Overflow用户

发布于 2021-01-08 16:08:31

在创建xcframework并开始将它们集成到您的项目之前,做好库非常重要。

静态库(.a)

您的类及其方法应该是公共的,并使用@objc标记,以便在Objc中可见:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
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文件中:

代码语言:javascript
复制
#import <SwiftHelloStatic/SwiftHelloStatic-Swift.h>

...

[SwiftHelloStatic hello];

动态框架(.framework)

它类似于静态库,但更简单,因为框架已经有了头。首先将Build Library for Distrubution设置为YES,然后为所需的archs构建框架(arm64,x86_64,.)并从它们构建xcframework,例如:

代码语言:javascript
复制
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:

代码语言:javascript
复制
#import <SwiftHello/SwiftHello.h>

这是因为一个有效的xcframework包含针对其所有目标平台的单独的动态框架,并在编译时将所需的动态框架链接起来,以便将头导入到代码中与常规框架相同。

还请验证您的类是否可以在"SwiftHello-Swift.h“中访问,例如:

代码语言:javascript
复制
SWIFT_CLASS("_TtC10SwiftHello5Hello")
@interface Hello : NSObject
+ (void)hello;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65624785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档