OC和Swift混合开发(Pod私有库的相互引用)

Swift静态Pod私有库踩坑 首先你应该掌握以下几点知识: 1、动态库、静态库的区别,以及对应的架构合并、拆分。 2、Xcode对应的workspace、project、target的关系。 3、Pod依赖可以是源码、静态库(.a+framework)、动态库(framework)。 4、源码依赖的情况下,Pod打包进宿主工程可以选择是全部静态库打包还是动态库打包,或者某个库单独设置。 5、CocoaPods本地仓库缓存。 以上只是大概列举了一部分比较重要的,其实这块涉及到的知识点非常之多,如果你仅仅是为了实现这些功能,而并没 阅读详情

环境 Xcode 12.4,    Swift:5.0

概述:该文档主要介绍OC和Swift混合开发相互调用,包括3大类情况和12种具体情形。

三大类情况:

1. 主工程内的混合互调,

2. 主工程和Pod三方库之间的混合互调,

3. Pod三方库和其他Pod三方库之间的混合互调。

十二种情形:

1. 主工程内的OC 调用 主工程内的OC:

#import "NSObject.h" 

导入头文件直接调用。

2.  主工程内的OC 调用 主工程内的Swift:

   1. 主工程中创建.pch文件,在TARGETS -> Build Setting -> 搜索pch -> 设置.pch文件的路径,

   2. 在.pch文件中添加 :

      例如:#import "xxxxx_Swift.h"

       (该文件命名规则为:"工程名_Swift.h",该文件为系统自动生成) ,

   3. 编译之后才可自动识别需要调用的Swift的文件 。

3. 主工程内的OC 调用 OC的Pod三方库:

   #import    导入头文件直接调用。

4. 主工程内的OC 调用 Swift的Pod三方库:

   1. 如果仅在某个OC文件内调用该Swift库,在该库中导入头文件:@import 包的名字; 

      例如:@import RxSwift;

       (不要给库文件名添加<>或者" "、不要遗漏分号";") ,

   2. 如果是全局多处调用该Swift库,在.pch文件 中导入头文件(导入规则同上) 。

5.  主工程内的Swift 调用 主工程内的OC:

   1. 自动创建桥接文件 (在OC或者Swift项目中第一次创建Swift或者OC文件时Xcode会自动提示创建桥接文件 ->` xxxxx-Bridging-Header.h`) ,

   2. 手动创建桥接文件(首先需要创建一个空的.h文件,命名规则为:`项目名-Bridging-Header.h`; 设置桥接文件的路径:  在TARGETS -> Build Setting -> 搜索Bridging -> 设置桥接文件的路径:``工程名/桥接文件所在的文件夹名/桥接文件的名字``) ,导入需要调用的OC的头文件,

      例如:#import "NSObject.h"

6.  主工程内的Swift 调用 主工程内的Swift:

   主工程内的Swift调用主工程内的其他Swift不需要添加头文件等引用,可以直接调用。

7.  主工程内的Swift 调用 OC的Pod三方库:

   在桥接文件中添加需要调用的OC库的头文件。

   例如:#import <AFNetworking/AFNetworking.h>

  编译后可以直接调用

8.  主工程内的Swift 调用 Swift的Pod三方库:

   1. 只在某个Swift文件内调用该Swift库,在该Swift的文件中导入该Swift库的头文件,导入规则:`import RxSwift`(此处导入不添加@、不添加分号、不添加引号) ,

   2. 全局多处调用该Swift库,在主工程的`.pch`文件中添加该Swift库的头文件:`@import 包的名字; `

      例如:@import RxSwift; 

      (不要给库文件名添加<>或者""、不要遗漏分号";") ,

   3. 编译后调用时才会出现自动提示 。

9.  OC的Pod三方库 调用 OC的Pod三方库:

   1. Pod文件夹下的`.podspec文件`内添加依赖,例如:`s.dependency 'AFNetworking'`

   导入头文件:例如:#import <AFNetworking/AFNetworking.h>

   2. 导入头文件直接调用。

