Xcode6とSwift&iOS8のアプリ開発で踏んだ地雷たち



Xcode6で新規のアプリを開発した時に気づいたことをまとめます。

アプリの仕様は以下のとおり。

- 開発言語はSwift
- Cocoapodsで既存Objcのライブラリを利用
- デプロイターゲットはiOS8以上
- Storyboardを利用
- AutolayoutとSizeClassesを利用

開発環境は以下のとおり。

- Xcode6はBeta2を利用
- 検証実機はiOS8 beta2をインストールのiPhone5


## 【頻度中】コンパイルエラーXXXHeaderファイル has been modified since the precompiled header 

```Error
fatal error: file '/Applications/Xcode6-Beta2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIVisualEffectView.h' has been modified since the precompiled header '/Users/susieyy/Library/Developer/Xcode/DerivedData/news-app-exyunxyrtahmdkapftamcvrobgtv/Build/Intermediates/PrecompiledHeaders/Pods-FrameAccessor-prefix-gtykjxadubuzxycgfpjhmzqeciwi/Pods-FrameAccessor-prefix.pch.pch' was built
```

自分の環境だとXcode5を開いて、Xcode6に戻ってきたり、Cocoapodsを追加した場合などに高頻度で発生します。
シミュレーターコンパイルだと発生し実機コンパイルだと発生しない場合もあります。


さらに`UIVisualEffectView.h`ファイルが更新もされていなくても発生します。

```Shell
-rw-r--r--@   1 hoge  admin   3.8K  6 15 16:34 UIVisualEffectView.h <-
-rw-r--r--@   1 hoge  admin   3.4K  6 15 16:34 UIWebView.h
-rw-r--r--@   1 hoge  admin   6.4K  6 15 16:34 UIWindow.h
```


### 対応方法

毎回なぜか、なおる対応方法がまちまちで、以下のいずれかでなおりました。

- ビルドをクリーンする
- DerivedDataを削除する
- OSXを再起動する
- Xcode6を入れなおす

## 【頻度中】IBOutletのStoryboardとのコネクションありが表示されない場合がある

StoryboardとIBOutletでコネクションを繋いでいても接続状態の表示にならない場合があります。
コードから接続先のStoryboardへジャンプできなくて不便です。
コンパイル後のアプリの挙動は正しく接続されている状態で動作するので問題ありません。　

![news-app_—_WTDArticleViewController_swift.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/ec5e3c5b-ce06-64fe-3719-c7718c52140c.jpeg "news-app_—_WTDArticleViewController_swift.jpg")

## 【頻度低】Storyboardのファイルを開いてもXMLで表示される

Main.storyboardファイルを開いても常にXMLで表示されるようになりました。
一度明示的にInterface Builderで開くとなおります。

![news-app_—_Main_storyboard.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/d3d6f572-12c0-68e6-cedd-2292e8b7db95.jpeg "news-app_—_Main_storyboard.jpg")

![全画面_2014_07_04_14_12.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/5d344c47-c629-30e4-d8bd-131a8946c440.jpeg "全画面_2014_07_04_14_12.jpg")

## 【頻度低】ソースコードハイライトと入力補完が効かなくなる

Beta1のXcode6ほどではないですが、Beta2でもたまに発生します。


![全画面_2014_07_04_16_56.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/bf903f60-5ff6-db9a-87d7-7a8530111cee.jpeg "全画面_2014_07_04_16_56.jpg")

ソースファイル内に日本語を記載しないと安定する傾向にあるように感じます。

```Swift
//  Copyright (c) 2014年 Wantedly. All rights reserved.
```

コピーライトの`年`は一括置換で排除するか、コピーライトに日本語が記載されないよう設定を変更しています。

```Shell
$ defaults write com.apple.dt.Xcode AppleLocale en_US
```



## 【頻度低】シミュレーターで実行しようとするとエラーになる
![スクリーンショット_2014_07_06_12_40.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/e0b2837d-1572-12d6-2cc3-215c2cc3011d.jpeg "スクリーンショット_2014_07_06_12_40.jpg")

Xcode6とシミュレーターを再起動したらなおりました。


## 【常時】Xcode5とXcode6のシミュレーターで同時にアプリを起動できない

![スクリーンショット_2014_07_06_12_50.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/9ad45972-2734-092e-6ffe-62659941c88d.jpeg "スクリーンショット_2014_07_06_12_50.jpg")

Xcode5シミュレーターとXcode6シミュレーターを同時に起動している場合、どちらかのシミュレーターのアプリしか起動できません。

## 【常時】誤ってプロジェクトをXcode5で開いてStroyboardを編集保存するとXcode6でStroyboardがおかしくなっている

Xcode5を起動すると親切にも最後に開いていたXcode6専用のプロジェクトを自動で開いてくれることがあります。
Finderからプロジェクトファイルをダブルクリックして開くとXcode5で開かれることもあります。
一見Xcode5とXcode6の画面はよく似ているので、気づかずに進めているとStroyboardがおかしくなる場合があります。

こまめにコミットを行ってロールバックできるように対応しています。


## 【頻度中?】switchと書くと必ずXcodeがフリーズする

いつの頃か`switch`と入力するとフリーズするようになりました。ペーストで入力しても同様です。
昨日までは入力できていたのですが。。。
OSXを再起動してもなおらず、フリーズが１００％再発するようになってしまいました。
フリーズ状態を放置しているとどんどんメモリを消費して、OSXが固まってしまうので早めにXcodeを強制終了しましょう。
仮想メモリが７０GBってやばいですねｗ

![全画面_2014_07_06_19_17.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/a36b67bf-9da2-8750-1bfe-40369b33b676.jpeg "全画面_2014_07_06_19_17.jpg")

フリーズ前
![アクティビティモニタ__すべてのプロセス_.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/6ffb3759-8f59-7d60-6842-266d422d2550.jpeg "アクティビティモニタ__すべてのプロセス_.jpg")


フリーズ後
![アクティビティモニタ__すべてのプロセス_.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/0452fb6e-7dc6-f34f-2ed2-019cccdf275e.jpeg "アクティビティモニタ__すべてのプロセス_.jpg")

 
## 【頻度中】iOS8の実機転送でアプリ実行中に一瞬フリーズする

iOS8をインストールした実機(iPhone5)にアプリを転送して動作確認していると、一瞬フリーズしてまったくユーザ操作（タップやスワイプ）を受けつけなくなります。Swiftのアプリだからなのか、iOS8SDKだからなのか、iOS8の実機だからなのか原因を切り分けできていませんが、FacebookアプリをiOS8の実機で利用していても発生しているので、iOS8の実機のせいかもしれません。

##【常時】 iOS8の実機転送でアプリの動きがもっさりしている

開発中の実機転送したアプリもそうですが、Facebookのアプリもアニメーションがもっさりして、タイムラインをスクロールすると結構ガリガリと一瞬ひっかかります。画面遷移も一呼吸おいてから遷移される感じです。iOS8のBetaが改善されるまでアニメーションのチューニングは難しそうです。

## 【頻度低】Xcode6がいきなりクラッシュする

Beta1に比べてだいぶクラッシュ頻度はだいぶ下がりました。開発して苦にならない程度に落ちます。
編集中のソースコードは飛んでしまうので、こまめに保存して対応しています。