将多个info.plist文件与一个目标关联

6
在我的iOS项目中,我创建了一个单独的plist文件,其中包含所有社交共享密钥和AppId等值。
如何在项目/目标设置中指定这个新的plist文件是默认info.plist文件的扩展? 可以在主要的info.plist文件中创建一个链接指向新的文件吗?
一些第三方库尝试在项目info.plist文件中查找键值,所以我没有在引用点指定新的plist文件的选项。
我只能在“构建设置”>“打包”>“Info.plist”中指定一个文件。
3个回答

5
据我所知,您不能链接两个plist文件。每个目标配置只能设置一个plist文件。 也许,按配置文件分离plist文件是您想要的。 要做到这一点,请转到“构建设置”>“打包”>“Info.plist文件”,展开它并为指定的配置设置不同的plist文件路径(默认情况下有2个配置:调试和发布)。

我的目标是将我的属性模块化。我想将所有的Facebook/Twitter/Pinterest/Tumblr等社交元数据都保存在一个单独的plist文件中。而你所建议的是在构建时选择一个plist文件。 - ScorpionKing2k5
2
无法通过更改构建设置来实现此目标,但我看到了一种解决方案。您可以将脚本作为构建阶段之一添加到构建阶段中(添加编辑器-> 添加构建阶段-> 添加运行脚本构建阶段)。这个脚本应该处理plist连接。 - pjanecze

3

正如 @pjanecze 提到的那样,您可以通过在构建阶段编写脚本来实现所需功能。例如:

if [ $CONFIGURATION != 'Debug' ]; then
    build_hash=`git log -1 --format="%h"`
    /usr/libexec/PlistBuddy -c "Set :git_sha ${build_hash}" MyInfo.plist
    /usr/libexec/PlistBuddy -c "delete :foobar" MyInfo.plist
fi

您可以通过访问man PlistBuddy来获取有关如何使用PlistBuddy的更多信息。


2
据我所知,只能有一个Info.plist文件,在上面提到的Build Settings中指定。
但是,有一种方法可以管理“扩展”plist文件,这依赖于应用程序通过- (NSDictionary *)infoDictionary方法访问info.plist文件的事实。也就是说,你可以:
- 混合使用自己的实现和默认实现来替换infoDictionary; - 在你的infoDictionary实现中,你将调用原始实现,然后通过读取“扩展”plist文件条目来扩展返回的NSDictionary
你甚至可以定义自己的特殊键,例如kExtensionPlistFile,用于在Info.plist中指向“扩展”plist文件。

你能给出一个使用 Swift 5 的 swizzle 示例吗?我试了这个,但它没有被调用:public extension NSDictionary { func infoDictionary() -> NSDictionary { print("swizzle?") return NSDictionary() } } - user1709076

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接