「MonoMac」の版間の差分
imported>Administrator (→必要なもの) |
|||
(6人の利用者による、間の20版が非表示) | |||
1行目: | 1行目: | ||
− | '''MonoMac''' | + | '''MonoMac'''(読み:ものまっく)とは、[[Xamarin Studio]]([[Mono]]および[[MonoDevelop]])を用いて[[C Sharp|C#]]で[[Mac OS X]]用の「ネイティブアプリケーション」の開発を可能にする[[統合プログラミング環境]]のことである。 |
− | + | == 概要 == | |
− | + | MonoMacは[[iOS]]向けの[[MonoTouch]]の技術をそのまま[[Mac OS X]]に持ってきたものであるといえる。 | |
− | 2011年3月17日、MonoMac 1. | + | 2011年3月17日、MonoMac 1.0が公開された。今後、[[F Sharp|F#]]、[[IronRuby]]、[[IronPython]]、[[UnityScript]]といった[[プログラミング言語]]のサポートを進めていくと説明されている。 |
− | |||
− | + | === ライセンス === | |
+ | 有償版のみの[[MonoTouch]]とは異なりMonoMacは完全に無償で提供されている。 | ||
+ | ただしMonoMacは[[ライセンス]]に[[GPL]]および[[LGPL]]が用いられており、開発した[[プログラム]]を配布する場合は必ず[[オープンソース]]にしなければならないという条件がついている。 | ||
− | + | そのままでは商用利用できない、[[ソースコード]]は公開したくない、という人のために[[オープンソース]]化しなくてもよいという[[Xamarin.Mac]]という有償版も提供されている。 | |
− | + | いわゆる資金源である。 | |
− | == | + | === Xcode連携 === |
− | [[ | + | [[UI]]部分の[[デザイン]]には[[Interface Builder]]との連携に対応しているため従来の[[Xcode]]を用いた[[Mac OS X]]アプリケーション開発と基本的に同様である。 |
− | + | ただし[[MonoDevelop]]経由で[[xibファイル]]を開き[[Interface Builder]]を起動すると、xibファイルが監視された状態となり、[[UI]]を編集し保存した瞬間にまるで[[Visual Studio]]で[[Windows Forms]]をデザイン編集したときのように全自動で[[部分クラス]]が生成されるなど、その連携具合は手動で[[アウトレット]]を書かなければならない[[Xcode]]より遙かに優れている。 | |
− | |||
− | |||
− | + | === 日本語周り === | |
+ | <del>なお、2012年3月19日時点では、[[MonoDevelop]]での日本語表示に一手間必要であり、また日本語入力は一切できない。アプリ中に出現する文字列は、多言語対応のためにも[[ソースコード]]に直接日本語を埋め込まず、[[リソース]]で管理しましょうという思し召しに違いない。</del> | ||
− | + | 2013年11月5日現在の最新バージョンでは日本語表示も日本語入力も問題なくできるようになっている。いつの間に対応したんだよ。 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | === ネイティブコード === | |
+ | [[Mono]]と言えば[[.NET Framework]]互換の[[オープンソース]]プロジェクト、その[[.NET Framework]]と言えば[[中間コード]]と[[仮想マシン]]をまず思い浮かべるだろうが、MonoMacが吐き出すのは生粋の[[ネイティブコード]]である。 | ||
− | + | MonoMacでは[[C Sharp|C#]]で書いた[[ソースコード]]を、ほぼ人間の読めない[[Objective-C]]の[[ソースコード]]に変換し(いわゆる[[トランスコード]])、それを[[Xcode]]で[[ビルド]]する。なお、この一連の動作は[[MonoDevelop]]が[[バックグラウンド]]で行うので[[開発者]]は気にする必要がない。また、この[[ネイティブコード]]寄りな仕様の関係上、[[リフレクション]]などの[[.NET Framework]]特有の一部機能は使えなくなっている。 | |
− | + | [[C Sharp|C#]]の[[ソースコード]]から[[Objective-C]]の[[ソースコード]]に変換するという荒技は、かつて[[アドビ]]と[[アップル]]による[[Flash]]によるiPhoneアプリ開発をめぐる紛争の末に制定された[[App Store]]の[[サードパーティ]]締め出し利用規約を強引に回避するために編み出した必殺技である。 | |
− | + | <ref>[http://www.atmarkit.co.jp/news/200901/29/mono.html iPhoneでC#アプリが審査に通るワケ - @IT]</ref> | |
− | |||
− | + | ==利点== | |
+ | ===ガベージコレクションが強い=== | ||
+ | [[Objective-C]]も[[Swift]]も[[ガベージコレクション]]が腐っており実質的には存在しないと思った方がいいレベルの中で唯一まともそうなのが[[MonoMac]]であった。ほとんどのアプリは[[Objective-C]]の[[ガベージコレクション]]でも問題ないが、[[ウェブカメラ]]の[[動画]]を表示や録画、編集などを行うような高負荷かつ[[メモリ]]を喰いまくる[[アプリ]]では特に顕著であった。[[アップル]]のサイトで配布している[[QTKit]]による[[ウェブカメラ]]を制御するサンプルも、実は動きの速い[[動画]]を撮影し続けると[[メモリリーク]]して最終的に[[クラッシュ]]するという<ref>https://developer.apple.com/library/mac/samplecode/QTRecorder/Introduction/Intro.html#//apple_ref/doc/uid/DTS10004043</ref>。 | ||
− | Mac OS X | + | ==欠点== |
+ | ===APIが欠落している=== | ||
+ | [[Xamarin.Mac]]が登場して以来、[[API]]の更新が止まっており、[[日曜プログラマー]]には世知辛い雰囲気が漂っている。たとえば[[OS X Mavericks]]で[[QTKit]]が廃止され[[AV Foundation]]に移行したがMonoMacでは残念なことになっている。せめて2つ3つくらい前の古いバージョンはMonoMacとして公開してくれたりしないかな。 | ||
− | === [[ | + | == 使い方 == |
− | + | *[[MonoMac/インストール]] | |
− | + | *[[MonoMac/ウインドウを閉じた際にアプリを終了させる]] | |
+ | *[[MonoMac/フルスクリーン表示に対応する]] | ||
+ | *[[MonoMac/Interface Builderでカスタムコントロールを使用する]] | ||
+ | *[[MonoMac/NSImageをファイルに保存する]] | ||
+ | *[[MonoMac/NSImageをSystem.Drawing.Imageに変換する]] | ||
+ | *[[MonoMac/Resource Bundleを利用する]] | ||
+ | *[[MonoMac/ウインドウが閉じる際に処理をする]] | ||
+ | *[[MonoMac/モーダルウインドウを作成する]] | ||
+ | *[[MonoMac/AppleScriptを実行する]] | ||
+ | *[[MonoMac/リムーバブルメディアの着脱を検知する]] | ||
+ | *[[MonoMac/外部コマンドを実行する]] | ||
− | + | この他にも「[[:Category:MonoMac]]」に色々あるかもしれない。 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== 関連項目 == | == 関連項目 == | ||
70行目: | 59行目: | ||
== 参考文献 == | == 参考文献 == | ||
− | + | {{reflist}} | |
== 外部リンク == | == 外部リンク == | ||
+ | * http://www.mono-project.com/MonoMac | ||
+ | * https://github.com/mono/monomac/ | ||
{{stub}} | {{stub}} | ||
+ | |||
+ | [[category:MonoMac]] |
2016年3月31日 (木) 12:17時点における最新版
MonoMac(読み:ものまっく)とは、Xamarin Studio(MonoおよびMonoDevelop)を用いてC#でMac OS X用の「ネイティブアプリケーション」の開発を可能にする統合プログラミング環境のことである。
目次
概要[編集 | ソースを編集]
MonoMacはiOS向けのMonoTouchの技術をそのままMac OS Xに持ってきたものであるといえる。
2011年3月17日、MonoMac 1.0が公開された。今後、F#、IronRuby、IronPython、UnityScriptといったプログラミング言語のサポートを進めていくと説明されている。
ライセンス[編集 | ソースを編集]
有償版のみのMonoTouchとは異なりMonoMacは完全に無償で提供されている。 ただしMonoMacはライセンスにGPLおよびLGPLが用いられており、開発したプログラムを配布する場合は必ずオープンソースにしなければならないという条件がついている。
そのままでは商用利用できない、ソースコードは公開したくない、という人のためにオープンソース化しなくてもよいというXamarin.Macという有償版も提供されている。 いわゆる資金源である。
Xcode連携[編集 | ソースを編集]
UI部分のデザインにはInterface Builderとの連携に対応しているため従来のXcodeを用いたMac OS Xアプリケーション開発と基本的に同様である。 ただしMonoDevelop経由でxibファイルを開きInterface Builderを起動すると、xibファイルが監視された状態となり、UIを編集し保存した瞬間にまるでVisual StudioでWindows Formsをデザイン編集したときのように全自動で部分クラスが生成されるなど、その連携具合は手動でアウトレットを書かなければならないXcodeより遙かに優れている。
日本語周り[編集 | ソースを編集]
なお、2012年3月19日時点では、MonoDevelopでの日本語表示に一手間必要であり、また日本語入力は一切できない。アプリ中に出現する文字列は、多言語対応のためにもソースコードに直接日本語を埋め込まず、リソースで管理しましょうという思し召しに違いない。
2013年11月5日現在の最新バージョンでは日本語表示も日本語入力も問題なくできるようになっている。いつの間に対応したんだよ。
ネイティブコード[編集 | ソースを編集]
Monoと言えば.NET Framework互換のオープンソースプロジェクト、その.NET Frameworkと言えば中間コードと仮想マシンをまず思い浮かべるだろうが、MonoMacが吐き出すのは生粋のネイティブコードである。
MonoMacではC#で書いたソースコードを、ほぼ人間の読めないObjective-Cのソースコードに変換し(いわゆるトランスコード)、それをXcodeでビルドする。なお、この一連の動作はMonoDevelopがバックグラウンドで行うので開発者は気にする必要がない。また、このネイティブコード寄りな仕様の関係上、リフレクションなどの.NET Framework特有の一部機能は使えなくなっている。
C#のソースコードからObjective-Cのソースコードに変換するという荒技は、かつてアドビとアップルによるFlashによるiPhoneアプリ開発をめぐる紛争の末に制定されたApp Storeのサードパーティ締め出し利用規約を強引に回避するために編み出した必殺技である。 [1]
利点[編集 | ソースを編集]
ガベージコレクションが強い[編集 | ソースを編集]
Objective-CもSwiftもガベージコレクションが腐っており実質的には存在しないと思った方がいいレベルの中で唯一まともそうなのがMonoMacであった。ほとんどのアプリはObjective-Cのガベージコレクションでも問題ないが、ウェブカメラの動画を表示や録画、編集などを行うような高負荷かつメモリを喰いまくるアプリでは特に顕著であった。アップルのサイトで配布しているQTKitによるウェブカメラを制御するサンプルも、実は動きの速い動画を撮影し続けるとメモリリークして最終的にクラッシュするという[2]。
欠点[編集 | ソースを編集]
APIが欠落している[編集 | ソースを編集]
Xamarin.Macが登場して以来、APIの更新が止まっており、日曜プログラマーには世知辛い雰囲気が漂っている。たとえばOS X MavericksでQTKitが廃止されAV Foundationに移行したがMonoMacでは残念なことになっている。せめて2つ3つくらい前の古いバージョンはMonoMacとして公開してくれたりしないかな。
使い方[編集 | ソースを編集]
- MonoMac/インストール
- MonoMac/ウインドウを閉じた際にアプリを終了させる
- MonoMac/フルスクリーン表示に対応する
- MonoMac/Interface Builderでカスタムコントロールを使用する
- MonoMac/NSImageをファイルに保存する
- MonoMac/NSImageをSystem.Drawing.Imageに変換する
- MonoMac/Resource Bundleを利用する
- MonoMac/ウインドウが閉じる際に処理をする
- MonoMac/モーダルウインドウを作成する
- MonoMac/AppleScriptを実行する
- MonoMac/リムーバブルメディアの着脱を検知する
- MonoMac/外部コマンドを実行する
この他にも「Category:MonoMac」に色々あるかもしれない。