Mapbox系マップSDK for iOSの系譜
現在のMapbox SDK for iOSのリポジトリはこれなのだが、
コアな部分のソースは隠蔽されている [1]。
ただ古いMapbox SDKのリポジトリもアーカイブされつつも公開されており、その頃のバージョンのソースコードは見れたりする。また MapLibre NativeのSDKはもともとオープンソースだったMapbox SDKが非オープンソース化するにあたって分家したものであり、こちらはソースが公開されてたりする。
・・・といろいろあるのでいったん整理することにした。
概要
ざっくりこんな感じ:
旧Mapbox Maps SDKs for iOS
mapbox/mapbox-gl-native
2023年8月にアーカイブ済み:
This repository has been archived by the owner on Aug 9, 2023. It is now read-only.
トップのREADMEにはこう書かれている:
A C++ library that powers customizable vector maps in native applications on multiple platforms by taking stylesheets that conform to the Mapbox Style Specification, applying them to vector tiles that conform to the Mapbox Vector Tile Specification, and rendering them using OpenGL or Metal.
(Mapbox Style Specificationに準拠したスタイルシートを取得し、Mapbox Vector Tile Specificationに準拠したベクタータイルに適用し、OpenGLまたはMetalを使用してレンダリングすることで、複数のプラットフォームのネイティブアプリケーションでカスタマイズ可能なベクターマップを強化するC++ライブラリです。)
To embed interactive maps into a native application using a platform-specific language, install the Mapbox Maps SDK:
(プラットフォーム固有の言語を使用してネイティブアプリケーションにインタラクティブマップを組み込むには、Mapbox Maps SDK をインストールしてください:)
src
フォルダ配下にC++のソースコードがたくさん置かれている。また platform/ios
配下にcmakeファイルとREADMEが置かれている。
こちらのREADMEにはこう書かれている:
This folder contains build configuration files for the iOS distribution of Mapbox GL Native, which ultimately targets Cocoa Touch applications written in Objective-C, Swift, or Interface Builder via the Mapbox Maps SDK for iOS. The SDK was previously developed here in this repository but is now developed in the separate mapbox-gl-native-ios repository (details).
(このフォルダには、最終的に Mapbox Maps SDK for iOS を介して Objective-C、Swift、または Interface Builder で書かれた Cocoa Touch アプリケーションをターゲットとする Mapbox GL Native の iOS ディストリビューション用のビルド設定ファイルが含まれています。この SDK は以前はこのリポジトリで開発されていましたが、現在は 別の mapbox-gl-native-ios リポジトリ で開発されています(詳細)。)
旧Mapbox Maps SDKのコアライブラリがこれで、ここでビルドしたものが(おそらく)iOS向けとしては MBGLCore.framework
となり、mapbox/mapbox-gl-native-ios
から使われる。
なお、トップのREADMEにはMetal云々書かれているが、Metal対応はされてなさそうだった。(後述する後継SDKはどちらも対応している)
mapbox/mapbox-gl-native-ios
2023年6月にアーカイブ済み:
This repository has been archived by the owner on Jun 21, 2023. It is now read-only.
READMEにはこう書かれている:
The latest version of Mapbox Maps SDK is now available at mapbox/mapbox-maps-ios. This version offers superior performance, features, and developer experience, and is the recommended mobile SDK solution for all Mapbox customers.
(Mapbox Maps SDKの最新バージョンがmapbox/mapbox-maps-iosでご利用いただけるようになりました。このバージョンは優れたパフォーマンス、機能、開発者体験を提供し、すべてのMapboxのお客様に推奨されるモバイルSDKソリューションです。)
- 本リポジトリのプロジェクトは
MBGLCore.framework
というフレームワークに依存している。https://github.com/mapbox/mapbox-gl-native
のソースコードからビルドできるものと思われる。 -
platform/ios/src
配下にObjC, ObjC++コード、Xcodeプロジェクトファイルあり。 - デモアプリのソースコードもある(欠けているファイルが多く、試せてはいない)
Mapbox Maps SDK for iOS
Mapboxの現行SDK。
About:
Interactive, thoroughly customizable maps for iOS powered by vector tiles and Metal
トップのREADMEより:
The Mapbox Maps SDK for iOS is a public library for displaying interactive, thoroughly customizable maps in native iOS. It takes map styles that conform to the Mapbox Style Specification, applies them to vector tiles that conform to the Mapbox Vector Tile Specification, and renders them using Metal.
(Mapbox Maps SDK for iOSは、iOSネイティブでインタラクティブかつ徹底的にカスタマイズ可能な地図を表示するためのパブリックライブラリです。Mapbox Style Specificationに準拠したマップスタイルを取得し、Mapbox Vector Tile Specificationに準拠したベクタータイルに適用し、Metalを使用してレンダリングします。)
Souces
フォルダ等あるが、MapboxCoreMaps
等のモジュールに依存している。
Package.swift
を読み解くと、それらは mapbox-core-maps-ios
リポジトリや mapbox-common-ios
リポジトリにあり、コードは公開されていない。
つまり現行のMapbox SDKはCustomizableを特徴としつつも、OSSではない。
MapLibre Native SDK for iOS
maplibre-native
mapbox-gl-native, mapbox-gl-native-ios がOSSでなくなるタイミングでforkされた [2] リポジトリ。
-
src/mbgl
配下にソースが入っている。全てC++コード- Metal, Vulkanの実装もここに入っている
-
shaders
配下に大量のGLSLファイル -
design-proposals/2022-11-29-metal-port.md
に "MapLibre Metal Port Design Proposal" -
verndor/metal-cpp
に、iOS SDKのクラス名等を冠した大量の .hpp ファイル(C++からMetal関連フレームワークのAPIを叩けるようにしたラッパー群?) -
platform/ios
フォルダ-
src
配下にObjC, ObjC++ファイル -
app
,app-swift
配下にサンプルアプリの実装(ObjC, Swift) -
bazel
フォルダや BUILD.bazel ファイルがあり、Xcodeプロジェクトファイルはない
-
Package.swiftはない。
platform/ios
フォルダ配下にある README.md
には
See the Getting Started Guide
と書かれており、見に行くと https://github.com/maplibre/maplibre-gl-native-distribution
からSwift パッケージを追加しろとある。
このリポジトリではビルドだけ行って、パッケージ利用側にはビルド済みバイナリを使用する方式のようだ。(バイナリリリース手順を示す RELEASE.md がある)
maplibre/maplibre-gl-native-distribution
Package.swift をみると、こうなっていた:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "MapLibre Native",
...,
targets: [
.binaryTarget(
name: "MapLibre",
url: "https://github.com/maplibre/maplibre-native/releases/download/ios-v6.5.4/MapLibre.dynamic.xcframework.zip",
checksum: ...)
]
)
maplibre-native
の Releases にある xcframework.zip
を取りにいくようになっている。
まとめ
- 現行の Mapbox Maps SDK for iOS はカスタマイズ性が高く色々便利ではあるのだが、OSSではない。
- Mapbox Maps SDKの旧リポジトリもまだ公開されており、そこには(旧バージョンではあるが)ソースコードがまだある
- MapLibre Native SDK for iOS (現在もメンテされている)も 旧 Mapbox Maps SDK からforkされたものであり、OSSとして運用されているためソースコードも公開されている
Discussion