gpt4 book ai didi

xcode - 在沙盒 OSX 应用程序和扩展程序之间共享 NSUserDefault

转载 作者:行者123 更新时间:2023-12-03 14:59:48 25 4
gpt4 key购买 nike

背景

我正在开发一个带有相关 Today Widget 扩展的 OSX 应用程序。我希望主应用程序和扩展程序共享用户首选项,就像 Sharing Data with Your Containing App 中所述来自苹果。就我而言,主应用程序写入首选项,扩展程序读取它们。

  • OSX 10.11.6
  • Xcode 7.3.1
  • swift 2.2

  • 应用程序和扩展程序都是沙盒化的。他们也是同一个应用程序组的成员。相关权利,验证使用 codesign -d --entitlements , 在应用程序和扩展程序上:
    com.apple.security.app-sandbox: true
    com.apple.security.application-groups:
    - com.example.Common

    代码

    应用程序和扩展程序共享相同的代码来初始化和访问 NSUserDefaults .
    NSUserDefaults.init(suiteName: "com.example.Common")

    问题

    主应用程序在以下位置创建首选项:
    ~/Library/Containers/com.example/Data/Library/Preferences/com.example.Common.plist

    然后打开扩展程序时,它的 NSUserDefault实例为空。

    如果我将应用程序创建的 plist 移动到:
    ~/Library/Group Containers/com.example.Common/Library/Preferences/com.example.Common.plist

    分机的 NSUserDefault实例填充有预期值。

    备注 :
    从 Xcode 构建和运行应用程序时不会发生以下情况,只有在选择产品 -> 存档,然后导出 -> 导出为 Mac 应用程序时才会发生。从 Xcode 构建/运行时,主应用程序会创建 plist 文件,其中扩展程序需要如上所述。

    最佳答案

    我现在做同样的事情——沙盒应用程序 + 共享扩展 + NSUserDefault + 应用程序组,它工作正常。也许苹果在这段时间内修复了一些错误?

    关于xcode - 在沙盒 OSX 应用程序和扩展程序之间共享 NSUserDefault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39310784/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com