containerURLForSecurityApplicationGroupIdentifier获取nil值

Hit*_*dra 5 nsurl nsfilemanager ipad ios ios7

我正在制作两个与一个文件通信的iPad应用程序,并从一个文件中获取所有数据.我搜索并找到这个"containerURLForSecurityApplicationGroupIdentifier",我们可以在其中创建组和存储.我写了下面的代码.在我写的权利文件中

<?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.security.app-sandbox</key>
       <true/>
     <key>com.apple.security.application-groups</key>
     <array>
        <string>$(TeamIdentifierPrefix)com.xxx.catalogapp.Coredata</string>
     </array>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)com.xxx.catalogapp.Coredata</string>
    </array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

在Code中我写这个

NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* storeUrl = [fileManager 
containerURLForSecurityApplicationGroupIdentifier:@"com.xxx.catalogapp.Coredata"];
NSLog(@"%@", storeUrl);
Run Code Online (Sandbox Code Playgroud)

但是storeUrl我正在获得nil价值.

小智 5

Xcode6(目前处于测试阶段)强制共享文件夹ID以"group"开头.

共享我的CoreData商店适合我使用以下URL,Xcode6/iOS8都是beta.

NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* storeUrl = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.XXX"];
Run Code Online (Sandbox Code Playgroud)

一旦Xcode6发布,似乎stevesliva链接的文档将被淘汰


ste*_*iva 2

好吧,我用自己的代码验证了它。团队标识符显示在 Library/Group Containers 的子目录中,因此您实际上需要将其包含在代码中:

\n\n
NSFileManager* fileManager = [NSFileManager defaultManager];\nNSURL* storeUrl = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"YOURTEAMID.com.xxxxxxxxxxx.catalogapp.Coredata"];\nNSLog(@"%@", storeUrl);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不确定的是,这是否是一个必需的名称(它对用户不太友好),或者是否是苹果推荐的名称,以使其变得超级独特。

\n\n

正如上面评论中提到的,这是从 Apple 的应用程序沙箱设计指南 - 应用程序组容器目录开始解决的:

\n\n
这些组容器会根据这些键的存在而自动添加到每个 app\xe2\x80\x99s 沙箱容器中,并存储在 ~/Library/Group Containers/ 中,其中 是组的名称。组名称本身必须以您的开发团队 ID 开头,后跟句点。
\n