MonoTouchとObjective-Cのどちらを選択するのですか?[閉まっている]


273

今日のMonoのローカル.Netイベントでのセッションに参加した後、MonoTouchの使用はiPhone開発の代替手段として「触れられ」ました。C#と.Netで非常に快適であるため、Monoスタックの奇妙な点にも関わらず、魅力的なオプションのようです。ただし、MonoTouchの価格は$ 400なので、これがiPhoneの開発に向けた道なのかどうか、私は少し悩みます。

誰でもMonoTouchとObjective-Cでの開発経験があり、MonoTouchでの開発はObjective-Cの学習よりもはるかに簡単で迅速であり、400ドル相当の価値がありますか?


13
Appleが開発ツールの制限を緩和したため、MonoTouchがiOSで実行できないことについての多くのコメントはもはや有効ではないと思います。参照:apple.com/pr/library/2010/09/09statement.html
sivabudh

回答:


520

最近、この質問(およびそのバリエーション)をよく見ました。私を驚かせるのは、人々がどれだけの頻度で反応するかということですが、答える人がどれほど少ないです。

私は自分の好みを持っています(両方のスタックを楽しんでいます)が、これがほとんどの「答え」がうまくいかないところです。それは私が欲しいもの(または他の誰かが欲しいもの)についてではありません。

これが私がMonoTouchの価値を決定する方法です-私は客観的になることはできませんが、これは熱狂的ではないと思います:

  • これは楽しみですか、それともビジネスですか?この分野でのコンサルティングを希望する場合は、399ドルをすぐに戻すことができます。

  • プラットフォームを裏返しに学びたいですか、それともそのためのアプリを「ただ」書きたいですか?

  • .Netは、別の開発スタックを使用することで面白味がなくなるほど好きですか?繰り返しますが、私は両方のスタック(AppleとMono)が好きですが、私にとってはMonoTouchのほうがずっと楽しい体験ができます。私はAppleのツールの使用を止めていませんが、それは主に両方のスタック本当に楽しんでいるからです。私はiPhoneが大好きで、.Netも大好きです。その場合、私にとって、MonoTouchは非常に簡単でした。

  • Cでの作業は快適ですか?Objective-CではなくC です。Objective- C Cであるため、問題になります。これ、素晴らしく、ファンシーでフレンドリーなOOバージョンですが、ポインターが好奇心をそそるなら、MonoTouchはあなたの友達です。また、ポインタ(またはCなど)が気に入らなくても、あなた開発者だと思っている反対意見に耳を傾けないでください。私はIBM ROM BIOS Pocket Referenceのコピーを持って歩き回っていましたが、アセンブリを作成し、コンピューターを面白いビデオモードに強制し、それらのために独自のフォントレンダリングビットと(確かにゴミの多い)ウィンドウシステムを作成していましたが、 QuickBasicの開発者は大げさだと思います。私QuickBasic dev(残りに加えて)。オタクmachismoに屈服しないでください。Cが気に入らず、ポインタが気に入らない場合、および手動のメモリ管理からできるだけ遠ざけたい場合(そして、公平を期すために、ObjCではまったく問題はありません)。 .. MonoTouch。そして、それのためにガフを取らないでください。

  • ユーザーまたはビジネスをターゲットにしますか?それは私にはそれほど重要ではありませんが、エッジにはまだ人がいます、そして実際、Appleのスタックを使用すればはるかに小さなダウンロードパッケージを作成できます。私はMonoTouchをいじってみましたが、圧縮された後、約2.7 MBに下がるまともな小さなアプリがあります(アプリを配布するために送信するときに、zipします-アプリがストアからダウンロードされると、再圧縮-アプリが10MBのOTA制限内に収まるかどうかを判断するときは、最初に吸盤を圧縮してください-MonoTouchにはうれしい驚きがあります)。しかし、MTの幸福はさておき、半分のメグとほぼ3つのメグ(たとえば)は、エンドユーザーをターゲットにしている場合に重要になる可能性があります。企業での作業を考えている場合、数MBはまったく問題になりません。そして、ただ明確にするために-私はすぐにMTベースのアプリをストアに提出するつもりですが、サイズはまったく問題ありません。まったく気になりません。でもそれが気になるならあなた、それからアップルのスタックがこれに勝ちます。

  • XMLは機能していますか?MonoTouch。限目。

  • 文字列操作?日付操作?.Netのすべて、そしてキッチンシンクのフレームワークで私たちが慣れている他の何百万もの小さなことは?MonoTouch。

  • ウェブサービス?MonoTouch。

  • 構文的には、どちらにも利点があります。Objective-C は、記述しなければならない場所ではより冗長になる傾向があります。ObjCで記述する必要がないC#でコードを記述していることに気づくでしょうが、どちらの方法でもうまくいきます。この特定のトピックは本をいっぱいにするかもしれません。私はC#構文を好みますが、Objective-Cに対する最初のこれは別世界の反応を乗り越えた後、私はそれをかなり楽しむことを学びました。私はそれを少しおしゃべりで楽しんでいます(C#/ Java /などに慣れている開発者にとって奇妙です)が、私はObjective-Cの形をしたスポットを心に抱いていて、私を幸せにしています。

  • Interface Builderを使用する予定はありますか?なぜなら、この初期バージョンでも、IBを使用してUIを構築し、コードで使用するための作業がはるかに少ないからです。Objective-C / IBのやり方からステップ全体が欠落しているように感じますが、Objective-C / IBのやり方からステップ全体が欠落していることが原因だと私は確信しています。これまでのところ、私は十分にテストしたとは思いませんが、これまでのところ、MonoTouchは、必要な作業がはるかに少ないため、ここでの勝者です。

  • 新しい言語やプラットフォームを学ぶのは楽しいと思いますか?もしそうなら、iPhoneには多くの機能があり、Appleのスタックはあなたの快適ゾーンからあなたを連れて行くでしょう-一部の開発者にとっては楽しいです(こんにちは-私はそれらの開発者の一人です-私はそれについて冗談を言ってあげます) Appleは苦労しましたが、Appleのツールを使ってiPhoneの開発を学ぶのはとても楽しかったです。

