【问题标题】:ios8 extension and container app how to share dataios8扩展和容器应用如何共享数据
【发布时间】:2014-07-26 21:44:40
【问题描述】:

我在 iOS 8 扩展程序和容器应用程序之间共享数据时遇到问题。 我从开发门户和 Xcode 建立了组,我的权利 plist 看起来都像:

<dict>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>my group id</string>
    </array>
</dict>

苹果文档中建议使用[[NSUserDefaults standardUserDefaults]的解决方案

对我不起作用。

我已经尝试了@Santa Claus 在这篇帖子Communicating and persisting data between apps with App Groups 中使用的解决方案

[[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];

圣诞老人的解决方案可以在模拟器上运行,但不能在我的 iPhone 4s 上运行,有什么想法可以让它在真实设备上运行吗?还是我错过了什么?

一些更新:

[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group id"];

函数返回 url,来自容器应用程序和扩展程序的 url 看起来相同,如“path /private/var/mobile/Containers/Shared/AppGroup/3DFB9750-A9F3-4C37-BC3C-0D5BF746B‌​233” 。 我从容器应用程序在该文件夹中创建了一个 json 文件,但是当我在设备上运行时,扩展程序在该文件夹中找不到任何文件。但是在模拟器中它发现它很好并且一切正常。

【问题讨论】:

  • 我可以确认my solution 也适用于设备。尝试卸载您的应用程序并重新安装它们。
  • 谢谢,我试过卸载了,还是不能在设备上运行..
  • 确认您的组 ID 在应用程序授权和 NSUserDefaults 初始化中输入的完全相同
  • 他们都是一样的,没有运气:(
  • 查看the other solution to that question 是否有效。您不必使用它,但它会显示应用组是否设置正确。

标签: ios ios8 ios-app-extension


【解决方案1】:

我的解决方案是编辑自定义键盘的 Info.plist:

NSExtension -> NSExtensionAttributes -> RequestsOpenAccess

让它是的。

然后删除设备中的键盘并重新添加。在您的键盘添加页面中,您将找到一个名为“允许完全访问”的设置,启用它,键盘将访问共享数据。

【讨论】:

  • 在模拟器中工作,但同样的东西在设备上不工作,知道为什么吗?
  • 不错!!我花了很长时间才发现它不起作用...您知道一种从扩展程序中检测设置值的方法吗?
  • @heheBear 这在模拟器上对我有用,但在真实设备上没有任何建议?
  • 在我的情况下(共享扩展)不起作用,我已将其添加到 plist 但未显示在真实设备上,仅适用于模拟器
【解决方案2】:

对于键盘扩展,请确保启用 RequestsOpenAccess 作为 heheBear 的答案
并尝试偶尔从设置/键盘中删除并添加回键盘
从 beta 4 开始,键盘扩展不稳定,性能真的很差,包括 beta 5

【讨论】:

    【解决方案3】:

    这个问题只出现在自定义键盘上,iOS8 beta 2 修复了这个问题。

    【讨论】:

    • iOS 8 beta 5 仍然无法在真机上运行,​​只能在模拟器上运行
    • iOS GM 似乎有这个问题,在模拟器上工作但没有设备!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多