public void Recursively(IViewWrapper customView, List <DetectedError> detectedErrors, InspectorViewMode viewMode) { if (detectedErrors.Count >= AccessibilityService.MaxIssues) { return; } var errorType = DetectedErrorType.None; ContrastAnalysis contrastAnalisys = null; if (customView is ITextBoxWrapper textField) { var parentColor = textField.BackgroundColor; if (parentColor == null && textField.Superview != null) { var result = BackColorSearch(textField.Superview); if (result != null) { contrastAnalisys = new ContrastAnalysis((NSColor)textField.TextColor.NativeObject, (NSColor)result.Color.NativeObject, (NSFont)textField.Font.NativeObject); contrastAnalisys.View1 = customView; contrastAnalisys.View2 = textField.Superview; if (!contrastAnalisys.IsPassed) { errorType |= DetectedErrorType.Contrast; } } } } if (IsSelectableView(customView)) { if (string.IsNullOrEmpty(customView.AccessibilityTitle)) { errorType |= DetectedErrorType.AccessibilityTitle; } //if (string.IsNullOrEmpty(customView.AccessibilityHelp)) //{ // errorType |= DetectedErrorType.AccessibilityHelp; //} if (customView.AccessibilityParent == null) { errorType |= DetectedErrorType.AccessibilityParent; } } if (errorType != DetectedErrorType.None) { var detectedError = new DetectedError() { View = customView, ErrorType = errorType }; if (contrastAnalisys != null) { detectedError.Color1 = contrastAnalisys.Color1.ToHex(); detectedError.Color2 = contrastAnalisys.Color2.ToHex(); detectedError.ContrastRatio = (float)contrastAnalisys.Contrast; detectedError.View2 = contrastAnalisys.View2; } detectedErrors.Add(detectedError); } if (customView.Subviews == null || customView.IsBlockedType()) { return; } foreach (var item in customView.Subviews) { Recursively(item, detectedErrors, viewMode); } }