NSBlogger

意識高いブログ

iOS11およびiPhone X対応でやろうと思っていることまとめ

圧倒的な進化、驚異的な飛躍

f:id:Kamekiti:20170920231801p:plain

ついにiOS11がリリースされましたね。例年のごとくiOSアプリ開発者はiOS11への対応をしなければなりません。 Swift 4も同梱されているのでそちらの対応もちらほら。そして今年はiPhone X対応という特典付き!

iOS11へのアップデートで変化が大きかった点を以下にまとめたのでご参考ください。

1.64bit対応しないとアプリが起動しない

一番影響が大きなアップデートです。前々から警告が出ていたのでお気づきの方も多いのではないでしょうか。

iOS11では64bit非対応のアプリは起動することすらできません。

アプリをまだ運営していく気力があるのなら、今すぐ64bit対応を済ませましょう。

nsblogger.hatenablog.com

2年前に書いた記事があります。ご参考ください。

2.新しいApp Storeへの対応

iOS11になりApp Storeが刷新されました。それに伴いApp Storeに掲載する内容のガイドラインも更新されています。 詳細はProduct Page Optimization - App Store - Apple Developerをご覧ください。

先日開催されたWWDC2017の「Introducing the New App Store」も参考になりますよ。

レビューの促進方法に大きな変化が

App Storeの刷新に伴い、レビュー促進方法も変わりました。「このアプリを評価する」などのボタンを置いてApp Storeでのレビューを促進しているアプリは多くありますよね。

iOS10.3から登場した「SKStoreReviewController」というクラスを使いレビューの促進をしましょう。 詳細は、Rating and Reviewsのガイドラインに明記されています。

SKStoreReviewControllerを使う上での注意点

SKStoreReviewControllerにはいくつか注目すべき仕様があります。

下記を考慮したUI, 設計にしたいですね。

  • ユーザへの表示は1年間で最大3回まで(iOS側で自動的に制御される)
  • ユーザは設定でレビュー促進機能をオフにできる

たとえば、ボタンを置いてレビューの促進をすることは良くありません。 ユーザへの表示回数に制限があったり、促進機能をオフにしているユーザもいるからです。 理想としては、商品の購入など何かしらのアクションが完了したタイミングで出すのが望ましいかと思われます。

ある程度アプリを長く利用してくれた方(リピーター)に向けて促進すると、より正確なレビューが集まるのではないでしょうか。

3.SFSafariViewControllerとSafariCookieが共有されない

アプリ内でSFSafariViewControllerをブラウザ代わりに利用することは多いです。

今までは純正のSafariアプリとCookie情報を共有できましたが、iOS11からはCookie情報が共有されなくなります。

以下のような影響が考えられます。

  • SafariでログインしていたのにSFSafariViewControllerを使うと再ログインが必要
  • Cookieを利用したユーザの行動トラッキングがアプリごとに閉じてしまう

対応策

SFAuthenticationSession」という純正のSafariとSFSafariViewController間で認証情報を共有できるクラスが登場しました。 下記の記事に具体的な実装方法が記載されているのでご参考ください。

qiita.com

シングルサインオンを実装しているアプリは要チェックですね。

4.位置情報のパーミッションの見直し

位置情報には以下の2種類があります。

Key Permission
NSLocationWhenInUseUsageDescription 使用中のみ許可
NSLocationAlwaysUsageDescription 常に許可

今まではどちらかを許可にすればよかったのですが、iOS11からは使用中のみ許可が必須になりました。

「設定」アプリから位置情報サービスの設定へいくとすべてのアプリで「使用中のみ許可」が選択できます。

f:id:Kamekiti:20170927204743j:plain

常に位置情報を取得できる保証がなくなったので、「常に許可」前提で作ったアプリは仕様の見直しが必要ですね。

f:id:Kamekiti:20170927205724p:plain

What's New in Location Technologiesに上記のフローが紹介されていました。

  • 「使用中のみ許可」と「常に許可」の両方をユーザに提示して選択してもらう
  • 使用中のみ許可しているユーザに対して、必要な場面で「常に許可」を求める

パーミッションの取り方にも注意を払いたいですね。

青いバーについて

「使用中のみ許可」している場合、そのアプリが位置情報を取得している状態でバックグラウンドに戻るとステータスバーが青色になります。

f:id:Kamekiti:20170927211319j:plain

「常に許可」している場合もこの青いバーが出ることがありますが、showsBackgroundLocationIndicatorというプロパティでその制御が行なえます。

5.Social.frameworkの置き換え

iOS11からSocial.frameworkにある「SLComposeViewController」というクラスでTwitterFacebookに投稿することができなくなりました。

「設定」アプリ内に「Twitter」や「Facebook」が特別扱いされてアカウント設定できましたが、iOS11からはその項目が削除されています。

