澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站OC项目中使用swift混编,pod

2019-06-30 作者:www.8455.com   |   浏览(200)

use_frameworks!

A、用cocoapods 导入swift 框架 到 swift项目和OC项目都必须要 use_frameworks!
B、使用 dynamic frameworks,必须要在Podfile文件中添加 use_frameworks!

(1)如果在Podfile文件里不使用 use_frameworks! 则是会生成相应的 .a文件(静态链接库),通过 static libraries 这个方式来管理pod的代码。   

(2)Linked:libPods-xxx.a包含了其它用pod导入的第三方框架的.a文件。

(3)如果使用了use_frameworks! 则cocoapods 会生成相应的 .frameworks文件(动态链接库:实际内容为 Header   动态链接库   资源文件),使用 dynamic frameworks 来取代 static libraries 方式。   

(4)Linked:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件。

use_frameworks! -> dynamic frameworks 方式 -> .framework
#use_frameworks! -> static libraries 方式 -> .a

关于Library 和 Framework 可以参考:
澳门新萄京官方网站OC项目中使用swift混编,pods的Podfile文件编写。http://blog.lanvige.com/2015/...

(1)swift项目cocoapods 默认 use_frameworks!
(2)OC项目cocoapods 默认 #use_frameworks!

use_frameworks!

1.为不同target添加依赖库,可以使用下列方法编写

1.背景

  外包项目(OC)交接完毕,需要把另一个swift的项目的部分(很多)页面加入到这个外包项目中。有两种解决方案

一、将swift的代码变成OC的代码,即照着swift的代码写成OC的代码(呵呵了,写了两星期,放弃主要是没服务器接口也没法调试,总不能开着青花瓷模拟数据吧,自己也懒得写模拟数据,天知道OC要写多少个@,)

二、OC与Swift混编(可能会有坑,但是比较简单,一劳永逸),那就接下来踩坑吧!

用cocoapods导入OC框架到swift项目:

(1)#use_frameworks! 必须创建头文件,在头文件里面 #澳门新萄京官方网站,import "AFNetworking.h"

(2)use_frameworks! 如果有头文件,在头文件里面 #import "AFNetworking/AFNetworking.h",其它swift文件中用到不需要再import;如果没有头文件,则在每个需要用到的swift文件里 import AFNetworking。

A、用cocoapods 导入swift 框架 到 swift项目和OC项目都必须要 use_frameworks澳门新萄京官方网站OC项目中使用swift混编,pods的Podfile文件编写。!

# Podfile

platform :ios, '9.0'

use_frameworks!

# My other pods

def testing_pods
    pod 'Quick', '0.5.0'
    pod 'Nimble', '2.0.0-rc.1'
end

target 'MyTests' do
    testing_pods
end

target 'MyUITests' do
    testing_pods
end

2.OC与swift混编坑

1.引入 文件名-Bridging-Header.h 桥接文件

       创建swift文件的时候会有提示,也可以自己创建,具体可参照iOS开发之OC与Swift混编,这一步没有什么问题。

2.import 问题

原来的开始引入swift项目中的文件,发现#import <MagicalRecord/MagicalRecord.h> 等引入的头文件报错,百度之后了解需要改成#import "MagicalRecord/MagicalRecord.h" ,不能使用<>的形式,搜索代码将<>的形式改成“”,系统的不用改,cocopods的里面的也不用改。

用cocoapods导入swift框架到swift项目:

(1)必须use_frameworks!

(2)不需要头文件,在需要用到框架的swift文件里 import Alamofire

B、使用 dynamic frameworks,必须要在Podfile文件中添加 use_frameworks!

也可以按照下列方法编写
多个target依赖相同的库(Ruby语法)

3.cocopods引用swift三方库

swfit项目中有用到了一些三方库,

如Snapkit,如果直接在podfile里面写的话会有问题,这时候需要了解useFrameworks,不绕弯子,直接贴答案Podfile中的 use_frameworks!

用cocoapods导入OC框架到OC项目:

(1)#use_frameworks! 在需要用到的文件里 #import "AFNetworking.h";也可以通过pch文件,用法类似swift中的头文件。

(2)use_frameworks! 与(1)类似,用法上没有区别。

