You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode 11下如何完整查看Push Token并转字符串用于调试传输?

嘿,我来帮你搞定这两个关于推送令牌的问题,都是开发中常踩的小坑!

问题1:将推送令牌转换为可用字符串

推送令牌本质是二进制Data类型,直接用description或者UTF8解码都会出问题,正确的做法是把它转换成十六进制字符串——这是服务器接收推送令牌的标准格式,也方便查看、调试和日志记录。

你可以给Data写个简单的扩展来快速实现:

extension Data {
    var hexEncodedString: String {
        return self.map { String(format: "%02x", $0) }.joined()
    }
}

然后在你的代码里直接调用就行:

func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {
    let pushTokenString = credentials.token.hexEncodedString
    print("完整推送令牌:\(pushTokenString)")
    // 这里就可以把pushTokenString用于日志或者发送给服务器了
}

为啥你原来的方法不行?

  • method1依赖Data的description,这个输出是供调试用的临时格式,不同Xcode版本可能有变化,还会带括号、省略号,处理起来容易出错;
  • method2用UTF8解码二进制数据,但令牌本身不是合法的UTF8字符串,所以只会出现乱码;
  • method3只输出字节数,完全没法拿到有效内容。
问题2:在Xcode 11中完整查看推送令牌

Xcode 11开始对较长的Data对象,在变量视图和默认description里会用省略号截断内容,所以不能靠原来的方式看完整值。有两个简单的解决办法:

  1. 用上面的十六进制字符串方法打印
    按照问题1里的代码,直接打印pushTokenString,控制台会输出完整的令牌字符串,你可以直接复制到PHP脚本里测试。

  2. 在LLDB调试控制台直接查看
    如果不想修改代码,在调试断点停住时,打开Xcode底部的调试控制台,输入以下命令:

    po credentials.token.map { String(format: "%02x", $0) }.joined()
    

    回车后就能看到完整的令牌字符串,直接复制即可。

另外,你也可以把转换后的字符串赋值给一个变量(比如let token = credentials.token.hexEncodedString),然后在Xcode的变量视图里查看token——这个字符串是完整的,不会被截断。

内容的提问来源于stack exchange,提问作者Piepants

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:51:40