23900


お世話になります。  
現在、サードパーティーKeyboardアプリを作成中の者です。C++は素養がほぼありません。Objective-
Cは基本だけわかる初心者です。よろしくお願いします。

Swiftにてコーディングしておりますが、[Mozc for iOS](https://github.com/kishikawakatsumi/Mozc-
for-iOS)を導入したいと願っています。  
現状、「Google CGI API for Japanese
Input」を利用して、サーバアクセスをし、変換候補を取得して簡易的に漢字変換を実装していますが、ローカルのMozcで実装できればと思いながら、実現できずにおります。

[JapaneseKeyboardKit](https://github.com/kishikawakatsumi/JapaneseKeyboardKit)のコードを拝見し、実機デモも行い、学習させていただいています。  
しかし、Objective-Cから、Swiftへの移植で困難を覚えています。  
特に現状では、SwiftへのC++のライブラリの取り込み方法がわからず、躓いております。

実装準備として、JapaneseKeyboardKitのコードからお借りして、  
inputCandidate.h  
inputManager.h  
の二つのヘッダファイルを、keyboard-bridging-header.hで#importし、  
inputCandidate.mm  
inputManager.mm  
もkeyboardアプリに配置し、  
Mozc-for-iOS/src/out_ios/Release-iphoneos配下の  
すべてのC++ライブラリ群をLink Binary with Libraryに登録致しました。

しかし、imputManager.mmファイル30行目あたりの

[code]

    #include "composer/composer.h"
    
[/code]

の部分で、  
「file not found」  
エラーが出て、先に進めずにおり弱っております。  
「composer.hというC++のファイルにアクセスできていないようだな」とは思うのですが、  
ブリッジングヘッダーでC++をObjective-Cでラップした前記2つのhファイルをimportし、  
読み込ませているつもりですが、どうcomposer/composer.hにアクセスできるのかわかりません。

Objective-Cを覚えて、現在Swiftで書いているkeyboardアプリのコードを書き直すか、  
Swiftでの実装が可能ならば、Swiftのままで行くか悩んでおります。

これはMozc for
iOSに関する質問というより、C++ライブラリのSwiftでの利用に関する質問かと思いますし、初歩的な質問かもしれませんが、ネット上でC++のライブラリ導入に関しての情報が少な目（自分には十分理解できず）ですので、ヒントがありましたら、どうぞよろしくお願いいたします。


CC BY-SA 3.0
2016-04-09T03:04:09.027
23865
2016-04-11T07:44:58.920
2016-04-11T07:27:19.617
15044
15044
question
ios swift
SwiftでMozc for iOSを実装したいのですが、C++（ヘッダーファイル）の読み込みで躓いています。


`composer.h`
が見つからないのはおそらくSwift関係なく、プロジェクトの`HEADER_SEARCH_PATH`の設定が正しくできていないのだと思います。Bridgingヘッダや、Swiftのコードがなくても同じエラーが出るのではありませんか？まず単にコードをコピーしただけのプロジェクトでビルドできるかどうか確認してみましょう。

それはともかく、Swiftは今のところ、C++のコードと直接の互換性はないので、CかObjective-
Cでラップする必要があります。SwiftからはラップしたCやObjective-Cを直接呼び出すことになります。

例えば、JapaneseKeyboardKitはMozcのコードをObjective-
CとObjective−C++でラップしていますので、そのコードはSwiftから呼び出すことができます。

JapaneseKeyboardKitの`InputManager`クラスのAPIをSwiftから使う場合を説明します。  
JPKBターゲットに`Manager.swift`というファイルを追加します。そのとき、Bridgingヘッダを追加するかどうかXcodeが聞いてくると思うので、追加します。

Bridgingヘッダに次のように`import`文を追加します。

[code]

    #import "InputManager.h"
    
[/code]

これだけで`Manager.swift`から`InputManager`のコードが扱えるようになるので、

[code]

    import UIKit
    
    class Manager: NSObject {
    
        func requestCandidates(forInput input: String) {
            let manager = InputManager()
            manager.requestCandidatesForInput(input)
            ...
        }
    
    }
    
[/code]

上記のようにSwiftでコードを書いていきます。

まとめると、Swiftから直接Mozcのコードを扱うことはできません。Objective-
CまたはCでラップする必要があります。なので、アプリの大部分はSwiftで書くにしても、少しはObjective−CあるいはCを覚えて、書く必要があります。


CC BY-SA 3.0
2016-04-10T16:01:01.473
23900
2016-04-10T16:01:01.473
5519
23865
answer


JapaneseKeyboardKitのBuild Settings設定を拝見し Search Paths > Header Search
Pathsの各設定項目を拝見して、該当ディレクトリを見たところ、読み込めていなかったヘッダーファイルがありました。  
ヘッダーファイルの「file not found」は、header search pathsの問題が多いようであると勉強になりました。

以下の画像は、JapaneseKeyboardKitの当該設定部分で、参考となりました。  
私同様に躓く方への参考のため、メモを残します。

[![Header_Search_Pathsの設定](https://i.stack.imgur.com/6AGrV.png)](https://i.stack.imgur.com/6AGrV.png)


CC BY-SA 3.0
2016-04-11T07:44:58.920
23910
2016-04-11T07:44:58.920
15044
23865
answer