(1)如果在Podfile文件里不使用use_frameworks! 则是会生成相应的.a文件(静态链接库),通过staticlibraries这个方式来管理pod的代码。  (2)Linked:libPods-xxx.a包含了其它用pod导入的第三方框架的.a文件。(3)如果使用了use_frameworks! 则cocoapods会生成相应的.frameworks文件(动态链接库:实际内容为Header 动态链接库 资源文件),使用dynamicframeworks来取代staticlibraries方式。  (4)Linked:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件。

platform :ios, '9.0'
use_frameworks!

targetsArray = ['01-GPUImage', '02-test']

targetsArray.each do |t|
    target t do
        pod 'GPUImage'
    end
end

直接给结论:

纯swift项目中使用cocopods ,PodFile必须使用 use_frameworks!

纯oc项目中默认使用 #use_frameworks!

swift oc中使用  #use_frameworks! 

oc swift项目中,老老实实的把三方库文件拽到项目里来吧。如下:

澳门新萄京官方网站 1

用cocoapods导入swift框架到OC项目:不考虑

use_frameworks! -> dynamic frameworks 方式 -> .framework

不同target依赖不同的库

4.项目某个.h文件报错

 貌似是引入swift项目之后编译比较严格了,我的报错文件里提示我少属性或者方法,但是我查到那个文件是是不缺少的,这就尴尬了,我相信xcode是不会骗我的,我的眼睛也不会骗我的,那么真相只有一个,在这个项目下有可能有两个相同的名称的文件,这两个文件由于删除的时候只是移除了依赖,并没有删除掉,在没有引入swift之前编译不严格,所以没有问题,引入swift之后,编译严格了所以把它引入了。

打开Finder在项目下搜索报错的文件名,果然有数个一样的,删掉错误的之后,果然就好了,当然有好几个相同的文件,统统删掉,编译,succeed!nice!

总结:

(1)用swift项目考虑到会使用 OC 和 swift 两种第三方框架,所以Podfile中使用swift项目默认的 use_frameworks! 更为妥当,并且frameworks动态链接库具有一定的优势。 

(2)可以建立一个Bridge头文件,用来import那些OC框架的.h文件:#import "xxx/xxx.h"。或者不建头文件,像swift框架一样,直接在需要用到的swift文件中import。

#use_frameworks! -> static libraries 方式 -> .a

platform :ios, '8.0'
use_frameworks!
target 'targetName1' do
    pod 'Alamofire'
end

target 'targetName2' do
    pod 'Alamofire'
    pod 'Kingfisher'
end

总结:混编之前代码先备份!备份!备份!

use_frameworks!原文:

A、用cocoapods 导入swift 框架 到 swift项目和OC项目都必须要 use_frameworks!

B、使用 dynamic frameworks,必须要在Podfile文件中添加 use_frameworks!

(1)如果在Podfile文件里不使用use_frameworks! 则是会生成相应的.a文件(静态链接库),通过staticlibraries这个方式来管理pod的代码。  (2)Linked:libPods-xxx.a包含了其它用pod导入的第三方框架的.a文件。(3)如果使用了use_frameworks! 则cocoapods会生成相应的.frameworks文件(动态链接库:实际内容为Header 动态链接库 资源文件),使用dynamicframeworks来取代staticlibraries方式。  (4)Linked:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件。

use_frameworks! -> dynamic frameworks 方式 -> .framework

#use_frameworks! -> static libraries 方式 -> .a

关于Library 和 Framework 可以参考:

http://blog.lanvige.com/2015/...

(1)swift项目cocoapods 默认 use_frameworks!(2)OC项目cocoapods 默认 #use_frameworks!

用cocoapods导入OC框架到swift项目:

(1)#use_frameworks! 必须创建头文件,在头文件里面 #import "AFNetworking.h"

(2)use_frameworks! 如果有头文件,在头文件里面 #import "AFNetworking/AFNetworking.h",其它swift文件中用到不需要再import;如果没有头文件,则在每个需要用到的swift文件里 import AFNetworking。

用cocoapods导入swift框架到swift项目:

(1)必须use_frameworks!

(2)不需要头文件,在需要用到框架的swift文件里 import Alamofire

用cocoapods导入OC框架到OC项目:

(1)#use_frameworks! 在需要用到的文件里 #import "AFNetworking.h";也可以通过pch文件,用法类似swift中的头文件。

(2)use_frameworks! 与(1)类似,用法上没有区别。

用cocoapods导入swift框架到OC项目:不考虑

总结:

