Po dzisiejszej sesji poświęconej Mono na lokalnym wydarzeniu .Net, wykorzystanie MonoTouch zostało „dotknięte” jako alternatywa dla rozwoju iPhone'a. Będąc bardzo wygodnym w C # i .Net, wydaje się być atrakcyjną opcją, pomimo pewnych dziwactwa stosu Mono. Ponieważ jednak MonoTouch kosztuje 400 USD, jestem nieco rozdarty, jeśli to jest droga do rozwoju iPhone'a.
Czy ktoś ma doświadczenie w programowaniu w MonoTouch i Objective-C, a jeśli tak, to czy programowanie w MonoTouch jest o wiele prostsze i szybsze niż nauka w Objective-C, a co za tym idzie warte 400 $?
c#
objective-c
mono
xamarin.ios
jamesaharvey
źródło
źródło
Odpowiedzi:
Ostatnio widziałem to pytanie (i jego odmiany). Dziwi mnie to, jak często ludzie reagują, ale jak mało odpowiedzi .
Mam swoje preferencje (podobają mi się oba stosy), ale w tym przypadku większość „odpowiedzi” zaczyna się mylić. Nie powinno dotyczyć tego, czego chcę (ani tego, czego chce ktoś inny).
Oto, w jaki sposób przystąpiłbym do określania wartości MonoTouch - oczywiście nie mogę być obiektywny, ale myślę, że jest to dość wolne od zapału:
Czy to dla zabawy czy w interesach? Jeśli chcesz skorzystać z konsultacji w tej dziedzinie, możesz bardzo szybko odzyskać 399 USD.
Czy chcesz nauczyć się platformy od podszewki, czy „po prostu” chcesz dla niej pisać aplikacje?
Czy podoba Ci się .Net na tyle, że użycie innego stosu deweloperów zabrałoby Ci to przyjemność? Znów lubię oba zestawy (Apple i Mono), ale dla mnie MonoTouch sprawia, że wrażenia są o wiele przyjemniejsze. Nie przestałem używać narzędzi Apple, ale głównie dlatego, że naprawdę lubię oba zestawy . Kocham iPhone'a i kocham .Net. W takim przypadku MonoTouch nie był dla mnie żadnym problemem.
Czy czujesz się komfortowo pracując z C? Nie mam na myśli Objective-C, ale C - ma to znaczenie, ponieważ Objective-C to C. Jest to przyjemna, fantazyjna, przyjazna wersja OO, ale jeśli wskazówki dadzą ci gęsią skórkę, MonoTouch jest twoim przyjacielem. I nie słuchaj naysayers, którzy myślą, że jesteś deweloperem, jeśli zdarzy się, że nie lubisz wskaźników (lub C itp.). Kiedyś chodziłem z kopią IBM ROM BIOS Pocket Reference, a kiedy pisałem asembler i zmuszałem komputer do śmiesznych trybów wideo oraz pisałem własne bity do renderowania czcionek i (co prawda tandetne) systemy okienkowe, nie zrobiłem tego. Uważam, że deweloperzy QuickBasic byli złośliwi. Ja byłamprogramista QuickBasic (oprócz reszty). Nigdy nie poddawaj się nerdom machismo. Jeśli nie lubisz C i jeśli nie lubisz wskaźników, i jeśli chcesz trzymać się jak najdalej od ręcznego zarządzania pamięcią (i, szczerze mówiąc, wcale nie jest tak źle w ObjC). .. MonoTouch. I nie bierz za to żadnych żartów.
Czy chcesz kierować reklamy do użytkowników lub firm? Nie ma to dla mnie większego znaczenia, ale wciąż istnieją ludzie na Edge, a faktem jest: możesz stworzyć znacznie mniejszy pakiet do pobrania, jeśli używasz stosu Apple. Bawiłem się MonoTouch i mam przyzwoitą małą aplikację, która po skompresowaniu zmniejsza się do około 2,7 MB (podczas przesyłania aplikacji do dystrybucji zamykasz ją - gdy aplikacje są pobierane ze sklepu, „ ponownie spakowane - więc kiedy zastanawiasz się, czy Twoja aplikacja ma wejść poniżej limitu 10 MB OTA, najpierw spakuj przyssawkę - MonoTouch będzie mile zaskoczony). Ale poza szczęściem MT, pół megapiksela w porównaniu do prawie trzech (na przykład) to coś, co może być dla Ciebie ważne, jeśli kierujesz reklamy do użytkowników końcowych. Jeśli myślisz o pracy w przedsiębiorstwie, kilka MB w ogóle nie będzie miało znaczenia. I, dla jasności - wkrótce zamierzam przesłać do sklepu aplikację opartą na MT i nie mam żadnych problemów z rozmiarem. Wcale mi to nie przeszkadza. Ale jeśli to będzie dotyczyłoty , a następnie stos Apple wygrywa ten.
Wykonujesz jakąkolwiek pracę XML? MonoTouch. Kropka.
Manipulacja ciągiem? Data manipulacji? Milion innych drobiazgów, do których przyzwyczailiśmy się w ramach .NET-wszystko-I-zlewozmywaki kuchenne? MonoTouch.
Usługi internetowe? MonoTouch.
Składniowo oba mają swoje zalety. Cel C jest bardziej szczegółowy , gdy trzeba go napisać . Przekonasz się, że piszesz kod w C #, którego nie musiałbyś pisać w ObjC, ale działa to w obie strony. Ten konkretny temat może wypełnić książkę. Wolę składnię C #, ale po przejściu przez moją początkową, nieziemską reakcję na Objective-C, nauczyłem się całkiem z tego korzystać. I śmieją się z niego trochę w rozmowach (to jest dziwne dla deweloperów, którzy są przyzwyczajeni do C # / Java / etc.), Ale prawda jest taka, że mam Objective-C w kształcie miejsce w moim sercu, że czyni mnie szczęśliwym.
Czy zamierzasz korzystać z Konstruktora interfejsów? Ponieważ nawet w tej wczesnej wersji robię znacznie mniej pracy, aby zbudować moje interfejsy użytkownika przy użyciu IB, a następnie użyć ich w kodzie. Wydaje się, że brakuje całego sposobu wykonywania rzeczy w Objective-C / IB i jestem prawie pewien, że dzieje się tak, ponieważ brakuje wszystkich kroków w sposobie wykonywania rzeczy w Objective-C / IB. Do tej pory i nie sądzę, że wystarczająco przetestowałem, ale do tej pory MonoTouch jest tutaj zwycięzcą o ile mniej pracy musisz wykonać.
Czy uważasz, że fajnie jest uczyć się nowych języków i platform? Jeśli tak, iPhone ma wiele do zaoferowania, a stos Apple prawdopodobnie wyciągnie cię ze strefy komfortu - co dla niektórych deweloperów jest fajne (Cześć - jestem jednym z tych deweloperów - żartuję z tego i daję Apple ma trudny czas, ale dobrze się bawiłem, ucząc się programowania iPhone'a za pomocą narzędzi Apple).
Jest tyle rzeczy do rozważenia. Wartość jest tak abstrakcyjna. Jeśli mówimy o kosztach i czy warto, odpowiedź sprowadza się do mojego pierwszego punktu: jeśli chodzi o interesy i jeśli możesz dostać pracę, natychmiast zwrócisz swoje pieniądze.
Więc ... to jest tak obiektywne, jak tylko mogę. Oto krótka lista pytań, które możesz sobie zadać, ale jest to punkt wyjścia.
Osobiście (porzućmy na chwilę obiektywizm), uwielbiam i używam obu. I cieszę się, że nauczyłem się najpierw stosu Apple. Łatwiej było mi zacząć korzystać z MonoTouch, kiedy znałem już świat Apple. Jak powiedzieli inni, nadal będziesz pracować z CocoaTouch - będzie to po prostu środowisko .Net.
Ale jest coś więcej. Ludzie, którzy nie korzystali z MonoTouch, zwykle się na tym kończą - „bla bla bla bla” - to nie jest MonoTouch.
MonoTouch daje dostęp do tego, co CocoaTouch ma do zaoferowania, a jednocześnie daje dostęp do tego, co (podzbiór) .Net ma do zaoferowania, IDE, z którym niektórzy czują się bardziej komfortowo (jestem jednym z nich), lepszą integrację z Konstruktorem interfejsów i chociaż nie zapomnisz całkowicie o zarządzaniu pamięcią, zyskujesz swobodę działania.
Jeśli nie jesteś pewien, chwyć stos Apple (jest bezpłatny) i chwyć stos ewaluacyjny MonoTouch (jest bezpłatny). Dopóki nie dołączysz do programu deweloperskiego Apple, oba będą działały tylko przeciwko symulatorowi, ale to wystarczy, aby dowiedzieć się, czy zdecydowanie wolisz jeden od drugiego, i możliwe, czy MonoTouch jest dla Ciebie wart 399 USD.
I nie słuchaj fanatyków - zwykle to oni nie korzystali z technologii, której się bronią :)
źródło
W tym poście jest wiele wiadomości od programistów, którzy nie wypróbowali MonoTouch i Objective-C. Wydaje się, że są to głównie programiści Objective-C, którzy nigdy nie próbowali MonoTouch.
Jestem oczywiście stronniczy, ale możesz sprawdzić, co porabiała społeczność MonoTouch:
http://xamarin.com
Znajdziesz tam kilka artykułów od programistów opracowanych zarówno w Objective-C, jak i C #.
źródło
Zatem moją odpowiedzią na poprzednie podobne pytanie jest poznanie Celu C. (Nie zapomnij także o obsłudze debugowania)
Inny użytkownik również napisał to:
Monotouch jest teraz dla Ciebie łatwiejszy. Ale trudniej później.
Na przykład, co się stanie, gdy pojawią się nowe nasiona, z którymi musisz przetestować, ale z jakiegoś powodu złamać MonoTouch?
Trzymając się Mono, za każdym razem, gdy szukasz zasobów dla frameworków, musisz mentalnie przełożyć się na sposób, w jaki zamierzasz ich używać w Mono. Twoje pliki binarne aplikacji będą większe, czas programowania nie będzie dużo szybszy po kilku miesiącach w Objective-C, a inni programiści aplikacji będą mieli o wiele większą przewagę nad tobą, ponieważ korzystają z platformy natywnej.
Inną kwestią jest to, że chcesz używać C #, ponieważ znasz język bardziej niż Objective-C. Ale zdecydowana większość krzywej uczenia się dla iPhone'a nie jest Objective-C, to ramy, do których będziesz musiał się również odwoływać za pomocą C #.
Na każdej platformie powinieneś użyć platformy, która bezpośrednio wyraża filozofię projektowania tej platformy - na iPhonie, czyli Objective-C. Pomyśl o tym z odwrotnej strony, jeśli programista Linuksa przyzwyczajony do programowania w GTK chciałby pisać aplikacje dla systemu Windows, czy naprawdę poleciłbyś, aby nie używali C # i trzymali się GTK, ponieważ było im łatwiej?
źródło
Używanie Mono nie jest kulą. Jest wiele rzeczy, które dodaje do iPhone OS. LINQ, WCF, wspólny kod między aplikacją Silverlight, stroną ASP.NET, aplikacją WPF, aplikacją Windows Form, a także mono na Androida i będzie działał również na Windows Mobile.
Możesz więc poświęcić sporo czasu na pisanie Objective-C (zobaczysz z wielu badań, gdzie dokładnie ten sam przykładowy kod w C # jest znacznie mniej do napisania niż OC), a następnie DUPLIKUJ to wszystko dla innych platform. Dla mnie wybrałem MonoTouch, ponieważ pisana przeze mnie aplikacja w chmurze będzie miała wiele interfejsów, a iPhone będzie tylko jednym z nich. Przesyłanie danych WCF z chmury do aplikacji MonoTouch jest niesamowicie proste. Mam podstawowe biblioteki, które są współużytkowane przez różne platformy, a następnie muszę tylko napisać prostą warstwę prezentacji dla wdrożeń iPhone / WinMobile / Android / SilverLight / WPF / ASP.NET. Odtworzenie tego wszystkiego w Objective-C byłoby ogromną stratą czasu zarówno na początkowe tworzenie, jak i konserwację, ponieważ produkt nadal rozwija się, ponieważ cała funkcjonalność musiałaby być replikowana, a nie ponownie wykorzystywana.
Ludzie, którzy obrażają MonoTouch lub sugerują, że jego użytkownicy potrzebują kuli, nie mają dużego obrazu tego, co oznacza mieć platformę .NET na wyciągnięcie ręki i być może nie rozumieją właściwego oddzielenia logiki od prezentacji w sposób, który można ponownie wykorzystać na różnych platformach i urządzeniach.
Cel C jest interesujący i bardzo różni się od wielu popularnych języków. Lubię wyzwanie i uczę się różnych podejść ... ale nie wtedy, gdy to utrudnia moje postępy lub powoduje niepotrzebne ponowne kodowanie. Jest kilka naprawdę świetnych rzeczy na temat frameworku iPhone SDK, ale cała ta wielkość jest w pełni obsługiwana przez MonoTouch i odcina całe ręczne zarządzanie pamięcią, zmniejsza ilość kodu wymaganego do wykonywania tych samych zadań, pozwala mi ponownie używać moich zespołów, i utrzymuje moje opcje otwarte, aby móc przejść na inne urządzenia i platformy.
źródło
Zmieniłem. Monotouch pozwól mi pisać aplikacje co najmniej 3-4 razy szybciej (4 aplikacje na miesiąc w porównaniu do mojej starej 1 na miesiąc w Obj C)
Dużo mniej pisania.
Po prostu moje doświadczenie.
źródło
Jeśli jest to jedyna aplikacja na iPhone'a, którą kiedykolwiek stworzysz, a Ty też nigdy nie interesujesz się tworzeniem aplikacji dla komputerów Mac, to prawdopodobnie MonoTouch jest prawdopodobnie warte swojej ceny.
Jeśli sądzisz, że kiedykolwiek opracujesz więcej aplikacji na iPhone'a lub zechcesz zrobić natywne programowanie na Maca, prawdopodobnie warto nauczyć się Celu C i powiązanych platform. Ponadto, jeśli jesteś typem programisty, który lubi uczyć się nowych rzeczy, nauka nowego paradygmatu jest świetną zabawą.
źródło
Osobiście uważam, że lepiej będzie ci się uczyć Celu C.
W skrócie:
Przekonałem się, że projekty takie jak Unity i MonoTouch mają „oszczędzać czas”, ale ostatecznie i tak będziesz musiał nauczyć się języka specyficznego dla swojej domeny i czasami będziesz musiał iść krok dalej. Wszystko to prawdopodobnie zajmie Ci tyle czasu, ile nauczysz się języka, którego próbujesz uniknąć (w czasie kalendarzowym). W końcu nie oszczędzałeś czasu i jesteś ściśle powiązany z jakimś produktem.
EDYCJA: Nigdy nie chciałem sugerować niczego negatywnego na temat .NET. Jestem wielkim fanem tego. Chodzi mi o to, że dodanie większej liczby warstw złożoności tylko dlatego, że nie czujesz się jeszcze komfortowo z dziwną notacją nawiasową objc, nie ma dla mnie większego sensu.
Aktualizacja 2019: 7 lat później. Nadal czuję to samo, jeśli nie bardziej. Jasne, „język specyficzny dla domeny” może być niewłaściwym terminem, ale nadal uważam, że o wiele lepiej jest pisać bezpośrednio na platformę, z którą pracujesz i unikać warstw kompatybilności i abstrakcji w jak największym stopniu. Jeśli martwisz się o ponowne użycie kodu i jego ponowną pracę, ogólnie rzecz biorąc, jakąkolwiek funkcjonalność, którą musi wykonać aplikacja wieloplatformowa, można prawdopodobnie uzyskać za pomocą nowoczesnych technologii internetowych.
źródło
Aby dodać do tego, co już powiedzieli inni (cóż!): Mam wrażenie, że podwajasz liczbę błędów, o które musisz się martwić, dodając te w MonoTouch do tych, które są już w iPhone OS. Aktualizacja nowych wersji systemu operacyjnego będzie jeszcze bardziej bolesna niż zwykle. Fuj, dookoła.
Jedynym przekonującym przypadkiem, jaki widzę w MonoTouch, są organizacje, które mają mnóstwo programistów C # i kodu C #, które muszą wykorzystać na iPhonie. (Rodzaj sklepu, który nawet nie mrugnie za 3500 $.)
Ale dla każdego, kto zaczyna od zera, naprawdę nie uważam tego za wartościowe ani mądre.
źródło
Trzy słowa: Linq do SQL
Tak, to jest warte $.
źródło
Coś, co chciałbym dodać, mimo że istnieje akceptowana odpowiedź - kto ma powiedzieć, że Apple nie tylko odrzuca aplikacje, które mają ślady budowy za pomocą Mono Touch?
źródło
Zainwestowałbym czas w Objective-C głównie ze względu na całą pomoc, jaką można uzyskać z takich stron. Jedną z mocnych stron Objective-C jest to, że można używać kodu C i C ++, a istnieje wiele dobrze przetestowanych projektów .
Inną rzeczą jest to, że Twój kod (wybrany język) będzie obsługiwany przez Apple. Co to na przykład iOS 5.x usuwa obsługę rozwiązań innych firm, takich jak MonoTouch? Co wtedy powiesz swoim klientom?
Może lepiej jest użyć niezależnego od platformy rozwiązania, takiego jak HTML5, jeśli nie jesteś gotowy do przejścia na Cel C?
źródło
Korzystam z MonoTouch od kilku miesięcy, przeniosłem do połowy moją skończoną aplikację z ObjectiveC, aby w przyszłości móc obsługiwać Androida.
Oto moje doświadczenie:
Złe bity:
Xamarin Studio. Programiści z Indii, tacy jak ja, są zmuszeni do korzystania z Xamarin Studio. Z każdym tygodniem jest coraz lepiej, programiści są bardzo aktywni na forach, identyfikując i naprawiając błędy, ale wciąż jest bardzo wolny, często zawiesza się, ma wiele błędów i debugowanie jest również dość wolne.
Czas budowy Zbudowanie mojej dużej (połączonej) aplikacji do debugowania na urządzeniu może zająć kilka minut, w porównaniu do XCode, który wdraża się niemal natychmiast. Budowanie symulatora (niepowiązane) jest nieco szybsze.
Problemy z MonoTouch. Wystąpiły problemy z wyciekiem pamięci spowodowane obsługą zdarzeń i musiałem wprowadzić dość brzydkie obejścia, aby zapobiec wyciekom, takie jak dołączanie i odłączanie zdarzeń podczas wchodzenia i wychodzenia z widoków. Programiści Xamarin aktywnie analizują takie problemy.
Biblioteki stron trzecich. Spędziłem sporo czasu na konwertowaniu / wiązaniu bibliotek ObjectiveC do użycia w mojej aplikacji, chociaż jest to coraz lepsze w przypadku zautomatyzowanego oprogramowania, takiego jak Objective Sharpie.
Większe pliki binarne. Nie przeszkadza mi to, ale pomyślałem, że o tym wspomnę. IMO kilka dodatkowych Mb to w dzisiejszych czasach nic.
Dobre bity:
Wieloplatformowy. Mój przyjaciel z radością tworzy wersję mojej aplikacji na Androida z mojej podstawowej bazy kodu, rozwijamy się równolegle i oddajemy się do zdalnego repozytorium Git na Dropbox, wszystko idzie dobrze.
.Netto. Praca w C # .Net jest znacznie ładniejsza niż Objective C IMO.
MonoTouch. Prawie wszystko w iOS jest odzwierciedlone w .Net i jest całkiem proste, aby wszystko działało.
Xamarin. Widać, że ci faceci naprawdę pracują nad poprawą wszystkiego, dzięki czemu rozwój jest płynniejszy i łatwiejszy.
Zdecydowanie polecam Xamarin do programowania wieloplatformowego, szczególnie jeśli masz pieniądze na korzystanie z wersji Business lub Enterprise współpracujących z Visual Studio.
Jeśli tworzysz wyłącznie aplikację na iPhone'a, która nigdy nie będzie potrzebna na innej platformie, a jesteś programistą niezależnym, trzymałbym się na razie XCode i Objective C.
źródło
Jako osoba z doświadczeniem zarówno w C #, jak i Objective-C, powiedziałbym, że dla większości ludzi Xamarin będzie wart swojej ceny.
C # jest naprawdę dobrze zaprojektowanym językiem, a API C # są również dobrze zaprojektowane. Oczywiście interfejsy API Cocoa Touch (w tym UIKit) mają również świetny wygląd, ale język można poprawić na kilka sposobów. Podczas pisania w C # będziesz prawdopodobnie bardziej produktywny w porównaniu do pisania tego samego kodu w Objective-C. Wynika to z kilku powodów, ale niektóre z nich to:
C # ma wnioskowanie typu . Wnioskowanie typu przyspiesza pisanie kodu, ponieważ nie musisz „znać” typu po lewej stronie zadania. Ułatwia to również refaktoryzację i pozwala zaoszczędzić pieniądze.
C # ma ogólne , które zmniejszą błędy w porównaniu do równoważnego kodu Objective-C (chociaż istnieją pewne obejścia w Objective-C, w większości sytuacji programiści będą ich unikać).
Ostatnio Xamarin dodał obsługę Async / Await , dzięki czemu pisanie kodu asynchronicznego jest bardzo łatwe.
Będziesz mógł ponownie wykorzystać część kodu źródłowego na iOS, Android i Windows Phone.
MonoTouch w dużej mierze implementuje API CocoaTouch w bardzo prosty sposób. Np .: jeśli masz doświadczenie z CocoaTouch, będziesz wiedział, gdzie znaleźć klasy dla kontrolek w MonoTouch (MonoTouch.UIKit zawiera klasy dla UIButton, UIView, UINavigationController itp.), Podobnie MonoTouch. Fundacja ma klasy dla NSString, NSData itp.).
Xamarin zapewni użytkownikom natywną obsługę, w przeciwieństwie do rozwiązań takich jak PhoneGap lub Titanium.
Teraz Objective-C ma pewne zalety w stosunku do C #, ale w większości sytuacji pisanie aplikacji w C # zwykle generuje mniej czasu opracowywania i czystszego kodu oraz mniej pracy przy przenoszeniu tej samej aplikacji na inne platformy. Jednym godnym uwagi wyjątkiem mogą być gry o wysokiej wydajności oparte na OpenGL.
źródło
Koszt biblioteki MonoTouch jest całkowicie nie na miejscu. Powodem, dla którego nie powinieneś używać Mono do aplikacji na iPhone'a, jest to, że jest to kula. Jeśli nie możesz niepokoić się nauką natywnych narzędzi, nie mam powodu, by sądzić, że twój produkt jest wart pobrania.
Edycja: 14.04.2010 Aplikacje napisane za pomocą MonoTouch nie kwalifikują się do sklepu iTunes Store. Tak powinno być. Apple widział wiele płytkich portów na Macu, używając wieloplatformowych zestawów narzędzi, takich jak Qt, lub własnej częściowej re-implementacji zestawu narzędzi System 7 firmy Adobe.
źródło