Stack Overflowで最も多く支持されたiOS関連の質問ベスト10（2017年版）

どうも、koogawa です。いよいよアドベントカレンダーが始まりましたね！

今年も[去年](https://qiita.com/koogawa/items/ec2009653cbf5902bd1e)に引き続き「今年Stack Overflowに投稿されたiOSに関する質問」の中で、Vote数（投票数）が多かった質問、つまり **デベロッパーから支持の多かった質問** をまとめてみました。

それではさっそく1位から順に見ていきましょう！

※2017年12月1日（日本時間）時点での情報を元に集計しています


# 第1位：Xcode 9でのワイヤレスデバッグのやり方がわからない問題（221票）

[How do you perform wireless debugging in Xcode 9 with iOS 11, Apple TV 4K, etc? \- Stack Overflow](https://stackoverflow.com/questions/44382841/how-do-you-perform-wireless-debugging-in-xcode-9-with-ios-11-apple-tv-4k-etc)

今年の1位に輝いたのは、WWDC 2017 で発表された「Wireless Development」に関する質問でした。この機能により、開発者は iPhone、iPad、Apple TV を Mac に接続せずに、ワイヤレスでデバッグできるようになりました。

「どうやったらワイヤレスでデバッグできるの？」という直球な質問でしたが、キャプチャ付きで丁寧に解説した回答がベストアンサーに選ばれていました。（ブログ記事と言っても良いぐらいホントに丁寧な回答でした！）

## 参考

* [What's New in Xcode 9](https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/WhatsNewXcode/xcode_9/xcode_9.html)
* [Debugging with Xcode 9 \- WWDC 2017 \- Videos \- Apple Developer](https://developer.apple.com/videos/play/wwdc2017/404/)

# 第2位：Missing Marketing Icon 問題（135票）

[ios \- Missing Marketing Icon \- Stack Overflow](https://stackoverflow.com/questions/44565883/missing-marketing-icon)

この問題に遭遇した人も多いのではないでしょうか？
質問の内容としては、アプリを iTunes Connect に提出しようとすると

> Missing Marketing Icon. iOS Apps must include a 1024x1024px Marketing Icon in PNG format. Apps that do not include the Marketing Icon cannot be submitted for App Review or Beta App Review.

というエラーが出るよ！という内容です。

ベストアンサーの通り、Images.xcassets の `iOS Marketing` に 1024x1024pt サイズのアイコンを追加すれば解決するのですが、この質問者の環境だとそもそもこの欄が表示されなかったようです。

また、他の回答にもあるように、アイコンに透過色が含まれていたりするとうまくいかないようなので注意が必要ですね。

## 参考

* [Add an App Store icon \- Xcode Help](https://help.apple.com/xcode/mac/current/#/dev4b0ebb1bb)

# 第3位：Xcode 8.3 で 'Pointer not aligned at address’ の警告が出る問題（107票）

[ios \- How to remove the Xcode warning Apple Mach\-O Linker Warning 'Pointer not aligned at address \- Stack Overflow](https://stackoverflow.com/questions/42268117/how-to-remove-the-xcode-warning-apple-mach-o-linker-warning-pointer-not-aligned)

`pod update` したら

> Apple Mach-O Linker Warning 'Pointer not aligned at address

という警告が出るようになっちまったよ！
（ビルドはできるので）プロジェクトに影響は無いけど、かなり鬱陶しいので助けてくれ、という質問です。

原因は Google 製のライブラリ「Firebase analytics」にあったようで、警告が出る原因を詳しく説明した回答がベストアンサーに選ばれていました。

途中、Firebase 中の人（Google社員）が登場して「今直してるよ」とコメントしていたのが個人的に面白かったです。（利用者から「進捗どうですか？」とプレッシャーをかけられていました😅）

* [Firebase release notes](https://firebase.google.com/support/release-notes/ios) - この問題は Version 3.16.0 で修正されています

# 第4位：iTunes Connect にアプリをアップロードしようとすると「No accounts」エラーが出る問題（99票）

[ios \- Xcode 8\.3\.3 "No accounts with iTunes Connect access" \- Stack Overflow](https://stackoverflow.com/questions/46231372/xcode-8-3-3-no-accounts-with-itunes-connect-access)

毎年おなじみ iTunes Connect 関連の質問ですね。

Xcode 8.3.3 から iTunes Connect へアプリをアップロードしようとすると

> iTunes Connect access for "Team-Name" is required. Add an account in the Accounts preference plane.

というエラーが出るよ、助けて！という内容です。

回答としては

* Application Loader で試したらうまくいったよ
* Xcode 9 GM でやったらすんなりできたよ
* `altool` コマンド使ったらうまくいったよ

などが投稿されましたが、ベストアンサーに選ばれたのは Application Loader を使った方法でした。

とは言え、コメント欄では「試したけどアップロードできないんだけど」という人もいたようですし、完全な回答ではなさそうです。時間を置いたら直っちゃった、というパターンもよくありますし、非常にAppleらしい現象ですね🤔

# 第5位：iOS 11でサイレントプッシュが配信されない問題（95票）

[push notification \- Silent pushes not delivered to the app on iOS 11 \- Stack Overflow](https://stackoverflow.com/questions/44796613/silent-pushes-not-delivered-to-the-app-on-ios-11)

非常に長く議論が続いた質問です。内容としましては、iOS 11ではサイレントプッシュが配信されなくなった、というものでした。iOS 11 beta 1が公開された6月に投稿され、beta 10、そして GM 版がリリースされるまで、何度も動作確認結果が追記されました。（非常に多くのコメントが寄せられたため、現在はコメントの追加ができないようになっています）

結局 iOS 11 正式版でもこの現象は改善されず、iOS 11.1 beta 1 になりようやく問題が修正されたようです。

> iOS 11.1 beta 1 was just released and they mention: "Notifications Resolved Issues • Silent push notifications are processed more frequently. (33278611)

質問者自ら問題が改善した旨を投稿し、3ヶ月に渡るスレッドはようやく一段落したのでした。

こうやって開発者たちが情報を寄せ合うスタイルは素晴らしいですね！👍

# 第6位：iOS 11で UITableView が奇妙な動きをする問題（87票）

[ios \- Weird uitableview behaviour in iOS11\. Cells scroll up with navigation push animation \- Stack Overflow](https://stackoverflow.com/questions/45573829/weird-uitableview-behaviour-in-ios11-cells-scroll-up-with-navigation-push-anima)

こちらも iOS 11 関連の質問です。既存の UITableView を含むコードを iOS 11 に移行したところ、奇妙な動きをするようになった、という内容です。アニメーションGIF付きなので、回答者にとっては状況を把握しやすいですね。とても質問の仕方が上手いなぁ、と感じました。

この動きの原因は iOS 11 から登場した `contentInsetAdjustmentBehavior` によるものでした。このプロパティにはデフォルトで `automatic` がセットされており、ScrollView の content insets を自動的に調整してくれるようになっています。これが原因で、今まで content insets を自前で調整していた場合は iOS 11 では表示がおかしくなってしまうのでした。

このプロパティを `never` にすることで自動的に調整されてしまうのを無効にできるよ！という回答がベストアンサーに選ばれていました。しかし、コメント欄にもあるように、`never` にすることで予期しない副作用を起こす可能性もあるため、何も考えずにこの値をセットするのは控えたほうが良さそうです。

## 参考

* [iOS11 で UIScrollView の contentInsetがずれる問題 \- Qiita](https://qiita.com/peka2/items/b6301a0c06cc13286296)
* [contentInsetAdjustmentBehavior \- UIScrollView \| Apple Developer Documentation](https://developer.apple.com/documentation/uikit/uiscrollview/2902261-contentinsetadjustmentbehavior)

# 第7位：iPhone X の判定問題（87票）

[ios \- Detect if the device is iPhone X \- Stack Overflow](https://stackoverflow.com/questions/46192280/detect-if-the-device-is-iphone-x)

非常に今年らしい質問ですね！デバイスが iPhone X かどうかを<b>直接的に</b>判定する方法はありますか？という内容です。もちろん画面の解像度から間接的に判定する方法は知ってるけど、SDKの標準機能を使って直接的に判定する方法が存在するか？という点が他の類似する質問とは異なるところだ、と質問者は強調していました。

ベストアンサーに選ばれたのは、「直接的な方法はない」と断った上で、画面の解像度から間接的に判定する方法について解説した回答でした。しかしその後、コメント欄で「この方法は正しくない」という議論が巻き起こり、最終的には **デバイスのモデル名から iPhone X かどうかを判定する方法が正しい** という結果に落ち着いたようです。

興味のある方は次の関連した質問も読んでみると良いでしょう。
[objective c \- How to get device make and model on iOS? \- Stack Overflow](https://stackoverflow.com/questions/11197509/how-to-get-device-make-and-model-on-ios/11197770#11197770)


# 第8位：Missing Marketing Icon問題（66票）

[xcode \- How to solve "Missing Marketing Icon\. iOS Apps must include a 1024x1024px" \- Stack Overflow](https://stackoverflow.com/questions/44667434/how-to-solve-missing-marketing-icon-ios-apps-must-include-a-1024x1024px)

お気付きの通り、第2位で出てきた「Missing Marketing Icon 問題」とほぼ同じ内容になります。（こちらが後発）

重複した質問が多くの票を集めてしまう、という現象が毎年起こりますね😅

# 第9位：UINavigationBar に設置した UIBarButtonItem の表示が iOS 11で崩れる問題（64票）

[swift \- navigation bar rightbaritem image\-button bug iOS 11 \- Stack Overflow](https://stackoverflow.com/questions/44442573/navigation-bar-rightbaritem-image-button-bug-ios-11)

iOS 10までは正常に表示できていた UIBarButtonItem が、iOS 11では表示が崩れるようになったよ！という質問です。`setImage` で画像ボタンにする場合に発生するようです。

これは iOS 11 から UIBarButtonItem のレイアウトが autolayout を使用するようになったのが原因でした。今回のケースでは、次のように制約をセットしてあげることで問題は解決します。

```swift
button.widthAnchor.constraint(equalToConstant: 32.0).isActive = true
button.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
```

原因と解決方法を的確に説明した回答がベストアンサーに選ばれていました。iOS 11では、こういったレイアウト仕様の変更がちょこちょこあるようですね。

# 第10位：Xcode 9 で Module compiled with Swift 3.1 cannot be imported in Swift 4.0 が出る問題（63票）

[ios \- Xcode 9 : Module compiled with Swift 3\.1 cannot be imported in Swift 4\.0 \- Stack Overflow](https://stackoverflow.com/questions/44399109/xcode-9-module-compiled-with-swift-3-1-cannot-be-imported-in-swift-4-0?answertab=votes#tab-top)

実はこれ、私もハマりました。

Xcode 9 にアップデートしたら

> Module compiled with Swift 3.1 cannot be imported in Swift 4.0

というエラーが出てビルドできないよ！という内容です。これはつまり「Swift 3.1(Xcode 8) でコンパイルされたモジュールは Swift 4.0(Xcode 9) ではインポートできないよ」というエラーですね。質問者の環境では、古い Xcode でモジュールがコンパイルされたままになっていたのが原因のようです。

この質問にはまだベストアンサーがない状態ですが、最も支持された回答は次の2つでした。

1. もし Carthage を使っているなら、`xcode-select` コマンドで最新版の Xcode 9 に切り替え、`carthage update` を実行すればうまくいったよ
2. Swift 4 (Xcode 9) のコンパイラは Swift 3.2 と Swift 4 の両方を理解する。プロジェクト内に両方のバージョンを混在させることもできるが、この2つ以外のバージョンはサポートしない。あなたの言語設定が Swift 3.2 にセットされていたとしても、Swift 4のコンパイラが使われる。もしあなたが CocoaPods を使っているなら、Podfile の設定で強制的に Swift 3.2 or 4 を使うようにセットすることも可能だよ。

これ以外にも「クリーンビルドしてみ」といった毎年おなじみの回答など、たくさんの回答がついているので、気になる方は読んでみると良いでしょう。

# 総括

## やっぱりきた！iPhone X に関する質問

今年の目玉は何と言っても iPhone X の発売でしたね。Stack Overflow にもさっそく「iPhone X かどうかを判定する方法」についての質問が投稿され、多くの票を集めていました。今年リリースされた iOS 11 に関する質問も多くランクインし、「2017年だなぁ」という感じがしました。

## 投票数は減少

投票数に関しては、去年よりだいぶ少なくなった印象です。今年は、去年1位に輝いた「WWDR中間証明書の期限切れ問題（426票）」のようなクリティカルな問題が少なかったのが原因かもしれませんね。

## テクニカルな質問は増加

技術的な観点では、去年よりテクニカルな質問が増えたなー、という印象でした。「放っておいたら直っちゃった」系の内容が目立った去年と比べ、今年はコードレベルでの解説が必要な質問が多かったように思います。アップルが謳う「圧倒的な進化」をまさに象徴する結果となったのではないでしょうか。

◆

というわけで、2017年のランキングをお送りしました。
明日は @TachibanaKaoru さんです！

来年もまたやるかも！？
（誰かAndroid版も書いてください！）