如何更改 info.plist 中的 NSServices 并在系统中进行更改?

Posted

技术标签:

【中文标题】如何更改 info.plist 中的 NSServices 并在系统中进行更改?【英文标题】:How to change NSServices which in info.plist and make changes happen in system? 【发布时间】:2018-08-22 09:56:19 【问题描述】:

我在 info.plist 中添加服务

<key>NSServices</key>
<array>
    <dict>
        <key>NSMessage</key>
        <string>service</string>
        <key>NSPortName</key>
        <string>ServiceDemo</string>
        <key>NSMenuItem</key>
        <dict>
            <key>default</key>
            <string>Service Demo</string>
        </dict>
        <key>NSRestricted</key>
        <false/>
        <key>NSRequiredContext</key>
        <dict/>
        <key>NSSendTypes</key>
        <array>
            <string>NSStringPboardType</string>
        </array>
    </dict>
</array>

运行应用程序,一切正常。 现在,我想更改一些值,但是在我在 info.plist 中编辑后 -> 运行 -> 在终端中键入命令

/System/Library/CoreServices/pbs -dump_pboard

什么都没有改变。 我尝试清理 DerivedData -> 重新启动 Xcode -> shift+command+K -> 运行,没有任何改变。 重新启动计算机没有帮助。 我想知道如何在首次启动时安装 info.plist 中的服务?以及在我运行应用程序时如何进行更改?

顺便说一句,这些代码在 AppDelegate.swift 中

func applicationDidFinishLaunching(_ aNotification: Notification) 
    NSApplication.shared.servicesProvider = ServiceProvider()
    NSUpdateDynamicServices()

详见demo on GitHub

【问题讨论】:

【参考方案1】:

在 XCode 中构建应用后,您是否尝试过运行 /System/Library/CoreServices/pbs -update

【讨论】:

以上是关于如何更改 info.plist 中的 NSServices 并在系统中进行更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 TARGET_OS 更改 Info.plist 标志?

你可以在 Xcode 的构建阶段更改运行脚本中的 info.plist 吗?

如何使用简单的字符串更改自定义 Info.plist 键

如何在 Flutter 中更改/添加/编辑 Info.plist

以编程方式更新 info.plist 中的值 [重复]

iTunes Connect App Name vs. Bundle 在 info.plist 中的显示名称