Visual Studio 2015を使用している開発者が,Windows 10上で動作するiOSアプリを開発できるようになる。このテクノロジは以前,Project Islandwoodというコードネームで言及されていたものだが,今回それがWindows Bridge for iOSとして公式リリースされた。GitHubを通じて公開されるオープンソースプロジェクトとして,MITライセンスの下で利用可能だ。
コード
Windows Bridge for iOSは,Windows開発者に,Visual Studioを使用した本格的なWindows用のObjective-C開発環境を提供する。この言語サポートをより便利にするため,BridgeにはiOS APIレイヤも含まれている。
現時点では,x86およびx64アーキテクチャのWindows 8.1とWindows 10がサポート対象だが,MicrosoftのKevin Gallo氏によると,将来のリリースでは,モバイルサポート(ARMによる)も計画されている。同社プログラムマネージャのSaimaan Ahmed氏は,Windows Bridgeの主要部分であるObjective-Cコンパイラ,Objective-Cランタイム,iOS APIのヘッダとライブラリ,Visual Studio IDEとの統合の4点について,それぞれ詳細な情報を提供している。
興味深いのは,コンパイラのバイナリはGitHubリポジトリに含まれているが,コンパイラ自体はオープンソースでないことだ。最終的なコンパイラの完成版は,今年後半に予定されているVS2015のアップデートの一部として,バイナリ形式で提供される予定である。このコンパイラはClangをベースとしている― GitHubリポジトリの内容を確認する限り,ベースとなっているのはLLVM 3.6である。これまでに発表された内容からは,Microsoftのカスタマイズによって,C++/CXコードとObjective-Cコードが同一プロジェクト内で共存可能になるようだ。
賢明な読者ならば,先に挙げた4つのコンポーネントに,エミュレータとiOSランタイムが含まれていないことを見逃してはいないだろう。Ahmed氏はこのプロジェクトのMicrosoftの目標として,Windows APIへのフルアクセスを提供すること,既存iOSコードの再利用可能なこと,境界制限なく(iOSとWindowsという)2つのAPIセットによるメリットを享受することを挙げている。iOSアプリをWindows上で動かすというのは,アプリがエミュレータ内で(Androidアプリが可能なように)変換なしに動作する,という意味ではないのだ。
論争
リリース後,Peter Steinberger氏やChristopher J.W. Lloyd氏といった公開コード開発者から,自分たちの開発したものが帰属説明のないままWinObjCプロジェクトに取り込まれている,という指摘があった。これらの欠落はその後訂正されているが,開発者たちは自らのコードが当初このように扱われたことについて,当然ながら不服に思っている。この問題について尋ねたところ,Microsoftから次のような回答があった。
“最初のIslandwoodプレビューリリースでは,コードの帰属に関していくつか誤りがありましたが,コミュニティからの指摘により, 直ちに訂正されています。フィードバックに感謝すると同時に,ミスに関して謝罪します。”
ソースをプロジェクトに公開することには潜在的なセキュリティ問題もあり,それ自体がリスクないし危険であるとも考えられる。Landon Fuller氏はプロジェクトが現在,arc4random()
関数の機能を,機能面で劣るrand()
関数で置き換えようとしていることを報告している。ここで問題なのは,現在実装されている内容を見た開発者が,詳細な状況に気が付かず,実は使用すべきでないarc4random()
関数を使用する可能性があることだ。この点について質問すると,Microsoft は次のように回答した。
“最初のプレビューは,プロジェクトのコアアーキテクチャに対するコミュニティからのフィードバック獲得を通じて,プロジェクトの基礎を強固なものにすることを主な目的としたものです。これまで得たフィードバックは,コンパイラ統合やWndowsとの相互運用といったプロジェクトのコアコンポーネントが,アーキテクチャ的に適切なものであったことを示しています。私たちが早期プレビュー版をリリースしたのは,私たちのテクノロジとオープンソースプロセスとのギャップの検出を,コミュニティが支援してくれると期待してのことです。その結果,コミュニティからのインプットに基づいて,コード既存などの問題修正が完了しています。Islandwoodプレビューに対する関心のレベルや建設的なフィードバックには,大いに勇気付けられました。プロジェクトの改善のため,今後もコミュニティと協力していきたいと思っています。”
arc4random()
がより望ましい選択であるとする背景については,Matt Thompson氏が簡単な説明を書いている(“Why Should I Use arc4random(3) instead of rand(3) or random(3)?”の章を参照のこと)。