Watson's Blog

RubyMotion でビルドする CPU アーキテクチャを指定する

| Comments

この記事は RubyMotion Advent Calendar 2012 の 15 日目の記事です。

今回はRubyMotion でビルドする際に CPU アーキテクチャを指定する方法について書きます。

iOS SDK がサポートする CPU アーキテクチャ

iOS SDK がサポートする CPU アーキテクチャは以下の表のようになっています。

iOS SDK バージョンサポート CPU アーキテクチャ
iOS 4.3armv6, armv7
iOS 5.0armv7
iOS 5.1armv7
iOS 6.0armv7, armv7s

RubyMotion では iOS SDK がサポートしている CPU アーキテクチャにあわせてビルドが行われます。ビルド対象を iOS 6.0 にすると armv7 と armv7s を対象にビルドが行われます。

たいていは問題がないのですが、サードパーティのライブラリを使うときに気をつけてください。

armv7 しかサポートしていないサードパーティのライブラリを使うとき、デバイス向けにビルドを行うとリンクエラーとなります。

1
2
3
4
5
6
7
8
9
$ rake build:device
     Build ./build/iPhoneOS-6.0-Development
     Build vendor/GoogleMaps.framework
   Compile ./app/app_delegate.rb
    Create ./build/iPhoneOS-6.0-Development/HelloGMaps.app
      Link ./build/iPhoneOS-6.0-Development/HelloGMaps.app/HelloGMaps

ld: ld: file is universal (2 slices) but does not contain a(n) armv7s slice: /Users/watson/Documents/workspace/HelloGMaps/vendor/GoogleMaps.framework/GoogleMaps for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

CPU アーキテクチャを指定する

Rakefileapp.archs['iPhoneOS'] を設定するとビルドするデバイスの CPU アーキテクチャを指定することができます。

1
2
3
4
Motion::Project::App.setup do |app|
   ...
   app.archs['iPhoneOS'] = ['armv7']
   ...

これで armv7 だけを対象にデバイス向けにビルドすることができます。

Comments