iOSの最近のブログ記事

随分前のエントリーの焼き直しですw

諸般の事情によりYosemiteにはまだしばらく上げられないためXcode6.2をもう少し使い続けないといけないのですが、手元のiPhoneをうっかりiOS 8.3にアップしてしまった。やおら開発中のアプリを実機転送しようとしたら

cannot find developer disk image in `/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport' for version `8.3'

↑はRubyMotionでの出力ですが、Objective-CやSwiftで普通に開発してる場合でもこのエントリーは役に立つはずです( ˘ω˘)

  1. Xcode6.3のインストーラをDevCenterからダウンロードします。
  2. dmgファイルをダブルクリックしてマウントします
  3. 下記コマンドを実行してiOS8.3のDeviceSupportファイルをXcode6.2の中にコピーします
sudo cp -r /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/8.3\ \(12F69\) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

以上です。

Yosemiteに上げるまでこれで頑張りましょうヽ(´ー`)ノ

ブログ全然書いてないので小粒ネタ放流しとく(・ω・)

アルバムを使うiOSのアプリを作っていると、色んなバリエーションのある程度の枚数の写真がアルバムに入っている状態じゃないと効率が悪いです。

最も簡単な方法はiOS SimulatorのSafariで写真共有サイトを巡って、表示している画像を長押しして「画像を保存」です。

iOS%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF%20-%20iPhone%20Retina%20(4-inch)%20/%20iOS%207.0%20(11A465)
Uploaded with Skitch!

しかしネット上の他人の画像を使ってうっかりどこかにアップロードするなどミスも怖いので、自分の写真を使いたい。

もちろん自分の写真を写真共有サイトや自由になるWEBサーバにアップロードすれば同じことができますけど、イメージファイル自体は手元にあるのに面倒です。

イメージをドラッグしててたまたま見つけたんですが、iOS SimulatorはOSX上のファイルをドロップすると反応します!

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202013/09/21%2019:19
Uploaded with Skitch!

Skitchでスクリーンショットを取ったのですが(+)アイコンが消えてしまって反応しているの分からなくて残念(´・ω・`)

このままドロップするとSafariでfile://でOSXローカルのファイルが表示されます。

あとは画像を長押しして保存するだけ。

2013/07/07時点のOpenCVのソースからiOS用のframeworkをビルドする方法を説明します。

cmakeをインストールする

www.cmake.orgからダウンロードしてインストールするか、homebrewでインストールします。

www.cmake.orgからパッケージ版をインストールすると、GUIで汎用的に使えるCMakeでOSX上のOpenCVビルド環境を作るにはとても便利ですが、iOS向けのビルド環境はpythonスクリプト一発で内部ではコマンドラインのcmakeを呼び出しているのでhomebrewで大丈夫です。

brew install cmake

ソースコードの取得

普通にGitHubからcloneしてきます。

cd /path/to/repository
https://github.com/Itseez/opencv.git
cd opencv

後日、試しても同じように実行できるように、この時点のmasterのコミットポイントで実行することにします。

git co de58039 -b build-work

実はあとはplatforms/ios/build_framework.pyというpythonスクリプトを実行するだけで良いはずなのですが、ひとつだけうまくいかない事があります。

リンクが失敗する

実行するとコンパイルが終わって各アーキテクチャ用のスタティックライブラリを生成する時にjmemansi.oが見つからないというエラーで失敗します。

ビルド環境を直してPull Requestしたいところですが、とても難しそうなのでstackoverflowで紹介されているワークアラウンドでとりあえず回避します。

下記の差分のようにmodules/world/CMakeLists.txtの102行目に追加します。

diff --git a/modules/world/CMakeLists.txt b/modules/world/CMakeLists.txt
index f18635e..1e93991 100644
--- a/modules/world/CMakeLists.txt
+++ b/modules/world/CMakeLists.txt
@@ -99,6 +99,7 @@ macro(ios_include_3party_libs)
       list(APPEND objlist "\"${objpath3}\"")
     endforeach() # (srcname ${sources})
   endforeach()
+  ocv_list_filterout(objlist jmemansi) # <<= dirty fix
 endmacro()

 if(IOS AND WITH_PNG)

ビルド実行

あとは適当なワーキングディレクトリでbuild_framework.pyを実行します。

cd /path/to/somewhere
python /path/to/repository/opencv/platforms/ios/build_framework.py output

これで/path/to/somewhere/outputディレクトリ中のbuildディレクトリでコンパイルが実行され、同ディレクトリ中のopencv2.frameworkがiOS用フレームワークとなります。

CocoaPodsでも入るw

実はiOS用のOpenCVフレームワークはCocoaPodsにも対応しているので

pod 'OpenCV'

でも入りますw

最後に

今回のエントリーはRubyMotionのためのOpenCVラッパーフレームワークを作ろうとしていてビルドできるようにしたかったので書きました。

RubyMotionで通常のopencv2.frameworkを使おうとしても、C APIもC++ APIもRubyMotionのコンパイラがヘッダファイル中に出現するインラインマクロやC++のコードでコンパイルエラーになってしまうからです。

ビルド自体はワークアラウンドを見つけたらすぐにできたのですが、その修正は本来どうすればいいのかにトライしはじめちゃって、週末が時間切れになってしまったというのが本当のところです(爆)

iPhoneがiOS5.1にアップデートされて嬉しい(設定無限ループバグには泣かされましたが...)のもつかの間、私の所有しているMacBook AirはSnow Leopardのため対応しているXcodeが4.2でiOS5.1をサポートしていない事が判明(-ω-)

事情があり、まだしばらくLionには上げられないのです。

こまった、こまったといろいろ検索していてこのページを見つけてこれは?!っと思ってやってみたのです。

上記のページに載っている手順ですとiPhone Simulatorが漏れているので、それも加えた手順を紹介します。

  1. 起動しているXcodeがあれば終了しておきます。

  2. もし入ってなければApple Developer Connection(以下ADC)からSnow Leopard用の最新Xcodeである4.2を普通にインストールしておきます。 インストールが終わったら、デスクトップにあるXcodeフォルダのマウントを捨てて消しておきましょう。 (この後、コピーコマンドを実行するときにパスが変わってしまいますので)

  3. Xcode 4.3.1 for LionはSnow LeopardでもADCから問題なくダウンロードできますのでしてください。

  4. ダウンロードしたxcode_4.3.1_for_lion.dmgをマウントします。 マウントするにはFinderからダブルクリックするなりして開くだけです。

  5. ターミナルを起動して、Xcode 4.3.1に含まれるiOS5.1 SDKをコピーしていきますww 下記のコマンドをコピペして実行すればできるはずです。

一部シンボリックリンクのコピーがエラーとなりましたが、とりあえず無視しました(汗)

これでXcodeを起動すればiOS5.1としてコンパイル&実行できました。 シミュレータも5.1のものが選択でき動きます。 iOS5.1のiPhoneに実機転送もできますし、ステップ実行も出来ました。

ただ、こうやって作ったiOS5.1のアプリがアップルの審査を通るかどうかは分からないので、Lionにアップデートできるまでの繋ぎと考えたほうがいいかも知れません。

また、複雑なコードで動作確認などはしていないため、根本的にどこかおかしい可能性も否定できませんので、実行する場合は自己責任でお願いします(・ω・;)

このアーカイブについて

このページには、過去に書かれたブログ記事のうちiOSカテゴリに属しているものが含まれています。

前のカテゴリはimayomiです。

次のカテゴリはiPhoneです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。