考慮すべきことはたくさんあります。価値はとても抽象的なものです。私たちがコストとそれが価値があるかどうかについて話している場合、答えは私の最初の箇条書きに帰着します:これがビジネスのためであり、あなたが仕事を得ることができれば、あなたはすぐにお金を稼ぐでしょう。

だから...私ができる限り客観的だ。これはあなたが自問するかもしれないことの短いリストですが、それは出発点です。

個人的に(少し客観性を落としましょう)、私は両方を愛し、使用しています。そして、私は最初にAppleスタックを学んでよかった。私がすでにAppleの世界を巡る道を知っていると、MonoTouchを使い始めるのが簡単になりました。他の人が言ったように、あなたはまだCocoaTouchで作業することになります-それはただ.Net化された環境になるでしょう。

しかし、それだけではありません。MonoTouchを使用したことがない人は、そこで止まる傾向があります-「それはラッパーの何とか何とか何とか」-それはMonoTouchではありません。

MonoTouchは、CocoaTouchが提供するものへのアクセスを提供すると同時に、.Netが提供するもの(のサブセット)、一部の人々がより快適に感じるIDE(私はその1つです)、Interface Builderとのより良い統合へのアクセスを提供します、そしてメモリ管理を完全に忘れることはできませんが、ある程度の余裕があります。

不明な場合は、Appleのスタック(無料)を入手し、MonoTouch evalスタック(無料)を入手してください。Appleの開発プログラムに参加するまでは、どちらもシミュレータに対してのみ実行されますが、どちらか一方が非常に望ましいかどうか、そしてMonoTouchが$ 399の価値があるかどうかを判断するには十分です。

そして、熱狂者に耳を傾けないでください-彼らは彼らが反対しているテクノロジーを使用していない人である傾向があります:)


50
わぁ、ロリー、時間を割いて質問に答えてくれてありがとう。私が言えることから、両方のオプションを使用したのはあなただけです。必ず両方試してみます。ところで、最近のSOポッドキャストで聞いたことありますよね?いい物。再度、感謝します!
jamesaharvey、2009年

17
コメントをありがとう:)私は私が見たひどく嫌いなもののいくつかに不満を感じている。質問は何度も繰り返されます。「馬鹿な馬鹿は、最初にゆるやかな発動システムを儀式化します!! ??」これは役に立たず、侮辱的です。MonoTouchにはラフな点がありますが、それらの人たちは天才の実績があります。MTは急速に進歩し、毎日より美しくなっています。私は言い続けます:それらに数ヶ月を与えます。彼らは機能については慎重になっていますが、私たち大きなものを見ることになると思います。私はAppleのスタックが大好きですが、今は別の遊び場があります。それはいいことで、私はめまいがします:)
Rory Blyth

