iOS 上 PWA 为什么不能添加到主屏幕?

Designer°一苗 阅读 16

我在 Safari 里打开自己的 PWA 网站,明明有 manifest.json 和 service worker,安卓手机能正常“添加到主屏幕”,但 iPhone 上完全没这个选项,试了好几次都不行,是不是 iOS 不支持?

我的 manifest.json 里已经设置了 "display": "standalone",而且页面也通过 HTTPS 访问了。是不是还要加什么特殊的 meta 标签?

{
  "name": "My PWA App",
  "short_name": "PWA",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#000000",
  "icons": [{
    "src": "/icon-192.png",
    "sizes": "192x192",
    "type": "image/png"
  }]
}

另外我也加了 Apple 专用的 meta,比如 <meta name="apple-mobile-web-app-capable" content="yes">,但还是没用。难道 iOS 根本不支持标准 PWA?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
红辰 Dev
iOS 不是不支持 PWA,是你被 iOS 的交互方式坑了。

第一个问题:iOS 不会自动弹提示框

和 Android Chrome 不同,iOS Safari 不会在满足条件时弹出"添加到主屏幕"的提示。你需要手动操作:

1. 打开你的 PWA 网站
2. 点 Safari 底部中间的分享按钮(那个方框带箭头的图标)
3. 往下拉,找"添加到主屏幕"选项

如果分享菜单里根本没有这个选项,那就是下面的问题了。

第二个问题:检查这几个关键点

你的 manifest 里 name 字段是 "My PWA App",但 iOS 还认一个专门的 meta 标签:

<!-- 这个必须加,而且最好和 manifest 里的 name 保持一致 -->
<meta name="apple-mobile-web-app-title" content="My PWA App">

<!-- 你已经加了,这个是对的 -->
<meta name="apple-mobile-web-app-capable" content="yes">

<!-- 状态栏样式,建议加上 -->
<meta name="apple-mobile-web-app-status-bar-style" content="black">


第三个问题:Apple Touch Icon

iOS 不认 manifest 里的 icons,你需要单独指定 Apple 专用的图标:

<!-- 180x180 是 iPhone 推荐的尺寸 -->
<link rel="apple-touch-icon" href="/icon-180.png">


这个图标必须存在,而且尺寸要对。

第四个问题:service worker 可能没注册成功

你说你有了 service worker,但得确认它真的注册上了。在 Safari 里打开开发者工具(设置 → Safari → 高级 → 开发者工具),然后在控制台里看看有没有 service worker 相关的错误。

快速验证脚本:

if ('serviceWorker' in navigator) {
navigator.serviceWorker.getRegistrations().then(registrations => {
console.log('SW 注册数量:', registrations.length);
registrations.forEach(reg => {
console.log('SW 状态:', reg.active ? 'active' : 'waiting');
});
});
}


总结一下排查顺序:

1. 先确认你用的是分享按钮而不是等弹窗
2. 检查有没有 apple-touch-icon,而且图标文件真的能访问
3. 检查 apple-mobile-web-app-title 和 manifest 里的 name 是否一致
4. 确认 service worker 真的注册成功了

如果这些都对还是不行,告诉我你的 iOS 版本和 Safari 版本,我帮你继续查。
点赞
2026-03-13 09:02