¿Qué lenguaje?, el que prefieras que esté capacitado para el desarrollo iOS.
Por ejemplo, C# o VB.Net, utilizando Xamarin + Visual Studio para extender las capacidades de éste al desarrollo de aplicaciones para Android (aunque no necesitas VS, pero bueno, es lo que a mi me gusta).
¿Complicado?, pues depende, si no existen herramientas avanzadas para el lenguaje que escojas entonces significa que deberías desarrollar por ti mismo el algoritmo OCR, por ende... una completa locura. 
En este caso, en la plataforma .Net, existen muchas herramientas (al igual que para C++ y Java por ejemplo, son lenguajes muy demandados y explotados, librerías inteligenes de OCR debe haberlas, pero las desconozco)
yo creo que librerías ocr listas deben haber bastantes, pero no creo que sea tan simple
Para .Net conozco varias librerías pero la que considero más útil es la librería de pago 
Aspose.OCR de 
Aspose.Net (es un conjunto de librerías), además de ser sencilla de utilizar, es bastante "lista", se puede aplicar distintas configuraciones de reconocimiento de idioma y se le puede "entrenar".
La he utilizado poco en el pasado pero guardé un ejemplo de uso, lo comparto por si sirve para esta duda:
Imports Aspose.OCR
 
Public Class Form1
 
    Private Sub Form1_Shown() Handles MyBase.Shown
 
        ' Resource file
        Dim resourceFilePath As String = IO.Path.GetFullPath("C:\Aspose.OCR.Resources.zip")
 
        ' Source file: the file on which OCR will be performed
        Dim imageFile As String = "C:\Sampleocr.bmp"
 
        Console.WriteLine("Performing OCR on " & imageFile & "....")
 
        ' Initialize OcrEngine
        Dim ocr As New OcrEngine()
 
        ' Set the image
        ocr.Image = ImageStream.FromFile(imageFile)
 
        ' Add language
        ocr.Languages.AddLanguage(Language.Load("english"))
 
        ' Load the resource file
        ocr.Resource = New IO.FileStream(resourceFilePath, IO.FileMode.Open)
 
        Try
            ' Process the whole image
            If ocr.Process() Then
 
                ' Get the complete recognized text found from the image
                Console.WriteLine("Text recognized: " & ocr.Text.ToString())
                IO.
File.
WriteAllText("C:\Output.txt", 
CType(ocr.
Text, 
Object).
ToString()) 
            End If
 
        Catch ex As Exception
            Console.WriteLine("Exception: " & ex.ToString())
 
        End Try
 
    End Sub
 
End Class