4
@Stephan-「欠けているもの」を言うのは正しくないかもしれません-私はCocoaで仕事を終えることができます。それはAPIに関するものです。.Netを使用すると、文字列、日付、XMLなどを操作するのがはるかに簡単になります。これらのことを行う.Netの方法と、それらに対するMonoTouchのサポートの程度に精通している場合は、Dunnoを試してみてください。Cocoaではできないことがあると言っているわけではありませんが、.Netを使用するとはるかに簡単にできることがたくさんあります。解析は全面的に簡単です-日付の計算は全体的に簡単です-など
Rory Blyth

3
また、MTを搭載したiPhone / iPadで独自のコードを再利用する問題もあります。暗号コードとビジネスロジックコードがサーバーとデスクトップで実行されており、MTで再コンパイルしてiOSクライアントアプリで使用できます。それはいくつかのプロジェクトにとって重要かもしれません。
Monoman、2010

2
また、検討に値するのは、ライセンスの費用が400ドルですが、毎年更新する必要があるメンテナンスサブスクリプション(明らかな理由により)-250ドルもあるということです。それはおそらく公正な価格ですが、考慮に入れる価値があります。
Amc_rtty

62

この投稿には、MonoTouch Objective-Cを試していない開発者からの噂がたくさんあります。MonoTouchを試したことのないObjective-C開発者がほとんどのようです。

私は明らかに偏見がありますが、MonoTouchコミュニティがこれまで何をしてきたかをチェックできます。

http://xamarin.com

そこでは、Objective-CとC#の両方で開発した開発者からの記事がいくつか見つかります。


29
@NSResponder- MonoTouch を使用しましたか?これはv1.xリリースであり、実質的にまったく新しいものであり、すでにすばらしいものです。コメントする前に試してみてください。大きな変更があり(そのInterface Builder統合はXcodeよりもはるかに優れています)、ほとんど変更がありません(たとえば、MTと比較してユーザーのドキュメントフォルダーを取得するObjC / Cocoaの方法を比較してください)。私はまだいくつかのことにAppleのスタックを使用していますが、MTは美しく、可能性に満ちています。真剣に-ちょうどそれを試してみてください。または、Cocoa APIがどのようにバインドされているかを確認します-使用する必要はありません- 学習せずに作業を破棄しないでください。
Rory Blyth

はい!また、C#5.0の新機能の一部は、objective-cと比較してコーディングをさらに楽しくしています。
harsimranb 2014年

39

したがって、以前の同様の質問に対する私の答えは、Objective-Cを学ぶことです。(また、デバッグのサポートを忘れないでください)

これはおそらく気分を害しますが、正直に言うと、深刻な開発を行う場合は、Objective-Cを学ぶ必要があります。iPhone開発でObjective-Cを知らないことは、単に邪魔になります。多くの例を理解することはできません。Monoの癖に対処する必要がありますが、Objective-Cの実用的な知識があれば、プラットフォームのドキュメントから多くの情報を得ることができます。

個人的には、プラットフォームの母国語よりもMonoを使用するために必要な情報量を増やすという立場を理解できません。それは私には幾分逆効果のようです。これが非常に費用のかかる提案(新しい言語の学習)である場合、新しい言語の学習がかなり安価な提案になるように、基本的なプログラミング概念に時間を費やす価値があると思います。

別のユーザーもこれを書いた:


モノタッチは今あなたのために簡単です。しかし後で難しい。

たとえば、テストする必要がある新しいシードが出てきたが、何らかの理由でMonoTouchを壊した場合はどうなりますか?

Monoにこだわることで、フレームワークのリソースを探すときはいつでも、Monoでそれらをどのように使用するかを精神的に翻訳する必要があります。アプリのバイナリは大きくなり、Objective-Cへの数か月後の開発時間はそれほど速くありません。ネイティブプラットフォームを使用しているため、他のアプリ開発者はあなたよりもはるかに有利です。

もう1つの考慮事項は、Objective-Cより言語に精通しているため、C#の使用を検討していることです。しかし、iPhoneの学習曲線の大部分はObjective-Cではありません。それはフレームワークです-C#でも呼び出す必要があります。

どのプラットフォームでも、そのプラットフォームの設計哲学を直接表現するプラットフォームを使用する必要があります-iPhoneでは、Objective-Cです。これを逆の角度から考えてみてください。GTKでのプログラミングに慣れているLinux開発者がWindowsアプリを作成したい場合は、C#を使用せず、GTKに固執することをお勧めします。



