Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
20916b9
Make bearing a clockwise map rotation
Sep 1, 2026
19cc9eb
Add ios-vectortile: MapLibre vector styles on any backend
Sep 3, 2026
3377e98
Budget the source tile cache in bytes, not entries
Sep 3, 2026
0bbb5b7
Sync renderer with compiled filters
Sep 3, 2026
9db0da0
Sync dual-slice XCFramework: real devices now supported
Sep 3, 2026
f65056b
Rebuild the vector tile renderer for the per-vertex colour format
wf9a5m75 Sep 3, 2026
f1d8045
Add a GPU render mode to the iOS tile provider
wf9a5m75 Sep 3, 2026
0e03548
Measure what an unaligned blit costs CoreGraphics
wf9a5m75 Sep 4, 2026
14974d9
Measure the native PNG encoder against the platform on iOS
wf9a5m75 Sep 5, 2026
0a651ec
Encode Metal tiles through the core's encoder
wf9a5m75 Sep 5, 2026
710eae3
Pin marker tile placement and orientation on iOS
wf9a5m75 Sep 5, 2026
c09086d
Assert stacked duplicates render identically
wf9a5m75 Sep 5, 2026
e73fda0
Pick up the query padding fix
wf9a5m75 Sep 5, 2026
9a40180
Pick up the unsorted radius search
wf9a5m75 Sep 5, 2026
a1b4de8
Have overlay states report their own changes, as android-sdk does
wf9a5m75 Sep 5, 2026
17c331d
Add the street tree sample to ios-sdk and the web examples
wf9a5m75 Sep 5, 2026
a5e2355
Record the provider modules' declutter passthrough
wf9a5m75 Sep 5, 2026
1df2258
Document ios-vectortile
wf9a5m75 Sep 17, 2026
b013c44
Run ios-sdk-core's tests on every pull request
wf9a5m75 Sep 19, 2026
77a1276
Measure the sample on the device it ships to
wf9a5m75 Sep 19, 2026
e42c7c9
Vector tile provider: cancellation, disk cache, split-layer assets
wf9a5m75 Sep 21, 2026
fc1088a
Sample app: on-device benchmarks and main-thread probes
wf9a5m75 Sep 21, 2026
2bdb2fb
Bump submodules: marker grid hierarchy, tile server semantics, sync gate
wf9a5m75 Sep 21, 2026
f19e34a
Bump ios-sdk-core: GPU marker rasterizer atlas fix, GPU default again
wf9a5m75 Sep 21, 2026
982720b
Bump ios-for-longdo: declutterPx reaches the marker tile renderer
wf9a5m75 Sep 21, 2026
d17876f
Sample: the tile probe passes a failed render through
wf9a5m75 Sep 21, 2026
16e4217
Bump ios-sdk-core: the server answers empty with a transparent tile
wf9a5m75 Sep 21, 2026
2a6cd73
Bump providers: raster overlays sit under the basemap's labels
wf9a5m75 Sep 27, 2026
54bce36
Bump ios-for-arcgis: both platforms now build LODs on the tile size
wf9a5m75 Sep 27, 2026
6b0bc70
Bump core and arcgis: providers can state their tile size
wf9a5m75 Sep 27, 2026
81f0037
Bump ios-for-arcgis: hold the tile size preference
wf9a5m75 Sep 27, 2026
c22afb8
Bump vectortile and arcgis: tiles are drawn for the size they are sho…
wf9a5m75 Sep 27, 2026
39ed7ed
Hide the basemap under the vector tile sample on every backend that can
wf9a5m75 Sep 29, 2026
5f2119b
Sync the renderer with the triangulation cache; keep the GPU ground f…
wf9a5m75 Sep 29, 2026
92d3dfc
Bump core and arcgis: transparent ancestors on the 3D view
wf9a5m75 Sep 29, 2026
827b20a
Bump arcgis: no flicker on the direct layers; hand the sample's label…
wf9a5m75 Sep 29, 2026
47d7fb0
Keep source tiles on disk so a second look at an area fetches nothing
wf9a5m75 Sep 29, 2026
1f6ddb9
Vector styles handed to MapLibre-based maps directly, and offline pac…
wf9a5m75 Sep 30, 2026
7250137
Harden vector tile offline packages
wf9a5m75 Oct 1, 2026
47d1e8a
Share tile fetches and safely dispose iOS vector tile layers
wf9a5m75 Oct 8, 2026
474da8b
fix: prevent vector tile stalls and Google request races
wf9a5m75 Oct 10, 2026
559739e
fix: update HERE integration for pinch zoom and style layers
wf9a5m75 Oct 10, 2026
d5d038b
fix: update TomTom style mounting
wf9a5m75 Oct 10, 2026
aff46f7
fix: refresh native vector styles when rules change
wf9a5m75 Oct 10, 2026
ba2c41a
fix: update MapKit for Retina raster tile sizing
wf9a5m75 Oct 10, 2026
6e0a426
chore: checkpoint pending SDK changes
wf9a5m75 Oct 10, 2026
d220345
update reference
wf9a5m75 Oct 10, 2026
a9af9c1
chore: update Google Maps tile cache fix
wf9a5m75 Oct 11, 2026
c6dce21
Bound vector tile memory caches and manage styled basemaps
wf9a5m75 Oct 11, 2026
791e5b1
Fix Google vector tile level rendering
wf9a5m75 Oct 11, 2026
87a0bae
Apply raster tile preferences to vector tiles
wf9a5m75 Oct 11, 2026
48cc4f2
feat: let the vector tile entry points take StyleRules
wf9a5m75 Oct 12, 2026
5435082
Gate OpenMobileMaps' public API and depend on ios-sdk-core 1.3.2
wf9a5m75 Oct 24, 2026
c38aa86
feat: add marker label positioning demo and expand style reload tests
wf9a5m75 Oct 24, 2026
7ab4927
Street trees: name the trees at zoom 16 and up
wf9a5m75 Nov 5, 2026
19672fa
Point every module at its develop, and take Google Maps SDK 11.2.0
wf9a5m75 Nov 5, 2026
2489086
Merge remote-tracking branch 'origin/develop' into HEAD
wf9a5m75 Nov 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
97 changes: 97 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Test

