酢ろぐ!

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

Objective-Cで書かれたXcodeプロジェクトをWindows 10で動かす「WinObjC」のプレビュー版がでました

Objective-CやJavaで書かれたiOSアプリやAndroidアプリをWindows 10で動かすためのWindows Bridgeプロジェクトがあります。ワシントン州の地名をとったコードネームでそれぞれ「Project Islandwood」「Project Astoria」と呼ばれていました。

クローズドベータ版(先行リリース版?)で一旦公開されたのち、募集だけがかかっていた状態でまったく音沙汰なかったのですが、本日プロジェクトのコード一式がGitHubで公開されました。

Windows 10とVisual Studio 2015をインストールする必要がありそうなので、Windows 8.1を使っている方では試せなさそう……*1

Twitter上ではすでに試された方が大勢いてうまく変換できない!ということでしたが、自分でも試してみました。とりあえずは、WinObjCにサンプルとして提供されているWOCCatalogプロジェクトを動かしてみます。

WinObjCを試してみる

さて、早速WinObjCを試してみましょう!

開発環境

  • Windows 10
  • Visual Studio 2015 と Windows developer tools がインストールされていること

Visual Studio 2015(製品版)を持っていない方は、Visual Studio 2015 Communityをダウンロードしてください。おまかせモードではなくてカスタムモードでインストールをします。以下のものをインストールしておきます。思った以上に容量が必要です。

  • Programming Languages -> Visual C++
  • Universal Windows App Development Tools (all)
  • Windows 8.1 and Windows Phone 8.0/8.1 Tools (all)

Windows developer toolsは、下記のリンクからダウンロードすることができます。

Windows 10にVisual Studio 2015をインストールしていれば、Windows SDK for Windows 10を改めてインストールする必要はなさそうなのですが、後述するビルドエラーが発生してしまいますので事前にインストールしておいた方がよさそうです。

ちなみに僕はParallels上にインストールしたWindows 10 EnterpriseとVisual Studio Enterprise 2015を使っています。

サンプルプロジェクト「WOCCatalog」をWindows 10で実行している

  1. WinObjC SDKを任意のフォルダで解凍する
  2. エクスプローラーで samples/WOCCatalog フォルダを開く
  3. 「WOCCatalog-WinStore10.sln」をダブルクリックして開く
  4. ソリューションエクスプローラーで、WOCCatalog (Windows 10.0)を右クリックして、コンテキストメニューから「スタートアッププロジェクトに設定」します。

下図のようにしてスタートアッププロジェクトを設定します。

あとはプロジェクトを実行するまでの状態になりました。

WOCCatalogアプリを実行する

実際どんな風に表示されるのか確認してみましょう。

Visual StudioでF5キーを押して実行します。下図は起動直後のメニュー画面です。Xcodeで同じプロジェクトを実行した時の結果も合わせて掲載しています。

カタログという名前だけあって、それぞれ対応したコントロールの画面に遷移することができます。例えば、UIButtonです。

UISegmentedControlはこんな感じ。

UIPickerViewはこんな感じです。

UIKitに関しては頑張っているものの、そのままでアプリをリリースできるとは思わないほうがよさそうです。

WinObjCを動かすまでのトラブルシューティング

すんなりと実行できると思っていたけれど、WinObjCが動くようになるまでにいくつかのトラブルが発生しました。以下の2件のビルドエラーが発生しました。

Microsoft.VCLibsが見つからない

WinObjCのビルドには、VC++のライブラリを参照する必要があります。ただ、このエラーが発生している時にはうまく参照できていません。

エラー MSB3774 SDK "Microsoft.VCLibs, Version=14.0" が見つかりませんでした。 WOCCatalog (WOCCatalog\WOCCatalog) C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets 2048

このエラーが発生している時は開発環境が壊れている可能性があるので、Visual Studio 2015のインストーラーを起動して[修復]したところ、このエラーは発生しなくなりました。

参考: http://stackoverflow.com/questions/13094694/compilation-error-error-msb3774-could-not-find-sdk-microsoft-vclibs-version

要求しているWindows SDKのバージョンが見つからない」

スタンドアロンの Windows SDK for Windows 10」をインストールされていない場合にこのエラーが発生します。

エラー The Windows SDK version (10.0.10240.0) was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting 'Retarget solution'

スタンドアロンの Windows SDK for Windows 10」をダウンロードしてインストールすることでこのエラーは発生しなくなります。

ただ、このページには以下のように書かれています。

Visual Studio 2015 以外の開発環境を使用している場合は、スタンドアロンの Windows 10 SDK インストーラーをダウンロードできます。Visual Studio 2015 を使用している場合は、この SDK をインストールする必要はありません。この SDK は既に含まれています。

Windows 10の場合は必要なさそうなのですが、インストールしないとビルドエラーが発生したままになります。Windows SDKをインストールしたらなんで問題が解決するのかきちんと調べられていません。

関連記事

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

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

*1:ただWinObjCにはWin 8.1用のソリューションファイルが用意されているみたいなんだが、Windows 10ではないとビルドできないんだろうか?