12
あなたは、おそらく意図せずに、MTを誤って伝えました。GTKを使用してWinアプリを作成するのとまったく同じです-リモートではありません。MTのバインディングはCocoaTouchに非常に忠実です。それらは実際にCT API規約のいくつかを改善しました。しかし、たとえばCTをベースにしたWindowsフォームベースの抽象化を使用してアプリを作成しているわけではありません。MonoDevelopを使用したMTは、Xcodeよりも(必要に応じて)IBとの統合が優れており、同じことをコードの半分以下で実行できることがよくあります。バイナリサイズが改善されており、ツール(バインディングジェネレータなど)は常に優れています。MTアプリネイティブアプリです。
Rory Blyth、

7
私の(明らかに)MTファンボーイの意見を単独でとるのではなく、例を示すために、次のようなことができます(これは利点のほんの一部です):1行でプロパティを作成します。ばかげた配列のスペルなしでDocumentフォルダーへの参照を取得します(アプリには常に同じ場所に1つのdocsフォルダーがあります。なぜそれを「見つける」ためにすべての余分な作業が必要なのですか?)。Cocoaが臭いする.Netフレームワークを使用します(NSDate、誰か?)。エンタープライズアプリの商品スキルを使用する。適切な最新のXMLビットを使用します(Cocoaが静かに文字をチョークして停止するだけでクラッシュしない- 停止するだけです)。
Rory Blyth

8
すべてに使用するとは言わない。私はObjCが好きで、今でも使用しています。そして、パフォーマンスが問題である場合、私は何が起こっているかをより細かく制御できます。しかし... MTがもっと意味をなす時もあり、それはiPhone を企業開発の実行可能な選択肢にするだろうと私は思う。岩を空中に投げると、.Net開発者に当たります。ほとんどの企業には、社内のObjC開発者がいません。そして、企業の仕事のために、彼らはする必要はありません。MTは、WebサービスとDBの操作がはるかに簡単です。ObjCで必要なコードの半分で、MTを使用してさまざまな種類のアプリを実際に作成できます。
Rory Blyth、

8
最後に(私は続けることができますが、私はmtポイントを作っていると思います)、MonoTouchを「壊す」変更は、おそらくObjCアプリを壊す可能性と同じくらいありそうです。アプリがストアに入ると、ネイティブの iPhoneアプリになります(本来の姿でなければなりません)。呼び出しは最終的に違いはありません-Appleのスタックで構築されたアプリと同じランタイム。ランタイム環境の変更が原因でMTアプリが壊れると、ObjCでビルドされたアプリも壊れます。そして、MTチームはこれに加えて、アップデートとバグ修正を迅速にリリースしています。MTのバインディングは、実際のトラブルの可能性が低いCTに十分に近くマッピングされます。Aight-私は今黙るよ:)
Rory Blyth

27

Monoの使用は松葉杖ではありません。それがiPhone OSに追加する多くのものがあります。LINQ、WCF、Silverlightアプリ、ASP.NETページ、WPFアプリ、Windowsフォームアプリ間で共有可能なコード。Android用のモノもあり、Windows Mobileでも機能します。