# ios-sdk-core のユニットテスト。
#
# これまで CI は api-surface.yml(公開 API の凍結)と deploy 系だけで、
# **テストを走らせるワークフローが無かった。** 凍結ゲートが見るのは型の形だけ
# なので、シグネチャが同じまま中身が壊れる変更は素通りする。
#
# ## なぜ `swift test` ではないのか
#
# 通らないため。ios-sdk-core は TilePng.xcframework(Rust の PNG エンコーダ)に
# 依存していて、この xcframework は ios-arm64 と ios-arm64-simulator しか持た
# ない。macOS 向けにビルドしようとすると:
#
# error: TilePng.xcframework While building for macOS,
# no library for this platform was found
#
# したがって iOS シミュレータ宛に xcodebuild で回す。`swift test` を復活させたい
# なら TilePng.xcframework に macOS スライスを足すことになる
# (mapconductor-vectortile の scripts/build-ios-core-png.sh)。ローカルでの反復
# は速くなるが、CI に必要なのはこちらではない。
#
# スキーム名 `mapconductor-core` は Package.swift の `name:` に由来する。
# product 名(MapConductorCore)ではない。

on:
pull_request:
types: [opened, reopened, synchronize, ready_for_review]
branches:
- main
push:
branches:
- main
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
unit-test:
if: github.event.pull_request.draft == false
runs-on: macos-15
name: ios-sdk-core tests

steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
token: ${{ secrets.GITHUB_TOKEN }}

# ベースラインは Swift コンパイラの出力をそのまま記録しているので、
# 違う Xcode を引くと API を変えていなくても数千行の差分が出る。
# 3,000 行の diff ではなく、ここで「ツールチェインが違う」と言って落とす。
- name: Pin Xcode
run: |
set -euo pipefail
source ios-sdk-core/api/TOOLCHAIN
app="/Applications/Xcode_${XCODE_VERSION}.app"
if [ ! -d "$app" ]; then
echo "Xcode ${XCODE_VERSION} がこのランナーにありません。利用可能:" >&2
ls -d /Applications/Xcode*.app >&2
echo "ランナーのイメージを合わせるか、その Xcode で dump し直して" >&2
echo "ios-sdk-core/api/TOOLCHAIN を更新してください。" >&2
exit 1
fi
sudo xcode-select -s "$app"
xcodebuild -version

# 名前を決め打ちにしない。ランナーのイメージが変わるたびに
# 「iPhone 16 が無い」で落ちるのは、コードの問題ではない。
- name: Pick a simulator
id: sim
run: |
set -euo pipefail
name=$(xcrun simctl list devices available --json \
| python3 -c "import json,sys;d=json.load(sys.stdin)['devices'];print(next(x['name'] for k,v in d.items() if 'iOS' in k for x in v))")
echo "Using simulator: $name"
echo "name=$name" >> "$GITHUB_OUTPUT"

- name: Test
working-directory: ios-sdk-core
run: |
set -euo pipefail
xcodebuild test \
-scheme mapconductor-core \
-destination "platform=iOS Simulator,name=${{ steps.sim.outputs.name }}" \
-resultBundlePath TestResults.xcresult