(1)用swift项目考虑到会使用 OC 和 swift 两种第三方框架,所以Podfile中使用swift项目默认的 use_frameworks! 更为妥当,并且frameworks动态链接库具有一定的优势。

(2)可以建立一个Bridge头文件,用来import那些OC框架的.h文件:#import "xxx/xxx.h"。或者不建头文件,像swift框架一样,直接在需要用到的swift文件中import。

关于Library 和 Framework 可以参考:

2.use_frameworks!
A、用cocoapods 导入swift 框架 到 swift项目和OC项目都必须要 use_frameworks!
B、使用 dynamic frameworks,必须要在Podfile文件中添加 use_frameworks!

http://blog.lanvige.com/2015/...

(1)如果在Podfile文件里不使用 use_frameworks! 则是会生成相应的 .a文件(静态链接库),通过 static libraries 这个方式来管理pod的代码。

(1)swift项目cocoapods 默认 use_frameworks!(2)OC项目cocoapods 默认 #use_frameworks!

(2)Linked:libPods-xxx.a包含了其它用pod导入的第三方框架的.a文件。

用cocoapods导入OC框架到swift项目:

(3)如果使用了use_frameworks! 则cocoapods 会生成相应的 .frameworks文件(动态链接库:实际内容为 Header 动态链接库 资源文件),使用 dynamic frameworks 来取代 static libraries 方式。

(1)#use_frameworks!  必须创建头文件,在头文件里面 #import "AFNetworking.h"

(4)Linked:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件。
use_frameworks! -> dynamic frameworks 方式 -> .framework

(2)use_frameworks!  如果有头文件,在头文件里面 #import

use_frameworks! -> static libraries 方式 -> .a

(1)swift项目cocoapods 默认 use_frameworks!
(2)OC项目cocoapods 默认 #use_frameworks!
用cocoapods导入OC框架到swift项目:

(1)#use_frameworks! 必须创建头文件,在头文件里面 #import "AFNetworking.h"

(2)use_frameworks! 如果有头文件,在头文件里面 #import "AFNetworking/AFNetworking.h",其它swift文件中用到不需要再import;如果没有头文件,则在每个需要用到的swift文件里 import AFNetworking。

用cocoapods导入swift框架到swift项目:

(1)必须use_frameworks!

(2)不需要头文件,在需要用到框架的swift文件里 import Alamofire

用cocoapods导入OC框架到OC项目:

(1)#use_frameworks! 在需要用到的文件里 #import "AFNetworking.h";也可以通过pch文件,用法类似swift中的头文件。

(2)use_frameworks! 与(1)类似,用法上没有区别。

用cocoapods导入swift框架到OC项目:不考虑

总结:
(1)用swift项目考虑到会使用 OC 和 swift 两种第三方框架,所以Podfile中使用swift项目默认的 use_frameworks! 更为妥当,并且frameworks动态链接库具有一定的优势。

(2)可以建立一个Bridge头文件,用来import那些OC框架的.h文件:#import "xxx/xxx.h"。或者不建头文件,像swift框架一样,直接在需要用到的swift文件中import。

"AFNetworking/AFNetworking.h",其它swift文件中用到不需要再import;如果没有头文件,则在每个需要用到的swift文件里

import AFNetworking。

用cocoapods导入swift框架到swift项目:

(1)必须use_frameworks!

(2)不需要头文件,在需要用到框架的swift文件里 import Alamofire

用cocoapods导入OC框架到OC项目:

(1)#use_frameworks! 在需要用到的文件里 #import "AFNetworking.h";也可以通过pch文件,用法类似swift中的头文件。

(2)use_frameworks! 与(1)类似,用法上没有区别。

用cocoapods导入swift框架到OC项目:不考虑

总结:

(1)用swift项目考虑到会使用 OC 和 swift 两种第三方框架,所以Podfile中使用swift项目默认的 use_frameworks! 更为妥当,并且frameworks动态链接库具有一定的优势。

(2)可以建立一个Bridge头文件,用来import那些OC框架的.h文件:#import "xxx/xxx.h"。或者不建头文件,像swift框架一样,直接在需要用到的swift文件中import。

本文转自:https://segmentfault.com/a/1190000007076865 

本文由澳门新萄京官方网站发布于www.8455.com,转载请注明出处:澳门新萄京官方网站OC项目中使用swift混编,pod

关键词: