iOS: CFTypeRef запрещен ARC
Я хотел бы получить имя пользователя / пароль из моей брелка. для этого я последовал этому руководству:
Простой доступ к брелокам для iPhone
Но эта часть не допускается с ARC:
- Что может вызвать отказ SecItemAdd или SecItemCopyMatching?
- security / codesign в Sierra: Keychain игнорирует настройки контроля доступа и пользовательские подсказки для разрешения
- IOS хранит несколько паролей в цепочке ключей
- Данные iOS Keychain потеряны при давлении памяти iPhone?
- Использование SecItemUpdate в службах Keychain
NSData *result = nil; OSStatus status = SecItemCopyMatching( (CFDictionaryRef)searchDictionary, (CFTypeRef *)&result);
Что я могу сделать?
- Проблема с возможностью использования кода для моего ключа
- SecCopyErrorMessageString дает «Использование неразрешенного идентификатора» в swift
- Создание NSURLCredential, возвращающее null
- Изменение свойства $ (AppIdentifierPrefix) вручную?
- Не удается включить совместное использование ключей для Xcode 8.0 beta 6
- Проблема с использованием Enterprise и использования UUID
- Проверьте штырь, не покидая брелок iOS
- Сбой при запуске, потому что приложение слишком долго - тупик - брелок
ARC управляет только объектами-C. Если вы __bridge
типы Core Foundation, вам нужно сообщить ARC, которому принадлежит переменная, используя __bridge
, __bridge_retained
или __bridge_transfer
.
Вот официальная документация Apple по бесплатному мостовому соединению под ARC, или см. Это сообщение в блоге (прокрутите вниз до Toll-Free Bridging) для отличного обзора.
Например:
NSData *inData = nil; CFTypeRef inTypeRef = (__bridge CFTypeRef)inData; OSStatus status = SecItemCopyMatching( (__bridge CFDictionaryRef)searchDictionary, &inTypeRef);
CFTypeRef inData = NULL; OSStatus status = SecItemCopyMatching( (__bridge CFDictionaryRef)searchDictionary, & inData); NSData *data = (__bridge NSData *)inData;