Ionic 2 iOS应用位置访问描述修改失败求助:修改后遭自动替换
嘿,我之前也碰到过这个一模一样的坑!折腾了好一会儿才搞定,给你几个靠谱的解决方案:
1. 直接在config.xml里添加偏好设置(最稳妥的方法)
Cordova构建时会优先读取config.xml里的平台偏好设置,覆盖插件的默认变量。打开你的项目根目录下的config.xml,找到<platform name="ios">节点,添加这两个偏好:
<platform name="ios"> <!-- 前台位置访问描述 --> <preference name="NSLocationWhenInUseUsageDescription" value="Allow location access for maps" /> <!-- 后台位置访问描述(如果你的应用需要后台定位的话) --> <preference name="NSLocationAlwaysUsageDescription" value="Allow location access for maps even when app is in background" /> <!-- 其他iOS平台配置... --> </platform>
这样不管插件怎么设置,构建后的AppName-Info.plist都会用你这里定义的描述文本。
2. 确认插件安装时的变量已正确写入config.xml
有时候安装插件时如果没加--save参数,变量不会保存到config.xml,导致每次构建都用默认值。你可以打开config.xml检查插件节点:
<plugin name="cordova-plugin-geolocation" spec="https://github.com/apache/cordova-plugin-geolocation.git"> <variable name="GEOLOCATION_USAGE_DESCRIPTION" value="Allow location access for maps" /> </plugin>
如果没有这个<variable>节点,重新安装插件时加上--save:
ionic cordova plugin remove cordova-plugin-geolocation ionic cordova plugin add https://github.com/apache/cordova-plugin-geolocation.git --variable GEOLOCATION_USAGE_DESCRIPTION="Allow location access for maps" --save
3. 清理构建缓存,彻底重新构建
有时候旧的构建缓存会导致配置不生效,试试这套命令:
# 移除iOS平台 ionic cordova platform rm ios # 清理Cordova缓存 ionic cordova clean # 重新添加iOS平台 ionic cordova platform add ios # 重新构建iOS应用 ionic cordova build ios
4. 手动修改plist后锁定配置(不推荐,但应急可用)
如果上面的方法都不行,你可以手动修改platforms/ios/YourAppName/YourAppName-Info.plist里的描述,但要注意:下次构建时可能会被覆盖。如果要避免被覆盖,可以添加一个Cordova钩子脚本,在构建前自动替换plist里的内容,但这属于进阶操作,前面的方法应该足够解决问题了。
为什么会出现这个问题?
Cordova Geolocation插件的iOS部分默认用$NSLocationWhenInUseUsageDescription和$NSLocationAlwaysUsageDescription作为占位符,如果没有正确传入变量或者config.xml里的偏好设置,构建时就会保留这些占位符,导致应用里显示奇怪的文本。
试试这些步骤,应该能搞定你的问题!
内容的提问来源于stack exchange,提问作者Shafeef Omar

