XcodeでSwiftからC++コードを呼び出すまで
- Xcode を立ち上げる
- Create new a Xcode project を選択
- iOS→Application→Single View Application
- Language=Swift
- Devices=iPhone
- Use Core Dataはチェックしない
- Source Controlはチェックする
- 適当な保存場所を選択
- 左側のファイルツリーでproject名のgroupのコンテキストメニュー(以下コンメニュー)→New Groupを選択→cppを追加
- 同じくobjcppを追加
- cpp Groupのコンテキストメニュー→New File…→C++ File を選択 Also create a header file はチェック
- 適当な保存場所を選択
- Would you like to configure an Objective-C bridging header? は Yes
- 出来たsourceとheaderにclassの記述を追加する
/*cpp.h*/ #ifndef __Test150108__cpp__ #define __Test150108__cpp__ #include <stdio.h> class CCpp { public: void test(void); }; #endif /* defined(__Test150108__cpp__) */
/*cpp.cpp*/ #include "cpp.h" void CCpp::test(void) { printf( "cpp excute\n"); }
- objcpp Groupのコンテキストメニュー→New File…→C++ File を選択 Empty Fileを選択
- 適当な保存場所を選択
- 出来た.mファイルを.mmに変更
- objcpp Groupのコンテキストメニュー→New File…→Header File を選択
- 適当な保存場所を選択
- 出来たファイルにcpp呼び出し処理を記述
/*objcpp.h*/ #ifndef Test150108_Header_h #define Test150108_Header_h #import <Foundation/Foundation.h> @interface ObjCpp : NSObject -(void)test; @end #endif
/*objcpp.mm*/ #import <Foundation/Foundation.h> #import "objcpp.h" #import "cpp.h" @implementation ObjCpp { CCpp * cpp; } -(id)init { self = [super init]; cpp = new CCpp(); return self; } -(void)test { cpp->test(); } @end
- product名-Bridging-Header.hファイルにObjective-CのHeaderのimportを記述
// // Use this file to import your target's public headers that you would like to expose to Swift. // #import "objcpp.h"
- ファイルツリーからViewController.swiftを選択 Load処理にC++呼び出しを追加
/*ViewController.swift*/ override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. }
↓
/*ViewController.swift*/ override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var objcpp = ObjCpp() objcpp.test() }
- コマンドキー+rで実行
- Xcodeの右下のアイコンの右側が塗り潰されているアイコンを選択 コンソール出力を出す
- test()のprint文の内容が出力されていたら、成功