酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Xcode 7でビルドしたアプリをApplication Loaderを使って申請するとInvalid Swift Supportが発生する

Jenkinsからxcodebuildを使ってipaファイルを生成します。Application Loaderを使ってipaファイルをアップロードするとInvalid Swift Supportが発生したとメールが送られてきます。

Appleから送られてくるメール

Application Loaderを使ってアップロードすると、すぐに下記のようなメールがAppleから送られてきます。

Dear developer,

We have discovered one or more issues with your recent delivery for "ねこすけ". To process your delivery, the following issues must be corrected:

Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.

Once these issues have been corrected, you can then redeliver the corrected binary.

Regards,

The App Store team

開発環境

現在、表題の問題が発生している開発環境についてです。

  • Xcode 7.3
  • CocoaPods - 0.39.0
  • Enable Bitcode - No

同じ現象はよく発生しているようです。日本語の記事もありました。

CocoaPods 0.39.0 betaだと問題が発生していたという記事もありましたが、CocoaPodsのbeta版は使っていません。また、0.38.xでも同じ問題が発生するという記事がありました。

Podfile

platform :ios, '8.0'
use_frameworks!

target 'nekosuke' do

    pod 'SMPageControl', :git => 'https://github.com/Spaceman-Labs/SMPageControl.git'

end

テストのために作ったプロジェクトなのでSMPageControlは使っていません。

ビルドスクリプト

xcodebuild -sdk iphoneos \
  -workspace "nekosuke.xcworkspace" -scheme "nekosuke" \
  -configuration Release build \
  SYMROOT="/Users/ch3cooh/Desktop/build/3" \
  CODE_SIGN_IDENTITY="iPhone Distribution: SAKUSAN (XXXXXXXXX)"

xcrun -sdk iphoneos PackageApplication "/Users/ch3cooh/Desktop/build/3/Release-iphoneos/nekosuke.app"  \
  -o "/Users/ch3cooh/Desktop/build/3/nekosuke.ipa" \
  --embed ~/Library/MobileDevice/Provisioning\ Profiles/xxx-xxx-xxx-xxx-xxx.mobileprovision

試したこと

Pods-appname-frameworks.sh 部分をコメントアウトする

http://stackoverflow.com/questions/32526526/invalid-swift-support-files-don-t-match/32675702#32675702

# Embed linked Swift runtime libraries.のセクションを削除したけれどやはり同じ結果に終わりました。そもそも CocoaPods 0.39.0リリース時点で修正されているのであまり意味はなさそうです。

Enable BitcodeをYesにする

変わらず。

ipaファイルを作成する方法を変更する

ビルドスクリプトでは 一旦archiveを作ってからexportする方法を採用してみました。

Xcode 7.1から指定しないといけなくなったらしいの-exportOptionsPlistで指定するexportOptions.plistを作成しました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>
    <key>uploadBitcode</key>
    <false/>
    <key>uploadSymbols</key>
    <true/>
</dict>
</plist>

ビルドスクリプトを変更してみました。

xcodebuild -sdk iphoneos \
  -workspace "nekosuke.xcworkspace" \
  -scheme "nekosuke" \
  -configuration Release archive \
  SYMROOT="/Users/ch3cooh/Desktop/build/9"  \
  CODE_SIGN_IDENTITY="iPhone Distribution: SAKUSAN (XXXXXXXXX)"  \
  -archivePath  "/Users/ch3cooh/Desktop/build/9/nekosuke.xcarchive"

xcodebuild -exportArchive \
  -archivePath "/Users/ch3cooh/Desktop/build/9/nekosuke.xcarchive" \
  -exportPath "/Users/ch3cooh/Desktop/build/9" \
  -exportOptionsPlist exportOptions.plist

これでipaファイルが生成できるので、このipaファイルをiTunes Connectに投げてます。

関連記事

この他にもiOSアプリ開発で見つけたネタや悩んだ内容など紹介しています。Tipsをまとめておりますのでこちらのページをご参照ください。