したがって、Objective-Cの作成に多くの時間を費やすことができ(多くの調査から、C#でまったく同じサンプルコードをOCよりも書くのが大幅に少ないことがわかります)、他のプラットフォーム用にすべて複製します。私が書いているクラウドアプリには多くのインターフェイスがあり、iPhoneはそのうちの1つにすぎないので、私はMonoTouchを選びました。クラウドからMonoTouchアプリへのWCFデータストリーミングは非常に簡単です。さまざまなプラットフォーム間で共有されているコアライブラリがあり、iPhone / WinMobile / Android / SilverLight / WPF / ASP.NETの展開用に単純なプレゼンテーションレイヤーを作成するだけで済みます。すべての機能を再利用するのではなく複製する必要があるため、製品が前進し続けるため、Objective-Cですべてを再作成することは、初期の開発とメンテナンスの両方に多大な時間の無駄になります。

MonoTouchを侮辱したり、ユーザーに松葉杖が必要だとほのめかしたりしている人々は、.NETフレームワークをすぐに利用できるという意味の全体像に欠けており、ロジックとプレゼンテーションの適切な分離を理解していない可能性があります。プラットフォームやデバイス間で再利用できます。

Objective-Cは興味深いものであり、多くの一般的な言語とは大きく異なります。私はチャレンジが好きで、さまざまなアプローチを学ぶのが好きです...しかし、そうすることで私の進歩が妨げられたり、不必要な再コーディングが作成されたりすることはありません。iPhone SDKフレームワークには本当に素晴らしい点がいくつかありますが、そのすべての優れた点はMonoTouchで完全にサポートされており、すべての手動メモリ管理を省略し、同じタスクを実行するために必要なコードの量を減らし、アセンブリを再利用できます。他のデバイスやプラットフォームに移動できるように、オプションを開いたままにします。


19

切り替えました。Monotouchを使用すると、少なくとも3〜4倍の速度でアプリを作成できます(Obj Cでは、以前の1か月あたり1つのアプリと比較して、1か月あたり4つのアプリ)。

タイピングが少なくて済みます。

ただ私の経験。


2
「1か月あたり4つのアプリ」-品質のように数量がより重要な場合。MTはマクドナルドのようなものです。しかし、XCode-Restaurantでより良い料理を手に入れることができます。
netshark1000 2013年

2
結果は別の言い方をしますが、RdioとiCircuitはSteve JobsがデモしたMTアプリです。C#とMTは、obj-Cが強制する配管作業を取り除きます。
Ian Vink 2013年

17

これが開発する唯一のiPhoneアプリであり、Macアプリケーションの開発にもまったく関心がない場合、MonoTouchはおそらくコストに見合う価値があります。

iPhoneアプリをさらに開発する予定がある場合、またはMacネイティブ開発を行いたいと思う場合は、Objective-Cと関連するフレームワークについて学ぶ価値があります。さらに、あなたが新しいことを学ぶことを楽しむタイプのプログラマーであるなら、それは勉強する楽しい新しいパラダイムです。


6
これがあなたがこれまでに開発する唯一のiPhoneアプリである場合、99ドル/年もそれだけの価値はありません。
ダイナ、

同じC#開発ツールを使用してMacアプリを構築できます。実際、iPhone C#アプリとMac C#アプリの間でコード共有を行うことができます。MonoTouchは現在Xamarinと呼ばれています
Ian Vink

9

個人的には、Objective-Cを学ぶだけで楽しい時間になると思います。

要するに:

  • 「Objective-Cの学習」は、あなたが思うほど難しいことではありません。最初の数週間で楽しむことさえできます。
  • *&(){}がたくさんある "Cスタイル"の構文については、すでにご存じでしょう。どこにでも
  • アップルは物事を文書化する非常に良い仕事をしました
  • Appleが意図した方法でiPhoneを操作することになります。つまり、フィルターを介さずに、ソースから直接メリットを得ることができます。

UnityやMonoTouchのようなプロジェクトは「時間を節約する」ことになっていますが、最終的にはとにかくドメイン固有の言語を学ぶ必要があり、時々回避する必要があります。(カレンダー時間で)学習を避けようとしていた言語を学習する限り、それだけでおそらくすべての時間がかかります。結局、時間を節約できず、一部の製品と密接に結びついています。

編集:私はそれの大ファンである.NETについて否定的なことを示唆することは決してありませんでした。私の要点は、奇抜なobjcブラケット表記にまだ慣れていないという理由だけで、さらに複雑なレイヤーを追加することは、実際にはあまり意味がないということです。

2019年の更新:7年後です。私はまだそうではないとしても同じように感じています。確かに、「ドメイン固有の言語」は間違った用語である可能性がありますが、使用しているプラ​​ットフォーム用に直接記述し、互換性レイヤーと抽象化をできるだけ回避する方がはるかに良いと私は信じています。コードの再利用とやり直しが心配な場合、一般的に言えば、クロスプラットフォームアプリが実行する必要のある機能は、おそらく最新のWebテクノロジーで実現できます。


12
まず、C#は「ドメイン固有の言語」ではありません。商品スキルです。それはMonoTouchの価値の一部です。ほとんどの開発者(金融および大学の研究室と地下室以外)はこれをDSLとして使用し、OS XまたはiPhoneの開発にのみ使用するという点で、ObjCはDSLであると(不公平かつ不正確に)主張できます。しかし、そうではありません。C#と同様に、言語自体ではなくフレームワークに集中できるようにするために基本的に存在する汎用性の高い言語です(私たちはそこに同意すると思います)。ただし、ObjCコードはAppleのアップデートで機能しなくなることに注意してください。これはMT固有の問題ではありません。
Rory Blyth

3
MTは、この抽象化レイヤーがあるため、場合によってはあなたを救うことさえできます。AppleはAPIを変更しますか?まあ、あなたのObjCアプリ(それが存在するふりをしてみましょう)同等のMTアプリが壊れます。MTの関係者は、MonoTouch APIがバックグラウンドで呼び出しを処理する方法を変更するための一時的な解決策をリリースできます。MTコードを変更する必要はありません。一時的なMTリリースに対して再構築するだけです。はい:これは汚い簡単な問題につながる可能性の修正が、適切に一時しのぎMTのAPIを非推奨と、シームレスに変更を処理するために、開発者の時間を与えるだろうの時間を買う本当の修正。
Rory Blyth

4
さらに、MTの新機能として、必要に応じて独自のバインディングを作成することがはるかに簡単になりました(MT 1.2)。すべての作業を行うためにMTのぞき見に完全に依存しているわけではありません(その作業行っていますが)。それらには、バインディングを作成する非常に単純な方法があります。それらは、MTフレームワークで十分なObjCランタイムを公開しているため、自分のやり方に縛られていません。私は自分のやり方が好きかどうかを確認するためだけにバインディングを再実装しました。MTフレームワークを無視して、必要に応じて「手動」でメッセージを送受信できます。コードはほとんど必要ありません。彼らは賢い人です。それらを信頼してください:)
Rory Blyth

