代码之家  ›  专栏  ›  技术社区  ›  Doug Null

Xcode Obj-C app为containerURLForSecurityApplicationGroupIdentifier返回的应用程序组容器获取零

  •  0
  • Doug Null  · 技术社区  · 5 年前

    通过iOS8和扩展,苹果推出了应用程序组容器( more info here ).

    我们通过网络使用它 NSFileManager containerURLForSecurityApplicationGroupIdentifier: 方法它在AppStore的生产环境中运行良好(使用iOS8和iOS7)。问题是因为我们的团队更新到 Xcode 6.1 (6A1052d) ,该方法返回 nil 在模拟器上。

    我们找了很多,但没有找到任何线索。甚至这个 question this one 在这里不适用。

    TLDR:问题

    文件操作 方法在模拟器上有效吗?有没有办法解决这个问题?

    0 回复  |  直到 6 年前
        1
  •  22
  •   Juan Fran Jimenez    11 年前

    方法 containerURLForSecurityApplicationGroupIdentifier: 可在设备和模拟器中工作。

    如果您已经设置了两个目标(例如,目标和WatchKit扩展),它们将向支持组共享数据,并且会不断返回

    1. 目标设置>通用>团队> 贵公司 应在此处选择签名团队。如果有警告和警告 解决这个问题 巴顿,乖点

    2. 目标设置>能力>应用程序组>正在播放+显示您的 组通用域名格式。你的公司。你的应用程序。共享容器 组名(“sharedContainer”是我选择的名称)已选中,并且为黑色 (不是红色)。如果是红色或有警告,请修复此问题 按钮,续订组或创建其他组。

    3. 目标设置>构建设置>代码签名>代码签名 授权:指向调试和调试的授权文件 释放(类似于 )

    4. 目标设置>构建设置>代码签名>代码签名 身份:确保该身份是上述所选团队的一部分。 我用 iOS开发者 .

    5. 目标设置>构建设置>代码签名>供应 简介:如上所述,确保您使用的PP是团队成员 自动的

    检查一下 两个目标 共享数据。

        2
  •  17
  •   Matthieu Rouif    11 年前

    我能够从自己的角度解决这个问题。文件上说

    你的应用程序必须具有com。苹果安全应用程序组权限 对于指定的应用程序组。 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/index.html#//apple_ref/occ/instm/NSFileManager/containerURLForSecurityApplicationGroupIdentifier :

    在我的应用程序中的某个时刻,我已经从我的应用程序目标/构建设置/代码签名/代码签名权限中删除了权限文件。调试和发布都必须包含您的应用程序。权利档案。我的调试没有包括它,所以它不能在模拟器上工作

        3
  •  5
  •   respectTheCode    11 年前

    它没有明确说明文档的名称,但我发现组标识符区分大小写。

        4
  •  1
  •   superZhen    11 年前

    我发现containerURLForSecurityApplicationGroupIdentifier可以在实际设备和xcode 6.2模拟器上工作。我遇到这个问题是因为我也得到了零,但现在我发现根本原因是我输入的“应用程序组”名称错误。

    此外,以下是您需要检查的列表:

    1. https://developer.apple.com
    2. 确保“web控制台:标识符->上的“开发”和“生产”中的“应用程序组”已“启用”;应用程序ID'
    3. 确保匹配的“配置配置文件”处于“活动”状态
    4. 包含应用程序和扩展应用程序中的授权组名称应与您在步骤1中创建的名称匹配
    5. 确保所有目标的捆绑包标识符与“web控制台:标识符->应用程序ID
    6. 确保所有目标中的“团队”与web控制台中的团队匹配
    7. 确保在包含应用程序和扩展应用程序目标的“功能”选项卡下选择正确的组,并且没有红色
    8. 重建和祈祷
        5
  •  0
  •   lahmar    11 年前

    containerURLForSecurityApplicationGroupIdentifier: 在我的模拟器中工作。但是,如果我删除了组文件夹中的所有文件(以防用户在我的应用程序中注销),那么在Xcode 6.1下一次运行时,该方法将返回nil。我也用Xcode 6.2和iOS SDK 8.2测试版测试了这一点,但它不起作用。

    该代码在实际设备上运行良好。

    我也尝试了上述解决方案,但没有成功。

        6
  •  0
  •   martn_st    11 年前

    iOS团队资源调配配置文件 (不需要在模拟器中运行)。

    iOS团队资源调配配置文件 用于调试环境。使命感 containerURLForSecurityApplicationGroupIdentifier: 在设备上工作得非常好。之后,我回到模拟器,你看,它又开始工作了。

        7
  •  0
  •   George    10 年前

    “.com.apple.mobile\u container\u manager.metadata.plist” nil 对于 containerURLForSecurityApplicationGroupIdentifier

    因此,我将代码更改为:

        NSURL *groupPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:YGGroupIdentifier];
        NSArray *fileArray = [fileManager contentsOfDirectoryAtPath:[groupPath path] error:nil];
        for (NSString *filename in fileArray)  {
            if (![filename hasPrefix:@".com"]) {
                [fileManager removeItemAtPath:[[groupPath path] stringByAppendingPathComponent:filename] error:nil];
            }
        }