Xcode3とarmv6とarmv7とビルドに関する話

まだまだXcode3系使われてる方もいると思うので、今回詰んだ話しを。

やりたかった事

OpenSSL をアプリで利用したかったので、
http://www.x2on.de/2010/07/13/tutorial-iphone-app-with-compiled-openssl-1-0-0a-library/ などを参考に、armv6用でビルドした。


さてリリース、となった時、とある事情で別のマシンでリリースビルドは行う事となった。


‥ところが、リリースビルドが通らない。自分のマシンではビルドが通っているにも関わらず別マシンでは通らない。という事で、その原因を調べた。

調べた

自分のマシンに入っていたのは、Xcode3.2.5

リリース用ビルドを行っていたのはXcode3.2.6

こっちのマシンだと、

file was built for archive which is not the architecture being linked (armv7)

というビルドエラーが出て通らない。


そもそも armv6 とか armv7 とかは何かというと、CPUのアーキテクチャらしい。
iPhone3G までが armv6 で 3GS, 4 は armv7 ということ。

Xcode3.2.6 は armv6 対応してないのかー!と思ったら、

ちゃんと設定はある。


で、いろいろ試したら以下のような結果になった。 (※全て実機ビルド)

■Xcode3.2.5
Debug-armv6 OK
Debug-armv7 OK
AdHoc-armv6 OK
AdHoc-armv7 OK
Release-armv6 OK
Release-armv7 OK

■Xcode3.2.6
Debug-armv6 OK
Debug-armv7 NG
AdHoc-armv6 NG
AdHoc-armv7 NG
Release-armv6 NG
Release-armv7 NG

なぜか Debug-armv6 はビルド成功する。バグだろうか?


という事で、3Gにはまだ対応したかったので、OpenSSLをarmv6 と armv7 (Simulator用も) の3種類ビルドして突っ込んだ。
後はパス通ってれば勝手に使えるやつを使ってくれる。
(ただしこの方法だと warning は残る)

結論

Xcode4 からは armv6未対応って事らしいので、その前身になるバージョンに影響があったという事なんだろうか?


まだまだ3G対応は必要になる事もあるでしょうし、Xcode3.2.6 使ってる方もいると思いますので、静的ライブラリを組み込む際は複数アーキテクチャ分ビルドしたらいいですね。