2
slfは、MonotouchがObjCライブラリ+オプションの.NETライブラリに直接バインドする単なるC#(GC付き)であることを認識していないと思います。したがって、Appleが提供するAPIを引き続き使用します。ただし、構文とガベージコレクションがすっきりしています。
バサラト

4

他の人がすでに言ったことに追加する(まあ!):私の感じは、基本的に心配する必要があるバグの数を2倍にし、MonoTouchのバグをiPhone OSのバグに追加することです。新しいOSバージョンの更新は、通常よりもさらに困難になります。ああ、あちこちで。

MonoTouchで私が目にすることができる唯一の説得力のあるケースは、iPhoneで活用しなければならない C#プログラマーとC#コードが数多く存在する組織です。(3500ドルでも点滅しないような店)

しかし、ゼロから始める人にとっては、私にはそれを価値があるとか賢明とは言えません。


-1:「より多くのバグ」とはどういう意味ですか?MonoとObjective-Cの間に明白なインピーダンスのミスマッチはありますか?
ジムG.

4

3つの単語:Linq to SQL

はい、それは$の価値があります。


4
Objective-CのKey-Valueバインディングとコアデータを使用すると、Linq-to-SQLによく似たものが得られます。同じではありません。多分それほど強力ではないかもしれませんが、同じ分野の多くをカバーしています。コア・データは現在、MonoTouchででサポートされていないことに注意してください
philsquared

Linq to SQLはiPhoneアプリにも関係がありますか?SQLiteで動作しますか?
bpapa 2009年

1
また、ユーザーがネットワークを介してデータを共有できるようにする必要があります。SQL liteで何をしていますか?
Bryan、

"MonoTouchはハイブリッド.NET 2.0とSilverlight 2 APIプロファイルに基づいています"オブジェクトへのLINQはサポートされていますか?
クリスS

2

受け入れられる答えがあっても、私が付け加えたいもの-モノタッチで構築されている兆候があるアプリをAppleがただ拒否するわけではないと誰が言うのですか?


彼らは確かにそうすべきであり、またFlashアプリを拒否すべきですが、彼らのApp Store規約はそれらを使用することを排除しません。
NSResponder

3
@bpapa-それは完全に有効な懸念事項ですが、1)アプリを拒否する理由はありません(ユーザーはアプリの記述内容を気にしません-ユーザーはアプリ自体を気にします)、および2)MonoTouchには多くの可能性があります以下のための企業の開発、および限り、あなたは、企業のdevのアカウントを持っているとして、Appleはあなたのアプリケーションを配布するからあなたを停止することはできません。また、AppleはUnityで構築されたゲームを受け入れます。最終的に、MTはルールに従います。Appleのプロセスは時々ランダムに見えますが... MTはルールに従います:|
Rory Blyth

1
@bpapa-私がこのコメントをどのようにして長い間見逃していたのかわかりませんが、1)文書化されていない(「プライベート」)APIを使用すると、多数のObjCアプリが「バスト」になります。 FBはまだ生きており、ダウンロードできます。2)Unityの問題は急速に解決され、Unityが復活しました。-Appleがあなたに自分のものを使ってほしいと思っている限り、私は反対しませんが、欲求と要求は大きく異なります。エンタープライズアプリの場合:MTエンタープライズアプリをデプロイできます。これらは単なるネイティブバイナリです。私は問題を認識していませんし、なぜあなたがそれほどMTでないのか理解していません。
Rory Blyth

