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

最近在做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的类型、方法、代理等无法转换的问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,019评论 3 119
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • 引用上文生命周期和launchMode介绍, Activity的生命周期实际上比我们想象的复杂得多. 本文主要通过...
    anly_jun阅读 16,544评论 7 40
  • 姚小平教授谈《语言研究和人文研究中的实证法》 姚小平教授谈《语言研究和人文研究中的实证法》 http://www....
    高志军_PKU阅读 739评论 0 3
  • 小夭,今夜可曾安睡。前天睡前的故事也没能让你心绪宁静的享受婴儿般的睡眠,我更担心你本就被我挑起的敏感的神经被那则成...
    愚蠢的狐狸大叔阅读 257评论 2 0