既存アプリのiOS8対応

#はじめに
完全に個人的な備忘録です。すみません。
（10/25）だいぶ知見が増えてきたので、整理を始めます。
#機能

##Push通知
iOS8のSDKを使っていない状態でiOS8向きのコードを書く
Xcode5でひとまずコードで書いておきたい場合の書き方です。
リリース時、Xcode6未満でビルドすると、書いていないと同様になりますので注意です。

>iOS8からUIUserNotificationSettingsを使うようになりました。
categoriesの機能もあります。

**参考URL**
http://stackoverflow.com/questions/24454033/registerforremotenotificationtypes-is-not-supported-in-ios-8-0-and-later/24773465#24773465

```objc:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
        // The following line must only run under iOS 8. This runtime check prevents
        // it from running if it doesn't exist (such as running under iOS 7 or earlier).
        if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
            UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
            [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
            [[UIApplication sharedApplication] registerForRemoteNotifications];
        } else {
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
        }
#else
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
#endif
```
###ビルド環境の違い
Xcode5でビルドしたものについては下記のメソッドだけでも到達しました。

>[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

Xcode6を使ったものは

>[[UIApplication sharedApplication] registerForRemoteNotifications];

を含めないと到達しないような挙動です。

**参考**

SDK Compatibility Guide
https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/cross_development/Introduction/Introduction.html

Ask for Permission for Local Notifications in iOS 8, but still have the App Support iOS 7
http://stackoverflow.com/questions/24946650/ask-for-permission-for-local-notifications-in-ios-8-but-still-have-the-app-supp

【重要】Growth PushのiOS 8(Xcode 6)対応版SDKの公開
http://growthhack.sirok.co.jp/growthpush/growth-push-ios8/

###Unity

Unityで作ったiOSアプリにObj-CでPush通知を載せてみた
http://kototech.i-studio.co.jp/707/

Unityは、結局iOS8用のメソッドが使えるのかよくわからないので、Objective-Cで明記した方が安全な気がします。

LocalNotificationでダメだった報告もあり、自力で実装する必要があると思っています。※個人的には全くUnityつかってない

今のところUnity使いはObjective-C使えるようになってないとつらいことが多いと思われ
>http://forum.unity3d.com/threads/local-notification-not-working-in-ios-8-unity4-5-4-xcode6-0-1.271487/

64bit対応するのは4.6系以降から
>http://japan.unity3d.com/blog/ios-64-bit-support-in-unity
4.5系での開発は注意。

##課金
http://devstreaming.apple.com/videos/wwdc/2014/303xxqw0yb14u0r/303/303_optimizing_in-app_purchases.pdf?dl=1

##ファミリーシェアリング
`SKPaymentTransactionStateDeferred`の追加による実装追加
###機能
https://www.apple.com/jp/ios/ios8/family-sharing/
http://news.mynavi.jp/articles/2014/08/02/matsumura_apple/001.html

### 参考
https://developer.apple.com/library/ios/technotes/tn2259/_index.html

http://www.pocket-lint.com/news/129972-what-is-apple-s-family-sharing-feature-and-why-should-you-care
>Note: You can only share apps that offer support for Family Sharing. Apple has already begun asking developers to switch on the feature through their iTunes Connect developer portal, so many popular apps should allow Family Sharing by the time Apple launches the feature in autumn.

`配信権および価格`を見てるが、現時点ではない

http://support.apple.com/kb/HT4009?viewlocale=ja_JP
>App 内課金で入手したコンテンツは、ファミリー共有グループに参加している家族間で共有されません。

購入時はAlertはでるけど、アイテムそのものの共有はなし?
有料アプリには設定が表示されている？

Sandboxテストユーザを設定するところまでまとめました。

>ファミリーシェアリング + 課金を確認 〜 Sandboxテストユーザー 編
http://qiita.com/nofrmm/items/86bce44b338bfdfca76e

###疑問
ファミリーメンバー内でのアプリ利用可否の切り替え。
この機能を使いつつ、共有したくないアプリやデータは別途設定あり？

別のAppleIDで切り替える・・・ということ？
　→別のAppleIDの切り替えがありました。

##GPS
 iOS 8から位置情報を取得する方法が変わるよ
 http://qiita.com/koogawa/items/6ec24ca3201977e9642b

##Macアドレス
 Wifiスポットの検索時はランダムなmacアドレスを送信。接続時は正しいMacアドレスになる。
ルーターなどでのMacアドレスでのフィルタリングは有効みたい。
http://www.appbank.net/2014/06/13/iphone-news/837694.php

###参考URL
あまりランダムになっていない？
http://blog.airtightnetworks.com/ios8-mac-randomization-analyzed/

##プロビジョニングプロファイルの表示
https://help.apple.com/deployment/ios/#/apd29c0f45f1
>iOS 8 では、ユーザの iOS デバイスにプロビジョニングプロファイルが表示されなくなりました。

#UI
##UIAlertViewからUIAlertControllerへ
参考URL
http://qiita.com/Night___/items/f2877236a4182c566eed

UIAlertControllerがiOS8:Xcode6からの対応のため
既存プロジェクトがXcode6への移行が可能で、エラーが表示されない状態に持っていく必要がある。
開発環境もXcode6に移行する前提で取りかかる。Xcode5のままでの改修は出来ない予感

実際やってみると、違いはステータスバーの表示くらい。
UIAlertViewでみられた背景透過の微妙な表示も同じだったので、どこから使えなくなるか・・・

##画面サイズ
4.7インチ、5.5インチの真偽しだいで
WebViewアプリもネイティブアプリも、改修対象が多そうな印象です。

WebViewを利用したものは、サイズ指定が固定であるものが多そうですし
ネイティブアプリはAutoLayoutを使ったものに切り替え、きっちりしたデザインは求められない、Androidのようなレイアウトになることを想定する必要があるのかも。

元のサイズのまま拡大が望ましいのですが。
iPhone6plusで

**参考URL**
http://smhn.info/201408-iphone-6-display

##移行したstoryboardの各設定
移行したときに設定が外れてしまって、移行したら挙動が異なってしまうことがあります。


#GM版が公開次第対応
##アイコン、画像のサイズについて
種類が増えています。

 * サイズの詳細
 http://qiita.com/ttsubono/items/9d2bc4a0584715dfb856

 * @1x,@2xに@3xを画像を追加する
 http://qiita.com/nofrmm/items/9ff3967a38f7a45aa898

 * Vector画像をpdfで参照して利用する
 http://kototec.i-studio.co.jp/427/

###起動時の画像
起動時の画像は実は一番忘れやすいと思っています。
いままでの3.5インチ、4インチ画像はiOS7をサポートする場合に必要です。
iOS7以下をターゲットとしたアプリでは
上下の黒帯が再現しますし、おそらくバイナリ提出時にエラーではじかれると思います。

iOS8からはxibを使うか、画像を使うか選択できるようです。

##UIAlertView
β版だと表示がおかしいと感じるところがけっこうな頻度であります。
GMで対応されていなかったら、改修が必要な部分も。

使いどころによって背景が透過されて違和感が見られる場合
コードの書き方に差異があるか確認する必要があります。

コードの書き方も正しければ、「iOS8の仕様：背面ViewのColorを透過」です。背景色に白いViewか淡色の色を乗せたViewで調整します。

###参考URL
iOS8でのダイアログ表示
http://qiita.com/Night___/items/f2877236a4182c566eed

Xcode5によるiOS8対応
http://qiita.com/Night___/items/9323c76a9493f792507d

###UIAlertController
iOS8からの対応なのでiOS7では使えない部品です。
急がないことにしました。
これを先にかいたNotification同様に書くとコードが荒れそうです。

##いままでなかったサイズの端末に対してアプリ側の対応
storyboard上でワーニングが出ないconstrainを設定するようにしています。
シミュレータとconstain設定時のワーニングに注意して、最後にシミュレータで動作確認しています。

**参考**
http://oleb.net/blog/2014/08/replacing-launch-images-with-storyboards/

###起動画面
3.5インチだったところへ、４インチサイズが加わってしばらくは
スプラッシュの画像がスイッチになって余白の表示方法が変わりました。
今回はこの起動画面のstoryboard？
既存アプリが４インチを超える場合の対応を明確に

ios7以下をサポートする場合は起動時のpngとiOS8からのnib設定の両方の設定が必要

##課金ステータス
Sandbox動く？
　→AskToBuyの確認ダイアログは確認しています。

##GPS(iBeacon含む)
iOS8だと改修なしではとれない。
**Xcode5でビルドしたアプリ**をダウンロードなら使える？
そのうちXcode5使用も禁止されそうだけども

##設定画面
GPS、iBeaconでの設定などiOS6/7はアラートでユーザに自力で遷移を促していました。iOS8からはアプリで遷移が可能に。

参考URL
iOS8で復活した設定画面へのURLスキーム
http://qiita.com/Night___/items/3d689d657ee691d2cabe

##ファミリーシェアリング

複数の実機へOSいれないと、AppleIDの設定も必要。
Xcode6への移行に時間がかかりそうな場合、まずはユーザへの注意喚起が先。
ファミリーシェアリング使ってるとちゃんと処理できないかもよ！と一声かける。

#おわり
既存アプリが改修なしで動くAppleの対応を期待しますが
iOS8とiOS7まで、みたいな書き分けは最小限にとどめるようにしたいです。

iOS6-iOS7:フラットデザイン、64bitOS
iOS7-iOS8:同種機能での実装（コーディング）変更、@3x

アーキテクチャに対応していない32bitライブラリは2015年1月中に対応が必要ですし、頭が痛いです。