小编kna*_*f74的帖子

secItemCopyMatching返回nil数据

首先,我观看了WWDC 2013关于用钥匙链保护秘密的会议.我想做一个基本的密码存储.观看了整个视频,但在视频的前10分钟内找到了我需要的内容.这似乎很简单,但我并不完全理解数据编码和检索的工作原理.

问题:在secItemCopyMatching之后,我检查我的NSData对象以确保它在转换为NSString之前不是nil.问题是,它始终是零.下面是我如何保存钥匙串条目或更新,然后是我如何检索它.任何帮助和解释将非常感谢.

更新(已编辑):Fruity Geek,感谢您的回复.我使用__bridge更新了下面的代码.我的问题现在归结为,我是否正确存储和检索密码?我有错还是只有一个或另一个?我的NSData实例总是为零.我正在检查返回代码和我的SecItemAdd和SecItemUpdate(当存在keychaing条目时)正常工作.我似乎无法检索存储的数据(密码)的字符串值,以将其与用户输入的密码进行比较.欣赏帮助家伙和女孩.这是我现在正在做的事情:

更新#2 :(使用Fruity Geek的答案和最终工作版本编辑.我的编辑仅包括对以下代码的更改.)

设置钥匙串条目:

NSData *secret = [_backupPassword dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *query = @{
    (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
    (__bridge id)kSecAttrService: twServiceName,
    (__bridge id)kSecAttrAccount: twAccountName,
    (__bridge id)kSecValueData: secret,
};
OSStatus status =
    SecItemAdd((__bridge CFDictionaryRef)query, NULL);

if (status == errSecDuplicateItem) {
    // this item exists in the keychain already, update it
    query = @{
        (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
        (__bridge id)kSecAttrService: twServiceName,
        (__bridge id)kSecAttrAccount: twAccountName,
    };
    NSDictionary *changes = @{
        (__bridge id)kSecValueData: secret,
    };
    status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge …
Run Code Online (Sandbox Code Playgroud)

objective-c ios

9
推荐指数
1
解决办法
1万
查看次数

如何归档 Swift 包依赖项以将其包含在 XCFramework 中以作为 Swift 包进行二进制分发?

目标是为 Swift 包托管 git 存储库,以将专有代码作为 XCFramework 中的二进制文件分发。源代码依赖于其他 Swift 包。在 .package 配置中列出依赖项是不够的。简单地要求消费者导入依赖项并不是一个选择,因为他们可能在不同级别使用相同的包。我试图解决的主要问题是当我的 Swift Package 导入到项目中时如何解决这些依赖关系。

  1. 每个依赖包也应该归档并包装到 XCFramework 中,对吧?
  2. 我该怎么做呢?

我正在使用的包也可以在 CocoaPod 中找到。

  1. 将它们作为 pod 导入以进行存档会更容易吗?

我已经浏览了以下资源和 SO 帖子,但找不到此特定目的的答案。

ios swift-package-manager

9
推荐指数
1
解决办法
3962
查看次数

使用Instruments跟踪内存泄漏Xcode5和iOS7

我开发了我的第一个应用程序,仍在学习 刚刚更新了Xcode 5,我的iPhone 5正在运行iOS 7.1.我现在正致力于理解"仪器"工具来分析我的应用程序.我正在使用仪器中的泄漏配置文件,并且遇到了一个我无法弄清楚的保留周期和泄漏.感谢我能理解的任何帮助a)如何查明错误和b)我做错了什么以及如何在将来避免它.

在我的应用程序中,我正在使用相机拍摄照片.当相机启动时,我轻触屏幕进行对焦,这时我注意到仪器中出现了泄漏.看起来我的代码中没有保留周期(如果我理解正确)和我的代码中的根漏洞,我不明白.

我正在使用ARC,所以我不应该在我指向我的代码部分中发布"picker"(下面的第2部分,带代码).

CALayer保留周期

  1. 我该如何处理保留周期.它不在我的代码中,但我仍然是它的原因吗?它是否源于"根漏"?如果我不负责,我该怎么办呢?

根泄漏

  1. 我在堆栈跟踪中的唯一代码无法帮助我理解泄漏的来源.该行是仪器指向我的代码是[picker dismissViewControllerAnimated:YES completion:nil]; 在我的imagePickerController中:didFinishPickingMediaWithInfo:方法.我正在粘贴下面的代码.
 - (void)imagePickerController:(UIImagePickerController *)picker
    didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *pickerImage = [info objectForKey:
                            UIImagePickerControllerOriginalImage];

    _imageView.image = pickerImage;

    [picker dismissViewControllerAnimated:YES completion:nil]; // <--- mem-leak
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 我创建我的UIImagePickerController的代码.

- (IBAction)snapPicture:(id)sender
{
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

    // If the camera button was tapped AND we have a camera, use it...
    if ((sender == _cameraButton) && [UIImagePickerController
         isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    } else {
        [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    }

    imagePicker.delegate = …
Run Code Online (Sandbox Code Playgroud)

camera memory-leaks calayer ios automatic-ref-counting

4
推荐指数
1
解决办法
964
查看次数