- name: Upload result bundle
if: failure()
uses: actions/upload-artifact@v4
with:
name: xcresult
path: ios-sdk-core/TestResults.xcresult
retention-days: 7
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,7 @@ maps-core/
app1786472922370i267371265/
samples/MapConductorSampleApp/Resources/mappls.i.conf
samples/MapConductorSampleApp/Resources/mappls.i.olf

# Xcode per-user state: window layout, open tabs, breakpoints. Tracked by
# accident; it changes on every launch and belongs to one machine.
xcuserdata/
2 changes: 1 addition & 1 deletion ios-icons
2 changes: 1 addition & 1 deletion ios-sdk-core
43 changes: 43 additions & 0 deletions ios-vectorstyle/MvtStyle.xcframework/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>libmvt_style_ffi.a</string>
<key>LibraryIdentifier</key>
<string>ios-arm64-simulator</string>
<key>LibraryPath</key>
<string>libmvt_style_ffi.a</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>libmvt_style_ffi.a</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>libmvt_style_ffi.a</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>
Binary file not shown.
Binary file not shown.
56 changes: 56 additions & 0 deletions ios-vectorstyle/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// swift-tools-version: 5.9
import Foundation
import PackageDescription

let frameworkLibraryType: Product.Library.LibraryType? =
ProcessInfo.processInfo.environment["MAPCONDUCTOR_BUILD_XCFRAMEWORK"] == "1" ? .dynamic : nil
let usingLocalCore = FileManager.default.fileExists(atPath: "../ios-sdk-core/Package.swift")
let coreDependency: Package.Dependency = usingLocalCore
? .package(path: "../ios-sdk-core")
: .package(url: "https://github.com/MapConductor/ios-sdk-core", from: "1.3.2")

let package = Package(
name: "mapconductor-vectorstyle",
platforms: [
// See ios-sdk-core/Package.swift's comment: "15.0" must not be used here.
.iOS("15.1"),
],
products: [
.library(
name: "MapConductorVectorStyle",
type: frameworkLibraryType,
targets: ["MapConductorVectorStyle"]
),
],
dependencies: [
coreDependency,
],
targets: [
// The Rust style compiler. Built and packaged by the
// mapconductor-vectortile repo (scripts/build-ios-style.sh) and
// copied here by its scripts/sync-sdk.sh.
//
// Its own binary rather than a corner of MvtRender: an app using
// MapLibre, Mapbox or MapTiler adjusts a style without ever
// rasterising one, and must not have to link the rasteriser to do it.
.binaryTarget(name: "MvtStyle", path: "MvtStyle.xcframework"),
// The header travels as a C target rather than inside the
// XCFramework: Xcode merges every linked framework's Headers into
// one include directory, and two module.modulemaps collide there --
// which anything depending on both this and MvtRender would hit.
.target(name: "CMvtStyle"),
.target(
name: "MapConductorVectorStyle",
dependencies: [
.product(name: "MapConductorCore", package: "ios-sdk-core"),
"CMvtStyle",
"MvtStyle",
],
),
.testTarget(
name: "MapConductorVectorStyleTests",
dependencies: ["MapConductorVectorStyle"],
resources: [.process("Resources")],
),
]
)
38 changes: 38 additions & 0 deletions ios-vectorstyle/Sources/CMvtStyle/include/mvt_style.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// The vector style compiler for the iOS SDK. Mirrors crates/mvt-style-ffi.
//
// Travels as a source header in ios-vectorstyle rather than inside the
// XCFramework: Xcode merges every linked framework's Headers into one include
// directory, and two frameworks shipping a module.modulemap collide there --
// which anything depending on both this and MvtRender would hit.
#ifndef MVT_STYLE_H
#define MVT_STYLE_H

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

// Applies a rules document to a style document.
//
// Returns JSON: the adjusted style, the mutations, what they affect and the
// diagnostics -- or {"error": "..."} when either document could not be read.
// NULL only when an argument was not valid UTF-8 or the compiler panicked.
// Release the result with mvt_style_string_free.
char *mvt_style_compile(const char *style_json, const char *rules_json);

// The style's layers and the role each would be given, as a JSON array, or
// {"error": "..."}. Release with mvt_style_string_free.
char *mvt_style_describe(const char *style_json);

// The rules document version this library understands.
uint32_t mvt_style_schema_version(void);

// Releases a string this library returned. NULL is accepted.
void mvt_style_string_free(char *text);

#ifdef __cplusplus
}
#endif

#endif // MVT_STYLE_H
3 changes: 3 additions & 0 deletions ios-vectorstyle/Sources/CMvtStyle/shim.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// SwiftPM needs a target to have at least one source file. This one exists so
// CMvtStyle can be a target whose only real content is its public header; the
// implementation is linked from the MvtStyle XCFramework.
Loading