Safari Web Extensions で既存の拡張機能をiOS 15で使用する方法
環境
開発環境: macOS Monterey bata 12.0 (public beta)
動作環境: iOS 15.0 beta (public beta)
操作
まず、以下のサイトからXcode 13 bataをインストールしてくる必要があります。
Xcode インストール後、以下のコマンドで
xcrun safari-web-extension-converter "/path/to/拡張機能のあるフォルダ"
既存の拡張機能をSafari用に変換します。
コマンド実行後は自動的にXcodeが開き、拡張機能用のiOSアプリと変換された拡張機能が確認できます。
あとは、署名情報などを自分のものにして実行すれば動くはずです。簡単ですね。
補足
私自身が詰まった部分なのですが、manifest.json
はSafariと他の拡張機能で異なる部分のサポートになっているらしく、正しく設定されていないとiOS側で拡張機能の設定をONにできないみたいです。
以下のページにサポートしていないmanifest.json
の設定やJavascript APIが記載されているので確認したほうが良さそうです。
特に気をつけたいのはbackground
のpersistent
の部分でここを設定していない、または有効にしていることです。
iOS側の設定 > Safari > Extensions
で拡張機能の設定を行える部分で以下のエラーがでている場合
ERRORS FOR "アプリ名"
Extension on iOS must have a non-persistent background page.
manifest.json
のbackground
部分を以下のように変更する必要があります。
"background": {
"persistent": false,
"scripts": [
"scripts/background.js"
]
...
},
ソースコードが公開されているOSS系の拡張機能を動かした感じ、この辺りを修正すれば動くと思います。
ちなみにadblocker系に関しては、webRequest
という通信の制御が使えないので軒並み動かないはずです。
webRequest
が使えなくなった chrome の manifest V3 に準拠した拡張機能であれば動くと思います。(safari v14.X で動いている、Adguard for Safari (Mac) などであれば動くと思ったのですが、小手先の変更ではうまく動かなかったです。。)
forkして、OSSに貢献するのも良いと思います。
以上となります。参考になりましたら幸いです。
Discussion