1
私は、ObjCの構文を「嫌う」ことではなく、C#を好むことを付け加えておきます。また、.Netフレームワークの方法をCocoaの方法よりも好みます。文字列操作、XMLの処理、日付を含むあらゆるものなど-UIの作業にはMT CocoaTouchバインディングを使用しますが、他のほとんどのタスクでは、MTに付属している.Netフレームワークのサブセットを使用すると、作業がはるかに簡単になります。私は何度も続けることができました(コンパイル時に特定のバグを見つけるという私の好みなど)。私はAppleのスタックに批判的ですが、嫌いではありません。MT ObjCなどを好きになることができます。
Rory Blyth

1
Appleは考えを変え、今ではあらゆる言語/フレームワークでアプリを受け入れるようになり、ストアでアプリを受け入れるための基準のより「客観的な」リストを提示しました。
Monoman、2010

2

Objective-Cに時間を費やすのは、主にこのようなサイトから得られるすべての支援のためです。Objective-Cの強みの1つは、CおよびC ++コードを使用できることであり、十分にテストされたプロジェクトが数多く存在します。

もう1つは、あなたがコード(選択した言語)がアップルによってサポートされることです。たとえばiOS 5.xでは、MonoTouchのようなサードパーティソリューションのサポートが削除されますか?それでは、顧客に何を伝えますか?

Objective-Cに移行する準備が完全に整っていない場合は、HTML5などのプラットフォームに依存しないソリューションを使用する方が良いでしょう。


MonoTouchを使用することで、Appleが非常に強力な許可/サポートを中止する可能性があるベンダーに縛られてしまうという議論を見つけました。とにかく、独自の開発プラットフォームを持っているAppleのなすがままのプラットフォームに投資してしまう可能性があります...
jl。

2

私は数か月間MonoTouchを使用していますが、半分完成したアプリをObjectiveCから移植して、将来のある時点でAndroidをサポートできるようにしました。

これが私の経験です:

不良ビット:

  • Xamarin Studio。私のようなインディーズ開発者はXamarin Studioを使用せざるを得ません。それは毎週良くなり、開発者はフォーラムでバグを特定して修正することに非常に積極的ですが、それでも非常に遅く、頻繁にハングし、多くのバグがあり、デバッグもかなり遅くなっています。

  • ビルド時間。デバイスでデバッグするための大きな(リンクされた)アプリのビルドには数分かかる場合があります。これは、ほぼ即座にデプロイされるXCodeと比較されます。シミュレーター(リンクなし)のビルドは少し高速です。

  • MonoTouchの問題。イベント処理によってメモリリークの問題が発生しました。ビューに出入りするときにイベントをアタッチおよびデタッチするなど、リークを防ぐためにかなり醜い回避策を講じる必要がありました。Xamarin開発者は、このような問題を積極的に調査しています。

  • サードパーティのライブラリ。ObjectiveCライブラリをアプリで使用できるように変換/バインドするのにかなりの時間を費やしましたが、これはObjective Sharpieなどの自動化ソフトウェアで改善されています。

  • より大きなバイナリ。これは本当に気になりませんが、言及したいと思いました。IMOの追加のMbは最近では何もありません。

良いビット:

  • マルチプラットフォーム。私の友人は私のコアコードベースから私のアプリのAndroidバージョンを喜んで作成しています。私たちは並行して開発を行っており、DropboxのリモートGitリポジトリにコミットしていますが、順調に進んでいます。

  • 。ネット。C#.Netでの作業は、Objective C IMOよりもはるかに優れています。

  • MonoTouch。iOSのほとんどすべてが.Netにミラーリングされており、機能させるのはかなり簡単です。

  • Xamarin。これらの人たちがすべてを改善し、開発をよりスムーズかつ簡単にするために本当に働いていることがわかります。

特にVisual Studioで動作するBusinessまたはEnterpriseエディションを使用する資金がある場合は、クロスプラットフォーム開発にXamarinをお勧めします。

別のプラットフォームで必要になることのないiPhoneアプリを作成するだけで、インディーズの開発者であれば、今のところ、XCodeとObjective Cを使い続けます。


上記の私の答えの簡単な更新。より高速なMacに移行したので、ビルド時間が大幅に短縮されたことがわかりましたが、それでもXCodeのようにインスタントではありませんが、問題ありません。
ダンフォードハム2014年

