🐈
Swiftで書いたiOS用のSVG描画ライブラリの紹介
iOS用にSVGを表示するライブラリを作っていて、公開しました。CocoapodsとSwiftPMで利用可能です。
方針
- UIViewになっています。UIImageViewを使っている感覚で使えたら良いと思っています。
- プロパティもCSSも真面目にパースします。
- CSSはかなり限定的なサポートになっています
- アニメーションについては当面はサポートしない予定です。
- 画面全体に表示される時はWKWebViewでロードする方が良いと思います。アニメーションが必要なのも、割と大きめな表示であることが多く、その時はWKWebViewが使われるだろうと考えています。
- Imageでの外部画像のロードはフラグ付きで許可するのが良いのかなと思っています(アプリ的に外部ファイルのロードを許可したくない状況はあると思うので)
- 現在はbase64の画像のみサポートしています(png, jpegあたりは表示できるはず)
実装で難しい点
- textタグのサポート
- フォントの選択をSafariと揃えないと変に感じられるのですが、多分WebKitを見ないと選択基準を揃えることは不可能です。
- SVGは文字を曲線上に配置できたりしますが、どう実装しようかなと思っています。これもWebKitをカンニングするのが良さそうです。
- CSSのサポート
- これもWebKitを参考にしているところもありますが、servo, servo/rust-css-parserとかも見たりしています。テストの実行などが容易なのはservoの方ですが、rust勉強したことがないのですよね。
テストの仕方
パース結果などの検証は普通の自動テストを書いていますが、描画結果を確認するためにpointfreeco/swift-snapshot-testingでスナップショットを撮ってテストしてます。テストケースのSVGはライセンス的に面倒なので、非公開なプロジェクトとして管理しています。
Discussion