koogawa blog

iOS、Android、foursquareに関する話題

Stack Overflowで最も投票数の多かったiOS関連のQuestionベスト10(2015年版)

iOS Advent Calendar 2015 - Qiita 7日目の記事です。

どうも、koogawaです。今年は Stack Overflow活動 をがんばった一年でした。

さて、今回は Advent Calendar ということで、今年Stack Overflowに投稿されたiOSに関するQuestion の中で投票数が多かったQuestion、つまりデベロッパーから支持の多かったQuestionをまとめてみました。

それでは1位から順に見ていきましょう!

※2015年12月(日本時間)時点での情報を元に集計しています


第1位:App Transport Security 問題(344票)

stackoverflow.com

1位はやはり今年リリースされたiOS 9関連のQuestionでした。

質問内容は、httpで通信しようとすると

Transport security has blocked a cleartext HTTP

上記のエラーが出るんだけど、info.plist にどんな設定したらいいの?というもの。

様々な回答が寄せられましたが、一番支持数数の多かった回答は NSAppTransportSecurity > NSAllowsArbitraryLoadsYES をセットしたらいいよ、という内容でした。

※ただし、この方法は一時的な回避策であり、推奨された方法では無いのでご注意を。

参考

第2位:iOS 8.1.3の実機にアプリがインストールできない問題(194票)

stackoverflow.com

iOS 8.1.3にアップデートした実機(iPhone 4s)にアプリをインストールしようとしたら

The application could not be verified.

というエラーが出るようになっちゃったよ!という内容です。自分はこの現象に遭遇しなかったのですが、投票数を見る限り、多くの人が苦しめられたようです。

最も支持数を集めた回答はこちら。

I deleted the app from the device, restarted Xcode, and the app subsequently installed on the device just fine without any error message.

バイスからアプリを削除して、Xcodeを再起動して、もう一度アプリをインストールしたらうまくいったようです。割と基本的な内容ですね…

うまく実機ビルドできなくなったら、

  • クリーンビルド
  • アプリ削除して再インストール
  • 実機再起動
  • Xcode再起動
  • Mac再起動

あたりは最初に試したほうが良さそうですね。

第3位:App Transport Security 問題(188票)

stackoverflow.com

タイトル見てわかるとおり、他のQuestionと重複しちゃってます。内容は1位に輝いた「ios - Transport Security has Blocked a cleartext HTTP - Stack Overflow」と同じものです。

それでもこの投票数なのは、ATS (App Transport Security) に苦しめられた人がそれだけ多かったということでしょうか。

第4位:CFNetwork SSLHandshake 問題(132票)

stackoverflow.com

なんと、第4位もATS関連です

iOS 9にしたらサーバにアクセス出来なくなった、というところまでは他のQuestionと共通です。他と異なるのは「httpsでアクセスしているのにエラーになる」という点です。表示されるエラーメッセージは次の通り。

CFNetwork SSLHandshake failed (-9824) NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

このQuestionに対し、「iOS 9 および OSX 10.11 からは、サーバ側も TLS 1.2 をサポートしている必要がある」という内容を詳しく解説した回答がベストアンサーとして選ばれていました。

iOS 9 and OSX 10.11 require TLSv1.2 SSL for all hosts you plan to request data from unless you specify exception domains in your app's Info.plist file.

参考

第5位:ビルドがずっと「処理中」のまま問題(131票)

stackoverflow.com

出た〜! iTunes Connect にアップロードしたビルドが “processing” から動かない問題。

日本のiOSアプリデベロッパー間でも何かと話題になりましたが、世界中で同じ問題が発生していたようです。

  • ビルド番号を変えてアップロードし直したら解決した
  • Application Loader 使ったらいけた
  • bitcode 無効にしたらいけた

など、様々な回答が寄せられましたが、最終的にベストアンサーに選ばれたのはこちら。

Go to "Resources & Help" in iTunes Connect. Select "Contact Us" and follow the wizard. I don't think anyone other than Apple can answer this. And this is what we have done in a similar situation in the past.

Appleに問い合わせろ」

それな!!

第6位:iOS 8.4 の Developer Disk Image が見つからない問題(110票)

stackoverflow.com

Xcode 7 beta(時期的におそらくbeta1)をインストールして、iOS 8.4の実機を繋いでみたけど

"Could not find Developer Disk Image"

というエラーが出てしまったよ、という内容。

