既存アプリのiOS8対応

  • 92
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

完全に個人的な備忘録です。すみません。
(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

#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版が公開次第対応

アイコン、画像のサイズについて

種類が増えています。

起動時の画像

起動時の画像は実は一番忘れやすいと思っています。
いままでの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インチだったところへ、4インチサイズが加わってしばらくは
スプラッシュの画像がスイッチになって余白の表示方法が変わりました。
今回はこの起動画面のstoryboard?
既存アプリが4インチを超える場合の対応を明確に

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月中に対応が必要ですし、頭が痛いです。