Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Error in ViewAnnotationManager.swift when running React Native app on iOS 18 #3640

Closed
guneyural opened this issue Sep 30, 2024 · 20 comments
Labels
bug 🪲 Something isn't working

Comments

@guneyural
Copy link

Mapbox Implementation

Mapbox

Mapbox Version

= 11.4.0

React Native Version

0.74.3

Platform

iOS

@rnmapbox/maps version

^10.0.0-beta.28

Standalone component to reproduce

Steps to Reproduce

1. Upgrade iOS version to 18 and Xcode to 16.0
2. Install the latest version of rnmapbox/maps and MapboxMaps.
3. Run the React Native app using `npm run ios`.
import React from 'react';
import {
  MapView,
  ShapeSource,
  LineLayer,
  Camera,
} from '@rnmapbox/maps';

const aLine = {
  type: 'LineString',
  coordinates: [
    [-74.00597, 40.71427],
    [-74.00697, 40.71527],
  ],
};

class BugReportExample extends React.Component {
  render() {
    return (
      <MapView style={{flex: 1}}>
        <Camera centerCoordinate={[-74.00597, 40.71427]} zoomLevel={14} />
        <ShapeSource id="idStreetLayer" shape={aLine}>
          <LineLayer id="idStreetLayer" />
        </ShapeSource>
      </MapView>
    );
  }
}

Observed behavior and steps to reproduce

I am experiencing an issue when running my React Native application using the rnmapbox/maps library on iOS 18 and xcode 16.0

Before the update there was no problem.

The build fails with a Swift type conversion error in ViewAnnotationManager.swift.

❌  (ios/Pods/MapboxMaps/Sources/MapboxMaps/Annotations/ViewAnnotationManager.swift:79:19)

  77 |     @available(*, deprecated, message: "Use ViewAnnotation")
  78 |     public var annotations: [UIView: ViewAnnotationOptions] {
> 79 |         idsByView.compactMapValues { [mapboxMap] id in
     |                   ^ cannot convert return expression of type '[UIView : ViewAnnotationOptions]' to return type 'Dictionary<String, Optional<JSONValue>>.RawValue' 
  80 |             try? mapboxMap.options(forViewAnnotationWithId: id)
  81 |         }
  82 |     }

The build fails due to an error related to ViewAnnotationManager.swift in the MapboxMaps library. The error points to a type conversion issue between [UIView : ViewAnnotationOptions] and Dictionary<String, Optional>.RawValue.

Expected behavior

The application should build successfully and work as expected on iOS 18 and xcode 16.0

Notes / preliminary analysis

No response

Additional links and references

No response

@guneyural guneyural added the bug 🪲 Something isn't working label Sep 30, 2024
@VedantTapadia-RisingTide

+1

@dadudad1
Copy link

dadudad1 commented Oct 1, 2024

a quick fix until the official release... change the annotation variable to:
public var annotations: [String: Optional<Any>] {
var result: [String: Optional<Any>] = [:]
for (view, options) in idsByView.compactMapValues({ [mapboxMap] id in try? mapboxMap.options(forViewAnnotationWithId: id) }) {
let key = String(describing: view)
result[key] = options
}
return result
}

@VedantTapadia-RisingTide

Which file does this change go with?

@dadudad1
Copy link

dadudad1 commented Oct 1, 2024

in ios/Pods/MapboxMaps/Sources/MapboxMaps/Annotations/ViewAnnotationManager.swift as specified in the issue

I am using version 10.1.31

@ChickenBone
Copy link

+1

2 similar comments
@kckunal2612
Copy link

+1

@rprvnraj
Copy link

rprvnraj commented Oct 2, 2024

+1

@kbqdev
Copy link

kbqdev commented Oct 9, 2024

Same issues

@artanisdesign
Copy link

+1

@matthewhausmantrellus
Copy link

+1 from an expo user when building a development client

"RNMapboxMapsVersion": "11.4.0",
"@rnmapbox/maps": "^10.1.3",
"react-native": "0.73.2",
"expo": "50.0.14",

@ShaneZhengNZ
Copy link

@dadudad1 To patch the file, I am struggling about how to. Typically, if I want to patch a file temporarily, I would use 'yarn patch', however, in this case, the file in under ios/Pods folder, which is not part of the repo (something that generated by Cocapods?). So, I don't know how to apply the temp fix.

@martmalo
Copy link

Any update?

@guneyural
Copy link
Author

Still no official fix from maintainers. Using @dadudad1 solution solves the issue.

@ShaneZhengNZ
Copy link

ShaneZhengNZ commented Oct 21, 2024

@guneyural I doubt it unless you eject your Expo project. With the reasons that I mentioned above, I am struggling to find a proper solution to apply @dadudad1 solution.

Basically, don't build with Xcode 16, then you should be fine. Wait for the official fix.

@vulliza
Copy link

vulliza commented Oct 21, 2024

@matthewhausmantrellus did you find a fix for expo? I'm in the same boat as you :(

@matthewhausmantrellus
Copy link

@matthewhausmantrellus did you find a fix for expo? I'm in the same boat as you :(

npx expo run:ios. There are a number of additional steps potentially depending on the user

@ShaneZhengNZ
Copy link

@matthewhausmantrellus I don't understand why do you need additional steps? I am using the same Expo SDK version. I can build the development client in EAS (not locally) with the sdk-50 compatible iOS image.

@yudai524
Copy link

yudai524 commented Oct 23, 2024

This build error occurs when native SDK version is v11.
Therefore just remove RNMapboxMapsVersion from your app.json if you have no reason to use v11.

https://rnmapbox.github.io/docs/install

@Gys
Copy link

Gys commented Oct 27, 2024

This build error occurs when native SDK version is v11. Therefore just remove RNMapboxMapsVersion from your app.json if you have no reason to use v11.

There is an PrivacyInfo.xcprivacy issue with rnmapbox. In case of expo it seems the easiest solution is selecting v11, even if the app itself uses v10. See #3447 (comment)

chriscoderdr added a commit to chriscoderdr/morro-ride-sharing that referenced this issue Oct 30, 2024
…reen

    - Integrated Mapbox for displaying real-time user location on the map
    - Added basic Map screen with user location tracking and "Go to Location" button
    - Fixed Mapbox iOS `ViewAnnotationManager.swift` issue as per rnmapbox/maps#3640
    - Initial setup of map UI for enhanced driver navigation
@mfazekas
Copy link
Contributor

mfazekas commented Nov 3, 2024

I think this is addressed by 10.1.33

@mfazekas mfazekas closed this as completed Nov 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 🪲 Something isn't working
Projects
None yet
Development

No branches or pull requests