oc工程pod swift

2019-05-14 10:44:29 zhangxiweicaochen 阅读数 919

pod组件化,swift,objective-c混合开发

pod 组件化管理

  • 创建swift工程(PodSwift)

  • 创建objective-c工程(httpmanager)

  • 进入工程目录下创建spec

    pod lib create PodSwift

    填写提示信息,然后创建需要暴露调用的类所有的swift类

    s.source_files = 'PodSwiftLibs/**/*.swift'

swift objective-c混合开发

编译问题查看 https://www.jianshu.com/p/c7623c31d77b

pod注意事项

  • local pod 引用 pod库

    s.dependency "Masonry"

  • 引用预处理宏定义

local pod库中调用masonry中简写方法需要在spec申明:

#pod中的macro
 s.pod_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'MAS_SHORTHAND=1 MAS_SHORTHAND_GLOBALS=1'}
 #项目中的macro
 s.user_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'MAS_SHORTHAND=1 MAS_SHORTHAND_GLOBALS=1'}
 

git:demo地址

2016-05-16 16:29:11 gaoqinghuadage 阅读数 2659

在 OC 项目中使用基于 Swift 的 CocoaPods 库

随着 Swift 的流行,各种神奇的库也开始有对应的 Swift 版本了,而其中一些更神奇的库却只有 Swift 版本…
正巧接手了一个前人用 Swift 写的项目,里面有一个非常关键的图表库,找了半天硬是没有发现类似的 OC 版开源库。出于不想造轮子的心态,就让我们这些”落后”的 OC 党想办法兼容这些库吧!好在苹果为了推广这门新语言已经做好了准备工作,虽然还是需要绕个路,但是比起造轮子来,还是简单了不少。

因为项目是用 CocoaPods 来管理第三方库的,所以这次的兼容工作也会在 CocoaPods 上展开。不过道理还是那个道理,如果没有用到 CocoaPods 的话,直接跳过下面关于 Podfile 的那一步就好了。

Podfile

要用 CocoaPods,首先要修改的当然是 Podfile,这是最简单的一步,只需要在文件开始加上这一句:

1
use_frameworks!

这是告诉 CocoaPods:“请把我要用到的第三方库用动态框架的形式集成进来”。
因为 Apple 不允许开发者构建内含 Swift 代码的静态库,所以要往 OC 项目中集成第三方 Swift 代码的时候就只能通过动态框架( framework )的形式了。

而 CocoaPods 还不能很好地将 framework 和静态库混编到一起,所以要么不用 framework,要用就要全部用上。关于这一点,CocoaPods 官博上的原话是这样说的:

This is an all or nothing approach per integrated targets, because we can’t ensure to properly build frameworks, whose transitive dependencies are static libraries.

Xcode配置

这一步的操作比较绕,但总体来说还是简单的。

首先在你的项目中任意创建一个 Swift 文件,这时候聪明的 Xcode 会问你需不需要它帮助你创建一个 Bridging 文件。
bridging-header

嘛,这当然是最好不过了,然而如果(像我这样)手贱点了 Don’t create ,那以后不管你创建再多的 Swift 文件,它都不会问你了。不过,这当然是有手动操作的途径:

  1. 手动创建一个头文件,名字叫 Your_Product_Module_Name-Bridging-Header.h,注意不是 Project_Name
  2. 确保你的项目目录下至少有一个 Swift 文件。
  3. 确保在 Targets 的 Build Settings 里,Product Module Name 是有值的。(如果没有,直接设置为 $(PRODUCT_NAME) 就可以了)
  4. 将 Project 的 Build Settings 里的 Defines Modules 设置为 Yes。(如果项目里没有创建过 Swift 文件的话,这个设置可能是不可见的)

配置完成!进入代码环节!

代码

其实也不需要什么代码啦。

完成了上面的所有步骤之后,Xcode 会自动生成一个名为 Your_Product_Module_Name-Swift.h 的文件,以后只要在需要使用到 Swift 代码的地方 import 这个文件就可以了。
现在已经可以直接按照 OC 的语法去调用 Swift 里的属性和方法了,开始愉快地 coding 吧 :)

P.S. 为了避免循环引用,-Swift.h 文件只能在 .m 文件中 import。如果需要在 .h 文件中使用,就只能用 @class 来前向声明。


2016-02-14 14:15:37 iOS_wq 阅读数 6151

OC项目引入Swift方法

在OC项目中,有可能会遇到需要引入Swift写的第三方库,下面整理下OC项目如何使用Swift库

1.在已有的OC工程中新建一个Swift文件,命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h”




















2. 配置工程

设置Defines Module 为Yes


设置Product Module Name 为当前工程名 (有时系统会自动为我们设置好)


此时系统会为工程创建一个“工程名-Swift.h”的文件(不会显示出来,可以引用),此文件不可手动创建,必须使用系统创建的

3.测试是否成功

新建一个Swift文件,写一个Swift的函数

import UIKit

class Test1: NSObject {

    func show()
    {
        print("hello baby!")
    }
}

在OC工程里调用该函数


成功!

以后在使用的地方直接引用"工程名-Swift.h",不需要引用Swift文件














2018-01-25 17:10:09 kangpengpeng1 阅读数 4426

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时关于这句话是否要加上的浅显原因(其实深入的东西就需要接着百度了)

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



OC与Swift混编

阅读数 133