2017年2月22日水曜日

WARNING ITMS-90080: "The executable 'Payload/myapp.app/Frameworks/NCMB.framework' is not a Position Independent Executable

概要

Xcode で iTunesConnect にビルドしてできたファイルをアップロードする際にタイトルの警告が発生しました
対処方法を紹介したいと思います

環境

  • Mac OS X 10.11.5
  • Xcode 7.3.1
  • Cocoapods 0.39.0
  • iTunes Connect 2016/06/07 時点

警告詳細

WARNING ITMS-90080: “The executable ‘Payload/myapp.app/Frameworks/NCMB.framework’ is not a Position Independent Executable. Please ensure that your build settings are configured to create PIE executables. For more information refer to Technical Q&A QA1788 - Building a Position Independent Executable in the iOS Developer Library.”

が全容です
Framework のところはどんな Framework でも出ると思います
この警告が Xcode で Product -> Archive としてビルドしたあとに iTunes Connect にアップロードするときに発生しました

出る時と出ない時の違い

実は今回は警告は初めは出ませんでした
あることをしたら出るようになったのですが、そのあることとは

Deployment Target を 9.3 から 8.0 に変更した

になります
これをやると警告が出るようになりました

対処方法

で、結局どうやって対応したかですが結論としては

  • 何もしていない

になります

警告文をよく調べてみると PIE ( Position Independent Executable ) が有効になっているせいで警告が出ているケースが主な原因であることが判明しました
その対応方法は公式にも出ていて

  1. In Xcode, select your target in the “Targets” section, then click the “Build Settings” tab to view its settings.
  2. For iOS apps, set iOS Deployment Target to iOS 4.3 or later. For Mac apps, set OS X Deployment Target to OS X 10.7 or later.
  3. Verify that Generate Position-Dependent Code is set at its default value of NO.
  4. Verify that Don’t Create Position Independent Executables is set at its default value of NO.

を設定するみたいです
しかし、自分の場合すべてクリアしているにも関わらず該当の警告が発生し続けました

更に調べてみると Cocoapods の以下の issue にたどり着きました

でここでは結局「Apple 側のバグでしょ、いづれ対応してくれるよ」という結論で Close されています ( 一応まだ別の場所で議論はされているみたいですが )

ここで自分も気づいたのですが、確かに警告をみると自分のプロジェクトが PIE として怒られているわけではなく Cocoapods でインストールしらライブラリが警告の対象になっていることがわかりました
なので、自分のアプリは PIE の対象外だと判断してそのまま iTunes Connect で審査に提出しました

結果的には

審査は問題なく通過しました
ということで今回と同じケースに遭遇した方は基本何もしないで OK です
ただ、自分のアプリの PIE 自体は対応しなければいけない問題なので、自分のアプリで PIE が有効になっている場合は Build Settings を No に変更してビルドし直してください

0 件のコメント:

コメントを投稿