美文网首页
关于OC项目混编Swift遇到的坑

关于OC项目混编Swift遇到的坑

作者: 菜鸟成长史 | 来源:发表于2018-06-15 10:27 被阅读0次

最近在做react-native项目,起初用到了socket.js做长连接,可能是因为socket.js设计之初是适应web环境的,所以在打包ios和安卓的时候,遇到了一些连接丢包的bug,后来领导决定用原生OC做socket连接,用的tomp协议封装的socket库,因此有了下文的坑:

接到这个任务后,着手在giehub找了个开源的stomp socket开源库,叫做StompClientLib的库,是一个swift封装的库,(尴尬,最近github一些比较流行的ios库都用swift封装的,看来OC风华已逝,所以我决定开始转战swfit了),但是它的依赖库是facebook的OC库,于是第一个坑来了:

我们用cocapods导入StompClientLib库,报错,大致说是项目是OC,导入的库是swift的,而且其所依赖库是OC,所以需要根据pod提示在podFile加入一行命令use_modular_headers!(不是use framework!网络上搜索OC混编swift库,一大堆说要用到这个命令,其实错误的,文章绝对抄袭的,如果是swfit项目用cocapods导入库,才需要用到use framework!命令,原因自行百度~),pods会自动讲swift库和OC库进行桥接操作~

解决了这条坑,以为万事OK了,然而,用网络上搜索“OC项目使用swfit库“按照教程所说:

第一步:在build settings,设置product module name,一般用app名称(比如我的项目为StompDemo)即可

第二步:defines modules设置为YES

第三步:在需要用到swfit的地方导入“StompDemo-Swfit.h”(这个文件是设置前两步后,编译项目,苹果自动会创建,不信?请看下图(1)文件描述)

第四步:在项目使用第三方库的类,然而错误!!说是找不到这个库??why?

图(1)

那是什么原因?百度google:

网上资源很多,但是大多雷同,都是抄来抄去,没有验证就发布的文章,后来自己看资源解决,理解这个product module name到底是什么意思?

终于看网络资源大致明白了,其实这里涉及到target了,其实当我们在项目的target中设置前面的会创建StompDemo-Swfit.h文件,但是这个文件是自动设置在这个target下的swift文件的桥接,然而我们的第三方库,并不是在这个target下,而是自己的StompClientLib的target(如下图),所以按照这个思路,我们应该是设置这个target的build setting。

没错,设置好,重新编译,然后在进入~/Library/Developer/Xcode/DerivedData目录,搜索相应的StompClientLib-Swift.h,可以找到该文件,哈哈哈,以为这个坑终于解决了!

然而,导入这个文件,WTF,提示无法找到该文件?又是一个坑!!!

第一时间想到导入第三方库常遇到的头文件无法搜索到的场景,在build setting 设置header search paths增加该文件路径?突然想到不对!这个文件你根本无法设置路径,因为它是在沙盒里,而不是在bundle中,如何设置?所以方案不对,那是什么原因呢?如何让编译器可以找到这个文件呢?啊啊啊啊啊啊,如何办?怎么办?该当何办?没思路啊!!!

俗话说:“天才是靠99%的不断尝试和1%的天赋”,所以只能不断尝试,各种尝试,终于终于:

当我输入import <StompClientLib>,根据xcode的代码提示功能,导入一个又一个文件,终于输入

import<StompClientLib/Swift Compatibility Header时,xcode自动提示目录下有StompClientLib-Swift.h文件,啊哈哈哈哈哈哈,导入这个文件,使用这个库,哇靠终于编译不报错,可以使用该库下的swift文件了~~终于解决问题啦~~飞起来了!!!这里正常应该可以了,这就是OC项目混编Swift的坑,但是其实后面还遇到问题,下一章讲吧,还是关于OC使用Swfit的问题,关于有一些swift的类型、方法、代理等无法转换的问题。

相关文章

  • oc Swift 混编

    oc Swift 混编 oc 项目 混编Swift1.1 oc 调用 Swift 的类 和 方法步骤: ...

  • 关于OC项目混编Swift遇到的坑

    最近在做react-native项目,起初用到了socket.js做长连接,可能是因为socket.js设计之初是...

  • Object-C与Swift的混编

    关于swift与oc的混编分为两种情况: 1. 在swift项目中引入OC文件 在swift项目中使用oc的时候需...

  • OC和Swift混编

    OC和Swift的混编,分为两种情况: OC项目中嵌入Swift文件 Swift项目中嵌入OC文件 先来看OC项目...

  • swift与oc混编遇到的坑(oc项目)

    1、swift文件调用cocoapods中的oc文件: 提示文件找不到,但是文件明明存在 解决办法: #impor...

  • OC项目中使用Swift

    Swift和OC 混编的两个方面 1.OC项目中使用Swift2.Swift 项目中使用OC OC项目中使用Swi...

  • Swift与OC混编

    Swift与OC混编:OC文件使用Swift文件时,引入#import (项目名字)-Swift.h。(系统帮我们...

  • iOS开发之一Swift与OC混编

    Swift与OC混编:OC文件使用Swift文件时,引入#import (项目名字)-Swift.h。(系统帮我们...

  • iOS中Objective-C和Swift混编及第三方框架相互调

    本文将详细介绍一下OC和swift混编问题,其中涉及两大部分:1)oc项目中混编swift的实现; 2)oc或者s...

  • Swift

    混编 15、OC与Swift的混编_海森堡_lichangan的博客-CSDN博客_oc swift 混编[htt...

网友评论

      本文标题:关于OC项目混编Swift遇到的坑

      本文链接:https://www.haomeiwen.com/subject/qwjpeftx.html