🐈

Swiftで書いたiOS用のSVG描画ライブラリの紹介

2023/06/11に公開

iOS用にSVGを表示するライブラリを作っていて、公開しました。CocoapodsとSwiftPMで利用可能です。

https://github.com/nnabeyang/SVGUIView

方針

  • 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