public static CFException FromCFError (IntPtr cfErrorHandle, bool release) { if (cfErrorHandle == IntPtr.Zero) throw new ArgumentException ("cfErrorHandle must not be null.", "cfErrorHandle"); var e = new CFException ( ToString (CFErrorCopyDescription (cfErrorHandle)), (NSString) Runtime.GetNSObject (CFErrorGetDomain (cfErrorHandle)), CFErrorGetCode (cfErrorHandle), ToString (CFErrorCopyFailureReason (cfErrorHandle)), ToString (CFErrorCopyRecoverySuggestion (cfErrorHandle))); var cfUserInfo = CFErrorCopyUserInfo (cfErrorHandle); if (cfUserInfo != IntPtr.Zero) { using (var userInfo = new NSDictionary (cfUserInfo)) { foreach (var i in userInfo) e.Data.Add (i.Key, i.Value); } } if (release) CFType.Release (cfErrorHandle); return e; }