アプリを登録し、プロジェクト設定が完了したら、いよいよバイナリをアップロードします。
Xamarin.iOSの場合、バイナリのアップロードはXcodeとは手順がだいぶ違います。

※2015年7月現在、iTunes Connectの登録方法が本手順から変わっています。
 バイナリの生成方法は参考にはなりますが、時間を見つけてそのうち訂正します。


バイナリアップロードの準備(Web)

バイナリをアップロードするためには、iTunes Connectでバイナリをアップロードできる状態にする必要があります。

Apple Developerメンバセンタにアクセスします。
「iTunes Connect」⇒「Appの管理」⇒登録したアプリ⇒「View Details」を選択します。

「Ready to Upload Binary」ボタンを押します。

 

・Export Compliance 
    暗号化を使用している場合は「Yes」を設定します。
SSL等の通信だけでなく、iOSの機能での暗号化も該当します。
・Content Rights 
  第3者のコンテンツ等を使用している場合「Yes」を選択します。
Yesを選択すると更に選択肢が表示され、App Storeの公開先の法律で許諾されている事を回答する必要があります。
・Advertising Identifier 
  IDFAを使用している場合は「Yes」を選択します。
広告を使用している場合は大概は該当すると思います。
Yesを選択すると更に選択肢が表示され、広告用途以外に使用しない旨を同意する必要があります。
(全部チェックを入れる)


IDFAはYesを選択した場合の画面です。
全てにチェックを入れたら「Save」ボタンを押します。
なお、最近は無いと思いますがUUIDを使っているとリジェクトされます。
また、IDFAを広告以外の目的で使っているライブラリがあれば使用しているだけでリジェクトされます。

※補足※
iADは審査が完了した数日後から使えるようになるようです。
このため、審査のタイミングでは表示しないようにしておかないとリジェクトされるっぽいです。
また、アダルト広告等が審査の時点で表示さるとリジェクトされるので、表示しないようにしておきます。


アップロード準備ができた旨が表示されるので「Continue」ボタンを押します。


ステータスが「Waiting For Upload」に変わっています。


リリースモジュールのビルド

Visual Studioにおいてアップロード用のバイナリを生成します。
正式な手順が以下に掲載されましたが、相変わらず微妙に間違ってます…
Xamarin掲載の手順

プロジェクトに対する設定が全て完了した状態で、プラットフォームに「iPhone」、構成に「AppStore」を選択します。

デバイスをMacに接続し、Visual Studioから認識した状態にします。
この状態で「ビルド」⇒「ソリューションのリビルド」を選択します。
※過去のビルド済みファイルで問題を起こしたことがあるので、必ずリビルドして新規作成しています。


これでMac上にはアプリのファイルが生成された状態になります。
なお、「デバイスへのアプリの配置」にも書きましたが、AppStoreにすると何故かビルド時間が短くなり、生成されるバイナリサイズも小さくなります。


バイナリの確認(Macで作業)

生成したバイナリを確認します。
Macにおいてターミナルを表示し、以下のパスに移動します。
/Users/{ユーザホーム}/Library/Caches/Xamarin/mtbs/builds/{プロジェクト名}/{GUID}/bin/iPhone/AppStore/{プロジェクト名}.app

プロジェクトの設定(iOS IPA Options)を設定している場合はIPAファイルが生成されています。
Apple社へのバイナリ提出にIPAファイルを使用する場合は後述のZIP化は不要で、モジュールの正当性のみ確認します。
/Users/{ユーザホーム}/Library/Caches/Xamarin/mtbs/builds/{プロジェクト名}/{GUID}/bin/iPhone/AppStore/{プロジェクト名}-{ビルド番号}.ipa

以下を実行して指定したアーキテクチャ(ARMv7、Arm64等)が含まれている事を確認します。
また、ここではiTunesMetadata.plistファイルが生成されています。
※アーキテクチャに応じたバイナリ本体は「.monotouch-32」や「.monotouch-64」に配置されています
 (monotouchの名前は順次消えてるので、このディレクトリ名もそのうち変わるかもしれません)

# ls -a
.                      Info.plist
..                     LaunchScreen.storyboardc
.monotouch-32          NOTICE
.monotouch-64          PkgInfo
CalcMeasure            ResourceRules.plist
Entitlements.plist     _CodeSignature
Icon-60@2x.png         archived-expanded-entitlements.xcent
Icon-60@3x.png         embedded.mobileprovision
Icon-Small-40@2x.png   en.lproj
Icon-Small-40@3x.png   iTunesMetadata.plist
Images ja.lproj
#
# file CalcMeasure
CalcMeasure: Mach-O universal binary with 2 architectures
CalcMeasure (for architecture armv7): Mach-O executable arm
CalcMeasure (for architecture arm64): Mach-O 64-bit executable
#

iTunesMetadata.plistが存在すると、バイナリの提出時にApplicationLoaderでエラーが発生します。
Apple社へのバイナリ提出でZIPを使用する場合はこのファイルを削除した後、一つ上のディレウトリに戻って「{プロジェクト名}.app」ディレクトリをZIP圧縮します。
私は面倒なのでFinderから圧縮してしまいますが、以下のコマンドでも圧縮できます。
圧縮したら適当な場所にコピーします。
なお、このディレクトリはリビルドすると自動で消えるので、作成したファイルは放置して問題ありません。

# rm iTunesMetadata.plist
# cd ..
# zip -r {プロジェクト名}.zip {プロジェクト名}.app


バイナリのアップロード(Macで作業)

Xcodeを起動し、「Xcode」⇒「Open Developer Tool」⇒「Application Loader」を選択します。

「Appをデリバリ」ボタンを押します。


ステータスがWaiting For Uploadのアプリが選択できるので、選択して「次へ」ボタンを押します。


「選択」ボタンから先ほど作成したZIPファイル、又はIPAファイルを選択します。

 

「送信」ボタンを押してバイナリを送信します。


バイナリの情報等を送信した後に問題なければバイナリが転送されます。
これには数分要します。


無事に転送できたら「次へ」ボタンを押します。


「終了」ボタンを押します。

 

ステータスの確認(Web)

念のためアプリのステータスを確認してみます。
iTunes Connectで「Manage Your Apps」⇒「{登録したアプリ}」を選択します。

ステータスが「Waiting For Review」になっている事が確認できます。 

 

以上でApple社への申請は全て終了です♪
長かった~(^^;

今後の流れですが
・審査待ちの状態が1週間程度続きます(土日は休みみたい)
 バイナリを取り下げると、また最初から待つことになります…
・うまくいけば1日程度で審査が終了し、その数時間後にはリリース可能な状態になります。
 審査中に休日に入ると、続きは日本時間の月曜日の夜から再開されます。
 わざわざ審査中して休みに入るパターンが多いんですけど…
・リジェクトされた場合は、Apple社から連絡があります。

理不尽な理由や、曖昧な審査基準でリジェクトされる事があるので頑張りましょう!