• swift项目引入OC混编 和OC项目引入swift混编 遇到的问题


     swift项目引入OC混编

    问题来源:

    1.swift项目pods  MJRefresh 为了在swift正常使用 建了一个桥接文件

    2.在项目中又使用了 SDWebImage 用于加载网络图片

    根据说明加了Podfile一个 use_frameworks!

    编译的时候问题来了

    问题显示类似这样的错误:

    failed to emit precompiled header '/Library/Developer/Xcode/DerivedData/MyprojectName-lajanjvhqjnfjksdsndsfkads/Build/Intermediates.noindex/PrecompiledHeaders/MyprojectName-Bridging-Header-swift_44AHJm3Z96qu-clang_2BIMGQVXGEZ09.pch' for bridging header '/Documents/MyProjectLocaiton/FoneApp-Bridging-Header.h'

    问题解决方法:

    了解了一下 use_frameworks! 下面是参考

    https://www.jianshu.com/p/ac629a1cb8f5

    //---------------------------------------------

    首先需要了解下静态库,动态库,Framework的区别所谓的库就是一段编译好的二进制文件,加上头文件,相关的资源文件就可供别人使用

    静态库:

    (静态链接库)(.a)在编译时会将库copy一份到目标程序中,

    编译完成之后,目标程序不依赖外部的库,也可以运行 缺点是会使应用程序变大

    动态库:

    (.dylib)编译时只存储了指向动态库的引用。 可以多个程序指向这个库,在运行时才加载,

    不会使体积变大, 但是运行时加载会损耗部分性能,并且依赖外部的环境,如果库不存在或者版本不正确则无法运行

    Framework:实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。

    iOS8 / Xcode 6 之前是无法使用静态库,出现了AppExtension之后可以使用

    对于是否使用Framework,CocoaPods 通过use_frameworks来控制

    1.不使用use_frameworks! -> static libraries 方式 -> 生成.a文件

    在Podfile中如不加use_frameworks!,cocoapods会生成相应的 .a文件(静态链接库),
    Link Binary With Libraries: libPods-**.a 包含了其他用pod导入有第三库的.a文件
    
    2.use_frameworks! -> dynamic frameworks 方式 -> 生成.framework文件
    使用了use_frameworks!,cocoapods会生成对应的frameworks文件(包含了头文件,二进制文件,资源文件等等)
    Link Binary With Libraries:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件

    1.纯oc项目中 通过pod导入纯oc项目, 一般都不使用frameworks

    2.swift 项目中通过pod导入swift项目,必须要使用use_frameworks!,

      在需要使用的到地方 import AFNetworking

    3.swift 项目中通过pod导入OC项目 

     1) 使用use_frameworks,在桥接文件里加上#import "AFNetworking/AFNetworking.h"
     2)不使用frameworks,桥接文件加上 #import "AFNetworking.h"
    //---------------------------------------------

    这里我发现swift 项目中通过pod

    使用use_frameworks!

    导入OC项目可以直接引用使用       或者放入桥接文件使用

    另外学习swift写了一些demo,加个链接这里 供swift初学者一起学习
     

     

     OC项目引入swift混编

    OC项目Cocoapods导入Swift库出错解决办法

    在开发过程中主要用的是OC语言,所以pod的都是OC库,Podfile里又没加use_frameworks!

    所以一直都是.a类型的。后来因为需求需要用到一个只有swift版本的库,就使用use_frameworks!将所有.a库变成了.framework。然后信心满满地运行工程,结果GG。

    最后归纳出几个需要注意的点:

    我是这样操作的:

    1、先Podfile里屏蔽所有pod的三方,终端执行 pod install

    2、Podfile里加use_frameworks!,终端执行 pod install

    3、找到Target->Build Settings->Other Linker Flags,把OC Pod进来的库,删掉

    4、Podfile里取消屏蔽的所有pod的三方,添加要加入的swift的三方,终端执行 pod install

    5、将用到的库提示找不到的,从#import <xxx.h>改为#import "xxx.h";

    6、搜索Swift Language Version,将版本设置为Swift库能支持的最高版本

  • 相关阅读:
    代码习惯
    全网最详细的fhq treap (非旋treap)讲解
    按位或「HAOI2015」
    列队「NOIP2017」
    愤怒的小鸟「NOIP2016」
    能量传输「CSP多校联考 2019」
    矿物运输「CSP多校联考 2019」
    普通打击「CSP多校联考 2019」
    普通快乐「CSP多校联考 2019」
    BZOJ4385: [POI2015]Wilcze doły
  • 原文地址:https://www.cnblogs.com/ljcgood66/p/9112121.html
Copyright © 2020-2023  润新知