diff --git a/.github/workflows/compilation-check.yml b/.github/workflows/compilation-check.yml index 0123da5..1e01ef7 100644 --- a/.github/workflows/compilation-check.yml +++ b/.github/workflows/compilation-check.yml @@ -9,13 +9,22 @@ on: jobs: build: runs-on: macOS-latest - + env: + MAPBOX_SECRET_TOKEN: ${{ secrets.MAPBOX_SECRET_TOKEN }} + MAPBOX_PUBLIC_TOKEN: ${{ secrets.MAPBOX_PUBLIC_TOKEN }} + GOOGLE_MAPS_API_KEY: ${{ secrets.GOOGLE_MAPS_API_KEY }} steps: - uses: actions/checkout@v1 - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 11 + - name: Set up netrc + uses: extractions/netrc@v1 + with: + machine: api.mapbox.com + username: mapbox + password: ${{ secrets.MAPBOX_SECRET_TOKEN }} - name: Cocoapods install run: (cd sample/ios-app && pod install) - name: Check library diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 28e15bb..c294b2b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,13 +18,21 @@ jobs: SIGNING_KEY_ID: ${{ secrets.SIGNING_KEYID }} SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }} SIGNING_KEY: ${{ secrets.GPG_KEY_CONTENTS }} - + MAPBOX_SECRET_TOKEN: ${{ secrets.MAPBOX_SECRET_TOKEN }} + MAPBOX_PUBLIC_TOKEN: ${{ secrets.MAPBOX_PUBLIC_TOKEN }} + GOOGLE_MAPS_API_KEY: ${{ secrets.GOOGLE_MAPS_API_KEY }} steps: - uses: actions/checkout@v1 - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 11 + - name: Set up netrc + uses: extractions/netrc@v1 + with: + machine: api.mapbox.com + username: mapbox + password: ${{ secrets.MAPBOX_SECRET_TOKEN }} - name: Cocoapods install run: (cd sample/ios-app && pod install) - name: Publish library diff --git a/README.md b/README.md index 24ab74b..0b1aa90 100755 --- a/README.md +++ b/README.md @@ -170,7 +170,29 @@ class MarkerViewModel( ## Samples Please see more examples in the [sample directory](sample). -## Set Up Locally +## Set Up Locally +Before open project need to setup `gradle.properties` with tokens: +``` +# mapbox tokens by guide https://docs.mapbox.com/android/maps/guides/install/ +mapbox.secretToken=YOUR_SECRET_MAPBOX_KEY +mapbox.publicToken=YOUR_PUBLIC_MAPBOX_KEY + +# google maps api key by guide https://developers.google.com/maps/documentation/android-sdk/get-api-key +googleMaps.apiKey=YOUR_API_KEY +``` + +# ios info.plist setup with tokens: +``` +MGLMapboxAccessToken=YOUR_PUBLIC_MAPBOX_KEY +GoogleAPIkey=YOUR_API_KEY +``` +add the following entry to your `.netrc` file: +``` +machine api.mapbox.com +login mapbox +password YOUR_SECRET_MAPBOX_KEY +``` + - The [maps directory](maps) contains the base classes for all maps providers; - The [maps-google directory](maps-google) contains the Google Maps implementation; - The [maps-mapbox directory](maps-mapbox) contains the mapbox implementation; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5e113f0..310b673 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,9 +8,10 @@ testExtJunitVersion = "1.1.1" playServicesLocationVersion = "18.0.0" playServicesMapsVersion = "17.0.0" googleMapsServicesVersion = "0.2.11" -mapboxVersion = "9.2.1" -mapboxNavigationVersion = "0.42.6" +mapboxVersion = "9.6.1" +mapboxNavigationVersion = "1.5.1" mapboxAnnotationVersion = "0.9.0" +mapboxServicesVersion = "5.8.0" multidexVersion = "2.0.1" kotlinxSerializationVersion = "1.2.1" coroutinesVersion = "1.5.0-native-mt" @@ -30,8 +31,9 @@ playServicesLocation = { module = "com.google.android.gms:play-services-location playServicesMaps = { module = "com.google.android.gms:play-services-maps", version.ref = "playServicesMapsVersion" } googleMapsServices = { module = "com.google.maps:google-maps-services", version.ref = "googleMapsServicesVersion" } mapbox = { module = "com.mapbox.mapboxsdk:mapbox-android-sdk", version.ref = "mapboxVersion" } -mapboxNavigation = { module = "com.mapbox.mapboxsdk:mapbox-android-navigation", version.ref = "mapboxNavigationVersion" } +mapboxNavigation = { module = "com.mapbox.navigation:core", version.ref = "mapboxNavigationVersion" } mapboxAnnotation = { module = "com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9", version.ref = "mapboxAnnotationVersion" } +mapboxServices = { module = "com.mapbox.mapboxsdk:mapbox-sdk-services", version.ref = "mapboxServicesVersion" } multidex = { module = "androidx.multidex:multidex", version.ref = "multidexVersion" } ktorClientOkHttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktorClientVersion" } kotlinSerialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationVersion" } diff --git a/maps-google/build.gradle.kts b/maps-google/build.gradle.kts index f7bf144..20583c1 100644 --- a/maps-google/build.gradle.kts +++ b/maps-google/build.gradle.kts @@ -23,8 +23,8 @@ dependencies { "androidMainImplementation"(libs.appCompat) "androidMainImplementation"(libs.lifecycle) - "androidMainImplementation"(libs.playServicesLocation) - "androidMainImplementation"(libs.playServicesMaps) + "androidMainApi"(libs.playServicesLocation) + "androidMainApi"(libs.playServicesMaps) "androidMainImplementation"(libs.googleMapsServices) "androidMainImplementation"(libs.ktorClientOkHttp) diff --git a/maps-mapbox/build.gradle.kts b/maps-mapbox/build.gradle.kts index 4044fac..92242b6 100644 --- a/maps-mapbox/build.gradle.kts +++ b/maps-mapbox/build.gradle.kts @@ -18,9 +18,10 @@ dependencies { "androidMainImplementation"(libs.appCompat) "androidMainImplementation"(libs.lifecycle) "androidMainImplementation"(libs.playServicesLocation) - "androidMainImplementation"(libs.mapbox) "androidMainImplementation"(libs.mapboxAnnotation) - "androidMainImplementation"(libs.mapboxNavigation) + "androidMainImplementation"(libs.mapboxServices) + "androidMainApi"(libs.mapbox) + "androidMainApi"(libs.mapboxNavigation) } cocoaPods { diff --git a/sample/android-app/build.gradle.kts b/sample/android-app/build.gradle.kts index 6d80cb9..4241244 100644 --- a/sample/android-app/build.gradle.kts +++ b/sample/android-app/build.gradle.kts @@ -14,6 +14,13 @@ android { versionName = "0.1.0" multiDexEnabled = true + + val googleMapsApiKey: String = (System.getenv("GOOGLE_MAPS_API_KEY") ?: extra["googleMaps.apiKey"] as? String).orEmpty() + val mapboxPublicToken: String = (System.getenv("MAPBOX_PUBLIC_TOKEN") ?: extra["mapbox.publicToken"] as? String).orEmpty() + + manifestPlaceholders["googleMapsApiKey"] = googleMapsApiKey + buildConfigField("String", "GOOGLE_MAPS_API_KEY", "\"$googleMapsApiKey\"") + buildConfigField("String", "MAPBOX_PUBLIC_TOKEN", "\"$mapboxPublicToken\"") } } @@ -23,7 +30,6 @@ dependencies { implementation(libs.playServicesMaps) implementation(libs.googleMapsServices) implementation(libs.mapbox) - implementation(libs.mapboxAnnotation) implementation(libs.multidex) diff --git a/sample/android-app/src/main/AndroidManifest.xml b/sample/android-app/src/main/AndroidManifest.xml index 7d1c132..ee7681f 100755 --- a/sample/android-app/src/main/AndroidManifest.xml +++ b/sample/android-app/src/main/AndroidManifest.xml @@ -22,7 +22,6 @@ - - + diff --git a/sample/android-app/src/main/java/com/icerockdev/app/GoogleMapsActivity.kt b/sample/android-app/src/main/java/com/icerockdev/app/GoogleMapsActivity.kt index 458ab18..0250d8c 100644 --- a/sample/android-app/src/main/java/com/icerockdev/app/GoogleMapsActivity.kt +++ b/sample/android-app/src/main/java/com/icerockdev/app/GoogleMapsActivity.kt @@ -27,8 +27,7 @@ class GoogleMapsActivity : MvvmActivity() { override val viewModelVariableId: Int = BR.viewModel override val viewModelClass: Class = MapboxViewModel::class.java - private val mapboxToken = "YOUR-ACCESS-TOKEN" + private val mapboxToken = BuildConfig.MAPBOX_PUBLIC_TOKEN override fun viewModelFactory(): ViewModelProvider.Factory { return createViewModelFactory { diff --git a/sample/ios-app/Podfile b/sample/ios-app/Podfile index 6a48575..48da49c 100644 --- a/sample/ios-app/Podfile +++ b/sample/ios-app/Podfile @@ -12,9 +12,9 @@ platform :ios, '11.0' target 'TestProj' do # MultiPlatformLibrary pod 'MultiPlatformLibrary', :path => '../mpp-library' - pod 'Mapbox-iOS-SDK', '5.6.0' - pod 'MapboxNavigation', '0.40.0' - pod 'GoogleMaps', '3.7.0' + pod 'Mapbox-iOS-SDK', '6.3.0' + pod 'MapboxNavigation', '1.4.1' + pod 'GoogleMaps', '5.1.0' end # GoogleMaps is static library that already linked in moko-maps-google. Remove duplicated linking. diff --git a/sample/ios-app/TestProj.xcodeproj/project.pbxproj b/sample/ios-app/TestProj.xcodeproj/project.pbxproj index 6b320c3..e1d55ef 100644 --- a/sample/ios-app/TestProj.xcodeproj/project.pbxproj +++ b/sample/ios-app/TestProj.xcodeproj/project.pbxproj @@ -289,6 +289,7 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 4VU932NX78; INFOPLIST_FILE = src/Info.plist; + ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = dev.icerock.moko.sample.maps; PRODUCT_NAME = "moko-maps"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -307,6 +308,7 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 4VU932NX78; INFOPLIST_FILE = src/Info.plist; + ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = dev.icerock.moko.sample.maps; PRODUCT_NAME = "moko-maps"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/sample/ios-app/src/AppDelegate.swift b/sample/ios-app/src/AppDelegate.swift index be44ee7..4cbbb7c 100755 --- a/sample/ios-app/src/AppDelegate.swift +++ b/sample/ios-app/src/AppDelegate.swift @@ -12,8 +12,7 @@ class AppDelegate: NSObject, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { - // TODO: Replace with your API Key from https://developers.google.com/maps/documentation/ios-sdk/ - GMSServices.provideAPIKey("YOUR-API-KEY") + GMSServices.provideAPIKey(Bundle.main.object(forInfoDictionaryKey: "GoogleAPIkey") as! String) // For Mapbox add key "MGLMapboxAccessToken" in Info.plist return true diff --git a/sample/ios-app/src/GoogleMapViewController.swift b/sample/ios-app/src/GoogleMapViewController.swift index f512b2e..96949b2 100644 --- a/sample/ios-app/src/GoogleMapViewController.swift +++ b/sample/ios-app/src/GoogleMapViewController.swift @@ -20,7 +20,7 @@ class GoogleMapViewController: UIViewController { permissionsController: PermissionsController(), googleMapController: GoogleMapController( mapView: mapView, - geoApiKey: "YOUR-API-KEY" + geoApiKey: Bundle.main.object(forInfoDictionaryKey: "GoogleAPIkey") as! String ) ) diff --git a/sample/ios-app/src/Info.plist b/sample/ios-app/src/Info.plist index 58bce56..fffcf9c 100755 --- a/sample/ios-app/src/Info.plist +++ b/sample/ios-app/src/Info.plist @@ -61,7 +61,9 @@ UIInterfaceOrientationPortraitUpsideDown MGLMapboxAccessToken - YOUR-ACCESS-TOKEN + YOUR_PUBLIC_MAPBOX_KEY + GoogleAPIkey + YOUR_API_KEY MGLMapboxMetricsEnabledSettingShownInApp diff --git a/sample/mpp-library/build.gradle.kts b/sample/mpp-library/build.gradle.kts index 7514743..2268b59 100644 --- a/sample/mpp-library/build.gradle.kts +++ b/sample/mpp-library/build.gradle.kts @@ -24,8 +24,6 @@ dependencies { commonMainApi(projects.mapsGoogle) commonMainApi(projects.mapsMapbox) "androidMainImplementation"(libs.lifecycle) - "androidMainImplementation"(libs.playServicesLocation) - "androidMainImplementation"(libs.mapbox) } multiplatformResources { diff --git a/settings.gradle.kts b/settings.gradle.kts index e58fb09..697b2c0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,7 +10,20 @@ dependencyResolutionManagement { mavenCentral() google() - maven { url = uri("https://mapbox.bintray.com/mapbox") } + maven { + url = uri("https://api.mapbox.com/downloads/v2/releases/maven") + authentication { + create("basic", org.gradle.authentication.http.BasicAuthentication::class) + } + credentials { + // Do not change the username below. + // This should always be `mapbox` (not your username). + username = "mapbox" + // Use the secret token you stored in gradle.properties as the password + password = System.getenv("MAPBOX_SECRET_TOKEN") + ?: extra["mapbox.secretToken"] as? String + } + } jcenter { content {