SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Windows Bridge for iOS 〜Objective-C(Xcode)で作成したプロジェクトを変換してみた〜

今日は、Objective-Cで作成たプロジェクトをWindows用のプロジェクトに変換してみました。
↓WinObjCなど、基本的な事については、昨日の記事をご参照ください。furuya02.hatenablog.com

1 vsimporter.exe

WinObjCに含まれるvsimporter.exeを使用することで、Objective-CのプロジェクトをWindows用のプロジェクトに変換できます。
vsimporter.exeの使用方法は、-help スイッチで確認できます。

c:\winobjc\bin>vsimporter.exe -help
Usage:  vsimporter.exe [-project projectname] [-target targetname ...] [-configuration configurationname] [-interactive] [setting=value ...]
        vsimporter.exe [-project projectname] -scheme schemename [-configuration configurationname] [-interactive] [setting=value ...]
        vsimporter.exe -workspace workspacename -scheme schemename [-configuration configurationname] [-interactive] [setting=value ...]
        vsimporter.exe -list [-project projectname | -workspace workspacename]

Program Options
    -usage                  print brief usage message
    -help                   print full usage message
    -interactive            enable interactive mode
    -loglevel LEVEL         debug | info | warning | error
    -list                   list the targets and configurations in the project
    -sdk SDKROOT            specify path to WinObjC SDK root (by default calculated from binary's location)
    -project PATH           specify project to process
    -workspace PATH         specify workspace to process
    -target NAME            specify target to process
    -alltargets             process all targets
    -scheme NAME            specify scheme to process
    -allschemes             process all schemes
    -configuration NAME     specify configuration to use
    -xcconfig FILE          apply build settings defined in FILE as overrides
    -format FORMAT          winstore8.1 | winphone8.1 | winstore10 (default)
    -version                print the tool version
  • formatでターゲットを指定することで、3種類のプロジェクトが生成可能です。

2 Xcodeでのプロジェクト作成

Xcodeの「Single View Application」から、テスト用のアプリを作成します。
なお、vsimporter.exeは、現時点では、Storyboardに対応できていないので、Xcode6でデフォルトで使用されるMain.Storyboardは削除して、ラベルをコードで貼りました。

f:id:furuya02:20150810030237p:plain

AppDelegate.h

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;

@end

AppDelegate.m

・・・省略・・・
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    self.viewController = [[ViewController alloc] init];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}
・・・省略・・・

ViewController.m

・・・省略・・・
- (void)viewDidLoad {
    [super viewDidLoad];
    [self initLabel];
}

- (void)initLabel{
    CGRect rect = CGRectMake(60,100,200,30);
    UILabel *label = [[UILabel alloc] initWithFrame:rect];
    label.text = @"Hello World!";
    label .textAlignment = NSTextAlignmentCenter;
    label.textColor = [UIColor blackColor];
    [self.view addSubview:label];
}
・・・省略・・・

f:id:furuya02:20150810025354p:plain

3 Windows用プロジェクトの作成と実行

Xcodeで作成したプロジェクトを丸ごとWindows環境へ移して、vsimporter.exeを使用して、WindowsPhone用のプロジェクトを作成してみます。

コピーした時点でのフォルダの状態は次のとおりです。
f:id:furuya02:20150810030927p:plain
vsimporter.exeに-formatスイッチでWindowsPhoneを指定して実行した様子です。
f:id:furuya02:20150810030928p:plain
変換後のフォルダの状態です。
f:id:furuya02:20150810030930p:plain

生成されたslnファイルをダブルクリックしてVisualStudio2015を起動して、実行した様子です。
f:id:furuya02:20150810031442p:plain

4 Windows Bridge for iOS について補足

Bridgeは、次の4つのコンポーネントでできています。

1.Objective-C コンパイラ
 Objective-Cのコードを、ネイティブなユニバーサルWindowsアプリにコンパイルします
2.Objective-C ランタイム
 Objecttive-Cランタイムには、メッセージのディスパッチやデリゲーション、自動参照カウントなどが含まれています
3.iOS API ヘッダ/ライブラリ
 基本APIについては、すでに提供されていますが、さらに改善するために意見を待っているとの事です
4.VisualStudio IDEの統合
 Xcodeプロジェクトをインポートする

参考:Windows Bridge for iOS: Let’s open this up | Building Apps for Windows

ちなみに、このプロジェクトは、単に既存のObjecttiv-CのコードをWindowsコンパイルする事だけが目標ではないそうです。
例えば、次のように、Objective-CにコードからWindowsAPIもコールできるようです。
f:id:furuya02:20150810032150p:plain
上記では、Windows.Foundation.UriWindows.System.Launcherが利用されています。

参考:Windows Bridge for iOS: Let’s open this up | Building Apps for Windows

5 Windows Bridge for iOS の現状

現時点では、あくまで限定的なリリースで、完成度は、まだまだだと感じます。
今回の作業も、細いハッピーパスをくぐり抜けた感じが否定できません。

最終的なリリースは、今秋のVisualStudio2015のUpdateが予定との事です。
参考:Open Sourcing the Windows Bridge for iOS | Building Apps for Windows

なお、Androidの、テクニカルプレビューも一部の招待者で始まっており、8月末のパブリックベータが予定されているようです。
試してみたい方はサインアップしておくといいでしょう。
参考:Windows Bridge for Android - Windows アプリの開発

参考資料

Windows Bridge for iOS: Let’s open this up | Building Apps for Windows
Open Sourcing the Windows Bridge for iOS | Building Apps for Windows
Windows Bridge for Android - Windows アプリの開発

furuya02.hatenablog.com