スマホアプリ開発者のための2018年動向まとめ

# はじめに

2018年もあと2日..!
というわけで毎年1年間のスマホアプリ開発の動向をまとめています。
習慣化してきてしまい3年目になります。

私は2018年、ネイティブアプリの仕事をメインとしていました。
なので今年はUnity成分は少なめ、ネイティブ寄りの内容になっています。

スマホアプリ開発に携わっていない人もこの記事を見れば今年のいろいろが分かるかも。
振り返り用に「ふむふむ」「へー」程度に見ていただければ幸いです。

【前年】
[Unityでスマホアプリ(特にプラグイン)を開発している人のための2017年対応まとめ](https://qiita.com/keidroid/items/5d942afa4ec69f97bd3d)
[Unityでスマホアプリ(特にプラグイン)を開発している人のための2016年対応まとめ](https://qiita.com/keidroid/items/76ff2c7b38cb86b7b691)

# 新OS登場(iOS 12/Android 9)について

## iOS12

毎年のことですが2018年9月に
新機種であるiPhone XS, iPhone XS Max, iPhone XRとともに
iOS12が発表されました。

https://developer.apple.com/jp/ios/whats-new/
https://developer.apple.com/documentation/ios_release_notes/ios_12_release_notes

機能としては機械学習(Core ML 2)とAR(ARKit 2)が主に注目されています。
また、Safariとのログインセッションの共有ができる認証サービスや
HTTP以外の通信が強化されています。

Authentication Services
https://developer.apple.com/documentation/authenticationservices
Network
https://developer.apple.com/documentation/network

XCode10.0には不具合が多くiOS9向けのビルドが壊れる不具合がありました。
[XCode10.1で改善](https://developer.apple.com/documentation/xcode_release_notes/xcode_10_1_release_notes)されたため最新版のXCodeを使用するのがおすすめです。

また、現在最新のSwiftは9月に発表された4.2です。ビルド速度が大きく向上しました。

Swift 4.2 Released!
https://swift.org/blog/swift-4-2-released/

### 2018年12月時点の端末状況

Support / App Store
https://developer.apple.com/support/app-store/

上記サイトによると、2018年12月現在iOS12は70%を超えているようです。
公式サイトで販売中の最小サイズがiPhone 7なので
モバイルアプリは4.7インチ〜6.5インチ向けの開発となります。

<img width="240" alt="スクリーンショット 2018-12-29 0.50.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/19692/d8a1d627-dae1-08e0-3924-22b8725999b0.png">

### iOSドキュメント一新

iOS12からドキュメントが一新されました。
旧ドキュメントはアーカイブページにあります。

https://developer.apple.com/develop/
https://developer.apple.com/library/archive/navigation/

## Android 9 (Pie)

2018年10月、Android 9が公開されました。今回のお菓子はPie。
SDKバージョン番号では28です。

https://www.android.com/versions/pie-9-0/
https://developer.android.com/about/versions/pie/

TLS周りなど、AndroidもiOSと同じくネットワーク・セキュリティ周りの変更があります。
通知周りの変更はいつものようにあり、Android 8で導入された通知チャンネルが改良されました。

Androidは公式ドキュメントに移行手順が記載されています。
https://developer.android.com/about/versions/pie/android-9.0-changes-all

また、現在最新のKotlinは1.3です。コルーチンが正式導入となりました。

Kotlin 1.3リリース – コルーチン、Kotlin/Nativeベータ
https://blog.jetbrains.com/jp/2018/10/30/1511

### 2018年12月時点の端末状況

Google Play のインストールの統計情報
https://developer.android.com/about/dashboards/

7系が25%、8系が20%超えです。
新規開発の場合、minSdkVersion=21(5.0以上)なら88.9%カバーできます。
minSdkVersion=19(4.4以上)なら96.5%カバーできます。

<img width="240" alt="スクリーンショット 2018-12-29 0.51.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/19692/637ef937-abad-cea7-1dec-982ec50d9e01.png">


### AndroidのtargetSdkVersion=26問題

新規アプリは2018年8月、既存アプリの更新は2018年11月に
targetSdkVersion=26とすることが必須となりました。

2019年8月にはネイティブライブラリを含む新しいアプリとアプリのアップデートは、
64ビット版を提供することが義務づけられます。

今後のGoogle Playでのアプリのセキュリティおよびパフォーマンスの改善について
https://developers-jp.googleblog.com/2017/12/improving-app-security-and-performance.html

これにより、上記のblog記事のようにAndroid6.0の実行時パーミッションなど対応する必要があります。

2019年以降は毎年targetSdkVersionの要件が上がるとのことです。
(Androidの各リリースの後1年以内にAPIレベルを指定)

### サポートライブラリ再構築、AndroidXへ移行

7年以上前からあるAndroidサポートライブラリですが、
28を最終版として、AndroidXパッケージに移行します。

2018年5月alpha版が公開され、9月に1.0.0が公開されました。

AndroidX の紹介
https://developers-jp.googleblog.com/2018/05/hello-world-androidx.html

AndroidX Overview
https://developer.android.com/jetpack/androidx/

また、テストを行うためのAndroidX Testing Libraryは遅れて10月下旬に公開され、
11月に行われたAndroid Dev Summitで概要が発表されました。
「Truth」「Robolectrics 4.0」がキーワードとして登場します。

移行方法やテストライブラリについて詳細知りたい方は、
以下2つの記事で詳細を書いたので合わせてどうぞ。

[AndroidXへの移行がすぐできたのでまとめ](https://qiita.com/keidroid/items/57b0b3e3ecc458d1f548)
[2018年までのAndroidテスト総まとめ - 今年の変更と来年の対策](
https://qiita.com/keidroid/items/c45d888759478cde1cfc)

# 新ディスプレイ・新解像度問題

新iPhoneではディスプレイ名称が変更になりました。
iPhone XSは"Super Retina HDディスプレイ"、iPhone XRは"Liquid Retina HDディスプレイ"と表現します。

> すべてが新しいLiquid Retina。革新的なエンジニアリングにより、ディスプレイを隅々にまで広げられるようになりました。その結果生まれたのが、オールスクリーンのデザイン。これまでのiPhoneの中で最大のLCDでありながら、手の中に心地よく収まります。

どちらも「全面スクリーン」「角丸」「色の表現に優れている」ディスプレイとのことです。
"Super Retina"は有機ELディスプレイ、"Liquid Retina"は新液晶ディスプレイを指すようです。
iPhone XRは3D Touchを搭載していないため注意が必要です。

Building Apps for iPhone XS, iPhone XS Max, and iPhone XR
https://developer.apple.com/videos/play/tech-talks/207/

また、今年の新型iPad Proでは解像度が従来の解像度とは異なります。
Safe Areaも必要なため、iPad用アプリも作り変える必要があります。

- iPad Pro 10.5inch 2,224 x 1,668
- iPad Pro 11inch 2,388 x 1,668 ←2018 New!
- iPad Pro 13inch 2,732 x 2,048

Bringing Your Apps to the New iPad Pro
https://developer.apple.com/videos/play/tech-talks/209/

一方、Androidでは去年のiPhoneXに続き、
Androidでもノッチ付きの端末が各社から多く発売されました。

Androidではノッチという用語は使用せず"Display cutout"
(日本語では"ディスプレイの切り欠き")と用語を統一しています。

Android 9ではディスプレイの切り欠きをサポートしました。
Androidの切り欠きは以下制限があるため、
「切り欠きが上に２つある場合」「切り欠きが左にある場合」などは考慮しなくて良さそうです。

- 切り欠きの配置は上部か下部 (左右には配置できない)
- 切り欠きは一片で一つのみ

Support display cutouts
https://developer.android.com/guide/topics/display-cutout/

## 有機EL化よりダークモードが有用に

上記の通り、iPhoneXが牽引する形で「有機EL」「切り欠き」のディスプレイが増加しています。
有機ELディスプレイの構造上、黒表示時は電力がかからないため画面に黒が多いと省電力に繋がります。

Android Dev Summitの以下発表によると、ダークモードにより最大で約60％バッテリー消費を抑えることが可能とありました。
「マテリアルデザインで白を基調とするよう推奨していたことは間違いだった(意訳)」と述べています。

Cost of a Pixel Color (Android Dev Summit '18)
https://www.youtube.com/watch?v=N_6sPd0Jd3g

Google’s big Android battery ‘oops’ and future Dark Modes
https://www.slashgear.com/googles-big-android-battery-oops-and-future-dark-modes-08553037/

すでにTwitterやYouTubeなどのアプリは黒ベースのダークモードを実装済みです。
iOS自体、対応はありませんが、macOS mojaveではダークモードの切り替えを可能としているため、来年以降はOSに組み込まれれたりアプリ側での対応が推奨されたりする可能性があります。

# GoogleがFirebase移行推進を加速

GoogleはGoogle Analyticsのアプリ向けSDK, Google Cloud Messaging, Google URL Shortenerを近々停止し、
Firebaseに移行することをアナウンスしています。

|移行元|移行先|停止日|
|:--|:--|:--|
|Google AnalyticsアプリSDK|Firebase Analytics|2019年10月31日にアプリSDKからの収集停止. 2020年1月31日履歴停止|
|Google Cloud Messaging|Firebase Cloud Messaging|2019年4月11日にAPI削除予定|
|Google URL Shortener|Firebase Dynamic Links|2018年5月30日新規プロジェクト登録受付停止. 2019年3月30日コンソール停止|

※ Google Analyticsのアプリ以外の収集は継続。Google Analytics 360のプロパティは影響なし。
※ Google URL Shortenerのリンクは2019年3月30日以降もリダイレクト可。

各公式アナウンスページは以下になります。

Google アナリティクス開発者サービス SDK の終了
https://support.google.com/analytics/answer/9167112?hl=ja

Google Cloud Messaging -- DEPRECATED 4/10/2018
https://developers.google.com/cloud-messaging/

Google URL ShortenerからFirebase Dynamic Linksへ
https://developers-jp.googleblog.com/2018/05/transitioning-google-url-shortener.html

FCM移行については別記事でまとめました。
iOSの認証キー(p8)対応も書いたので良かったらどうぞ。
[おじさんのための2018年スマホPUSH通知事情 (+GCM終了のお知らせ)](https://qiita.com/keidroid/items/290af7b99952e889f4a7)

## Firebase新規機能

Firebaseのカバー範囲は多岐に渡り、以下のような更新がありました。

Firebase Cloud Functionが1.0になりました。
https://firebase.google.com/docs/functions/beta-v1-diff?hl=ja

5月にMLKitのパブリックベータを開始し容易に文字認識や画像認識が可能になりました。
https://firebase.googleblog.com/2018/05/whats-new-in-firebase-at-io-2018.html

11月にFirebase Test LabのiOS完全サポートが発表されました。
https://firebase.googleblog.com/2018/11/firebase-test-lab-launches-full-support.html

# 新機能もりもりのUnity2018

スマホアプリといえばゲーム! というわけでゲームエンジンのUnityについての動向です。

https://unity3d.com/jp/unity/whats-new/unity-2018.3.0
https://unity3d.com/jp/unity/whats-new/unity-2018.2.0
https://unity3d.com/jp/unity/whats-new/unity-2018.1.0

Unity2018では新しいアーキテクチャのEntity Component System、
C# Job System、Shader Graph、そして念願のNested Prefabが導入されました。
新機能が多すぎるため大きな変更点とモバイル関連のみ以下に書きます。

Microsoftとの連携でデフォルトのIDEはWindows/MacともにVisual Studioとなりました。
Googleとの連携でUnity AdsでGoogle広告を利用できるようになりました。

モバイル関連では、Unity2018.3にKotlinサポートやAppBundleなど、
Android関連の機能追加が多く入っています。
iOSのサポートバージョンはiOS9.0以上となりました。

Unity 2018.3 Release Note から一部抜粋

> 
Android: Updated the version of the Android NDK used by Unity on Android to r16b.
> Android: Added AppBundle generation support.
> Android: Added notch support for Android.
> Android: Added support for requesting permissions at runtime for  apps using API level 23 and above.
> Android: Added support for using Kotlin source files as plugins.
>
> Minimum iOS Version raised to 9.0

Unity 2018.1 Release Note から一部抜粋

> Deprecated support for MonoDevelop. VisualStudio is now the recommended and supported C# editor on both macOS and Windows.
> 
> Android: SDK Platform 26 now required to build for Android.

## 開発サイクルの変更

去年からUnityのバージョンが西暦ベースになりましたが、
Unite Tokyo 2018では
「その年の最後にリリースしたバージョン(.4)をLong Term Supportとし、24ヶ月修正を行うサポートをします」
と公言されました。
今後はLong Term Supportまでバージョンを上げたほうが良さそうです。

<img width="627" alt="スクリーンショット 2018-12-30 0.08.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/19692/663735e5-aead-6df9-6074-8ba9538a4b1f.png">

【Unite Tokyo 2018】Unityの開発サイクルとバグへの取り組みについて
https://www.slideshare.net/UnityTechnologiesJapan/unite-tokyo-2018unity-96492590

# Flutter と React Native

2018年、自分の周りでは上記2つのクロスプラットフォーム
(ざっくり説明すると同じコードでAndroidとiOSのアプリを作れる仕組み)
が注目されていたように感じます。

React NativeはWebの文脈で、Flutterはアプリの文脈で作るので比較されやすいです。
Oculus Goのコンパニオンアプリ(iOS/Android)はReact Nativeで作られています。
2018年6月のReact Native blogではReact Nativeの大規模な再構築に取り組んでいることが述べられています。

State of React Native 2018
http://facebook.github.io/react-native/blog/2018/06/14/state-of-react-native-2018

一方Flutterは2月にbeta版, 12月にstableの1.0.0が公開されました。
Google広告などいくつかのGoogle公式アプリはFlutterで作成されています。

2月に発表された不人気言語ランキングでDartはトップでしたが、
今年からDart2となりFlutterで採用している言語として評価も大きく変わりそうです。
(元記事も修正されています)

Worst Programming Languages to Learn in 2018
https://www.codementor.io/blog/worst-languages-to-learn-3phycr98zk

Flutterの動向は以下別記事で追っています。良ければ合わせてどうぞ。
beta発表時の記事: [Flutterを半日くらいやって良さげだと思ったこと](https://qiita.com/keidroid/items/dd3230dba329eb9f82c5)
stable発表時の記事: [祝 Flutter1.0 - 1分でわかるFlutter Live '18](https://qiita.com/keidroid/items/3b23b28231e578600eb2)


# 盛り上がるクラウドCI

2015年?あたりからじわじわとクラウド上でビルドやテストを回す流れが出てきました。
代表的なサービスは以下です。

- Bitrise https://www.bitrise.io/
- Circle CI https://circleci.com/server/changelog/
- Travis CI https://travis-ci.org/
- AWS Cloud Build https://aws.amazon.com/jp/codebuild/
- Visual Studio App Center https://appcenter.ms
- Unity Cloud Build https://unity3d.com/jp/unity/features/cloud-build

BitriseはDeNAの技術イベントにCTOが参加するなど大きな影響を与えました。
Circle CIはCircleCI合同会社を東京に立ち上げました。

We’re coming to Tokyo!
https://blog.bitrise.io/were-coming-to-tokyo
Announcing CircleCI Japan!
https://circleci.com/blog/announcing-circleci-japan/

また、2018年はCIに関する2つの大きな発表がありました。
3月のJenkins Xと7月に発表されたGoogle Cloud Buildです。

- Jenkins X https://jenkins.io/projects/jenkins-x/
- Google Cloud Build https://cloud.google.com/cloud-build/

Jenkins XはGit、Docker、Kubernetes前提で
Jenkinsの環境設定や運用をできるだけ自動化するように作られています。

Introducing Jenkins X: a CI/CD solution for modern cloud applications on Kubernetes 
https://jenkins.io/blog/2018/03/19/introducing-jenkins-x/

# まとめ／感想

2018年のスマホアプリ開発、自分にとってはざっくりこんな年でした(※個人の感想です)

|ジャンル|概要|
|:--|:--|
|iOS|新しいiPhoneXs, iPad ProでiPhoneXの変更を後押し。|
|Android|2017年からのKotlin,Jetpack,サポートライブラリなど再構築の流れ。|
|Firebase|現在移行推進中。テストや機械学習もサポート。|
|Unity|2017年から開発サイクルなどの再構築の時期。2018.3でモバイルサポート充実。|
|その他|CI/CD, クロスプラットフォームの隆盛が顕著に。|

年々、モバイルアプリ開発者が覚えることが増えているような気がします。。

以下の記事、1ヶ月位かけて2011年〜2019年のAndroidテストをまとめたので
こちらもなにとぞおねがいします↓
[2018年までのAndroidテスト総まとめ - 今年の変更と来年の対策](
https://qiita.com/keidroid/items/c45d888759478cde1cfc)


よいお年を！


# 参考

Apple WWDC 2018
https://developer.apple.com/videos/wwdc2018/

Google I/O 2018 - All Sessions
https://www.youtube.com/playlist?list=PLOU2XLYxmsIInFRc3M44HUTQc3b_YJ4-Y

Android Dev Summit 2018 | All Sessions
https://www.youtube.com/playlist?list=PLWz5rJ2EKKc8WFYCR9esqGGY0vOZm2l6e