From d716636d83a31bbefc919749646a1e573dd3b276 Mon Sep 17 00:00:00 2001 From: mwilsnd <53413200+mwilsnd@users.noreply.github.com> Date: Mon, 8 May 2023 17:37:05 -0400 Subject: [PATCH] Xcode project generation with bazel (#1108) Co-authored-by: Bart Louwers --- .bazelversion | 2 +- WORKSPACE | 18 +++- platform/ios/BUILD.bazel | 102 +++++++++++++++++- .../platform/darwin/app/LimeGreenStyleLayer.h | 2 +- .../platform/darwin/app/LimeGreenStyleLayer.m | 2 +- .../ios/platform/ios/app/MBXAnnotationView.h | 2 +- .../ios/platform/ios/app/MBXAppDelegate.m | 2 +- .../platform/ios/app/MBXCustomCalloutView.h | 2 +- .../ios/app/MBXCustomLocationViewController.m | 2 +- .../ios/app/MBXEmbeddedMapViewController.m | 2 +- .../app/MBXOfflinePacksTableViewController.m | 2 +- .../ios/app/MBXOrnamentsViewController.m | 2 +- .../ios/app/MBXSnapshotsViewController.m | 2 +- platform/ios/platform/ios/app/MBXState.h | 2 +- .../ios/app/MBXUserLocationAnnotationView.h | 2 +- .../ios/platform/ios/app/MBXViewController.m | 2 +- .../ios/app/MLNMapView_Experimental.h | 2 +- .../platform/ios/scripts/bazel-xcodeproj.sh | 32 ++++++ 18 files changed, 160 insertions(+), 22 deletions(-) create mode 100755 platform/ios/platform/ios/scripts/bazel-xcodeproj.sh diff --git a/.bazelversion b/.bazelversion index 5317f56df..132c6def5 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -6.0.0-pre.20220630.1 +6.1.1 \ No newline at end of file diff --git a/WORKSPACE b/WORKSPACE index 2ad123970..9ee85cd4b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -4,9 +4,14 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "build_bazel_rules_apple", - sha256 = "a95d9007570cb5c6180b7e380bad2a854734209cc02390eed208efb922843c8a", - strip_prefix = "rules_apple-76752fe84ff0dc5d793033015647c78efbf41309", - url = "https://github.com/bazelbuild/rules_apple/archive/76752fe84ff0dc5d793033015647c78efbf41309.tar.gz", + sha256 = "9e26307516c4d5f2ad4aee90ac01eb8cd31f9b8d6ea93619fc64b3cbc81b0944", + url = "https://github.com/bazelbuild/rules_apple/releases/download/2.2.0/rules_apple.2.2.0.tar.gz", +) + +http_archive( + name = "rules_xcodeproj", + sha256 = "54cee524abd72db950482ded168dd44397369077b734d4cf4b06f734e10a3e80", + url = "https://github.com/MobileNativeFoundation/rules_xcodeproj/releases/download/1.5.1/release.tar.gz", ) load( @@ -36,3 +41,10 @@ load( ) apple_support_dependencies() + +load( + "@rules_xcodeproj//xcodeproj:repositories.bzl", + "xcodeproj_rules_dependencies", +) + +xcodeproj_rules_dependencies() \ No newline at end of file diff --git a/platform/ios/BUILD.bazel b/platform/ios/BUILD.bazel index 6361b73f2..39815036a 100644 --- a/platform/ios/BUILD.bazel +++ b/platform/ios/BUILD.bazel @@ -1,7 +1,12 @@ load("@build_bazel_rules_apple//apple:apple.bzl", "apple_static_xcframework", "apple_xcframework") -load("@build_bazel_rules_apple//apple:ios.bzl", "ios_framework") +load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application", "ios_framework") load("@build_bazel_rules_apple//apple:resources.bzl", "apple_resource_bundle") load("//bazel:flags.bzl", "CPP_FLAGS", "MAPLIBRE_FLAGS", "WARNING_FLAGS") +load( + "@rules_xcodeproj//xcodeproj:defs.bzl", + "top_level_target", + "xcodeproj", +) # This list of public headers is from what Mapbox vendors with their dynamic framework # If we forget one the build will fail, and if we add too many there will be a warning @@ -93,7 +98,7 @@ apple_static_xcframework( ], "device": ["arm64"], }, - minimum_os_versions = {"ios": "9.0"}, + minimum_os_versions = {"ios": "12.0"}, public_hdrs = _PUBLIC_HEADERS, umbrella_header = "platform/ios/src/Mapbox.h", visibility = ["//visibility:public"], @@ -116,7 +121,7 @@ apple_xcframework( ], "device": ["arm64"], }, - minimum_os_versions = {"ios": "9.0"}, + minimum_os_versions = {"ios": "12.0"}, public_hdrs = _PUBLIC_HEADERS, umbrella_header = "platform/ios/src/Mapbox.h", visibility = ["//visibility:public"], @@ -131,7 +136,7 @@ ios_framework( families = ["iphone"], infoplists = ["build/Info.plist"], linkopts = ["-all_load"], - minimum_os_version = "9.0", + minimum_os_version = "12.0", deps = ["sdk"], ) @@ -149,10 +154,12 @@ objc_library( "Security", "WebKit", ], + visibility = ["//visibility:public"], deps = [ "objc-sdk", "objcpp-sdk", ], + hdrs = _PUBLIC_HEADERS ) # sdk for the dynamic target. Lacking the resources bundle since for dynamic @@ -169,6 +176,7 @@ objc_library( "Security", "WebKit", ], + visibility = ["//visibility:public"], deps = [ "objc-sdk", "objcpp-sdk", @@ -358,3 +366,89 @@ objc_library( "//platform/darwin:darwin-objcpp", ], ) + +objc_library( + name = "iosapp", + srcs = [ + "platform/ios/app/MBXAppDelegate.m", + "platform/ios/app/MBXState.m", + "platform/ios/app/MBXCustomLocationViewController.m", + "platform/ios/app/MBXSnapshotsViewController.m", + "platform/ios/app/MBXFrameTimeGraphView.m", + "platform/ios/app/main.m", + "platform/ios/app/MBXCustomCalloutView.m", + "platform/ios/app/MBXViewController.m", + "platform/ios/app/MBXUserLocationAnnotationView.m", + "platform/ios/app/MBXAnnotationView.m", + "platform/ios/app/MBXOfflinePacksTableViewController.m", + "platform/ios/app/MBXEmbeddedMapViewController.m", + "platform/ios/app/MBXOrnamentsViewController.m", + "platform/ios/app/MBXStateManager.m", + "platform/darwin/app/LimeGreenStyleLayer.m", + "platform/darwin/app/LimeGreenStyleLayer.h" + ], + hdrs = [ + "platform/ios/app/MBXAppDelegate.h", + "platform/ios/app/MBXState.h", + "platform/ios/app/MBXCustomLocationViewController.h", + "platform/ios/app/MBXSnapshotsViewController.h", + "platform/ios/app/MBXFrameTimeGraphView.h", + "platform/ios/app/MBXCustomCalloutView.h", + "platform/ios/app/MBXViewController.h", + "platform/ios/app/MBXUserLocationAnnotationView.h", + "platform/ios/app/MBXAnnotationView.h", + "platform/ios/app/MBXOfflinePacksTableViewController.h", + "platform/ios/app/MBXEmbeddedMapViewController.h", + "platform/ios/app/MBXOrnamentsViewController.h", + "platform/ios/app/MBXStateManager.h", + "platform/ios/app/MLNMapView_Experimental.h" + ], + includes = [ + "platform/darwin/app" + ], + deps = [ + "sdk" + ], + sdk_frameworks = [ + "GLKit" # needed for LimeGreenStyleLayer + ] +) + + +ios_application( + name = "App", + bundle_id = "com.maplibre.app", + families = ["iphone", "ipad"], + infoplists = ["platform/ios/app/Info.plist"], + minimum_os_version = "12.0", + visibility = ["//visibility:public"], + deps = [ + "iosapp", + ], + resources = [ + "platform/ios/app/numeric_filter_style.json", + "platform/ios/app/missing_icon.json", + "platform/ios/app/points.geojson", + "platform/ios/app/polyline.geojson", + "platform/ios/app/Settings.bundle", + "platform/ios/app/Main.storyboard", + "platform/ios/app/threestates.geojson", + "platform/ios/app/LaunchScreen.storyboard", + "platform/ios/app/simple_route.json", + "platform/ios/app/fill_filter_style.json", + "platform/ios/app/Assets.xcassets", + "platform/darwin/test/amsterdam.geojson" + ] + glob([ + "platform/ios/app/*.lproj/**" + ]) +) + +xcodeproj( + name = "xcodeproj", + project_name = "MapLibre", + tags = ["manual"], + top_level_targets = [ + top_level_target("App", target_environments = ["simulator"]), + ], + minimum_xcode_version = "14" +) diff --git a/platform/ios/platform/darwin/app/LimeGreenStyleLayer.h b/platform/ios/platform/darwin/app/LimeGreenStyleLayer.h index c497b767e..10d359422 100644 --- a/platform/ios/platform/darwin/app/LimeGreenStyleLayer.h +++ b/platform/ios/platform/darwin/app/LimeGreenStyleLayer.h @@ -1,4 +1,4 @@ -#import +#import "Mapbox.h" @interface LimeGreenStyleLayer : MLNOpenGLStyleLayer diff --git a/platform/ios/platform/darwin/app/LimeGreenStyleLayer.m b/platform/ios/platform/darwin/app/LimeGreenStyleLayer.m index 8348dcdcd..c920a736f 100644 --- a/platform/ios/platform/darwin/app/LimeGreenStyleLayer.m +++ b/platform/ios/platform/darwin/app/LimeGreenStyleLayer.m @@ -1,5 +1,5 @@ #import "LimeGreenStyleLayer.h" -@import GLKit; +#import @implementation LimeGreenStyleLayer { GLuint _program; diff --git a/platform/ios/platform/ios/app/MBXAnnotationView.h b/platform/ios/platform/ios/app/MBXAnnotationView.h index e5bd59cb2..d0c37b7b2 100644 --- a/platform/ios/platform/ios/app/MBXAnnotationView.h +++ b/platform/ios/platform/ios/app/MBXAnnotationView.h @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" @interface MBXAnnotationView : MLNAnnotationView @end diff --git a/platform/ios/platform/ios/app/MBXAppDelegate.m b/platform/ios/platform/ios/app/MBXAppDelegate.m index a5867c32c..4766c7ad0 100644 --- a/platform/ios/platform/ios/app/MBXAppDelegate.m +++ b/platform/ios/platform/ios/app/MBXAppDelegate.m @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" #import "MBXAppDelegate.h" #import "MBXViewController.h" diff --git a/platform/ios/platform/ios/app/MBXCustomCalloutView.h b/platform/ios/platform/ios/app/MBXCustomCalloutView.h index a39b7474f..4086a1132 100644 --- a/platform/ios/platform/ios/app/MBXCustomCalloutView.h +++ b/platform/ios/platform/ios/app/MBXCustomCalloutView.h @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" /** * Basic custom callout view to demonstrate how to diff --git a/platform/ios/platform/ios/app/MBXCustomLocationViewController.m b/platform/ios/platform/ios/app/MBXCustomLocationViewController.m index b092670dc..5ad3839f6 100644 --- a/platform/ios/platform/ios/app/MBXCustomLocationViewController.m +++ b/platform/ios/platform/ios/app/MBXCustomLocationViewController.m @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" #import "MBXCustomLocationViewController.h" diff --git a/platform/ios/platform/ios/app/MBXEmbeddedMapViewController.m b/platform/ios/platform/ios/app/MBXEmbeddedMapViewController.m index 999df6d31..9b6ecc0af 100644 --- a/platform/ios/platform/ios/app/MBXEmbeddedMapViewController.m +++ b/platform/ios/platform/ios/app/MBXEmbeddedMapViewController.m @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" #import "MBXEmbeddedMapViewController.h" diff --git a/platform/ios/platform/ios/app/MBXOfflinePacksTableViewController.m b/platform/ios/platform/ios/app/MBXOfflinePacksTableViewController.m index 1e3705875..00caafb1d 100644 --- a/platform/ios/platform/ios/app/MBXOfflinePacksTableViewController.m +++ b/platform/ios/platform/ios/app/MBXOfflinePacksTableViewController.m @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" #import "MBXOfflinePacksTableViewController.h" diff --git a/platform/ios/platform/ios/app/MBXOrnamentsViewController.m b/platform/ios/platform/ios/app/MBXOrnamentsViewController.m index 1c642a86c..76ecf97d5 100644 --- a/platform/ios/platform/ios/app/MBXOrnamentsViewController.m +++ b/platform/ios/platform/ios/app/MBXOrnamentsViewController.m @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" #import "MBXOrnamentsViewController.h" diff --git a/platform/ios/platform/ios/app/MBXSnapshotsViewController.m b/platform/ios/platform/ios/app/MBXSnapshotsViewController.m index f7eebada0..552bfb29e 100644 --- a/platform/ios/platform/ios/app/MBXSnapshotsViewController.m +++ b/platform/ios/platform/ios/app/MBXSnapshotsViewController.m @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" #import "MBXSnapshotsViewController.h" diff --git a/platform/ios/platform/ios/app/MBXState.h b/platform/ios/platform/ios/app/MBXState.h index ff31a1f28..2929b911c 100644 --- a/platform/ios/platform/ios/app/MBXState.h +++ b/platform/ios/platform/ios/app/MBXState.h @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" NS_ASSUME_NONNULL_BEGIN diff --git a/platform/ios/platform/ios/app/MBXUserLocationAnnotationView.h b/platform/ios/platform/ios/app/MBXUserLocationAnnotationView.h index 1c08e78e0..d9c98f818 100644 --- a/platform/ios/platform/ios/app/MBXUserLocationAnnotationView.h +++ b/platform/ios/platform/ios/app/MBXUserLocationAnnotationView.h @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" @interface MBXUserLocationAnnotationView : MLNUserLocationAnnotationView diff --git a/platform/ios/platform/ios/app/MBXViewController.m b/platform/ios/platform/ios/app/MBXViewController.m index 0aacefff1..aaf863fbf 100644 --- a/platform/ios/platform/ios/app/MBXViewController.m +++ b/platform/ios/platform/ios/app/MBXViewController.m @@ -1,4 +1,4 @@ -@import Mapbox; +#import "Mapbox.h" #import "MBXViewController.h" diff --git a/platform/ios/platform/ios/app/MLNMapView_Experimental.h b/platform/ios/platform/ios/app/MLNMapView_Experimental.h index 6fc3ccbf3..891b8b94d 100644 --- a/platform/ios/platform/ios/app/MLNMapView_Experimental.h +++ b/platform/ios/platform/ios/app/MLNMapView_Experimental.h @@ -1,4 +1,4 @@ -#import +#import "Mapbox.h" @interface MLNMapView (Experimental) diff --git a/platform/ios/platform/ios/scripts/bazel-xcodeproj.sh b/platform/ios/platform/ios/scripts/bazel-xcodeproj.sh new file mode 100755 index 000000000..fba912dcc --- /dev/null +++ b/platform/ios/platform/ios/scripts/bazel-xcodeproj.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +set -euo pipefail + +pushd ../../../../../ + +echo "------ Determining Maplibre version and hash ------" + +sem_version=0.0.0 +hash=$(git log | head -1 | awk '{ print $2 }' | cut -c 1-10) && true + +# Move and configure the info plists with the semantic version and hash. +temp_info_static_plist="platform/ios/build/Info-static.plist" +temp_info_plist="platform/ios/build/Info.plist" + +if [ ! -d platform/ios/build ]; then + mkdir platform/ios/build +fi + +cp platform/ios/platform/ios/framework/Info-static.plist "$temp_info_static_plist" +cp platform/ios/platform/ios/framework/Info.plist "$temp_info_plist" + +plutil -replace MLNSemanticVersionString -string "$sem_version" "$temp_info_static_plist" +plutil -replace MLNCommitHash -string "$hash" "$temp_info_static_plist" +plutil -replace MLNSemanticVersionString -string "$sem_version" "$temp_info_plist" +plutil -replace MLNCommitHash -string "$hash" "$temp_info_plist" + +echo "------ Building Maplibre version: $sem_version hash: $hash ------" + +bazel run //platform/ios:xcodeproj + +popd \ No newline at end of file