SLComposeViewControllerを使ってTwitterFacebookと連携していたアプリは改修が必要となります。

上記のような手段で対応しましょう。

6.Swift 4対応

SwiftもバージョンがあがりSwift 4になりました。Swift 2から3ほどの破壊的な変化は少なくなりましたが、多少ビルドエラーなどが生じるかもしれません。

Swift 4になり構文の記述が楽になったり、Codableなど便利に使える機能が増えているので要チェックです。

dev.classmethod.jp

7.Safariに搭載されたITP

f:id:Kamekiti:20170927214857j:plain

「サイト越えトラッキングを防ぐ」というSafariの設定が登場しました。

Intelligent Tracking Preventionという機能で、クロスサイトトラッキングでのCookie利用が最大24時間までに制限されます。

iOS11ではデフォルトで有効になっています。

以下の記事がわかりやすくまとまっているので興味のある方はご参考ください。 anagrams.jp

広告分野で話題になっており、各プラットフォームの対応も発表されています。 adworld.hatenablog.com

広告プラットフォームのSDKを使う側としては、特に秘策があるわけではないので上記のような仕組みが登場したことを念頭においておきましょう。

7.新機能の検討

iOS11で登場した新機能に対応できないか検討してみるのもよいでしょう。

ARKit

一番の目玉は「ARKit」ではないでしょうか。

github.com

ARKit + CoreLocationの例です。アイデア次第で今までにないアプリや体験を提供することができそうですね。

Drag and Drop

iPadではDrag and Dropでファイルをアプリ間で受け渡すことが可能になりました。 これからiPadの利用方法が大きく変わるかもしれません。iPadアプリを作っている方はぜひ実装したいですね。

その他

MusicKitの登場やSiriKitやMapKitも改良されています。

Core NFCも新しいiPhoneの使い方ができそうで楽しそうですよ。

8.iPhone X対応

f:id:Kamekiti:20170927233221j:plain

今まであの手この手でステータスバーやタブバーをいじってきたアプリは泣きをみているはずです。

iOS11では「Safe Area」と呼ばれる領域が定義され、それ以外は神の領域として触れることが許されない世界になりました。

iPhone X用にデザインガイドラインが用意されているので熟読しましょう。

iPhone X - Overview - iOS Human Interface Guidelines

ステータスバーとタブバー

今までステータスバーは高さが20でタブバーは49と決まっていましたが、これからは端末によって異なると考えましょう。

Safe Area内でAutoLayoutで制約を正しくつければiPhone Xでも正常に表示されるはずです。

ステータスバー分の黒いViewを置いたり、タブバーを隠したりしているアプリはそのあたりのデザインが崩れる可能性が高いです。

デザイナーと話し合ってデザインの仕様を変えることも検討したほうがよいでしょう。

iOS11に関わることですが、UIScrollViewContentInsetAdjustmentBehaviorというプロパティがUIScrollViewに追加されました。いままでステータスバー分ScrollViewのContentInsetを調整したりしていた方は再度その設定を見直してみてください。iOS11でビルドしたらScrollViewの上部に隙間ができたりしたら、このプロパティを確認してみましょう。

画面の比率

今までのiPhoneは画面の大きさは違えど、画面のアスペクト比は同じでした。

しかしiPhone Xは縦に長く、今までのアスペクト比とは異なります。

それによって画面全体に画像を表示しているアプリはその表示具合の確認が必要になります。

f:id:Kamekiti:20170927223737p:plain

ガイドラインにもどのような見え方になるかが示されていました。

上下もしくは左右の幅を広げた画像を用意し、端末によっては上下もしくは左右が切れるような設定がよいのではないかと思います。

ジェスチャー

iPhone Xジェスチャーによって様々な機能を利用することができるので、それを妨げるような操作をさせないように設計すべきとのことです。

生体認証

iPhone XはFace IDで認証しますが、それ以外の端末はTouch IDで認証します。

LABiometryTypeというクラスでどちらに対応しているか確認できますよ。

そもそも、ユーザが設定で生体認証をオフにしている可能性も考慮が必要です。

詳細は刷新されたHuman Interface Guideline - Authenticationをご参考ください。

やってはいけないこと

ガイドラインの下記に記されています。

Don't mask or call special attention to key display features.

要は剃りこみ周辺をごまかしたりしないようにとのことです。

以下のようなユーモアに富んだライブラリがありますが、Apple的にはNGでしょうね。

github.com

github.com

今までのアプリはどのように表示される?

iOS11に最適化されていないアプリは上記のように上下にレターボックスが表示されるようです。

ガイドラインに反している気がしますが……。)

おわりに

毎年たくさん仕事を増やしてくれるAppleに圧倒的感謝😂