Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
88
Help us understand the problem. What is going on with this article?
@yimajo

cocoapodsを導入したプロジェクトでアーキテクチャ周りのビルドエラーになる時

More than 5 years have passed since last update.

解決方法

  • 各プロジェクト設定の"Architectures"を揃えているかどうか確認
  • 各プロジェクト設定の"Build Active Architecture Only"で矛盾がないか確認

具体的な話

例はMixpanelをcocoapods経由で組み込んだ際のビルドエラー

"_OBJC_CLASS_$_Mixpanel", referenced from:
objc-class-ref in STAnalytics.o

エラーログの上の方を見ていくとかなり詳細に状態が表示されていた

Pods was rejected as an implicit dependency for 'libPods.a' because its architectures 'armv7s' didn't contain all required architectures 'armv7 armv7s arm64'

cocoapodsを使う場合Xcodeはワークスペースを使うが、実際のプロジェクトは'armv7 armv7s arm64'でビルドされるべきなのに、cocoapodsのプロジェクトは'armv7s'しかビルドしていなかったために発生していた様子。

Stackoverflowで同じような症状と解決策を探してみると、podsのプロジェクトの"Build Active Architecture Only"をYESからNOにすべしとあった

CocoaPods arm64 issue
http://stackoverflow.com/questions/19419781/cocoapods-arm64-issue

スクリーンショット 2014-02-22 15.47.09.png

図のようにどうやらデフォルトYESになっていて、これをNOにすべしということらしい。実際にNOにしてビルドエラーはなくなった。

デフォルトYESなのは理由がある

"Build Active Architecture Only"はビルドしようとしているアクティブなアーキテクチャのみバイナリを生成するかどうかなので、例えばiPhone5(armv7s)実機で開発作業の検証を行っている時はarm64のビルドなどしなくて良いのではないかと思う。よって、開発プロジェクト側もDebugの"Build Active Architecture Only"をpodsプロジェクトと併せてYESにするとビルドが出来るようになった。

おそらく全部NOに統一してしまっても開発はできるが特定の端末で動作を確認したい場合でも全部NOに統一するのはビルド時間が無駄なはず。

まとめ

  • Debug,Release毎に各プロジェクトの"Build Active Architecture Only"を揃える
  • Xcodeから特定の実機で検証したい場合はDebugビルドの"Build Active Architecture Only"はYES
  • それ以外(例えばAdHocやRelease)の場合はNOにする

参考

xcodeのarmv7sビルドエラー
http://spacetimebubble.net/2012/12/26/xcode%E3%81%AEarmv7s%E3%83%93%E3%83%AB%E3%83%89%E3%82%A8%E3%83%A9%E3%83%BC/

Xcode 4.2でarmv6が必要だって怒られる場合の対処方法
http://d.hatena.ne.jp/paraches/20111029

88
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yimajo
株式会社キュリオシティソフトウェアの代表です。iOSアプリを作っています。最近はCombine frameworkガイドブック / RxSwift研究読本などを書いてます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
88
Help us understand the problem. What is going on with this article?