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


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

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

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

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

## 第1位：Xcode 9.3 から見知らぬ plist ファイルが追加された問題（123票）

[ios \- New file created in Xcode 9\.3, <wsname>\.xcworkspace/xcshareddata/IDEWorkspaceChecks\.plist should it be committed? \- Stack Overflow](https://stackoverflow.com/questions/49564513/new-file-created-in-xcode-9-3-wsname-xcworkspace-xcshareddata-ideworkspaceche)

今年1位に輝いたのは3月にリリースされた Xcode 9.3 に関する質問でした。Xcode 9.3 で既存のプロジェクトをリビルドしたら`IDEWorkspaceChecks.plist ` というファイルが追加されたよ！これはバージョン管理に含めるべきなの？という内容です。

この質問に対するベストアンサーはまだ選ばれていません。現時点で最も多くの票を集めているのは、[リリースノート](https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-DontLinkElementID_7)に

> Xcode 9.3 adds a new IDEWorkspaceChecks.plist file to a workspace’s shared data, to store the state of necessary workspace checks. Committing this file to source control will prevent unnecessary rerunning of those checks for each user opening the workspace.

という記載があるから、バージョン管理に含めといたほうが良いよ！という回答です。どうやらこのファイルは Workspace における必要なチェック項目の状態を保存し、無駄に再チェックが走るのを防いでくれるものらしいですね。

### 参考

* [Xcode9\.3 から git で管理するファイルが増える \- Qiita](https://qiita.com/takecian/items/453ee0622dd6f5e7dc15)

## 第2位：Xcode 9.3 で 'Status bar could not find cached time string image. Rendering in-process’ の警告が出る問題（108票）

[ios \- Status bar could not find cached time string image\. Rendering in\-process \- Stack Overflow](https://stackoverflow.com/questions/49586341/status-bar-could-not-find-cached-time-string-image-rendering-in-process)

Xcode を 9.3 にアップグレードしたら

> Status bar could not find cached time string image. Rendering in-process.

の警告が出るようになったけど、これは気にしたほうがいいの？直す方法はあるの！？という内容です。

この質問には「私も！」「俺も！」というコメントが殺到したため、現在は protected（一定の reputation を持つメンバーしか回答ができない状態）になっています。

ベストアンサーに選ばれたのは「気にしなくていいと思うよ。新しいバージョンには時々こういったデバッグメッセージが表示されるのさ。そしてこれらはだいたい次のリリースで修正されるんだ」という回答でした。

しかし、Xcode 10.1 がリリースされた今現在もこの警告は出続けているようです🤔

## 第3位：Xcode 10 beta 5 で Firebase と Crashlytics を一緒にビルドできない問題（106票）

[ios \- Xcode 10b5 \- duplicate symbol linker error, can't compile with Crashlytics \- Stack Overflow](https://stackoverflow.com/questions/51602785/xcode-10b5-duplicate-symbol-linker-error-cant-compile-with-crashlytics)

Xcode beta 5 において、Firebase と Crashlytics/Fabric を一緒にビルドしようとしたら `duplicate symbol linker error` が出るようになったよ！という内容です。コメント欄には様々なアドバイスが寄せられ、質問者は

* `pod install` 再実行およびキャッシュの削除
* クリーンビルドおよびXcode再起動
* `-ObjC` linker flag 追加

などを試しましたが問題は解決せず。。

しかし、beta 6 がリリースされると、このエラーは嘘のように消え去ってしまいました。
このように beta 版で発生するエラーは Apple 側もしくはサードパーティライブラリ側の原因であることも多いため、開発者は落ち着いてエラーレポートを送ることが大切だと思いました。

## 第4位：Time Profiler が動かない問題（61票）

[ios \- Time profiler in instruments is not working \- Stack Overflow](https://stackoverflow.com/questions/49744280/time-profiler-in-instruments-is-not-working)

Xcode を 9.3 にアップグレードしたら Time Profiler が機能しなくなったよ！という内容です。Life Cycle バーは常に初期状態のままで、

> the data volume is too high for a recording mode of "immediate" and some data had to be dropped to move forward.

という警告が大量に出ていたようです。

ベストアンサーに選ばれたのは「Xcode 9.2 にダウングレードしたら解決したよ」という回答でした（これを解決と言ってよいかは微妙ですが😅）。これは Xcode 9.3 のバグだから Apple にレポートしておいたよ！ということでしたが、結局 Xcode 9.4 でも直らなかったようです。

※ちなみに Xcode 10.1 で試したところ動いてました（2018/12/1）

### 参考

* [Xcode Time Profilerの使い方 \- Qiita](https://qiita.com/okamotoke/items/daac6645fc44daadf1dd)

## 第5位：Xcode 10 にて "A valid provisioning profile for this executable was not found" というエラーが出る問題（58票）

[ios \- Xcode 10: A valid provisioning profile for this executable was not found \- Stack Overflow](https://stackoverflow.com/questions/52424462/xcode-10-a-valid-provisioning-profile-for-this-executable-was-not-found)

Xcode 10 にアップデートしたところ、

> A valid provisioning profile for this executable was not found.

というエラーが出るようになり、実機ビルドができなくなったよ！という内容です。

* クリーンビルド
* derived data の削除
* Xcodeをアンインストールし、それに関連する環境設定とファイルを削除
* まったく異なるMacにXcodeをインストールしてテスト
* 異なるデバイスでテスト
* プロビジョニングプロファイルからデバイスを無効にし、Xcodeで再度有効にする
* 開発者ポータルのすべての証明書を削除して再作成
* 「Automatically manage signing」のチェックをはずして再度チェックを入れる
* プロビジョニングプロファイルを破棄し、Xcodeに再作成させる
* 手動でプロビジョニングプロファイルを作成

はすでに試したけど、問題は解決しなかったようです。

ベストアンサーに選ばれたのは、"Workspace Settings" から `Legacy Build System` を選んで実行すればうまくいくよ！というシンプルなものでした。

![](https://i.stack.imgur.com/edQ5L.png)

このモードは名前の通り古いビルドシステムでビルドを実行するものなのですが、どこかモヤっとする解決方法ですね。しかも、一度このモードに切り替えたあと、再度 `New Build System` に戻すとなぜか普通にビルドしてしまう人もいたようです🤔

## 第6位：App Store にアプリを申請したら "Invalid Document Configuration" という警告が出る問題（51票）

[ios \- App Store Connect Warns \- Invalid Document Configuration \- Stack Overflow](https://stackoverflow.com/questions/52227696/app-store-connect-warns-invalid-document-configuration)

Document Based ではないアプリを App Store に提出したのに、次の警告メールが返ってきたよ！という内容です。

> Invalid Document Configuration - Document Based Apps should support either the Document Browser (UISupportsDocumentBrowser = YES) or implement Open In Place (LSSupportsOpeningDocumentsInPlace = YES/NO)."

TestFlight によるテストは普通にできるけど、できればこの警告を消したい！とのことです。

この問題は警告に書いてある通り、Info.plist に `UISupportsDocumentBrowser` もしくは `LSSupportsOpeningDocumentsInPlace` をセットすれば解決します。

ちなみに、それぞれのキーの意味は次のとおりです。

* `UISupportsDocumentBrowser` - 他アプリの Documents ディレクトリから自分のドキュメントへのアクセスを許可するかどうかを指定する
* `LSSupportsOpeningDocumentsInPlace` - 他アプリからファイルを渡される際、コピーではなくオリジナルファイルを受け取るかどうかを指定する

2018/12/1 現在、この質問にベストアンサーはついていませんが、もしあなたのアプリがドキュメントを編集したりするものでなければこれらのキーは `NO` にしたら良いよ、という回答が多くの票を集めていました。

### 参考

* [iOS 11ファイルAppにDocumentsフォルダを表示して他のアプリと共有する方法 \- Qiita](https://qiita.com/ShingoFukuyama/items/e85d34360f3f951ca612)

## 第7位：Xcode でダークモードをオンにするのはどうやるの問題（41票）

[ios \- How to enable Dark Mode for Xcode 10 \- Stack Overflow](https://stackoverflow.com/questions/50696931/how-to-enable-dark-mode-for-xcode-10)

こんな質問あり！？という内容ですが、「あり」のようです😅 実際に票も集めています。

![](https://i.stack.imgur.com/jtJOQ.png)

ご存知の通り、ダークモードは macOS 10.14 Mojave から追加された機能です。この質問者は macOS 10.13 High Sierra 環境で Xcode 10 を使っていたため、ダークモードを選択できなかったようです。

Mojave 環境でダークモードを選択する方法を図入りで丁寧に解説した回答がベストアンサーに選ばれていました。毎年こういったプログラミング以外の質問もランクインしてますね😅


## 第8位：Xcode 9.2 が iOS 11.3 をサポートしてない問題（40票）

[Xcode not supported for iOS 11\.3 by Xcode 9\.2 needed 9\.3 \- Stack Overflow](https://stackoverflow.com/questions/49720178/xcode-not-supported-for-ios-11-3-by-xcode-9-2-needed-9-3)

「問題」というか仕様の問題ですね😅

iOS 11.3 もサポートした Xcode 9.3 にアップデートしてね、と言いたいところなのですが、質問者の環境は Sierra だったため、High Sierra 以上を必要とする Xcode 9.3 はインストールできないとのことでした。

ベストアンサーに選ばれたのは、iOS 11.3 の device support を配布している非公式サイトがあるから、そこからダウンロードして Xcode 9.2 にインストールすれば iOS 11.3 もサポートした環境ができあがるよ！という回答でした（いいのか、それ🤔）。

コメントにも同じような意見がありましたが、個人的には

* マシンを最新のmacOSにアップデートできない場合は、ハードウェアを更新する（つまり買い替えの時期）
* アップデートしようとしている iOS バージョンが、自分の開発環境でビルドできるか事前に確認する


べきだと思っています。

## 第9位：Xcode 10 beta にて "MGIsDeviceOneOfType is not supported on this platform." というエラーが出る問題（36票）

[ios \- Xcode Error on Simulation: MGIsDeviceOneOfType is not supported on this platform \- Stack Overflow](https://stackoverflow.com/questions/50701321/xcode-error-on-simulation-mgisdeviceoneoftype-is-not-supported-on-this-platform)

Xcode 10 beta のシミュレーターでアプリをビルドしようとしたところ

> libMobileGestalt MobileGestalt.c:875: MGIsDeviceOneOfType is not supported on this platform.

というエラーが出て画面が真っ白になるよ！という内容です。

そもそも beta 版なんだからアップルにバグ報告するべきだよ！等のコメントが寄せられましたが、最も多くの票を集めたのは「Xcode 9.4.1 に戻したら解決したよ」という回答でした😅

この回答自体にも「それでも私は Xcode 10 を使いたいんだよ」「それは回答とは言えない」等のコメントが寄せられ、多くの票を集めていました。

## 第10位：Xcode 10 に libstdc++6.0.9 が含まれていない問題（35票）

[xcode10 \- Xcode 10 \(iOS 12\) does not contain libstdc\+\+6\.0\.9 \- Stack Overflow](https://stackoverflow.com/questions/50694822/xcode-10-ios-12-does-not-contain-libstdc6-0-9)

Xcode 10 にアップデートしたところ、GNU C++ ライブラリである `libstdc++6.0.9` が「Choose frameworks and libraries to add:」のリストから消えてしまったよ！という内容です。Xcode の C++ コンパイラは以前は GNU C++ でしたが、現在は LLVM と Clang に変わっています。Clang の標準 C++ ライブラリは `libc++` であり、現在はこちらが Apple の標準となっています。

この質問には未だベストアンサーが付いていませんが、

* libstdc++ は5年前に deprecated になったよ
* 最近のプラットフォーム（tvOSやwatchOS）はすでにこのライブラリをサポートしていないよ
* サポートは iOS 12 のシミュレーターランタイムから削除されたよ（ただし、iOS 12のデバイスランタイムには互換性保持のため残っているよ）
* 今は libstdc++ の代わりに libc++ を使うべきだよ
* Xcode 9.4 の SDK をコピーしてくることで一時的には回避できるよ

という内容の回答が最も多くの票を集めていました。

## 総括

### 新機能に関する質問は少なめ

昨年と比較すると、今年発表された新機能や新デバイスに関する質問は少ないように感じました。秋にリリースされた iOS 12 は **パフォーマンスの向上** がテーマだったこともあり、それが関係しているのかもしれませんね。


### Xcode 9 関連の質問が多め

Xcode 10 関連の質問より Xcode 9 関連の質問が多かったのも印象的でした。特に第4位の「Time Profiler が動かない問題」は私の環境では再現しなかったのですが、これに悩まされた開発者も多かったようです。

### 投票数は全体的に減少傾向

全体的な投票数については今年も減少傾向にあり、昨年の1位（Xcode 9でのワイヤレスデバッグのやり方がわからない問題）が200票以上集めたのに対し、今年の1位は約半分の100票台でした。今年はただ単にクリティカルな問題が少なかっただけかもしれませんが、どこか寂しい気もしますね😢 

◆

というわけで、2018年のランキングをお送りしました。
iOS アドベントカレンダー、明日は @TachibanaKaoru さんです！

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