You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@react-native-community/geolocation引发iOS编译错误求助

问题描述

系统环境

  • MacOS: Big Sur
  • XCode: Version 12.5.1 (12E507)
  • iOS Simulator: iPhone 8 (iOS 14.5)
  • Node: v16.10.0

操作流程

  1. 创建全新React Native项目:
    npx react-native@latest init MyFreshProject
    
  2. 项目创建成功后,执行npm run ios可在iOS模拟器正常运行。
  3. 安装@react-native-community/geolocation(版本^3.0.6),并在Info.plist中添加配置:
    <key>NSLocationWhenInUseUsageDescription</key>
    <string></string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string></string>
    
  4. 在App.tsx中添加代码:
    import Geolocation from '@react-native-community/geolocation';
    ...
    useEffect(() => {
      Geolocation.getCurrentPosition(info => console.log(info));
    }, []);
    

编译错误

执行npm run ios后编译失败,错误输出:

/Users/aberikashvili/Documents/.../MyFreshProject/node_modules/@react-native-community/geolocation/ios/RNCGeolocation.mm:393:23: error: property 'sourceInformation' not found on object of type 'CLLocation *'
mocked = location.sourceInformation.isSimulatedBySoftware;
                  ^
1 error generated.

** BUILD FAILED **

The following build commands failed:
CompileC /Users/aberikashvili/Library/Developer/Xcode/DerivedData/MyFreshProject-cviktleltpvwpcdkzpdqowhphiwn/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/react-native-geolocation.build/Objects-normal/x86_64/RNCGeolocation.o /Users/aberikashvili/Documents/.../MyFreshProject/node_modules/@react-native-community/geolocation/ios/RNCGeolocation.mm normal x86_64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

已尝试注释掉App.tsx中Geolocation相关代码,但编译仍然失败,寻求解决思路。

解决思路

原因分析

sourceInformation是iOS 15.0及以上版本CLLocation新增的属性,而你的XCode 12.5.1仅支持最高iOS 14.5版本,编译器无法识别该属性,导致编译失败。

具体解决方案

方案1:降级地理定位库版本

选择不依赖sourceInformation属性的旧版本,比如3.0.0:

npm uninstall @react-native-community/geolocation
npm install @react-native-community/geolocation@3.0.0

安装完成后重新执行npm run ios。

方案2:修改库源码(临时修复)

找到node_modules/@react-native-community/geolocation/ios/RNCGeolocation.mm文件,定位到第393行,添加iOS版本判断:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
mocked = location.sourceInformation.isSimulatedBySoftware;
#else
mocked = NO; // 根据需求设置默认值即可
#endif

修改后保存,重新执行npm run ios。注意:这种修改会在依赖重新安装后失效,可配合patch-package工具打持久化补丁。

方案3:升级XCode和iOS模拟器

将XCode升级到13.0及以上版本(对应支持iOS 15+),同时将Simulator的iOS版本升级到15.0或更高,升级后重新编译项目。

内容的提问来源于stack exchange,提问作者Arkadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:18:19