为 mac 催化剂的 info.plist 文件中的键设置不同的值

Posted

技术标签:

【中文标题】为 mac 催化剂的 info.plist 文件中的键设置不同的值【英文标题】:Set different value to key in info.plist file for mac catalyst 【发布时间】:2021-01-11 13:42:36 【问题描述】:

我正在开发一个在 ios 和 macOS(Catalyst)上运行的应用程序。本应用支持打开文档。

我已在 info.plist 中将 LSSupportsOpeningDocumentsInPlace 的值声明为 NO,但这不会为 mac 催化剂目标构建。构建错误显示“macOS 不支持'LSSupportsOpeningDocumentsInPlace = NO'。删除条目或设置它是,并确保应用程序确实在 macOS 上打开了文档。”但是这个应用程序不处理原始文档,它需要复制文档。

那么有没有一种方法可以在 info.plist 中为 iOS 和 macOS 设置不同的值?即 LSSupportsOpeningDocumentsInPlace = NO 对于 iOS 和 LSSupportsOpeningDocumentsInPlace = YES 对于 macOS

【问题讨论】:

【参考方案1】:

有不同的方法以不同程度的灵活性来解决这个问题。

1。 Catalyst 的自定义 Info.plist

在构建设置中为 INFOPLIST_FILE 键引用的 Catalyst 的完全自定义 Info.plist。只需单击每个构建配置(通常是调试和发布)旁边的 + 以添加特定 SDK 的覆盖并选择“任何 macOS SDK”。这样,您可以省略自定义 Info.plist 中的键并依赖默认值。如果默认值发生变化,您将免费获得。

2。自定义用户定义键

从 Info.plist 的 Build Settings 中引用自定义的用户定义键。转到构建设置并点击 + 按钮,然后在基本/自定义/全部旁边的最顶部选择“添加用户定义的设置”|组合/级别:

使用听起来与您要为其提供平台相关值的键相似的自定义键,并使用与上述相同的技巧来覆盖“任何 macOS SDK”的值:

现在,跳到 Info.plist 并使用嵌入在 $() 中的自定义键作为 LSSupportsOpeningDocumentsInPlace 键的值:

注意:即使它是一个布尔值,其值类型也是string

3。使用 xcconfig 文件

如果您已经使用 xcconfig 文件以 git 友好格式管理构建设置,您也可以使用它来定义您的自定义值。假设您有一个 Config.xcconfig 文件用于 Debug 和 Release(或所有构建配置),请从项目的 Info 屏幕中选择它们以确保它们用于您的目标:

在配置文件中,您可以定义一个键值对并覆盖特定 SDK 的值,如下所示:

CUSTOM_LS_SUPPORTS_OPENING_DOCUMENTS_IN_PLACE = NO
CUSTOM_LS_SUPPORTS_OPENING_DOCUMENTS_IN_PLACE[sdk=macosx*] = YES

跳到构建设置并滚动到最底部。您应该在与选项 2 中定义的相同的用户定义部分中看到键值对。使用该值也是等效的,因此请确保在 Info.plist 中使用正确的键。

【讨论】:

以上是关于为 mac 催化剂的 info.plist 文件中的键设置不同的值的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Info.plist 文件从 mac os 项目转换为 iphone 项目?

无法将新的 mac 版本上传到应用商店

通过 info.plist 中的 CFBundleDocumentTypes 覆盖 Mac 应用程序文件关联

关于macbook里info.plist文件无法修改怎么办?

在 Qt 中向 Info.plist 添加条目

“找不到 google-services.json 或 GoogleService-info.plist 文件”iOS 项目、Unity、Mac 计算机