【问题标题】:Associate multiple info.plist files with a single target将多个 info.plist 文件与单个目标相关联
【发布时间】:2013-12-17 14:44:32
【问题描述】:

在我的 iOS 项目中,我创建了一个单独的 plist 文件,其中包含所有社交共享密钥和 appIds 等的值。

如何在项目/目标设置中指定这个新的 plist 文件是默认 info.plist 文件的扩展名? 我可以在主 info.plist 文件中创建一个指向新文件的链接吗?

一些第三方库尝试在项目 info.plist 文件中查找键值对,因此我没有在参考点指定新 plist 文件的选项。

我只能在 Build Settings > Packaging > Info.plist 中指定一个文件

【问题讨论】:

    标签: ios xcode info.plist


    【解决方案1】:

    据我所知,您不能链接两个 plist 文件。每个目标配置只能设置一个 plist。

    也许,根据配置分隔 plist 文件是您所寻找的。 为此,请转到 Build Settings > Packaging > Info.plist File,展开它并为指定的配置设置不同的 plist 文件路径(默认情况下有 2 个配置:Debug 和 Release)。

    【讨论】:

    • 我的尝试是模块化我的属性。我想在一个单独的 plist 中维护所有 facebook/twitter/pinterest/tumblr ...以及所有此类社交元数据。您的建议是在构建时选择一个 plist 文件。
    • 无法通过更改构建设置来做到这一点,但我看到了一个解决方案。您可以 ddd 脚本作为构建阶段中的构建阶段之一(添加编辑器->添加构建阶段->添加运行脚本构建阶段)。此脚本应处理 plist 连接。
    【解决方案2】:

    正如@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 的更多信息。

    【讨论】:

      【解决方案3】:

      据我所知,只能有一个 Info.plist 文件,在上面提到的 Build Settings 下指定。

      不过,有一种方法可以根据应用程序通过- (NSDictionary *)infoDictionary 方法访问 info.plist 文件这一事实来管理“扩展”plist 文件。即,您可以:

      • infoDictionary 默认实现与您自己的实现混合;

      • 在您的infoDictionary 实现中,您将调用原始实现,然后通过读取“扩展”plist 文件条目来扩展返回的NSDictionary

      您甚至可以定义自己的特殊键,例如,kExtensionPlistFile 用于指向“扩展”plist 文件的 Info.plist。

      【讨论】:

      • 你能举一个使用 swift 5 的 swizzle 例子吗?我试过这个。但它不会被调用:公共扩展 NSDictionary { func infoDictionary() -> NSDictionary { print("swizzle?") return NSDictionary() } }
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多