iOS
apple
iTunesConnect
Swift3.0
Xcode9

Xcode 9.2 + Swift 3.2でビルドしたiOSアプリがAppleから無慈悲なリジェクト

2018年1月26日時点。
今はもう少しわかりやすい内容になっているかもしれません。

Xcode 9.2 + Swift 3.2でビルドしたiOSアプリをiTunes Connectにアップロードした結果、数分でお叱りのメールが届いた。

Dear developer,

We have discovered one or more issues with your recent submission for "アプリケーション名". To process your submission, the following issues must be corrected:

Non-public API usage:

The app contains one or more corrupted binaries. Rebuild the app and resubmit.
If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed.

If you think this message was sent in error and that you have only used Apple-published APIs in accordance with the guidelines, send the app's nine-digit Apple ID, along with detailed information about why you believe the above APIs were incorrectly flagged, to appreview@apple.com. For further information, visit the Technical Support Information page.

Once these issues have been corrected, use Xcode or Application Loader to upload a new binary to iTunes Connect. Choose the new binary on the app's Details page in My Apps on iTunes Connect, and click Submit for Review.

Regards,

The App Store team

TL;DR

  • メールはこのような内容
    • バイナリが破損していますよ!
    • あなたのアプリのソースコード、あるいは静的ライブラリの中にprivate Apple APIsと同じ名前のメソッドが存在しませんか?
  • 前回の差分と比べprivate Apple APIsと同じ名前のメソッドがないことを確認
  • Xcode 9.2において類似のケースを調べた結果、以下の2つが発覚
    • LLVM profiling instrumentationを有効にしたバイナリはアップロードできない
    • coverage collectionを有効にしたバイナリはアップロードできない
  • アプリのPROJECT -> Build Settings -> Enable Code Coverage SupportをNoにする
  • 利用しているライブラリにも同様の対応を行う
    • ライブラリ管理にCarthageを使っている場合は、0.27.0以上を利用することでデフォルト対応

教訓

新しいバージョンが出たときはドキュメントと変更点をしっかり確認しよう!