酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

機能強化された「Windows Bridge for iOS」でiOSアプリをWindowsアプリに変換してみる

「Windows Bridge for iOS」が機能強化されたという情報が入ってきました。新しいバージョンではAutoLayoutに対応したようです。

iOS用Windowsブリッジチームはこのほど、CoreFoundationの正式な実装をWinObjCコードベースに統合し、完全なCoreFoundation及びFoundation(CoreFoundationのObjective-Cブリッジ版)フレームワークをiOS用Windowsブリッジで利用できるようにした。  また、これまでもiOS用Windowsブリッジは「iOSアプリのUIの保持」をサポートしてきたが、同ブリッジチームは、アップルのレイアウト構築メカニズムである「Auto Layout」に最近追加された2つのクラスも新たにサポートした。

「Windows Bridge for iOS」が機能強化、iOSレイアウトAPIをサポート

1年前、Windows Bridge for iOSが登場したときにちゃんと動くのか試していました。

このバージョンではxibファイル周りが綺麗に変換できず、もちろんstoryboardファイルに至っては変換不可能でした。そもそもXcodeで生成したプロジェクトを変換できませんでした。

まぁ……当然というかプロジェクトに同梱されているサンプルプロジェクトは、きちんとWindowsアプリに変換することができました。サンプルプロジェクトとして用意されていたiOS向けのプロジェクトを変換させて一通り動かすところまで試したのですがプログラムだけでUIを作ってるタイプのアプリでした*1

例えばこんな感じのやつ(イメージです)。

UIView* v = [[UIView alloc] init]; 
[self.view addSubView:v];

このような背景もあり「Windows Bridge for iOS」リリース当時は実用には向かない段階だと判断して、その後あまりチェックをしていませんでした。

前置きが長くなりましたが1年経ち機能強化されたということでどうなったのかを書きたいと思います。

目次

前準備

開発環境をWindowsに戻す前に、MacでXcodeを使って任意のプロジェクトを作成します。

変換対象となるXcodeでサンプルプロジェクトを作成する

Xcodeの新規プロジェクト作成ウィザードで、タブ切り替えできるアプリを簡単に作成します。

f:id:ch3cooh393:20160608173811p:plain

適当にアプリの名前をつけてぽちぽちクリックします。言語はObjective-Cを選択します。

f:id:ch3cooh393:20160608173824p:plain

以上で変換対象となるプロジェクトができました。iPhoneシミュレータを使って起動させてみましょう。

f:id:ch3cooh393:20160608173727p:plain

はい、タブを切り替えするだけのアプリです。これをWindowsで動かします。

最新のWindows Bridge for iOSを使ってみよう!

さてここからが本番です。最新のWindows Bridge for iOS*2を使って、前述したiPhoneアプリをWindowsで動かすことができるか試してみましょう。

Windows Bridge for iOS SDKをダウンロードする

GitHub - Microsoft/WinObjC: Objective-C for Windows」のページの下の方にあるWhere to get the bridge欄にある here をクリックします。

f:id:ch3cooh393:20160716170811p:plain

最新バージョンのリリースノートが掲載されています。今の最新バージョンは0.1 Preview (July 15, 2016)のようです。

ページの下の方にあるDownloads欄を見ましょう。ソースコードをダウンロードすることができますが、ビルドするのに時間がかかりそうだったので、winobjc.zip の方をダウンロードしました。

f:id:ch3cooh393:20160716170817p:plain

任意のディレクトリにwinobjc.zipを解凍します。解凍には時間がかかります。それもそのはず、解凍が終わると 1.39GB になります。SDK自体が結構巨大ですね。

iPhoneアプリのプロジェクトをVisual Studio向けに変換する

1年ぶりなのでプロジェクトの変換方法について改めて書いておきます。

スタートのボックスに「 Visual Studio 2015」と入力するとサジェストされる「Visual Studio 2015用 MSBuildのコマンドプロント」を起動します。

f:id:ch3cooh393:20160716173422p:plain

カレントディレクトリを変換したいxcprojのあるディレクトリに移動させて、SDKのvsimporter.exeを実行します。

>cd C:\works\objcsample
C:\works\objcsample> C:\works\sdk\bin/vsimporter.exe

f:id:ch3cooh393:20160716173455p:plain

これでVisual Studio向けのプロジェクトができました。あとは作成されたobjcsample-WinStore10.slnをダブルクリックしてVisual Studioを起動します。

f:id:ch3cooh393:20160716174816p:plain

特に設定せずにソリューションファイルを開いてF5ボタンを押してVisual Studioで実行させてみました。

f:id:ch3cooh393:20160716174522g:plain

iPhoneシミュレータとUWPのアプリを比較してみました。

f:id:ch3cooh393:20160716174602p:plain

Windows側の横幅がウィンドウ幅と一致していなくて、縦長のiPhoneと同じ幅になっているのが少し気になりますね。また、UITabBarの部分に謎のグラデーションが入ってたり、タブバーが4つ表示されていたりと謎なことになっています。

それでも1年前と比べると、エラーも出ませんし変換自体はスムーズにおこなわれるようになりましたね。

他のサンプルでも実行してみました

Master-Detail Applicationで作成したプロジェクトを試す

「Master-Detail Application」のウィザードを使用して作成したアプリをWindows Bridge for iOSで変換するとどうなるのか試してみました。

ナビゲーションバーに表示された[+]ボタンをタップするとアプリに現在時刻が追加されていくというサンプルアプリです。

残念ながらナビゲージョンバーまでは再現されておらず[+]ボタンそのものが表示されていませんでした。

f:id:ch3cooh393:20160716234148p:plain

詳しくはこちらの記事をごらんください。

関連記事

このエントリでは、Windows Bridge for iOS (旧名: WinObjC)についてを紹介させていただきました。Windows Bridge for iOSは、Windows 10で使用できるようにブリッジさせて、Objective-CのコードやiOS APIを使ったコードを再利用するためのプロジェクトです。

この他にもWindows Bridge for iOSのネタを紹介しております。Tipsをまとめておりますのでこちらのページをご参照ください。

*1:iPhone OS 3.0の頃に関わっていたInterface Builderを使いたくなくてUIをプログラムだけで生成していたプロジェクトを思い出していました

*2:現時点の最新は0.1 Preview (July 15, 2016)でした