10.  OC的Pod三方库 调用 Swift的Pod三方库:

    1. 在OC库的Pod文件夹下的`.podspec文件`内添加对该Swift库的依赖(例如:`s.dependency 'TestSwift1', ~'0.1.0'`),

    2. 单独调用该Swift库,只需在这个OC文件内导入Swift库头文件即可(例如:`@import RxSwift;`[不要给库文件名添加<>或者""、不要遗漏分号";"] ),

    3. 全局调用该Swift库,在该OC库中创建`.h文件`(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> 在OC库的Pod文件夹下的`.podspec文件`中添加对`.h文件`的引用(`s.prefix_header_contents = '#import "该OC库名-Bridging-Header.h"`)  -> 重新pod update工程 -> 该`.h文件`会自动添加到OC库的`Support Files文件夹`下的`.pch文件`中 -> 在`.h文件`内导入Swift库的头文件即可(例如:`@import RxSwift;`[不要给库文件名添加<>或者""、不要遗漏分号";"] )。

11.  Swift的Pod三方库 调用 OC的Pod三方库:

    1. Swift库内混编:在Swift库中进行库内的混编时,创建OC文件后pod update时,OC文件的头文件会被自动添加到该Swift库的`Support Files文件夹`下的`-umbrella.h文件`中 -> 可以直接调用,

    2. Swift库内依赖OC库混编:在该Swift库的`Pod文件夹`下的`.podspec文件`内添加依赖OC库(例如:`s.dependency 'AFNetworking, ~'2.3'`) -> 在主工程的`Podfile文件`中对调用的OC库做特殊处理添加(`:modular_headers => true ->` 例如:`pod 'AFNetworking', '2.3', :modular_headers => true`),

    3. 在Swift库内创建.h文件(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> 此处不需要进行头文件的依赖和引用,直接进行pod update 后,该Swift库的`.h文件`会被自动同步添加到该Swift库的`Support Files文件夹`下的-`umbrella.h文件`中 -> 在Swift库内新建的.h文件中添加需要依赖的OC库的头文件(例如:`#import <AFNetworking/AFNetworking.h>`),

    4. 编译后调用时才会出现自动提示。

12.  Swift的Pod三方库 调用 其他Swift的Pod三方库:

    1. 在该Swift库的Pod文件夹下的`.podspec文件`内添加依赖其他Swift库(例如:`s.dependency 'HandyJSON',  ~'5.0.2'`) -> pod update,

    2. 单独调用其他Swift库,只需在调用其他Swift库的文件中添加其他Swift库的头文件,例如:`import HandyJSON`(注意:不添加@、不添加分号、不添加引号),

    3. 全局调用其他Swift库,在Swift库中创建`.h文件`(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> pod update -> 该`.h文件`会被自动同步添加到Swift库的`Support Files文件夹`下的`-umbrella.h文件`中 -> 在新建的`.h文件`中添加其他Swift库的头文件(例如:`@import HandyJSON;`(不要给库文件名添加<>或者""、不要遗漏分号";"、不要遗漏@)。



作者:凯司机
链接:https://www.jianshu.com/p/ab424f811889
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

工程swift与OC混编改造 因此无论A和B是用什么语言编写的,只要编译器B本身能够识别出对应的语言A的声明,那么就可以在B的编译过程中标记A.function,并产出规定格式的.o文件。编译阶段,B.m将B自身的方法地址全部编入符号表,但是编译的过程会碰到对A.function的调用,这个时候编译器检查A.function是否有声明,明确有(跟着A.h头文件copy过来的),但是并没有相应的实现,因此会将A.function的引用做一个特殊标记,并在重定位表中记录,等待静态链接成功后修改为指向A.function真实所在的地址。 阅读详情

相关推荐

iOS swift调用oc的category中的方法

前面把私有库建立好了,但是在swift工程中调用库时,category中的方法调用不到。尝试了很久之后,发现category中的类方法可以调,但是实例方法不行,所以暂时解决方案是将实例方法改成类方法,将实例以参数的方式传进去。 例如: 实例方法: - (void)addMyView { UIView * view = [[UIView alloc] init]; [self addSubVie...

zyww的博客 3619

Swift与OC混编

Swift与OC的混编可以总结出以下几种场景 OC&Swift Mixed In The Same Target Project中OC 调用 Swift Pod中OC 调用 Swift Project中Swift 调用 OC Pod中Swift 调用 OC OC&Swift Mixed In The Different Target OC Project 调用 Swift Pod Swift Project 调用 OC Pod OC Pod 调用 Swift Pod Swift

u012477117的专栏 7518

iOS开发笔记之九十——在OC项目中支持Swift

*****阅读完此文,大概需要5分钟****** 这个过程不复杂,但是有些问题遇到了可能就会捣弄很久,特此输出此文,希望可以帮助大家快速解决相应的问题。 一、配置步骤 1、主项目中添加工程名-Bridging-Header.h 这一步可以如其他文章介绍的那样,先添加Test.swift然后,Xcode会提醒你添加对应的-Bridging-Header文件的。 2、配置工程 Build Settings设置Defines Module为Yes 设置Podfile,如下: use_modular

iOS开发笔记 1万+

Swift与OC的混编

一、OC调用swift文件   在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,如下图:      点确定创建桥接文件,Xcode会自动创建一个桥接文件,其名字为:工程名-Bridging-Header.h      这个桥接文件是 swift 调用OC文件的时候用的 1.配置 进入TARGETS -&amp;amp;gt;Build Settings -&amp;amp;g...

chenzimin_blog 3238

SAP MM自动化进阶:STO交货单自动创建的配置与优化

本文深入解析了SAP MM模块中实现公司间库存调拨订单(STO)交货单自动创建的完整配置流程与优化策略。通过激活自动交货与绑定发货点两大核心配置,打通自动化链路。重点探讨了如何集成ATP可用性检查以智能处理库存不足等异常场景,确保自动化流程的可靠性与业务贴合度,并提供了进阶监控与问题排查方法,助力企业显著提升供应链效率。

weixin_29206669的博客 124

西门子【Automation Framework V1.2】AF架构:从软件栈到高效自动化项目的构建蓝图

本文深入解析西门子Automation Framework V1.2 (AF架构) 的核心价值与实施蓝图。该框架通过定义标准化的软件栈(如TIA Portal V19、STEP7、WinCC Unified)和严格的安装配置流程,将自动化项目开发从依赖个人经验的“手工作坊”模式,转变为高效、可复制的工业化模式。遵循此架构,工程师能快速构建稳定可靠的项目基础,规避环境冲突,从而专注于核心工艺与逻辑设计,大幅提升团队协作与项目交付效率。

weixin_29230059的博客 428

【Swift 和 OC】

swift和ocswift和oc的区别Swift比Objective-C优势swift独有Swift调用OCOC调用SwiftSwift 选择器(selector) swift和oc的区别 1,最明显的区别:OC一个类由.h和.m两个文件组成,而swift只有.swift一个文件,所以整体的文件数量比OC有一定减少。 2,不像C语言和OC语言一样都必须有一个主函数main()作为程序的入口,swift程序从第一句开始向下顺序执行,一直到最后。(swift将全局范围内的首句可执行代码作为程序入口,swift也

AHekey的博客 4445

BOSS直聘数据采集实战:八爪鱼工具高效爬取职位信息的完整指南

本文提供了一份使用八爪鱼采集器高效爬取BOSS直聘职位信息的完整实战指南。针对非技术用户,详细讲解了从软件安装、网址规律分析到流程配置、数据导出的每一步操作,并分享了提升采集稳定性的高级设置与避坑技巧,帮助用户轻松实现数据采集自动化。

weixin_29061509的博客 1473

OC与Swift混合使用

随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,这里从以下几个方面看一下如何进行简单的配置。 OC中引用Swift文件 Swift中引用OC文件,以及第三方库 Xcode8以后编译swift2.x OC引用Swift第三方库

Polar_lee的博客 2120

利用netns做自环Iperf测试

netns可以让一台机器上模拟多个网络设备,是网络虚拟化的重要组成,将不同类型的网络应用隔离。一个net namespace有自己独立的路由表,iptables策略,设备管理。本文利用netns模拟网络来实现单机上网卡自环上的iperf测试或其他网络测试。

weixin_42414349的博客 3370

从零到一:PrimeTime静态时序分析入门指南

本文详细介绍了PrimeTime静态时序分析(STA)的入门指南,从基础概念到实际应用全面覆盖。内容包括时序路径分类、PrimeTime环境搭建、时序约束设置与验证、时序分析与报告解读等核心内容,帮助工程师快速掌握STA技术,解决数字芯片设计中的时序收敛问题。

weixin_28730131的博客 268

Xcode Pods自己编写的库Development Pods中的OC和Swift混编

最近在开发vision os的时候需要经常兼容oc写的老代码,一般在不涉及库的情况下,项目的swift和oc互相调用比较简单:* swift调用oc采用桥接文件的方式* oc调用swift采用#import "xx-swift.h"的方式但是在涉及到自己编写的库的时候存在一些坑,这里一并记录,最终能够达到无论在项目中,还是在库中,还是项目调库(库调项目不符合逻辑)都能够做到swift和oc无缝衔接。

IT_learner_lgq的博客 2062

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月14日-Clamshell 拆卸与安装

Clamshell 拆卸与安装。

weixin_46735260的博客 1684

制作Swift 私有库 上传 Pod

最近工作需要做framework,遇到一些问题做下记录。 用swift语言创建framework,在创建2个target(swift,oc)做测试用。如下图 一、制作framework时注意的问题 写1个Class测试用 open class TestClass: NSObject { @objc open func test1(){ print(#...

weixin_38388284的博客 987

手把手教你用Simulink搭建单相全桥逆变器(附单电流闭环控制仿真文件)

本文详细介绍了如何在Simulink中搭建单相全桥逆变器并实现单电流闭环控制。从功率主电路建模、核心器件参数设置,到控制系统的PI调节与前馈补偿,提供了完整的仿真步骤与调试技巧。文章旨在通过动手实践,帮助读者跨越理论与仿真的鸿沟,深入理解电力电子闭环控制的核心原理。

d6e7f8g9h的博客 316

订餐平台餐厅信息抓取:使用Python爬虫获取商家信息和用户评价

在这篇博客中,我们展示了如何使用Python爬虫抓取订餐平台上的餐厅信息和用户评价数据。通过使用requests和Selenium,我们能够有效地从静态和动态网页中提取数据,并使用pandas和matplotlib对数据进行存储和分析。未来,您可以根据需求进一步扩展功能,例如增加错误处理、增加抓取多个页面的能力,或者使用高级技术如分布式爬虫来抓取更大规模的数据。

2201_76125261的博客 1651

iOS 静态库和动态库打包framework流程(纯swift版/swift、OC混编版)

系统及Xcode版本。

feelinghappy的专栏 3575

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IOS 07 Swift调用OC源码及OC第三方框架

创建SwiftUseOCTest项目,是一个Swift语言的项目;再创建一个OC类文件,里面有静态方法,实例方法,字段等;然后在Swift项目中调用OC类;像OC类的复杂宏,在Swift类中是无法调用。

sziitjin的博客 1831

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

关于swift- OC混编使用Pod遇到的2个错误

Cannot find interface declaration for '系统类', superclass of "自定义" Library not found for -lAFNetworking Linker command failed with exit code 1 (use -v to see invocation)

鹏仔的技术博客 892

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

iOS OC与Swift文件相互调用

在OC工程中接入纯swift二方库时二方库开发者提供了swift开发代码示例,因此如何在本项目的OC工程中引入swift文件并引用成为了现在面临的一个问题。(本博客未记录OC工程引入swift打包编译阶段需修改的内容)

2105

Flutter嵌入swift混合开发

前奏: 目前基于flutter的活跃程度,有很多的开发人员开始学习flutter,我也是其中的一枚小卒。由于本公司项目涉及一些小游戏的开发,两端或者是三端(包括web)开发起来可能比较耗费人力物力,并且在计算逻辑上可能还会存在一些差异问题等。混合开发成为了一个首选的定义。RN在这一步上面的灵活性没有flutter的灵活性大,简单的来讲,如果使用RN的话,项目的的打包依赖对平台的依赖性比较高,而f...

曹世鑫的杂谈 4797

iOS使用swift制作定位的pod库

  很早的时候就学习swift了,但是一直没有机会去实践,最近swift版本逐渐的稳定下来了,而且swift的语言写起来更加的简洁,加上年前已经用swift写了一个工具app,最近在做项目优化,打算把定位功能封装成一个pod库,由于功能简单,决定用swift语言来写。里面坑点仍然不少,这里做一下分享, 希望大家可以避开这些坑。 地图定位JKLocationMananger简介   这个地图pod库...

878

OC和Swift混编使用Pod管理第三方库的问题

OC和Swift混编Pod引入第三方库的问题 问题描述:Swift应用OC 的开源框架,需要创建一个桥接头文件,问题就出在这个看似简单,却隐藏着一个巨大的问题:一切都按部就班的在桥接头文件中引入了OC 头文件,但是xcode总是报错找不到该文件。接下来详细描述问题和原因。 1.为了在Swift项目中引入OC 开源框架,我使用了pod工具引入。然后下图: 2.之后创建桥

kangpp的博客 9128

iOS UMeng OC和Swift混编

你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。我特地针对初学者整理一套前端学习资料,免费分享给大家,戳这里即可免费领取道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。

2401_84152177的博客 718

OC和Swift混合编程引用Pods管理的模块

OC和Swift混合编程引用Pods管理的模块 用Pods安装需要使用的模块后,打开.xcworkspace文件,然后按下图所示设置一下User Header Search Paths: swift中创建OC桥接文件 a. 自动创建桥接文件(仅限于swift工程中第一次建立OC文件),创建完桥接文件后还需要像b中最后一个图一样设置一下Object-C Bridging Header的路径:

Pre的专栏 1630
上一篇: ChatGPT资讯—2023.4.14
下一篇: 【鸿蒙】ArkTS基础知识 - 类、接口及泛型
runtime666
博客等级 码龄10年 41粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值