1

C#とObjective-Cの両方の経験を持つ人として、私はほとんどの人にとってXamarinはお金の価値があると思います。

C#は非常に優れた設計言語であり、C#APIも優れた設計です。もちろん、Cocoa Touch API(UIKitを含む)にも優れたデザインがありますが、言語はいくつかの方法で改善できます。C#で記述する場合、Objective-Cで同じコードを記述するよりも生産性が高くなる可能性があります。これにはいくつかの理由がありますが、いくつかの理由があります。

  • C#には型推論があります。型の推論を使用すると、割り当ての左側にある型を「知る」必要がないため、コードをすばやく作成できます。また、リファクタリングをより簡単に、より節約できます。

  • C#にはジェネリックがあります。これにより、同等のObjective-Cコードと比較してエラーが減少します(Objective-Cにはいくつかの回避策がありますが、ほとんどの場合、開発者は回避します)。

  • 最近、XamarinはAsync / Awaitのサポートを追加しました。これにより、非同期コードの記述が非常に簡単になります。

  • iOS、Android、Windows Phoneのコードベースの一部を再利用できます。

  • MonoTouchは、CocoaTouch APIの大部分を非常に簡単な方法で実装します。例:CocoaTouchの経験がある場合は、MonoTouch(MonoTouch.UIKitには、UIButton、UIView、UINavigationControllerなどのクラスが含まれています。同様に、MonoTouch.FoundationはNSStringのクラスを取得します。 NSDataなど...)。

  • Xamarinは、PhoneGapやTitaniumなどのソリューションとは異なり、ユーザーにネイティブエクスペリエンスを提供します。

現在、Objective-CにはC#に比べていくつかの利点がありますが、ほとんどの状況でC#でアプリを作成すると、通常、開発時間とコードが簡潔になり、同じアプリを他のプラットフォームに移植する作業が少なくなります。注目すべき例外の1つは、OpenGLに依存する高性能ゲームです。


-35

MonoTouchライブラリのコストは完全に重要ではありません。iPhoneアプリにMonoを使用すべきではない理由は、それが松葉杖だからです。ネイティブツールを学ぶのに煩わされることができない場合、私はあなたの製品がダウンロードする価値があると信じる理由はありません。

編集:2010年4月14日MonoTouchで記述されたアプリケーションは、iTunes Storeの対象ではありません。これは本来あるべき姿です。Appleは、Qtのようなクロスプラットフォームツールキット、またはAdobe独自のSystem 7ツールボックスの部分的な再実装を使用して、Macに多数の浅いポートを確認しました。


14
Mac OS Xの市場シェアは非常に小さいため、多くの場合、X-CodeとObjCの使用を検討する理由は、iPhoneだけです。どちらも15年以上前の素晴らしいプロジェクトビルダーであり、クロスプラットフォームの複雑化とパッケージ化を行いましたが、率直に言って-さまざまなプラットフォームを使用しているため、間違いなく優れたツールと言語を使用しているため、開発者が共通の機能を活用したいと考えていることは驚くに値しませんコードベースと代替開発ツールを使用します。彼らの作品が額面を下回ることを意味するものではありません。
Iain Collins、

37
わからないけど……Objective-CとCocoaTouchは松葉杖だと思う。アセンブリを作成していない場合、私はあなたがそれほど気にしていないように感じるでしょうし、私はあなたのアプリをダウンロードするつもりはありません(もちろん、ユーザーが最初に行うことは、ツールが何であったかを確認することです)彼らがダウンロードしている鼓腸シミュレーションアプリを構築するために使用されます)。
Rory Blyth

3
アンドリュー、あなたはどこで話しているのか分からない。Objective-Cは背水ではありません。Mac、iPhone、iPadのネイティブ開発環境のバックボーンです。
NSResponder 2010

5
では、Appleがフレームワークに組み込んだものの簡単な例を1つ選び、優位性を主張しながら、C#の同等のものよりもはるかに不格好なフレームワークの部分を無視しますか?それはわらぶきの議論ではありませんか?
Andrew Rollings、

8
MonoTouchに切り替えて、これまでに4.0でも47個のアプリを公開しました。フルタイムでやります。素晴らしく、速く動作します。私は以前はObjective Cで記述していましたが、Linqを使用してC#を検索する方がはるかに高速であり、記述するコードが大幅に少なくなります。
Ian Vink 2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.