加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift oc混编 打包framwork

发布时间:2020-12-14 02:31:09 所属栏目:百科 来源:网络整理
导读:最近由于项目需求需要使用Swift做开发,但之前的好多有用的东西都是使用OC写的,鉴于这种情况最好的方式当然是使用swift重写,但这样的工作量太大,而且不能保证功能的稳定性,所以自己就尝试的使用Framework来嵌入Swift项目中去。 至于涉及到OC和Swift汇编

最近由于项目需求需要使用Swift做开发,但之前的好多有用的东西都是使用OC写的,鉴于这种情况最好的方式当然是使用swift重写,但这样的工作量太大,而且不能保证功能的稳定性,所以自己就尝试的使用Framework来嵌入Swift项目中去。

至于涉及到OC和Swift汇编的过程可以看我上一篇文章

首先我们需要了解framework是什么:

  • Framework 就是一个Bundle,将所有的资源(nib,Images,Fonts…)和代码都打包在一起,方便发布。理论上动态库可以单独更新,只是在iOS 上Apple未开放这样的权限。
  • 首先我们创建一个Cocoa Touch Framework工程命名为SwiftOCFramework,默认会生成这么几个文件:
  • 然后把自己需要打包成framework的文件拖入该工程中,这个时候就不需要使用xxx-swift.h文件了,不要把这个文件加入进来:
  • 编译一下发现会报错,这就正常了:

  • 这是因为我们没有使用桥接文件来引入OC的头文件导致的,接下来默认生成的SwiftOCFramework.h就有作用了,因为我们这个是Framework所以在SwiftOCFramework.h中引入头文件时要这样写:#import <SwiftOCFramework/TestOCFile.h>,同时既然TestOCFile.h是给Swift文件用的那么我们就需要在Build Phases-Headers中把它指定为public,直接从Project中拖上去即可:

  • SwiftOCFramework.h文件现在是这样的:

  • 这样我们就引入了OC文件,再次编译运行发现还是有错,奔溃了,仔细看一下,不难发现是在OC调用Swift时出错,引入的桥接头文件出错:
  • 仔细观察大家应该能看出问题来,我们在创建OC和Swift汇编工程时名字为SwiftOCCallBack,那么对应生成的桥接文件就是"SwiftOCCallBack-Swift.h",但是现在我们打包的工程名字已经更改了,这就是导致找不到文件的原因。
  • 在创建Swift工程时,系统会自动根据工程名称生成对应的桥接文件,这时我们是不是可以改一下这个桥接文件试一下,发现还是一样的错误,什么原因:

  • 什么鬼,长长的舒了一口气,仔细认真一想,现在我们是在创建Framework,一般我们引用Framework中的文件是怎么使用的framework/xxx.h是吧,这样修改一下:

  • 终于出现BUlid Succeeded了,感谢国家,感谢党啊,接着就是我们需要合并Framework了
  • 修改BUlid Configuration:

  • 这个时候我们在Run一下真机以及模拟器,这两个文件就是我们想要的:

  • 合并一下,打开终端执行下面命令,一般我是使用Release-iphoneos复制一份,然后在把Release-iphoneos和Release-iphonesimulator中的SwiftOCFramework文件合并,一般是直接找到文件拖入终端就可;
  • lipo -create /Users/FLY/Desktop/PROJECT/untitledfolder/SwiftOCFramework/Release-iphoneos/SwiftOCFramework.framework/SwiftOCFramework /Users/FLY/Desktop/PROJECT/untitledfolder/SwiftOCFramework/Release-iphonesimulator/SwiftOCFramework.framework/SwiftOCFramework -output /Users/FLY/Desktop/PROJECT/untitledfolder/SwiftOCFramework/SDK/Release-iphoneos/SwiftOCFramework.framework/SwiftOCFramework


    点击回车搞定,但这时由于我们没有合并SwiftOCFramework.swiftmodule文件,所以还是智能在真机上运行,OK我们直接把elease-iphonesimulator中的SwiftOCFramework.swiftmodule文件文件复制到Release-iphoneos中,然后倒入工程运行,OK。
  • 刚开始我们会遇到一下错误:

  • 这是因为我们没有告诉工程我们新嵌入了Framework,工程运行时找不到,我们需要手动嵌入二进制framework:

  • 再次运行,OK了:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读