OC与Swift实现framework内混编

直接上主题,想要达到这么一个效果:写一个动态库,里面同时存在给外部调用的swift跟oc文件,也有只供内部调用的oc文件(外部无法调用),那么就需要实现一个混编framework了。

以下是混编注意的地方:

1、给外部调用的oc头文件需要移动到public这一栏,同时加入到Compile Source,并且在项目名.h文件中使用#import <项目名/xxx.h>的形式导入。

2、在framework内是无法使用bridging-header文件的,因此想要实现swift调用oc,那么就需要用到module.modulemap文件与umbrella header了。新建一个.h文件,以#import "xxx.h"的方式导入所有oc头文件(包括提供给外部调用的)。

module.moduleMap格式网上有说,这里直接贴代码:

arduino 复制代码
//注意module名不能与项目名重复
module SwiftAndOCLibraryPrivate {

    umbrella header "SwiftAndOCLibraryPrivate.h" - 这里填新建的.h文件

    export *

}

umbrella header的作用个人理解是以循环的形式把SwiftAndOCLibraryPrivate.h里面导入的所有头文件导出到当前模块。如果是单个oc头文件,可以用header,如果是多个oc头文件,只能用umbrella header导出。 之后在swift文件import SwiftAndOCLibraryPrivate就可以调用oc了。

3、oc想要调用swift,swift类必须用@objc + public修饰,否则无法访问。同时必须在oc文件#import <项目名/项目名-Swift.h>文件,这个文件是编译器自动生成的。笔者在这里用了取巧的方法,从工程的编译输出framework目录里拷贝了一份到当前源代码目录下。之前尝试用脚本的方法拷贝-Swift.h文件到源码目录下,但是失败了。如果有更好的方法欢迎分享。

脚本代码如下

bash 复制代码
include_dir=${TARGET_BUILD_DIR}/include/${PRODUCT_MODULE_NAME}/

header_dir=${TARGET_BUILD_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}

# Ensure the target include path exists

mkdir -p ${include_dir}

# Copy any file that looks like a Swift generated header to the include path

cp ${header_dir}/*-Swift.h ${include_dir}

最后的工程效果图:

代码地址: gitee.com/dhjie/ocand...

相关推荐
2501_915106324 小时前
App HTTPS 抓包实战解析,从代理调试到真实网络流量观察的完整抓包思路
网络协议·http·ios·小程序·https·uni-app·iphone
要站在顶端5 小时前
iOS自动化测试全流程教程(基于WebDriverAgent+go-ios)
开发语言·ios·golang
2501_916008895 小时前
深入理解 iPhone 文件管理,从沙盒结构到开发调试的多工具协同实践
android·ios·小程序·https·uni-app·iphone·webview
腾讯云qcloud07556 小时前
腾讯位置商业授权iOS 轨迹SDK
macos·ios·cocoa
2501_916007476 小时前
没有 Mac,如何在 Windows 上架 iOS 应用?一套可落地的工程方案
android·macos·ios·小程序·uni-app·iphone·webview
2501_915106327 小时前
uni-app 上架 iOS 的完整实践,从跨端开发到稳定提交的工程路径
android·ios·小程序·uni-app·cocoa·iphone·webview
2501_916007478 小时前
HTTPS工作原理与重要性:全面安全指南
网络协议·安全·ios·小程序·https·uni-app·iphone
函数的彼端1 天前
iOS Model Generator - 让 JSON 转模型变得简单高效
ios·json·cocoa
2501_915918411 天前
HTTPS 端口深度解析,443 并不是唯一入口,理解 TLS 流量行为与抓包策略
网络协议·http·ios·小程序·https·uni-app·iphone
2501_916008891 天前
iOS 开发者工具全景图,构建从编码、调试到性能诊断的多层级工程化工具体系
android·ios·小程序·https·uni-app·iphone·webview