ここで紹介する内容はAdobeやAppleが推奨する手順では無いと思われます。
一応、この方法で審査を通してアプリが公開しされた実績はありますが、必ず成功するかどうかは分かりませんので、あくまで自己責任でお願いします。
今回はiPhone向けに新しく追加された 120×120px のアイコンのみを追加する手順を紹介しますが、
iPad向けのアイコンも同様の手順でいけるかと思います。(未確認)
また、この内容はFlashDevelop で AIR Mobile AS3 App
プロジェクトを使用した場合の手順になります。
他の開発環境でも基本的な考え方は同じかと思いますので、適宜手順を変えて試してもらえればと思います。
参考サイト
・Support for new icon sizes in iOS 7 - Adobe Community
http://forums.adobe.com/message/5654846
Adobeのコミュニティのスレッド。
→ AIR 3.8はiOS7用のアイコンサイズに対応してないので、アプリケーション記述ファイル(application.xml)でiOS7用のアイコンを指定してもコンパイルに失敗する。
→ AppStoreに申請する時にiOS7用のアイコンが入ってないとバイナリアップロードの後に警告メール来て審査前に弾かれる。
→ AIR 3.9 ベータ(3.9.0.790以降)ならiOS7用のアイコンを含めてコンパイルできるようになってる。
といったような流れ。
・Resigning an iOS provisioning profile - Stack Overflow
http://stackoverflow.com/questions/15634188/resigning-an-ios-provisioning-profile
プロビジョニングプロファイルを差し替える手順についての説明の様ですが、
アプリの中身を差し替えてコード署名を再度行うという意味では共通の内容になるかと思います。
・object file format unrecognized, invalid, or unsuitable - myr's blog
http://nariya-takemura.blogspot.jp/2012/08/object-file-format-unrecognized-invalid.html
コード署名時にエラーが出た場合の対処方法について。
0. 事前準備
iOS7用のiPhone向けアイコンをPNGファイルとして事前に用意します。
/[プロジェクトフォルダ]/icons/ios/icons/
フォルダに icon_120.png
というファイル名でアイコンを追加しておきます。
FlashDevelopのテンプレートを使用していれば、このフォルダに入っているファイルは自動的に.ipaファイルの中に単なるデータとして組み込まれます。
後でこのファイルを元にアイコンとして認識されるようにアプリに追加する事にします。
準備ができたら通常通り.ipaファイルを生成します。
以下、 Macでの作業 となります。
対象アプリの.ipaファイルを xxx.ipa
とし、中の.appパッケージを xxx.app
として説明します。
カレントディレクトリは.ipaのあるディクレトリとします。
1. .ipaファイルを解凍。
unzip xxx.ipa
xxx.ipa
と同じディレクトリに Payload
ディレクトリが作られ、その中に xxx.app
パッケージが入っています。
2. .ipaファイルをリネームしてバックアップ。
mv xxx.ipa xxx_.ipa
後で.ipaファイルを再作成する事になるので念のためバックアップしておきます。
3. コード署名のエンタイトルメントを表示
codesign -d --entitlements - Payload/xxx.app
Executable=[カレントディレクトリ]/Payload/xxx.app/xxx
??qq<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>[アプリID]</string>
<key>get-task-allow</key>
<false/>
</dict>
</plist>
XMLを含んだ文字列が表示されるので、XML部分だけをコピペして entitlements.plist
などの名前で.ipaファイルと同じディレクトリに保存しておきます。
内容は固定なので、あらかじめ用意しておいても良いと思います。
4. コード署名を削除
rm -r "Payload/xxx.app/_CodeSignature" "Payload/xxx.app/CodeResources" 2> /dev/null | true
5. iOS7用アイコンを配置
cp Payload/xxx.app/icons/icon_120.png Payload/xxx.app/Icon-Iphone-120.png
FlashDevelop のプロジェクトで /[プロジェクトフォルダ]/icons/ios/icons/
に入れておいたファイルは Payload/xxx.app/icons/
に入っていますので、その中のアイコンファイルをコピーして xxx.app
パッケージの直下にコピーします。
ファイル名は何でも良いかもしれませんが(未確認)、 AIR 3.9ベータ で確認したら Icon-Iphone-120.png
になっていたので一応合わせています。
6. info.plist にアイコンを追加。
xxx.app
を右クリックして「パッケージの内容を表示」を選択。
その中の info.plist
を Xcode で開きます。
Information Property List
-> Icon files
の配列の先頭に Icon-Iphone-120.png
を追加します。
追加する場所を先頭にしたのも AIR 3.9ベータ に合わせています。
テキストエディタなどで開く場合は、 <key>CFBundleIconFiles</key>
の後に続く <array>
内の先頭に <string>Icon-Iphone-120.png</string>
を追加すれば良いとかと思います。
7. コード署名を再追加
codesign -f -v -s "iPhone Distribution: [キーチェーンアクセスに追加してあるiOS 配布用証明書の名前]" --resource-rules Payload/xxx.app/ResourceRules.plist --entitlements entitlements.plist Payload/xxx.app
iOS 配布用証明書の名前は キーチェーンアクセス から該当の証明書を表示し、 通称
の項目をコピーしておきます。
entitlements.plist
は手順3でコード署名を削除する前に取得したXMLファイルを使用します。
環境によっては、 object file format unrecognized, invalid, or unsuitable
のエラーが出る場合があったのですが、その場合は以下のコマンドで環境変数を追加しておくとエラーが回避できました。
export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/usr/bin/codesign_allocate"
8. コード署名のエンタイトルメントを確認
codesign -d --entitlements - Payload/xxx.app
念のため、コード署名を削除する前と同じ様にXMLが表示されるか確認します。
正しく表示されない場合は、手順7でエラーが起きてる可能性が高いです。
9. .ipaファイルを再圧縮
zip -qr xxx.ipa Payload
カレントディレクトリにコード署名済みの.ipaファイルができます。
以上で手順完了です。
コード署名に失敗していると、 XcodeのApplication Loader でアプリをアップロードする際に最初のファイルチェックで弾かれます。
アップロード完了後にしばらく経ってもAppleから警告メールが来なければ、iOS7用アイコンの追加に成功していると思われます。