Как сделать скриншот всего экрана на взломанном iOS-устройстве?

Мне нужно сделать скриншот всего экрана, включая строку состояния, я используюCARenderServerRenderDisplay чтобы добиться этого, он работает прямо на iPad, но не на iPhone 6 Plus. Как отмеченная * часть в коде, если я установилwidth=screenSize.width*scale а такжеheight=screenSize.height*scale, это вызовет сбой, если я просто изменить их как:width=screenSize.height*scale а такжеheight=screenSize.width*scale, это будет работать, но создаст изображение вот так:Я много пробовал, но не нашел причин, кто-нибудь знает это? Надеюсь, я достаточно ясно это описал.

- (void)snapshot
{
    CGFloat scale = [UIScreen mainScreen].scale;
    CGSize screenSize = [UIScreen mainScreen].bounds.size;

    //*********** the place where problem appears        
    size_t width = screenSize.height * scale;
    size_t height = screenSize.width * scale;
    //***********

    size_t bytesPerElement = 4;
    OSType pixelFormat = 'ARGB';
    size_t bytesPerRow = bytesPerElement * width;
    size_t surfaceAllocSize = bytesPerRow * height;

    NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithBool:YES], kIOSurfaceIsGlobal,
                                [NSNumber numberWithUnsignedLong:bytesPerElement], kIOSurfaceBytesPerElement,
                                [NSNumber numberWithUnsignedLong:bytesPerRow], kIOSurfaceBytesPerRow,
                                [NSNumber numberWithUnsignedLong:width], kIOSurfaceWidth,
                                [NSNumber numberWithUnsignedLong:height], kIOSurfaceHeight,
                                [NSNumber numberWithUnsignedInt:pixelFormat], kIOSurfacePixelFormat,
                                [NSNumber numberWithUnsignedLong:surfaceAllocSize], kIOSurfaceAllocSize,
                                nil];

    IOSurfaceRef destSurf = IOSurfaceCreate((__bridge CFDictionaryRef)(properties));

    IOSurfaceLock(destSurf, 0, NULL);
    CARenderServerRenderDisplay(0, CFSTR("LCD"), destSurf, 0, 0);
    IOSurfaceUnlock(destSurf, 0, NULL);

    CGDataProviderRef provider =  CGDataProviderCreateWithData(NULL, IOSurfaceGetBaseAddress(destSurf), (width * height * 4), NULL);
    CGImageRef cgImage = CGImageCreate(width, height, 8,
                                       8*4, IOSurfaceGetBytesPerRow(destSurf),
                                       CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipFirst |kCGBitmapByteOrder32Little,
                                       provider, NULL, YES, kCGRenderingIntentDefault);
    UIImage *image = [UIImage imageWithCGImage:cgImage];
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}

Ответы на вопрос(1)

Ваш ответ на вопрос