diff --git a/app/lib/frontend/templates/views/shared/layout.dart b/app/lib/frontend/templates/views/shared/layout.dart
index d49b4412bf..c96dcd735f 100644
--- a/app/lib/frontend/templates/views/shared/layout.dart
+++ b/app/lib/frontend/templates/views/shared/layout.dart
@@ -31,6 +31,9 @@ d.Node pageLayoutNode({
required String? moderationUrl,
required ModerationSubject? moderationSubject,
}) {
+ final appleTouchIconUrl = faviconUrl.endsWith('.png')
+ ? faviconUrl
+ : staticUrls.getAssetUrl('/static/img/apple-touch-icon.png');
return d.fragment([
d.unsafeRawHtml('\n'),
d.element(
@@ -85,7 +88,14 @@ d.Node pageLayoutNode({
href:
'https://fonts.googleapis.com/css2?family=Google+Sans:wght@400;500;700&family=Google+Sans+Display:wght@400&family=Google+Sans+Text:wght@400;500;700&family=Google+Sans+Mono:wght@400;700&display=swap',
),
+ // default favicon
d.link(rel: 'shortcut icon', href: faviconUrl),
+ // WebClip icon(s) for Apple devices
+ // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html
+ d.meta(rel: 'apple-touch-icon', href: appleTouchIconUrl),
+ d.meta(
+ rel: 'apple-touch-icon-precomposed', href: appleTouchIconUrl),
+
d.link(
rel: 'stylesheet',
href: 'https://www.gstatic.com/glue/v25_0/ccb.min.css'),
diff --git a/app/test/frontend/golden/authorized_page.html b/app/test/frontend/golden/authorized_page.html
index bbe30a300a..731488f299 100644
--- a/app/test/frontend/golden/authorized_page.html
+++ b/app/test/frontend/golden/authorized_page.html
@@ -19,6 +19,8 @@
Pub Authorized Successfully
+
+
diff --git a/app/test/frontend/golden/consent_page.html b/app/test/frontend/golden/consent_page.html
index 765e55a538..5d4ae6b029 100644
--- a/app/test/frontend/golden/consent_page.html
+++ b/app/test/frontend/golden/consent_page.html
@@ -19,6 +19,8 @@
Consent
+
+
diff --git a/app/test/frontend/golden/create_publisher_page.html b/app/test/frontend/golden/create_publisher_page.html
index 33d0f896e4..929752fa5f 100644
--- a/app/test/frontend/golden/create_publisher_page.html
+++ b/app/test/frontend/golden/create_publisher_page.html
@@ -19,6 +19,8 @@
Create publisher
+
+
diff --git a/app/test/frontend/golden/error_page.html b/app/test/frontend/golden/error_page.html
index 022d4d240e..e68a39a2b0 100644
--- a/app/test/frontend/golden/error_page.html
+++ b/app/test/frontend/golden/error_page.html
@@ -19,6 +19,8 @@
error_title
+
+
diff --git a/app/test/frontend/golden/help_page.html b/app/test/frontend/golden/help_page.html
index 1350faeb84..507c6dc6c5 100644
--- a/app/test/frontend/golden/help_page.html
+++ b/app/test/frontend/golden/help_page.html
@@ -19,6 +19,8 @@
Help | Dart packages
+
+
diff --git a/app/test/frontend/golden/landing_page.html b/app/test/frontend/golden/landing_page.html
index a5fd627a94..637ab7271e 100644
--- a/app/test/frontend/golden/landing_page.html
+++ b/app/test/frontend/golden/landing_page.html
@@ -19,6 +19,8 @@
The official repository for Dart and Flutter packages.
+
+
diff --git a/app/test/frontend/golden/my_activity_log_page.html b/app/test/frontend/golden/my_activity_log_page.html
index 0d8db6300f..9da8542383 100644
--- a/app/test/frontend/golden/my_activity_log_page.html
+++ b/app/test/frontend/golden/my_activity_log_page.html
@@ -19,6 +19,8 @@
My activity log
+
+
diff --git a/app/test/frontend/golden/my_liked_packages.html b/app/test/frontend/golden/my_liked_packages.html
index 77241caa32..031de8560f 100644
--- a/app/test/frontend/golden/my_liked_packages.html
+++ b/app/test/frontend/golden/my_liked_packages.html
@@ -19,6 +19,8 @@
My liked packages
+
+
diff --git a/app/test/frontend/golden/my_packages.html b/app/test/frontend/golden/my_packages.html
index 1207647586..63b8f021bc 100644
--- a/app/test/frontend/golden/my_packages.html
+++ b/app/test/frontend/golden/my_packages.html
@@ -19,6 +19,8 @@
My packages | starting with oxygen
+
+
diff --git a/app/test/frontend/golden/my_publishers.html b/app/test/frontend/golden/my_publishers.html
index d9f0401c57..b45a812a04 100644
--- a/app/test/frontend/golden/my_publishers.html
+++ b/app/test/frontend/golden/my_publishers.html
@@ -19,6 +19,8 @@
My publishers
+
+
diff --git a/app/test/frontend/golden/pkg_activity_log_page.html b/app/test/frontend/golden/pkg_activity_log_page.html
index 10cb99ae6a..3909e292a2 100644
--- a/app/test/frontend/golden/pkg_activity_log_page.html
+++ b/app/test/frontend/golden/pkg_activity_log_page.html
@@ -19,6 +19,8 @@
oxygen package - Admin
+
+
diff --git a/app/test/frontend/golden/pkg_admin_page.html b/app/test/frontend/golden/pkg_admin_page.html
index b72e970181..c9de9a189f 100644
--- a/app/test/frontend/golden/pkg_admin_page.html
+++ b/app/test/frontend/golden/pkg_admin_page.html
@@ -19,6 +19,8 @@
oxygen package - Admin
+
+
diff --git a/app/test/frontend/golden/pkg_changelog_page.html b/app/test/frontend/golden/pkg_changelog_page.html
index 24cd4212ae..2ee006ad8f 100644
--- a/app/test/frontend/golden/pkg_changelog_page.html
+++ b/app/test/frontend/golden/pkg_changelog_page.html
@@ -19,6 +19,8 @@
oxygen changelog | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_example_page.html b/app/test/frontend/golden/pkg_example_page.html
index 99174c78c0..6132b90466 100644
--- a/app/test/frontend/golden/pkg_example_page.html
+++ b/app/test/frontend/golden/pkg_example_page.html
@@ -19,6 +19,8 @@
oxygen example | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_index_page.html b/app/test/frontend/golden/pkg_index_page.html
index cd26f382bd..3dcd20c9be 100644
--- a/app/test/frontend/golden/pkg_index_page.html
+++ b/app/test/frontend/golden/pkg_index_page.html
@@ -19,6 +19,8 @@
Search results for sdk:dart
+
+
diff --git a/app/test/frontend/golden/pkg_install_page.html b/app/test/frontend/golden/pkg_install_page.html
index fe13412d74..585a5e5b72 100644
--- a/app/test/frontend/golden/pkg_install_page.html
+++ b/app/test/frontend/golden/pkg_install_page.html
@@ -19,6 +19,8 @@
oxygen install | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_score_page.html b/app/test/frontend/golden/pkg_score_page.html
index 3f28ec74de..4b9af22a62 100644
--- a/app/test/frontend/golden/pkg_score_page.html
+++ b/app/test/frontend/golden/pkg_score_page.html
@@ -19,6 +19,8 @@
oxygen score | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_score_page_with_downloads_chart.html b/app/test/frontend/golden/pkg_score_page_with_downloads_chart.html
index 3f28ec74de..4b9af22a62 100644
--- a/app/test/frontend/golden/pkg_score_page_with_downloads_chart.html
+++ b/app/test/frontend/golden/pkg_score_page_with_downloads_chart.html
@@ -19,6 +19,8 @@
oxygen score | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_show_page.html b/app/test/frontend/golden/pkg_show_page.html
index 0c1f56ffd7..6cf80dfaa1 100644
--- a/app/test/frontend/golden/pkg_show_page.html
+++ b/app/test/frontend/golden/pkg_show_page.html
@@ -19,6 +19,8 @@
oxygen | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_show_page_discontinued.html b/app/test/frontend/golden/pkg_show_page_discontinued.html
index 3a3756b291..e36ce1fd42 100644
--- a/app/test/frontend/golden/pkg_show_page_discontinued.html
+++ b/app/test/frontend/golden/pkg_show_page_discontinued.html
@@ -19,6 +19,8 @@
pkg | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_show_page_flutter_plugin.html b/app/test/frontend/golden/pkg_show_page_flutter_plugin.html
index 4a4fb8b55a..07cebf9f2c 100644
--- a/app/test/frontend/golden/pkg_show_page_flutter_plugin.html
+++ b/app/test/frontend/golden/pkg_show_page_flutter_plugin.html
@@ -19,6 +19,8 @@
flutter_titanium | Flutter package
+
+
diff --git a/app/test/frontend/golden/pkg_show_page_publisher.html b/app/test/frontend/golden/pkg_show_page_publisher.html
index 1379de0880..d838390ccf 100644
--- a/app/test/frontend/golden/pkg_show_page_publisher.html
+++ b/app/test/frontend/golden/pkg_show_page_publisher.html
@@ -19,6 +19,8 @@
neon | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_show_page_retracted.html b/app/test/frontend/golden/pkg_show_page_retracted.html
index 6f63db5e88..566de30fa3 100644
--- a/app/test/frontend/golden/pkg_show_page_retracted.html
+++ b/app/test/frontend/golden/pkg_show_page_retracted.html
@@ -19,6 +19,8 @@
pkg 1.0.0 | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_show_page_retracted_non_retracted_version.html b/app/test/frontend/golden/pkg_show_page_retracted_non_retracted_version.html
index 5608c4ed92..407ea7b3c9 100644
--- a/app/test/frontend/golden/pkg_show_page_retracted_non_retracted_version.html
+++ b/app/test/frontend/golden/pkg_show_page_retracted_non_retracted_version.html
@@ -19,6 +19,8 @@
pkg | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_show_version_page.html b/app/test/frontend/golden/pkg_show_version_page.html
index 0351983fda..cd1f07764c 100644
--- a/app/test/frontend/golden/pkg_show_version_page.html
+++ b/app/test/frontend/golden/pkg_show_version_page.html
@@ -19,6 +19,8 @@
oxygen | Dart package
+
+
diff --git a/app/test/frontend/golden/pkg_versions_page.html b/app/test/frontend/golden/pkg_versions_page.html
index aa19f4541b..c7eb454616 100644
--- a/app/test/frontend/golden/pkg_versions_page.html
+++ b/app/test/frontend/golden/pkg_versions_page.html
@@ -19,6 +19,8 @@
oxygen package - All Versions
+
+
diff --git a/app/test/frontend/golden/publisher_activity_log_page.html b/app/test/frontend/golden/publisher_activity_log_page.html
index bf8eed6768..6b8e5c090b 100644
--- a/app/test/frontend/golden/publisher_activity_log_page.html
+++ b/app/test/frontend/golden/publisher_activity_log_page.html
@@ -19,6 +19,8 @@
Publisher activity log: example.com
+
+
diff --git a/app/test/frontend/golden/publisher_admin_page.html b/app/test/frontend/golden/publisher_admin_page.html
index db16524d3e..b0d4c25187 100644
--- a/app/test/frontend/golden/publisher_admin_page.html
+++ b/app/test/frontend/golden/publisher_admin_page.html
@@ -19,6 +19,8 @@
Publisher administration: example.com
+
+
diff --git a/app/test/frontend/golden/publisher_list_page.html b/app/test/frontend/golden/publisher_list_page.html
index f632766c46..18ab7205d2 100644
--- a/app/test/frontend/golden/publisher_list_page.html
+++ b/app/test/frontend/golden/publisher_list_page.html
@@ -19,6 +19,8 @@
Publishers
+
+
diff --git a/app/test/frontend/golden/publisher_packages_page.html b/app/test/frontend/golden/publisher_packages_page.html
index 40898cfe7e..c26a6e32dc 100644
--- a/app/test/frontend/golden/publisher_packages_page.html
+++ b/app/test/frontend/golden/publisher_packages_page.html
@@ -19,6 +19,8 @@
Packages of publisher example.com
+
+
diff --git a/app/test/frontend/golden/publisher_unlisted_packages_page.html b/app/test/frontend/golden/publisher_unlisted_packages_page.html
index 4f2e88129d..cc9990ebd1 100644
--- a/app/test/frontend/golden/publisher_unlisted_packages_page.html
+++ b/app/test/frontend/golden/publisher_unlisted_packages_page.html
@@ -19,6 +19,8 @@
Packages of publisher example.com
+
+
diff --git a/app/test/frontend/golden/report_page.html b/app/test/frontend/golden/report_page.html
index 1ac2eac18d..1289be58da 100644
--- a/app/test/frontend/golden/report_page.html
+++ b/app/test/frontend/golden/report_page.html
@@ -19,6 +19,8 @@
Report a problem
+
+
diff --git a/app/test/frontend/golden/report_page_appeal.html b/app/test/frontend/golden/report_page_appeal.html
index e42151b6ce..90b6850d42 100644
--- a/app/test/frontend/golden/report_page_appeal.html
+++ b/app/test/frontend/golden/report_page_appeal.html
@@ -19,6 +19,8 @@
Appeal a resolution
+
+
diff --git a/app/test/frontend/golden/search_page.html b/app/test/frontend/golden/search_page.html
index d3b9f77cea..e6c6f5427a 100644
--- a/app/test/frontend/golden/search_page.html
+++ b/app/test/frontend/golden/search_page.html
@@ -19,6 +19,8 @@
Search results for foobar
+
+
diff --git a/app/test/frontend/golden/topics_page.html b/app/test/frontend/golden/topics_page.html
index 1d4603c6fe..4af91d2b54 100644
--- a/app/test/frontend/golden/topics_page.html
+++ b/app/test/frontend/golden/topics_page.html
@@ -19,6 +19,8 @@
Topics
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen.html b/app/test/task/testdata/goldens/packages/oxygen.html
index 20a8f93f50..08c4762563 100644
--- a/app/test/task/testdata/goldens/packages/oxygen.html
+++ b/app/test/task/testdata/goldens/packages/oxygen.html
@@ -19,6 +19,8 @@
oxygen | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/changelog.html b/app/test/task/testdata/goldens/packages/oxygen/changelog.html
index dca8398550..a2894ef786 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/changelog.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/changelog.html
@@ -19,6 +19,8 @@
oxygen changelog | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/example.html b/app/test/task/testdata/goldens/packages/oxygen/example.html
index 8fb8f44d33..17b242bc63 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/example.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/example.html
@@ -19,6 +19,8 @@
oxygen example | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/install.html b/app/test/task/testdata/goldens/packages/oxygen/install.html
index f280313337..8438ca9d13 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/install.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/install.html
@@ -19,6 +19,8 @@
oxygen install | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/license.html b/app/test/task/testdata/goldens/packages/oxygen/license.html
index bf2cc21036..4cfbc0c009 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/license.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/license.html
@@ -19,6 +19,8 @@
oxygen license | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/score.html b/app/test/task/testdata/goldens/packages/oxygen/score.html
index d78eb57db5..7c75ce1c90 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/score.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/score.html
@@ -19,6 +19,8 @@
oxygen score | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/versions.html b/app/test/task/testdata/goldens/packages/oxygen/versions.html
index e8022768e2..473b77d01a 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/versions.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/versions.html
@@ -19,6 +19,8 @@
oxygen package - All Versions
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0.html b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0.html
index f0f838847b..1d376ca240 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0.html
@@ -19,6 +19,8 @@
oxygen 1.0.0 | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/changelog.html b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/changelog.html
index a0c339166f..5ecdbc10b1 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/changelog.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/changelog.html
@@ -19,6 +19,8 @@
oxygen 1.0.0 changelog | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/example.html b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/example.html
index 826f35289a..48b0857d80 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/example.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/example.html
@@ -19,6 +19,8 @@
oxygen 1.0.0 example | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/install.html b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/install.html
index 86ae593af6..7598273941 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/install.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/install.html
@@ -19,6 +19,8 @@
oxygen 1.0.0 install | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/license.html b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/license.html
index ab267e2660..7db6cce3cc 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/license.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/license.html
@@ -19,6 +19,8 @@
oxygen 1.0.0 license | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/score.html b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/score.html
index 6215f8d989..474380a8d5 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/score.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/versions/1.0.0/score.html
@@ -19,6 +19,8 @@
oxygen 1.0.0 score | Dart package
+
+
diff --git a/app/test/task/testdata/goldens/packages/oxygen/versions/2.0.0.html b/app/test/task/testdata/goldens/packages/oxygen/versions/2.0.0.html
index 20a8f93f50..08c4762563 100644
--- a/app/test/task/testdata/goldens/packages/oxygen/versions/2.0.0.html
+++ b/app/test/task/testdata/goldens/packages/oxygen/versions/2.0.0.html
@@ -19,6 +19,8 @@
oxygen | Dart package
+
+
diff --git a/static/img/apple-touch-icon.png b/static/img/apple-touch-icon.png
new file mode 100644
index 0000000000..dde49e1ce3
Binary files /dev/null and b/static/img/apple-touch-icon.png differ