• OC项目引入使用swift编写的三方库后,报错 错误描述:The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set ...

    OC项目引入使用swift编写的三方库后,报错

    • 错误描述:The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor.
    • 解决办法
      1. 选中Pods项目
      2. TARGETS选择对应的使用swift编写的三方库
      3. 切换到Build Setting选项
      4. 在搜索框输入swift language搜索
      5. 将Swift Language Version中的Unspecified改为对应的Swift版本(Swift 3.2)
      6. 重新build项目,这是可能会报一些Swift的语法错误,修改一下就OK了。
        Alt text
    展开全文
  • OC项目中使用Swift

    2016-02-27 09:23:30
    OC项目中使用Swift 本文版权归作者所有,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyue.com 最近公司的项目开始计划使用Swift,由于原先的工程都是使用...

    OC项目中使用Swift

    本文版权归作者所有,如需转载请联系孟祥月
    CSDN博客:http://blog.csdn.net/mengxiangyue
    独立博客:http://mengxiangyue.com

    最近公司的项目开始计划使用Swift,由于原先的工程都是使用OC编写的,不可能一下全部转换成Swift,所以采用OC与Swift混编的方式是最好的选择。这篇文章只是一个简单的介绍,并没有太高深的知识。

    我新建了一个演示的OC工程,当然你可以使用你已经存在的OC的工程。如果我们想要在OC工程中使用Swift的代码,Swift的代码默认是使用module管理的,同样这里我们也需要把我们的Swift代码作为一个module暴露给我们的OC工程,修改下面的配置:

    上面的修改了一个配置项,有一个Product Module Name在后面会使用。

    在工程里面点击File/New/File…,选择iOS/Source/Cocoa Touch Class,按照如下填写创建一个新的文件:

    上图中的Subclass of一定要设置为NSObject或其子类,否则OC工程将不会找到该类。

    点击确认后会选择保存路径,点击Create,出现如下界面:

    这个界面是询问是否创建桥接的头文件,这个文件在Swift调用OC代码的时候比较管用,但是在OC中调用Swift的时候我发现没有什么卵用。

    选择Don’t Create按钮。

    在Test.swift中添加如下的代码(解释都在注释里面了):

    import UIKit
    
    /*
        如果Swift类想要被OC发现,必须继承自NSObject并且使用public标记,并且该类中想要被OC访问的方法也必须使用public标记,具体知识可以去看Swift的访问控制
        原因:Swift的代码对于OC来说是作为一个module存在的
    
        当然全局的Swift函数,我还没发现怎么在OC中访问,如果哪位清楚还请告诉一下,谢谢!
    */
    
    
    public class Test: NSObject {
        public func log() {
            print("这是Swift的方法")
        }
    }
    
    public func globalLog() {
        print("这是Swift全局的log方法")
    }

    我们在我们想要调用Swift类的方法里面引入头文件:”Product Module Name-Swift.h”,其中Product Module Name替换成在上面配置项中显示的内容,例如:

    #import "ViewController.h"
    // 引入Swift头文件
    #import "OCAndSwift-Swift.h"
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 使用Swift的类
        Test *test = [[Test alloc] init];
        [test log];
    }
    
    @end

    这样我们就能够在OC中使用Swift的代码了,最后还要说明一点:”Product Module Name-Swift.h”(例子中的是OCAndSwift-Swift.h),是由编译器自动生成的,如果import后没有提示,编译一下。并且只有在工程中包含至少一个Swift文件的时候,才会自动生成这个文件,所以如果工程中如果没有Swift文件的时候,就算在配置中设置对了,import该文件也会报错。

    展开全文
  • swift导入oc第三方

    2019-05-05 15:31:39
    swift导入oc第三方库 前言 对于ios开发而言,目前很多第三方库或者demo还是以oc为主,swift相关的资料很少,这篇文章就结合博主的开发实例对在swift工程中导入并使用oc版本的第三方库进行阐述。 正文 1.编写oc桥接头...

    swift导入oc第三方库

    前言

    对于ios开发而言,目前很多第三方库或者demo还是以oc为主,swift相关的资料很少,这篇文章就结合博主的开发实例对在swift工程中导入并使用oc版本的第三方库进行阐述。

    正文

    1.编写oc桥接头文件

    顾名思义,将oc编写的库桥接到swift工程里的头文件。
    结合实战,首先我在项目工程的根目录下创建一个名为xxxx.h的.h文件,内容如下,暂时不去修改:

    #ifndef xxxx_h
    #define xxxx_h
    #endif 
    

    接着,在项目的targets里的Build Settings选项里,找到Objective-c Bridging Header选项:

    在这里插入图片描述
    将这一项设置为刚刚创建的.h文件,如“xxxx.h”

    2.导入第三方库

    做完第一步,准备工作就已经做好了,接下来也很简单。我在这里分两种情况进行阐述。
    (1)framework形式导入的第三方库:
    例如集成支付宝的sdk(https://docs.open.alipay.com/204/105295/),导入后项目里会存在AlipaySDK.framework文件。这个时候在swift中,你还是不能直接引用支付宝相关的类和方法的,这个时候,我们在刚刚创建的桥接文件里,加上:

    #ifndef xxxx_h
    #define xxxx_h
    //导入支付宝的OC的头文件
    #import <AlipaySDK/AlipaySDK.h>
    #import <AlipaySDK/APayAuthInfo.h>
    #endif 
    

    然后你会发现,在代码里,你就可以正常调用支付宝SDK中的类和方法了,就这么简单。
    (2)直接拷贝的第三方库:
    例如第三方客服平台Udesk的集成(http://www.udesk.cn/doc/ios/udesksdk_ios/),按其要求手动将第三方工程文件导入你的项目中后,你的项目会存在如下的文件夹:

    此时,仍然需要在桥接文件里将你所需要用到的类文件导入,如:

    #ifndef xxxx_h
    #define xxxx_h
    //导入Udesk的OC的头文件
    #import "UdeskSDK/SDK/UdeskAgent.h"
    #import "UdeskSDK/SDK/UdeskCustomer.h"
    #import "UdeskSDK/SDK/UdeskManager.h"
    #import "UdeskSDK/SDK/UdeskMessage.h"
    #import "UdeskSDK/SDK/UdeskOrganization.h"
    #import "UdeskSDK/SDK/UdeskSetting.h"
    #import "UdeskSDK/UDChatMessage/Udesk.h"
    #endif 
    

    然后,在项目targets的general选项中,找到“Linked Frameworks and Libraries”,将第三方库中的.a文件添加进去:


    点击add other…之后选择.a文件即可。接下来你就可以在swift中调用第三方库的类和方法了。

    swift导入oc第三方库的方法就说到这,欢迎留言讨论~

    展开全文
  • OCSwift混编Pod引入第三方库的问题 问题描述:Swift应用OC 的开源框架,需要创建一个桥接头文件,问题就出在这个看似简单,却隐藏着一个巨大的问题:一切都按部就班的在桥接头文件中引入OC 头文件,但是...

    OC和Swift混编Pod引入第三方库的问题

    问题描述:Swift应用OC 的开源框架,需要创建一个桥接头文件,问题就出在这个看似简单,却隐藏着一个巨大的问题:一切都按部就班的在桥接头文件中引入了OC 头文件,但是xcode总是报错找不到该文件。接下来详细描述问题和原因。

    1.为了在Swift项目中引入OC 开源框架,我使用了pod工具引入。然后下图:

    2.之后创建桥接文件:

    3.然后就是在配置文件中设置桥接文件路径:

    4.到这里就看似完成了,一切都很简单。但是,当编译时问题就来了,如下图:

    原因是找不到该文件。可是明明使用了pod工具引入了啊。(注:百度清一色的都是以上步骤,该问题并未在百度查询到问题原因和解决方案。所谓博客恐怕都是出自一人)

    5.在作了大量的测试和摸索后,终于得意解决。问题的根本原因就是我之前用pod引入了Swift开源框架,为了方便,在引入OC开源框架时我同样是使用了pod工具。我们回看第一步

    Swift框架:

    pod 'SnapKit''~> 0.30.0.beta1'

    pod 'Alamofire''~> 3.4.0'

    pod 'SwiftyJSON''~> 2.3.2'


    OC框架:

    pod 'SVProgressHUD'

    pod 'MJRefresh'

    同样还有一句话:

     use_frameworks!


    没错,简单的说,在OC开发时并不用使用该语句,但是Swift开发时使用pod工具就需要加上这句话。这就导致了OC 和 Swift公用同一个项目工程中的pod时造成了以上显示的错误,即使其他步骤都没有错,但是错误原因就是找不到文件。

    至于为什么会这样,我联想到了之前看到过的一篇文章好像是有这么一句话(记不太清楚了)OC是动态语言,而Swift是静态语言,这就是为什么两者在使用pod时关于这句话是否要加上的浅显原因(其实深入的东西就需要接着百度了)

    既然原因找到了,解决它就好办了,我们只要把这两种语言的开源框架分开管理就可以了。。。。



    展开全文
  • 作为ios开发的新语言,相对比较oc 资源还是比较欠缺,有时候开发中,我们需要引入第三方库就不得不引入oc版的第三方库,然后苹果公司也给集成了这样的快捷方式。导入第三方的方法有:1、CocoaPods 2、手动将第三方的...

    声明:

    作为ios开发的新语言,相对比较oc 资源还是比较欠缺,有时候开发中,我们需要引入第三方库就不得不引入oc版的第三方库,然后苹果公司也给集成了这样的快捷方式。导入第三方的方法有:1、CocoaPods 2、手动将第三方的文件复制到工程下。下面我们主要介绍手动导入,我们以导入著名小马哥的下拉刷新为例。


    1、在github上下载第三方的文件拉到工程文件中。



    2、新建一个桥头文件,用于是的我们使用swift语言可以调用添加的oc代码。

     创建一个桥头文件之后要为桥头文件设置桥街头(就是让项目调用这个oc类的时候知道这个配置文件在哪里,就是配置这个桥头文件的所在路径),这里我们介绍两种方法。

    a: 绝对路径,通过直接将桥头文件拉到bash,xcode会自动将改文件的路径配置。

    如图:

             

    b:设置为相对路径。

    首先左键点击工程打开工程所在文件,然后找到head桥头文件。(这里的相对路径是相对工程所在文件的路径,例如桥头文件的工程包名的第一层,我们就只需写上:xxx.h。如果是在工程文件下的相同文件下的一层,ps(就是说如果现在项目A,在文件夹中会打开A,然后会有一个相同的文件包和一个.xocde的工程文件,再次打开A文件发现桥头文件时)),此时需要加上第二层的和项目工程相同的文件名,结果就是:A/xxx.h。

    如图:


    3、在桥头文件中添加第三方库的.h文件

    到这里,我们就实现了在swift工程中引入oc第三方库的方法,就可以在swift类中调用相关方法了。


    展开全文
  • OC项目引入swift, 1.建立 bridge 文件:在OC工程中新建swift文件,确认创建时,会提示建立 一个 项目名-bridging-header.h 文件。 2,建立 bridge 文件之后,在其中引入要用的 文件名 import  例如使用Charts ...
  • OC项目中,有可能会遇到需要引入Swift写的第三方库,下面整理下OC项目如何使用Swift库 1.在已有的OC工程中新建一个Swift文件,命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立...
  • 在进行swift编程的时候,有时候难免要进行与Objective-c的混编(如引入OC语言的第三方库),本文主要讲述swiftOC混编的两种方法。 一.比较方便直接的方法 1.直接在创建好的swift工程中任意新建一个OC的类,我们会...
  • 这里主要借助一个桥梁文件,这个桥梁文件一般在你导入swift代码或者创建swift代码的时候会询问你是否创建,这个时候要选择创建,然后就可以在oc项目里引入桥梁文件,从而可以创建swift对象,使用其相应方法了. ...
  • OCSwift混合使用

    2017-07-11 09:13:02
    随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,...OC引用Swift第三方
  • 情景我在桥接文件中直接写入#import 然后在swift文件中得重新导入才可以使用,即import SVProgressHUD项目中很多地方都需要SVProgressHUD,在每一个需要SVProgressHUD的swift文件中再导入一遍那可不是明智的选择解决...
  • 再导入一个Swift第三方框架,运行项目发现AFN找不到了:把Swift的第三方和use_frameworks!去掉项目又可以运行了,首先思考:只添加两样东西 use_frameworks! 和 Swift 三方库。从以下几点考虑:1,AFN框架是否出了...
  • 废话不多说,下面开始介绍如何以正确的姿势导入第三方库文件。 学习过Objective-C的同学肯定会知道,一般会有三种方式导入第三方库,分别是:cocoasPod管理工具,打包成framwork导入,直接导入原文件。然而,swift...
  • 这里直接说问题,在swift项目中,当你通过Cocoapods pod导入OC第三方文件,然后你去桥接文件里面添加该第三方的头文件(例如:MBProgressHUD等),你会发现会报错,错误是说没有找到该文件,也就是路径问题,下面...
  • 最近想试着开始写学着swift项目了,然后就在用cocoapods pod下来的第三方框架的时候出现了问题,先以为是自己创建桥接文件后,配置出错了,但是网上的那些文章都还是能把桥接文件处理好,言归正传,先上图 ...
  • 但是由于swift才出来不久,目前很多cocoapods管理的第三方库依然是由Objective-C编写的。 为了能够在swift中使用这些类库,需要在Xcode中进行一些配置。 假设你的项目是基于cocoapods的,并且
  • Swift中混编OC第三方

    2019-07-24 10:29:32
    现在Swift第三方库还比较少,有时候需要使用OC第三方库,其实也是很容易的。 我们使用如下步骤: 1、新建的Swift项目,第一次创建OC文件时会询问是否生成 桥接头,选择是的话会生成一个桥接头文件,文件如图: ...
  • OC 项目中使用基于 Swift 的 CocoaPods 库 随着 Swift 的流行,各种神奇的库也开始有对应的 Swift 版本了,而其中一些更神奇的库却只有 Swift 版本… 正巧接手了一个前人用 Swift 写的项目,里面有一个...
  • Swift引入第三方

    2016-08-12 10:26:55
    一、swift第三方 1、直接将Alamofire.xcodeprok拖入项目中 2、添加依赖框架 3、文件调用需导入第三方库模块头文件 二、oc第三方 1、导入第三方文件 2、桥接文件添加第三方.h文件
  • 桥接头文件主要应用于swiftoc的混编。这里有两种创建方式。 方法一: 适用于项目(swift项目)之前没创建过oc的类,或(oc的项目)swif的类 这里以swift项目为例 既然没用过就创建一个呗Commond+n然后创建,这...
1 2 3 4 5 ... 20
收藏数 1,333
精华内容 533