You can find the ImageCaptureCore error codes in ICCommonConstants.h.
The error you mention is
ICReturnReceivedUnsolicitedScannerErrorInfo = -9933
Maybe your scanner simply does not support scanning in Black & White? Since Grayscale works, do you even want to use BW?
From the headers:
/*!
@enum ICScannerPixelDataType
@abstract Pixel data types. Corresponds to "ICAP_PIXELTYPE" of the TWAIN Specification.
@constant ICScannerPixelDataTypeBW Monochrome 1 bit pixel image.
@constant ICScannerPixelDataTypeGray 8 bit pixel Gray color space.
@constant ICScannerPixelDataTypeRGB Color image RGB color space.
@constant ICScannerPixelDataTypePalette Indexed Color image.
@constant ICScannerPixelDataTypeCMY Color image in CMY color space.
@constant ICScannerPixelDataTypeCMYK Color image in CMYK color space.
@constant ICScannerPixelDataTypeYUV Color image in YUV color space.
@constant ICScannerPixelDataTypeYUVK Color image in YUVK color space.
@constant ICScannerPixelDataTypeCIEXYZ Color image in CIEXYZ color space.
*/
enum
{
ICScannerPixelDataTypeBW = 0,
ICScannerPixelDataTypeGray = 1,
ICScannerPixelDataTypeRGB = 2,
ICScannerPixelDataTypePalette = 3,
ICScannerPixelDataTypeCMY = 4,
ICScannerPixelDataTypeCMYK = 5,
ICScannerPixelDataTypeYUV = 6,
ICScannerPixelDataTypeYUVK = 7,
ICScannerPixelDataTypeCIEXYZ = 8
};
typedef NSUInteger ICScannerPixelDataType;
Do you really want to support a 1bit per pixel image?