Unity 调用 Objective-C 与 Swift 原生代码实践指南

开场

上周接了个需求:在 Unity 项目里集成 iOS 原生的微信登录 SDK,Asset Store 上没有现成插件,只能自己撸。听起来挺简单对吧?打开 Xcode 一看,SDK 全是 Swift 写的,而 Unity 导出的工程里能直接写 C 接口的是 Objective-C++(.mm)文件。一开始我想偷懒让 C# 直接调 Swift 函数,结果发现 Swift 函数带闭包、带泛型,符号名还是 Swift 自己 mangling 过的,根本塞不进 extern "C" 的签名里。折腾了两天才摸清门道:Unity 调 iOS 原生代码,必须走 C 接口这座桥;Swift 想露头,得先通过 @objc 转一道手,借 Objective-C 的身体过河。下面把这套流程从原理到落地整理成笔记,顺便聊聊几个容易翻车的点。

一、为什么必须是 C 接口:符号、ABI 与静态链接

1.1 C# 是怎么找到原生函数的

iOS 上 Unity 项目发布时走的是 IL2CPP:C# 先被翻译成 C++,再和引擎运行时、你的原生插件静态链接成同一个 Mach-O 可执行文件。C# 端写:

[DllImport("__Internal")]
private static extern void _WeChatLogin(string jsonParam);

这里的 __Internal 不是某个系统库的名字,而是一个特殊标记,意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值