Developer's Blog

WebKit のプライベート API との戦い

Black Edition Functions

 

こんにちは、Sleipnir 3 for Mac 開発担当の宮本です。

先日、Sleipnir 3 for Mac (3.2) の Mac App Store 版 と Black Edition をリリースしました。Mac App Store 版は Mac App Store 独自の制約によって、一部機能が制限されています。今回は、「その制約ってなんなのよ?」って話をしたいと思います。

 

Mac App Store の制約って?

ズバリ、プライベート API(仕様がドキュメントに載ってない API)を使うと審査に通らないってことです。これが原因で実現できない機能が今のところこれだけあるわけです。他にどんなものが プライベート API なのか気になる方は、WebKit Nightly Builds をダウンロードして、その中にある WebKit.framework を見てみてください。PrivateHeaders という名前のフォルダに 240 ほどのプライベートなヘッダーファイルが入っています。実は Headers の中も一部プライベートだったりするのですが、とにかく相当な量の API がプライベートになっています。

(※注) 「ダウンロード先を指定」「ブックマークの読み込み」に関しては Mac App Store のセキュリティ上の理由で、自身の管理下にないファイルに勝手にアクセスできないのが原因です。

なんでプライベート API なの?

 

公開してしまうと、変更しづらいからというのが大きな理由でしょう。ブラウザをメインで開発することが想定されてなくて、公開する必要がないというのもあるかもしれません。ヘッダーファイルを見ていると、「もうすぐ公開するよ」といったコメントがあったりもするのですが、ほとんどが今後も公開されない気がします。ただ、拡大/縮小ぐらいは基本機能なんだから公開したらいいのにと思ってしまいます。

 

Mac App Store 版は低機能なままなの?

 

今はまだ、それほど大きな機能差はないですが、プライベート API を調べていると、おもしろそうな API がまだまだあります。今後も差が開いてくるのは避けたいところ。実は Mac App Store でもプライベート API を使う方法がありそうなのです!!それは、システムの WebKit を使わずに、Sleipnir の内部に WebKit を取り込んでしまうという方法です。こうすれば、もう全ての API が公開されているようなものです。内部に持っているので、OS のアップデートで変更されてしまうこともありません。審査に通った経験があるわけではないので、どうなるかわかりませんが、アリなんじゃないかと期待しています。

 

実はこの取り組み、既に稼働しています。
もしかしたら気付いている人がいるかもしれませんが、Sleipnir 3 Black Edition for Mac は既に WebKit を内蔵しています(その分ファイルサイズが大きい)。最新の WebKit を載せているので、Safari よりパフォーマンスが良くなっていたり、 Web Inspector の設定項目が増えていたりします。もともとは 3.2 で Mac App Store 版にも WebKit を内蔵させるつもりだったのですが、Mac App Store の制約で(またですが…)、そう簡単にはいかせてくれませんでした。現在、Mac App Store 版でも同等の機能を実現するため、鋭意開発中です!!

 

おまけ(iOS)


iOS の WebKit API の少なさはこの比ではなく、ほとんど何もできません。ただ、JavaScript を実行するメソッドがあるので、なんとかなっています。Android は iOS に比べてできることが多いようなので羨ましい…。


Copyright © 2019 Fenrir Inc. All rights reserved.