Xamarin.iOS iCloud访问iCloud键值存储

时间:2016-06-17 18:20:39

标签: c# xamarin.ios icloud nsubiquitouskeyvaluestore

我试图将iCloud键值存储支持包含在Visual Studio 2013中的Xamarin.iOS(v4.0.30319)应用程序(Mac上的Xcode 7.2.1)中,但不断获取:

  

错误MT1019:您的应用程序的权利不受您的支持   当前的配置文件,无法安装在设备上   '我的iPhone 4'。请查看iOS设备日志以获取更多详细信息   信息(错误:0xe8008016)。

顺便说一句,设备上没有日志,至少xCode不会显示任何内容。

我在Xcode中使用本机目标C编写了另一个应用程序,它也支持iCloud,它运行正常。所以我做了同样的事情:

  1. 在developer.apple.com上创建了iCloud容器,名称为" iCloud。[我的团队ID]。[我的包ID]" (我使用了精确值,没有宏)
  2. 在developer.apple.com上为[我的包ID]创建了应用ID,启用了iCloud for container" iCloud。[我的团队ID]。[我的包ID]"
  3. 创建了开发配置文件
  4. 将其安装在Xcode中。
  5. 在Visual Studio中选择了" iOS Bundle Signing"
  6. 编辑后的权利here
  7.     <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
        <plist version="1.0">
        <dict>
            <key>com.apple.developer.ubiquity-kvstore-identifier</key>
            <string>iCloud.[my team id].[my bundle id]</string>
            <key>com.apple.developer.ubiquity-container-identifiers</key>
            <array>
                <string>iCloud.[my team id].[my bundle id]</string>
            </array>
        </dict>
        </plist>
    

    之后,Xamarin不想在设备上安装我的应用程序。 我更改了容器名称,从权利中删除了com.apple.developer.ubiquity-container-identifiers并将其返回(始终删除所有配置文件,重新下载到xcode,重新启动visual studio,清理解决方案,删除设备上的配置文件,卸载现有的应用程序)。 只有当我从权利中删除com.apple.developer.ubiquity-kvstore-identifier和com.apple.developer.ubiquity-container-identifiers时,Xamarin才会将应用程序安装到设备上。但显然NSUbiquitousKeyValueStore不起作用。 我的设置有什么问题?

1 个答案:

答案 0 :(得分:1)

在设置Capabilities-&gt; Cloud“on”之后,我甚至试图从我的其他xcode项目获得权利。它生成plist,只有com.apple.developer.ubiquity-kvstore-identifier值和默认值 $(AppIdentifierPrefix)[我的包ID]。

当我几乎准备好睡觉时,app就会启动! 最终权利(没有“iCloud。”previx,没有其他密钥):

<plist version="1.0">
<dict>
    <key>com.apple.developer.ubiquity-kvstore-identifier</key>
    <string>[my team id].*</string>

    <key>com.apple.developer.ubiquity-container-identifiers</key>
    <array>
      <string>iCloud.[my team id].[my bundle id]</string>
    </array>

    <key>com.apple.developer.icloud-container-identifiers</key>
    <array>
      <string>iCloud.[my team id].[my bundle id]</string>
    </array> 

</dict>
</plist>

诀窍就是打开myapp.mobileprovision文件并查看它的建议。

它确实有效,但NSFileManager.DefaultManager.GetUrlForUbiquityContainer(null)返回null,NSFileManager.DefaultManager.UbiquityIdentityToken也为null。所以没有办法看看iCloud是否打开:它总是保存数据甚至显示它(直到重新安装应用程序)。但是,如果iCloud在重新安装后数据仍然存在。

更新

重要通知:NSFileManager.DefaultManager.GetUrlForUbiquityContainer(null)在DEBUG中返回null,adHoc版本返回有效的令牌和路径。

APPLE讨厌开发者!我花了3天的时间来制作云,所有这些都是因为缺乏文档,现有的已经过时了。