一、核心配置(你需要的完整代码)
1. 找到配置文件
路径:ios/Podfile
2. 替换 / 添加这段代码
找到 post_install 代码块,替换成以下完整配置:
ruby
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
# 定位权限配置(你需要的核心代码)
target.build_configurations.each do |config|
# 仅使用时定位权限
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'PERMISSION_LOCATION_WHEN_IN_USE=1'
# 始终允许定位权限
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'PERMISSION_LOCATION_ALWAYS=1'
end
end
end
二、必须补充的 iOS 权限声明(不配置会崩溃 / 被拒)
仅配置宏不够,必须在 Info.plist 添加权限描述文案,否则 App 无法请求定位、审核被拒。
1. 打开文件
路径:ios/Runner/Info.plist
2. 添加以下代码
xml
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要获取您的位置信息,用于展示当前位置、导航等功能</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>需要始终获取您的位置信息,用于后台定位、轨迹记录等功能</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>需要始终获取您的位置信息</string>
文案可以根据你的业务修改,不能为空。
三、生效步骤
配置完成后,执行以下命令让配置生效:
- 进入 iOS 目录:
cd ios - 重新安装依赖:
pod install - 返回根目录:
cd .. - 重启 Flutter 项目
四、代码解释
GCC_PREPROCESSOR_DEFINITIONS:iOS 编译预定义宏PERMISSION_LOCATION_WHEN_IN_USE=1:开启仅使用时定位权限PERMISSION_LOCATION_ALWAYS=1:开启始终定位权限||= ['$(inherited)']:关键修复 ------ 防止覆盖原有配置,避免编译报错
五、常见问题
1. 报错:Undefined symbol
原因:缺少 ||= ['$(inherited)'],用我给的完整代码即可解决。
2. 权限请求不弹出
原因:未配置 Info.plist 权限文案,必须补充。
3. 只需要一种定位权限
- 仅使用时:只保留
PERMISSION_LOCATION_WHEN_IN_USE=1 - 始终允许:必须同时保留两个宏(iOS 系统要求)