OC和swift混编Framework

1. 创建framework

  • 首先我创建一个project,然后选择framework,选择OC语言,如下图:在这里插入图片描述

  • 然后再创建一个swift的class文件,最终目录结构如下:在这里插入图片描述

  • framework中混编没有桥接文件,创建framework时,会自动生成一个xxx.h文件(如上:SwiftOCFramework.h),这个文件的作用和项目中混编的桥接文件作用类似

  • Build Setting ----> Build Active Architecture Only 需要设置为NO,表示编译出来的静态库支持所有的设备,如果为YES,则只支持当前编译设备

  • 最终选择真机和模拟器编译 即可得到framework,可以点击Products下framework,如果是没有编译的则是红色,编译过,则可以右击,寻找到framework的位置

2. OC和swift的互想调用

2.1 swift调用OC

  • 首先我们在swift文件中增加方法来调用OC类中的方法
//该方法内部直接调用OC中的方法
public func swiftToOC() {
        print("-------------")
        let OCtest = TestOCFile()
        OCtest.ocTest()
        TestOCFile.swiftTest()
    }
  • 注意:
    • swift中的方法,如果是有关键字public修饰,则可以在framework外面访问,如果没有用此关键字修饰的,则无法调用
    • swift文件中调用OC的类,跟其项目中混编类似,需要再头文件(xxx.h)中导入需要调用OC的.文件
    • xxx.h头文件想要导入OC的.h文件,首先xxx.h文件必须在public中,并且OC的这个.h文件也必须处于public,不然报错找不到该文件
    • Build Phases —> Header , 如果该头文件不在public中,需要把头文件放到public中,直接拖拽即可:在这里插入图片描述

2.2 OC中调用swift文件

- (void)ocToswift {
    TestSwift *test = [[TestSwift alloc] init];
    [test OCCallBackSwift];
}
public class TestSwift: NSObject {
    @objc public func OCCallBackSwift() {
        print("OCCallBackSwift")
    }
}
  • 注意:
    • OC调用swift,需要导入swift的头文件,例如:#import <SwiftOCFramework/SwiftOCFramework-Swift.h>
    • swift的class 必须要被public关键字修饰
    • swift中的method必须要被@objcpublic两个关键字更新,@objc:给OC调用的方法必须加上次关键字,public是表示公开暴露的方法

2.3 合并framework

  • 选择真机和模拟器编译之后,我们右击找到framework的所在地:在这里插入图片描述

  • 首先我们可以通过终端输入指令: lipo -info framework的地址来查看两个framework支持的架构信息:在这里插入图片描述
    同样的我们通过此方式查看真机的架构:在这里插入图片描述

  • 合并两个真机库和模拟器库,我这里直接把模拟器的framework合并到真机里面,合并之后查看合并的framework的架构信息,使用命令lipo -create 真机framework地址 模拟器framework地址 -output 输出文件路径在这里插入图片描述

  • 合并完库之后发现只能在真机上运行,无法在模拟器上运行,这是因为我们只是合并了库,但是没有合并SwiftOCFramework.swiftmodule里面的文件,现在只需要把模拟器中的文件直接拷贝到你合并的framework的对应文件中,然后再导入framework运行即可

  • 合并完库之后,直接把framework拖入到项目中,导入头文件,既可以直接使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值