AppStoreのアプリ売り上げをiPhoneやiPadでチェックできるAppSales-Mobileというオープンソースアプリがあります。Appleが提供している開発者向けWebサービスiTunes Connectにログインして最新データを取得し、グラフなどで売り上げ状況を確認できます。
オープンソースで配布されており、自分でXcodeでビルドして実機にインストールする必要がありますが、そもそもが開発者向けなのでそこら辺は楽勝でしょう。
さて、そのAppSalesでデータ取得後に「Downloading reports from iTunes Connect failed. Please try again later or check the iTunes Connect website for anything unusual. Could not login. Please check your username and password.」というエラーが出るようになりました。iTunes Connect側のHTMLが変わったり、なにかエラーが出ている時には起きがちなことだし、データ取得自体はちゃんと出来てたのでしばらく放置していたんですが、σ(^^)のプログラミング師匠の田中さんが原因を突き止めて教えてくれたので、許可をいただきシェアしておきたいと思います。
原因としては、iTunes Connectにログインできているかをチェックする判定がNGになっているせい。それをしているのが、ReportDownloadOperation.mの252行目辺りのここ。
NSString *signoutSentinel = @"Sign Out";
画面内に「Sign Out」というテキストリンクがある=ログインしている、とロジックみたいです。ところが、現在のiTunes Connectが(日本語環境の人に対して)実際に返している文字列は“サインアウト”。ということで、
NSString *signoutSentinel = @"サインアウト";
とすることでエラーが出なくなりました。もしくは、田中さんのオススメでは、
NSString *signoutSentinel = @"sign-out";
とclass属性に使われている文字列を使うことで、将来更に文言や言語判定ロジックがかわった時にも対応できるのではとのことです(全HTMLレスポンス中から検索してるからタグや属性を指定しても良いそうです)。
実害は少なかったとは言えやはり気になっていたので、スッキリしました。ありがとう田中さん!お礼に最新アプリ、iPad向けの(MicrosoftのVisioみたいな)ダイアグラム図作成ツールViDiaの宣伝リンク貼っときます!