Xamarin.Forms绑定iOS端WorldPay CSE SDK调用Encrypt方法报错求解
Xamarin.Forms绑定iOS端WorldPay CSE SDK调用加密报错解决方案
核心问题定位
报错-[NSTaggedPointerString isEmpty]: unrecognized selector sent to instance的根本原因是:WorldPay iOS SDK内部依赖NSString分类的isEmpty方法,Xamarin iOS绑定默认不会加载Objective-C库的分类实现,导致运行时找不到对应方法触发崩溃。
解决步骤
- 打开iOS绑定项目的属性设置,找到iOS Build配置页,在「附加mtouch参数」中添加
-ObjC标记,强制链接器加载所有Objective-C分类实现。如果添加后仍有问题,可以补充添加-force_load [你的WorldpayCSE.framework文件的完整路径],强制全量加载该Framework的所有符号。 - 检查ApiDefinition.cs中
WPCardData类的属性绑定,所有字符串类型的属性不要直接绑定为C#的string,要改为NSString类型。上层调用赋值时,手动将C#字符串转为NSString再赋值,避免自动类型映射出现异常,导致原生层拿到的字符串对象类型异常。 - 清理ApiDefinition.cs中不需要的绑定代码,两个标注
[Verify]的不需要调用的方法直接删除,避免多余符号冲突。 - 测试时可以先在绑定层硬编码正确的卡片参数调用加密方法,先排除原生绑定逻辑问题,再逐步对接上层Xamarin.Forms的传入参数。
内容的提问来源于stack exchange,提问作者LukeW
相关产品推荐
相关产品推荐

