使用 iOS 模拟器测试推送

1,521 阅读2分钟

几乎每个 app 都会做推送,之前的开发中,我们通常只能通过真机来做推送测试,比较麻烦。

从 Xcode 11.4 开始,模拟器也支持推送了。

开启推送权限

要接收推送通知,首先要在你的 App 中申请权限,点击同意之后就可以正常接收推送了。

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
    print("是否同意权限:\(granted)")
}

创建推送需要的 JSON 文件

创建一个以 .apns 为后缀的文件,填入推送内容

{
    "aps" : {
        "alert" : {
            "title" : "模拟器推送",
            "subtitle" : "副标题",
            "body" : "这里是推送内容"
        },
        "badge" : 100
    }
}

对于 json 内容可以查看苹果官方文档

执行推送命令

最后一步是在终端执行以下命令

xcrun simctl push <device> <bundle-identifier> <path-to-apns-file>

device 是设备名,如果不知道模拟器的设备名称,可以在终端运行 xcrun simctl list 来获取所有的设备列表。(下图红框的部分就是设备名)。也可以填 Booted,指定当前启动的模拟器。

bundle-identifier 填写你的 App 的 bundle id

path-to-apns-file 填写刚刚生成的 .apns 文件路径。

比如,我当前的 Demo App 可以执行以下命令:

Booted 指定当前启动的模拟器。

xcrun simctl push Booted com.sim.push.demo /Users/xxx/push.apns

或者使用设备名指定具体的模拟器:

xcrun simctl push F34993F2-F03D-48BA-8A2F-CFA5FC606B4B com.sim.push.demo /Users/xxx/push.apns

一切正常的话,执行命令后,会看到具体的通知

另外,也可以在 .apns 文件中通过 Simulator Target Bundle 这个 key 指定具体的 bundle id,这样在命令行中就不用指定了。

{
    "aps" : {
        "alert" : {
            "title" : "模拟器推送",
            "subtitle" : "副标题",
            "body" : "这里是推送内容"
        },
        "badge" : 100
    },
    "Simulator Target Bundle": "com.sim.push.demo"
}

在文件中指定 bundle id 后也可以直接把这个文件拖进模拟器,也有同样的推送效果。

这是官方提供的方式,除了这种方式外,也有第三方工具支持模拟器推送,之前的公众号文章中介绍过,感兴趣可以去读一下。

参考资料

[1]

苹果推送官方文档: developer.apple.com/documentati…

本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,这里只是同步,想要获得更好的体验就来关注我吧!