跳至主要内容

博文

目前显示的是 八月, 2023的博文

如何在模块化/组件化项目中实现 ObjC-Swift 混编?

 原文链接 目录 基础准备工作 在一个 App Target 内部混编 在一个 Framework Target 中混编 踩坑之旅 项目背景 静态库子工程的集成 静态链接问题 动态链接问题 ABI Stability 和 Always Embed Swift Standard Library  选项 当模块化/组件化项目遇到 Swift 静态库 ObjC 模块调用 Swift 模块 Swift 模块调用 Swift 模块 Module Stability Swift 模块调用 ObjC 模块 LLVM Module 和 Umbrella Header 调试问题 总结 一、基础准备工作 在正式开始实践 Swift-ObjC 混编之前,我们有一些问题是绕不过去的,比如: Swift 和 ObjC 混编,我们怎么开始?官方文档有相关的介绍吗? 在模块化/组件化的项目中,Swift 和 ObjC 怎么混编? 业界中已经开始 Swift-ObjC 混编的项目,他们是怎么做的? 我们的现状如何,针对这些已有的经验需要做哪些考量?我们应该怎么做? 如果在现有的 ObjC 项目中引入 Swift,会带来哪些影响?在哪些方面会有限制? … 在 Apple 的 官方文档 中有关于 Language Interoperability 的详细介绍,主要是从 ObjC 迁移到 Swift 的角度来描述的,总结下来主要是以下三点: 如何调整项目中现有的 ObjC 和 C 代码的 API,以提供给 Swift 调用,比如添加 nullability 相关的宏和关键字,添加 Swift API 别名等等 各种基础数据类型在 Cocoa Framework 与 Swift 之间的转换关系 如何在 Swift 代码中调用 ObjC 代码,以及如何在 ObjC 代码中调用 Swift 代码 这里我们重点关注的是 如何实现 Swift 代码和 ObjC 代码的相互调用 。 1. 在一个 App Target 内部混编 如果是在一个 App Target 内部混编的话,当我们在 ObjC 项目中新建 Swift 文件时或者在 Swift 项目中新建 ObjC 文件时,Xcode 都会自动帮你新建一个  Objective-C bridging header file (当然我们也...