代码之家  ›  专栏  ›  技术社区  ›  Flexicoder

iPhone写入keychain无标准错误

  •  0
  • Flexicoder  · 技术社区  · 15 年前

    我试图写一个进入到钥匙链,但它失败了,返回代码为-25243,文档只列出了“常见”的错误代码,并指向“开放组”寻求帮助。我已经下载了文档,但还不知道该在哪里查找,文档长达1000多页,似乎只是列出了一堆定义。

    有人能帮忙吗?

    4 回复  |  直到 12 年前
        1
  •  5
  •   Steve Chiavelli    13 年前

    在设备上运行时,您可能会看到此错误,这有一些原因。我看到的这两种情况都是在尝试使用访问组将值存储到keychain时发生的。

    • 未启用授权
    • 授权已启用,但访问组不存在

    要确保正确设置所有这些内容:

    1. 在xcode中选择应用程序目标
    2. 选择摘要选项卡
    3. 在“授权”部分中,验证是否选中“启用授权”复选框。
    4. 验证keychain访问组是否包括您试图写入的组。
        2
  •  2
  •   Flexicoder    15 年前

    好吧,问题似乎是我试图在ksecattraccessgroup中存储一个值,将其更改为ksecattordescription,结果一切正常

        3
  •  2
  •   Jonathan    14 年前

    有点晚了,但值得好好回答。尝试将访问组与模拟器中的密钥链一起使用时会发生此错误。

    请注意以下代码段: GenericKeychain 例子。

    #if TARGET_IPHONE_SIMULATOR
            // Ignore the access group if running on the iPhone simulator.
            // 
            // Apps that are built for the simulator aren't signed, so there's no keychain access group
            // for the simulator to check. This means that all apps can see all keychain items when run
            // on the simulator.
            //
            // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the
            // simulator will return -25243 (errSecNoAccessForItem).
    #else           
            [genericPasswordQuery setObject:accessGroup forKey:(id)kSecAttrAccessGroup];
    #endif
    
        4
  •  1
  •   Marcin    12 年前

    我最近遇到了这个问题,结果发现我有多个开发人员帐户,Xcode选择了“错误的”开发人员证书来签署我的调试版本。此证书与应用程序ID不属于同一个开发人员,因此应用程序不再具有访问该密钥链组的权限。

    一旦我强迫代码签名使用正确的开发人员证书,错误就消失了。