確かに、 Xcode 6.4 では iOS 8.4(Apple Music等が含まれる)をサポートしているけど、 Xcode 7 では iOS 8.3 までしかサポートしていない、 という微妙な時期がありましたね。

この質問に対し、最も支持を集めたのは次の回答でした。

I personally downloaded Xcode 6.4 beta and 7.0 beta and I was very happy to find the solution by searching "8.4" inside the application folder of the 6.4 beta. By doing this, I found the folder 8.4 (12H4125a) containing the iOS 8.4 image and I copied this folder to the same path of the 7.0 beta.

つまり、Xcode 6.4 の iOS 8.4 image をまるごと Xcode 7.0 にコピーしたら直った、と。

無いならコピーしちゃえ!ということですね。まさにHack。

※その後、Xcode 7 beta 4iOS 8.4 がサポートされました

参考

第7位:Xcode 6.4 でアプリが申請できない問題(109票)

stackoverflow.com

Xcode 6.4 でアプリをSubmitしようとしたら

Unable to Validate Your Application The application you have selected does not exist.

というエラーが出ちゃったよ!という内容。 アプリを選択しているのに「アプリが存在しない」というのは奇妙ですね…。

Xcode側のバグなのかは今も不明ですが、最も支持数の高かった回答によると

I tried Application Loader and it worked.

ということらしいです。

XcodeからのSubmitがうまくいかない、かつ、急いでいる場合は Application Loader を試すのも手かもしれません。

第8位:BITCODE って何?問題(104票)

stackoverflow.com

要するに bitcode とはどんな機能で、何が起こるのか教えてくれ!という内容ですね。

質問者は「bitcode」でググらなかったのか?

という疑問は残りますが、Bitcodeとはどういうものか?Slicingとは何が違うのか?App Thinningとは何なのか?について優しく説明した回答者がベストアンサーに選ばれていました。

参考

第9位:Multitasking サポートのiPadアプリが申請できない問題(108票)

stackoverflow.com

iOS 9 の新機能である Multitasking のQuestionです。

Xcode 7でユニバーサルアプリをSubmitしようとしたら

Invalid Bundle. iPad Multitasking support requires these orientations: 'UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown,UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight'. Found 'UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown' in bundle 'com.bitscoffee.PhotoMarks.iOS'.

というエラーが出てしまったよ!という内容ですね。

Xcode 7 すなわち iOS 9 SDKiPad に対応したアプリをビルドすると、自動的に Multitasking 対応アプリになるのですが、このとき全ての orientation(デバイスの向き)に対応していないと上記のエラーが出てしまうようです。

ベストアンサーに選ばれたのは次の回答でした。

iPad Multitasking support requires all the orientations but your app does not, so you need to opt out it, just add the UIRequiresFullScreen key to your Xcode project’s Info.plist file and apply the Boolean value YES.

Info.plist の UIRequiresFullScreen を YES にすれば回避できるよ、というもの。Appleのドキュメントにも同じことが書かれていますね。

参考

第10位:Swift 2.0 で UIUserNotificationType の指定に “|” が使えなくなった問題(86票)

stackoverflow.com

Local notifications を使うために次のコード

UIApplication.sharedApplication().registerUserNotificationSettings
 (UIUserNotificationSettings(forTypes:
 UIUserNotificationType.Alert | UIUserNotificationType.Badge,
 categories: nil))

を Swift 2.0 で実行したところ

Binary Operator "|" cannot be applied to two UIUserNotificationType operands.

というエラーが出てしまったよ、助けて!という内容です。

これは、Swift 2.0で Option の型が変わったのが原因ですね。今回の例だと UIUserNotificationType の型が、Swift1.2では RawOptionSetType だったのに対し、Swift 2.0では OptionSetType に変更になっています。RawOptionSetType はBit演算可能ですが、OptionSetType はBit演算できないので、”|” を使うとエラーになるわけですね。

Swift 2.0 では次のように書けるよ、という回答がベストアンサーに選ばれていました。

let settings =
 UIUserNotificationSettings(forTypes: [.Alert, .Badge],
 categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)

参考

まとめ

以上、今年最も投票数の多かったQuestionベスト10をまとめてみました。

最近はほぼ毎日 Stack Overflow を眺めているのですが、いま世界中のデベロッパーがハマっている問題や、流行っているバグの傾向がわかったりするので非常に面白いです。Stack Overflow活動、ぜひお勧めしたいです。

そんなわけで、来年もがんばるぞい!


インデックスも貼っておきますね。