iOSのOpenCV環境構築

簡単だった Android に比べて癖が強かった iOS の OpenCV 環境構築について、Xcode 9 と Swift 4 で且つ CocoaPods を使わないという条件下で3つのハマった事を記録しておきます。

  1. 使用する OpenCV のバージョン

    まずはやっぱり最新バージョンと思って OpenCV 3.4 を使うも “Apple Mach-O Linker Error” でビルドに失敗したので Stack Overflow のお世話になると 3.1 以下を使うべしという事。実際には最後に判明した事だけど重要度から最初の項目にしました。

    参考:
  2. フレームワークとラッパーファイルを配置する場所と Create Bridging Header プロンプトが表示されない問題

    この辺りのチュートリアルを説明している日本語文献は多いのだけど、フレームワークとラッパーファイルをプロジェクト直下では無くてグループのフォルダ内に置くと openCVwrapper.mm ファイルのヘッダで #import "opencv2/opencv.hpp" とすると 'opencv2/opencv.hpp' file not found とエラーを出力します。

    結論からすると、ターゲットの Build Settings にある Framework Search Path を正しく指定すればどこに置いて良いという事ですが、プロジェクトフォルダの第一階層に置くのが理想的かと思います。

    http://hkitago.tumblr.com/post/172359880316

    もしグループフォルダに置いた場合、右手にあるプルダウンから再帰(recursive)を選べば通るようになります。

    この模索中にフレームワークの追加と削除を繰り返す事になったのですが、2回目にフレームワークを追加しても Bridging-Header.h を自動的に作成するダイアログが表示されない問題にぶつかりました。フレームワークと3つのラッパーファイルを削除したらターゲットの Build Settings にある Bridging Header を削除する事で解決します。参考の Stack Overflow にスクショ付きで解説があって助かりました。

    参考:
  3. ビルド時の Documentation Issue 警告

    最後は深刻ではないのですが、ビルドすると大量の警告を出力してくるという気持ち悪さ回避で、プロジェクトの Build Settings にある Documentation Comments を NO にしました。

    参考:

最後にサンプルコードを Github で漁っていたのですが、 Swift 3 のコードが多く、しかも Swift 4 でカメラ周りの API の変更点が多い事や、Android との兼ね合いを考慮してできるだけ OpenCV のコードで Swift を使わないものを探してみると、Twitter 検索で面白いものを見つけました。(Google 検索には引っかからなかったのがとても現代的)

Swift 4 用に若干変更を加え、先に Android で作っていたコードを流用して簡単に実装できました。

環境構築1日、実装5分という情けないお話でした。

投稿者: hkitago

個人事業主でウェブと iOS, Android アプリの開発者で一児の父親。JavaScript, ActionScript, AppleScript, PHP, SQL, ObjC, Swift, Java の読書実行試験運用管理を生業とし、Bind, Postfix, Apache を MacOS で使い、エディタは Vi, mi, Kod, Smultron, TextWrangler を経て Coda, Xcode, Android Studio といった IDE と CotEditor を重用しています。