Zauważyłem, że zdecydowana większość firm oferujących oprogramowanie na urządzenia mobilne oferuje jednocześnie wersję na IOS i Android.
Z tego, co wiem, najczęściej na Android programuje się w Javie, a na IOS programuje się w Objectice C i nie da rady na krzyż, czyli napisać w Objective C dla Androida i w Javie na IOS.
Zakładając, że programy są pisane w wyżej wymienionych językach, już sam fakt, że są to dwa różne języki powoduje, że trzeba mieć dwa niezależne projekty pisane osobno, ale im większy projekt, tym jest to bardziej karkołomne, bo każą modyfikację trzeba równolegle wprowadzać w obu programach, nie wystarczy wciskać Ctrl+C i Ctrl+V.
W komputerach PC, w systemie Windows, Linux i MacOS można programować w C++. To powoduje, że możliwe jest napisanie programu w taki sposób, że logika biznesowa jest zawarta w osobnych klasach, a obsługa interfejsu jest zawarta w osobnych klasach. Jeżeli chce się używać natywnych kontrolek w poszczególnych systemach, czyli WinApi/Gtk/Cocoa, to i tak większość kodu, czyli logika biznesowa, będzie identyczna i wystarczy w jednym projekcie wprowadzić zmianę, sprawdzić działanie i potem w ciemno skopiować kod do pozostałych projektów. Co innego, jeżeli sprawa dotyczy interfejsu GUI, wtedy modyfikację trzeba wykonać osobno we wszystkich projektach. To podejście eliminuje konieczność równoległych modyfikacji tych samych funkcjonalności dla każdej wersji osobno i znacznie skraca czas wprowadzania zmian.
W temacie Android/IOS powyższe podejście jest możliwe dzięki Monodroid/MonoTouch, bo w obu przypadkach programuje się w C#, a więc jeżeli oddzieli się logikę od interfejsu, to da się zrobić identyczne klasy z logiką biznesową, co eliminuje konieczność wielokrotnego dokonywania modyfikacji. Słyszałem o Qt na Android i IOS, ale to dopiero raczkuje. natomiast na całym projekcie Mono niektórzy programiści C#/.NET wieszają psy, czy słusznie, to już inny temat.
W takim razie, czy istnieje szeroko stosowana technologia pozwalająca w tym samym języku, np. w C++, tworzyć i na IPhone i na Adroida? Czy jedyną taką technologią jest Monodroid/Monotouch?
Jaką technologię stosują najczęściej? Nie wydaje mi się, żeby zupełnie osobno pisali na IOS w Objective C i na Adroida w Javie, bo tak, jak pisałem, jest to karkołomne, bo w zasadzie każda modyfikacja wymaga dwa razy tyle czasu i łatwo o pomyłki.