使用plyer.uniqueid.id在iOS设备运行时出现TypeError: 'Swift.__StringStorage' object is not callable错误的解决方法
plyer.uniqueid.id在iOS设备运行时出现TypeError: 'Swift.__StringStorage' object is not callable错误的解决方法
嗨,我来帮你搞定这个iOS上的报错问题~
这个错误的根源其实很简单:在iOS平台的plyer实现代码里,把一个已经变成属性的API当成方法来调用了。具体来说,UUIDString在新版的Swift/Objective-C绑定里已经是一个只读属性,不需要加括号调用,但旧的plyer代码还在写UUIDString(),所以就触发了"不是可调用对象"的错误。
你可以按照下面的步骤来修复:
- 找到对应的plyer源码文件:如果是已经打包好的App,你需要找到路径
app/lib/python3.11/site-packages/plyer/platforms/ios/uniqueid.py;如果是本地开发环境,直接找到你项目依赖的plyer库的对应路径下的这个文件。 - 修改错误的代码行:打开
uniqueid.py,找到_get_uid方法里的这一行:
把它改成:uuid = UIDevice.currentDevice().identifierForVendor.UUIDString()
也就是去掉uuid = UIDevice.currentDevice().identifierForVendor.UUIDStringUUIDString后面的括号(),因为现在它是一个属性,而不是需要调用的方法。 - 重新打包测试:如果你用Buildozer或者其他iOS打包工具,修改完代码后重新构建安装包,再安装到你的iPhone上就能正常获取设备ID啦。
补充一句:为什么在Mac上运行没问题?因为Mac平台的plyer实现逻辑和iOS完全不同,Mac上的API调用是正确的,所以本地开发时不会报错,到iOS上才暴露了这个API适配的问题。
备注:内容来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

