Xcodeで遭遇したエラーたち・・(逐次更新)
見つかる度に逐次更新していく予定です。
duplicate symbol OBJC_CLASS$_ (2015-09-18)
duplicate symbol _OBJC_CLASS_$_#{hoge}
同じ名前のクラスや変数,メソッドなどが定義されていれば発生します。本来はIDEの恩恵ですぐに気付くと思いますが、僕の場合はCompile Sourcesに同じファイルが含まれていたことによって発生しました。
ファイルの作り直しとかをしてたら遭遇するかもしれません。
importで"*.m"ファイルを間違えて読み込んでも発生するそうです(参考URLはてブより)
ARC forbids explicit message send of (2015-09-28)
ARC forbids explicit message send of #{'autorelease' | 'release'}
メモリ管理方式でARCが有効になっているのに、autoreleaseメソッドやreleaseメソッドが記述されていると発生します。
TARGETSの設定からBuild Settings => Apple LLVM - Language - Objective C => Objective-C Automatic Reference CountingをNoにすることで解消します。
古いカウンタ管理方式を用いているアプリケーションを、新しいXcodeで編集したことによって発生しました。
Include of non-modular header inside framework module ${module_name} (2015-10-22)
Include of non-modular header inside framework module #{module_name}
フレームワークのモジュール内に非モジュールのヘッダファイルがインクルードされていると発生します。
TARGETの設定からBuild Settings => Apple LLVM - Language- Modules => Allow Non-modular includes in Framework ModulesをYesにし、
読み込みを許可することで解消できますが、
もしあなたがフレームワークの開発者ならば、ちゃんとmodulemapで対応したほうがいいと思います。
App Transport Security has blocked a cleartext HTTP (2015-11-19)
iOS 9からHTTPS通信が推奨されるようになったため、HTTP通信を行うとこのエラーに遭遇するかも知れません。
でも、Appleが推奨しているので、できればHTTPSに切り替えるほうがいいと思います。
一応、ATSを無効にすることでHTTPでも通信は可能です(詳しくは参考URLを見てください)
ld: bitcode bundle could not be generated because was built without full bitcode. (2015-12-07)
ld: bitcode bundle could not be generated because #{framework_path} was built without full bitcode.
使っているフレームワークがBitcodeに対応していないのに、Bitcodeを有効にしていると発生します。
Bitcodeに対応するのを待つか、TARGETSの設定からBuild Settings => Build Options => Enable BitcodeをNoにすることで無効にできます。
Xcode 7から有効になったので、Xcode 6で作ったアプリケーションをXcode 7で起動した人は見たことがあるんじゃないでしょうか?
また、Bitcodeについては別記事にまとめていますので、よかったらそちらも御覧ください。
was built for newer ios version than being linked (2018-08-09)
was built for newer ios version (${xxx}) than being linked (${yyy})
これに関しては実際に起ったものを解決したわけではないので、調べた限りでのあくまでも予想ですmm
- xxx: リンクしているあるライブラリ中のDeployment Target
- yyy: リンクしているあるライブラリ中またはアプリ自体のDeployment Target?
Deployment Targetに関しては過去に記事を書いたのでそれを見てもらえると......
アプリに使用するライブラリの最小動作保証バージョンがxxxなのに、アプリまたはそれ以外のライブラリでより古いバージョンの動作を保証しているってことだと思う。
なので、アプリ自体またはライブラリのDeployment Targetを調整すれば直るかな?
なおライブラリ自体のDeployment Targetを調べるには以下のコマンドを実行する。
otool -lv #{library_filepath} | less
Load command 1 cmd LC_VERSION_MIN_IPHONEOS cmdsize 16 version 7.0 sdk n/a