Stack Overflowで最も投票数の多かったiOS関連の質問ベスト10（2016年版）

こんにちは。iOS Advent Calendar 2016 12日目の @koogawa です。

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

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

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

---

# 第1位：WWDR中間証明書の期限切れ問題（426票）

[This certificate has an invalid issuer Apple Push Services \- Stack Overflow](http://stackoverflow.com/questions/35390072/this-certificate-has-an-invalid-issuer-apple-push-services)

1位はなんとプログラミングの質問ではありませんでした😅

Apple Worldwide Developer Relations 中間証明書の期限が 2016/2/15 03:56:35 (日本時間) に切れてしまい、世界中でアプリを申請できなくなる開発者が続出しました。

この質問には未だにベストアンサーが付いていませんが、中間証明書の更新手順を丁寧に解説した回答が多くの票を集めていました。

## 参考

* [WWDR Intermediate Certificate Expiration \- Support \- Apple Developer](https://developer.apple.com/support/certificates/expiration/)
* [2/15からiOSアプリの Code Sign に失敗する問題 \- Qiita](http://qiita.com/mishimay/items/948e858e4cd36ca72146)

# 第2位：Xcode 8で変なログがたくさん出る問題（395票）

[Hide strange unwanted Xcode 8 logs \- Stack Overflow](http://stackoverflow.com/questions/37800790/hide-strange-unwanted-xcode-8-logs)

Xcode 8.0 を使っていたら

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/025d64d0-a70a-ab88-60ef-540375954570.png)


こんなログがたくさん出るんだけど、消す方法ない！？という質問でした。

Environment Variable の `OS_ACTIVITY_MODE` を `disable` にセットすることで解決できるよ！という回答がベストアンサーに選ばれていました。

ちなみに、この問題は Xcode Version 8.1(8B62)  では直っているようです。


# 第3位：App Storeへアップロードに失敗する問題（294票）

[This action could not be completed\. Try Again \(\-22421\) \- Stack Overflow](http://stackoverflow.com/questions/35429801/this-action-could-not-be-completed-try-again-22421)

アーカイブしたアプリをApp Storeにアップロードしようとしたら「This Action could not be completed. Try Again (-22421)」というエラーが出て先に進めないよ！という質問でした。

![](http://i.stack.imgur.com/eV1e7.png)

ベストアンサーに選ばれたのは「Appleのサーバーが混んでるかもしれないからちょっと時間を置いてみ」という回答でした。実際に時間を置いて試したところ上手くいった人が多かったようです。

去年もありましたね、こういう質問😅

# 第4位：CocoaPods v1.0.0 でエラー問題（152票）


[Pod install displaying error in cocoapods version 1\.0\.0\.beta\.1 \- Stack Overflow](http://stackoverflow.com/questions/34556991/pod-install-displaying-error-in-cocoapods-version-1-0-0-beta-1)

CocoaPods を v1.0.0 にアップデートしたら `pod install` エラーが出るようになってしまったよ、という質問です。

これは、v1.0.0 から次のように `target` を指定するのが必須になったのが原因でした。

```
target 'Hoge' do
    pod 'Alamofire'
end
```

[CocoaPods 1\.0 Migration Guide \- CocoaPods Blog](http://blog.cocoapods.org/CocoaPods-1.0-Migration-Guide/)

対応方法を丁寧に解説した回答がベストアンサーに選ばれていました。

## 参考

* [CocoaPods 1\.0 \- CocoaPods Blog](http://blog.cocoapods.org/CocoaPods-1.0/)
* [Cocoapods 1\.0\.0で注意すること \- Qiita](http://qiita.com/ShinokiRyosei/items/7187ffb71862aba7e240)

# 第5位：'Application' in SDK 'iOS 10.0' 問題（142票）

[xcode \- Code signing is required for product type 'Application' in SDK 'iOS 10\.0' \- StickerPackExtension requires a development team error \- Stack Overflow](http://stackoverflow.com/questions/37806538/code-signing-is-required-for-product-type-application-in-sdk-ios-10-0-stic)

Xcode 8 から利用可能になった「Automatically manage Signing」に関係する質問です。

ビルドしようとすると、

> XXX has conflicting provisioning settings. XXX is automatically provisioned, but provisioning profile WildCard has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor, or switch to manual provisioning in the target editor. Code signing is required for product type 'Application' in SDK 'iOS 10.0'

のようなエラーが出るよ、という内容でした。

* いちど「Automatically manage Signing」をオフにして再度オンにすれば直った
* Provisioning profilesを全部消して入れ直したら直った
* bundle identifierを見直したら直った

など、様々な回答が寄せられましたが、最終的にはスクリーンショット付きで丁寧に修正方法を解説した回答がベストアンサーに選ばれていました。（"Picture is worth a thousand words" というイディオムが印象的でした😃）

# 第6位：Swift 3で"Expression of type XXX is unused"の警告が出る問題（129票）

[ios \- Xcode 8 / Swift 3: "Expression of type UIViewController? is unused" warning \- Stack Overflow](http://stackoverflow.com/questions/37843049/xcode-8-swift-3-expression-of-type-uiviewcontroller-is-unused-warning)

Swift 3から

```
navigationController?.popViewController(animated: true)
``` 

のようなコードを書くと、

> "Expression of type "UIViewController?" is unused".

という警告が出るようになったけどなんで？という質問でした。

ベストアンサーによると、Swift 3 からは popViewController の結果も capture してやらないと警告が出るようになったとのことです。

この警告は

```  
_ = navigationController?.popViewController(animated: true)
```

とすることで、とりあえず消えます。

回答文 http://stackoverflow.com/a/37843720/1155354 の中でその理由が詳しく解説されているので、気になる方は読んでみると良いでしょう。


# 第7位：Xcode 7 で iOS 10 を動かしたいんだけど（114票）

[Use Xcode 7 with iOS 10 \- Stack Overflow](http://stackoverflow.com/questions/37945376/use-xcode-7-with-ios-10)

iOS 10 を動かすには Xcode 8 beta をインストールしないといけないことは理解している。しかし、どうしても Xcode 7 で動かしたい。なぜなら、私のコードは新しいコンパイラでビルドできないからだ。という質問です。

ベストアンサーに選ばれたのは、Xcode 8 beta の DeveloperDiskImage を Xcode 7 のディレクトリにコピーしちゃえばできるよ！という回答でした。

```
cp -r /Users/fanruten/Downloads/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/10.0\ \(14A345\) 
/Applications/Xcode_7.2.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
```

この手の質問は毎年出てくるみたいですね。




# 第8位：iTunes Connectから"Unexpected Machine Code"メールが届く問題（112票）

["Unexpected Machine Code" warning from iTunes Connect \- Stack Overflow](http://stackoverflow.com/questions/38061045/unexpected-machine-code-warning-from-itunes-connect)

 iTunes Connectにビルドをアップロードしたところ、次のようなメールが届いたという内容です。

> Unexpected Machine Code - Your upload contains both bitcode and native machine code. When you provide bitcode, it's not necessary to include machine code as well. To reduce the size of your upload, use Xcode 7.3 or later, or any other toolchain that removes machine code.

ベストアンサーによると、これはバグだったようです。数日後、正常にビルドをアップロードできるようになったとのことです。

iTunes Connectはたまにこういう謎の現象が起こりますよね 🤔

# 第9位：Xcode 8で変なログがたくさん出る問題（110票）

[ios \- Xcode 8 Console Garbage? \- Stack Overflow](http://stackoverflow.com/questions/37930506/xcode-8-console-garbage)

第2位で出てきた「Xcode 8で変なログがたくさん出る問題」と全く同じ内容になります。

重複しているにも関わらずこれだけの票を集めているということは、相当の数のデベロッパーが困っていたんですね😩


# 第10位：Swift 3ではdispatch_afterをどう書くの？問題（103票）

[ios \- How do I write dispatch\_after GCD in Swift 3? \- Stack Overflow](http://stackoverflow.com/questions/37801436/how-do-i-write-dispatch-after-gcd-in-swift-3)

Swift 2までは

```swift
var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) 
dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
    // your function here 
})
```

のように書けたけど、Swift 3ではどう書くの？という質問でした。

ズバリこう書けるよ！という回答がベストアンサーに選ばれていました。

```swift
// to run something in 0.1 seconds

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
    // your code here
}
```

詳しい解説も載っているので、気になる方は読んでみると良いでしょう :smiley: 

## 参考

* [Swift 3での遅延実行 \- Qiita](http://qiita.com/koogawa/items/f6e8f31ca549dbf55e83)

# 総括

[去年](http://blog.koogawa.com/entry/2015/12/07/000000)と比較すると、テクニカルな質問がだいぶ少なかったなー、という印象でした。

特に多かったのが、アプリ申請時のトラブルや、突然ビルドできなくなった問題。しかも、そのほとんどがデベロッパー側の問題ではなく「時間を置けば勝手に直る」系の一時的な問題だったという…😅（この辺はiOSアプリ開発を続けていると、だんだん慣れてきますね）

また、当然ですが Swift 3やXcode 8.xに関する質問も目立ちました。「今まではこういう書き方だったけど、これからはどう書くの？」みたいな質問は今後も繰り返されていくでしょうね。

というわけで、今年のランキングでした！
来年もまたやるかも！？