
几乎每个 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新知”,每天准时分享一个新知识,这里只是同步,想要获得更好的体验就来关注我吧!