Unityでスマホアプリ(特にプラグイン)を開発している人のための2017年対応まとめ

# はじめに

スマホアプリ／スマホゲーム開発まわりで自分が確認や対応をした2017年のニュースを、
前年と同じく時系列でざっくりまとめました。

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

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

# Unity

## 2016年末 Unity5の次はUnity2017になることを発表

> Unity5の最後のバージョンはUnity5.6になり、次はUnity2017となります。
> https://blogs.unity3d.com/jp/2016/12/13/unity-5-6-wraps-unity-5-cycle-whats-next-in-2017/

Unity5後期から一部始まっていましたがサブスクリプションがPersonal、Plus、Pro、Enterpriseに変更されました。
Unity5向けライセンスであれば次回更新時に切り替えが発生するので
ライセンス管理している方はご注意を。

サブスクリプション方式の変更
https://unity3d.com/jp/unity/faq/4520#section-4652

## 3月 Unity5.6リリース

> Unity 5.6のリリースと、Unity 5の完了
> https://blogs.unity3d.com/jp/2017/03/31/5-6-is-now-available-and-completes-
the-unity-5-cycle/

機能としてはFacebook Gameroom, Google Daydreamのサポートや新ビデオプレイヤーなど。
モバイル関連では以下が変更されています。

- Vulkanサポート
- Androidシステム要件を4.1(Jellybeans)に引き上げ

## 7月 Unity2017.1リリース

> Unity2017リリース開始
> https://blogs.unity3d.com/jp/2017/07/11/introducing-unity-2017/

機能としてはTimelineやらCinemachineやら追加されていますが、
Unity5からの移行はスムーズに済みました。

Scriptingとして.NET4.6がExperimental supportになりました。
プラグイン開発などで、
異なるUnityバージョンをサポートしつつ.NET4.6のコードに一部移行したい場合は、
Unity5.6から追加されたdefineのNET_4_6を使用します。

Platform dependent compilation
https://docs.unity3d.com/Manual/PlatformDependentCompilation.html


```csharp
#if UNITY_2017_1_OR_NEWER
    //unity2017で有効の処理
#endif
#if NET_4_6
    //.Net4.6で有効の処理
#endif

```

## 10月 Unity2017.2リリース

> Unity2017.2がリリースされました！
> https://blogs.unity3d.com/jp/2017/10/12/unity-2017-2-is-now-available/

AR機能や2D機能などいろいろ機能が強化されましたが
対応で困ることはありませんでした。

2D機能に関しては[別記事](https://qiita.com/keidroid/items/096491b7692ea7d1a4f1)に概要と感想を書きました。

## 12月 Unity2017.3リリース

> Unity2017.3 is here
> https://blogs.unity3d.com/jp/2017/12/19/unity-2017-3-is-here/

出たばっかりでなにも書けませんが、
リリースノートをみる限り対応で困ることはないはず..。

バージョン更新に関しては2017年から始まった仕組みなので、
「来年2017.4はでるのか?」「2018.1はメジャーアップデートなのか?」
などバージョンに関しては未だ謎が多いです。

2018.1の予定は以下ページから確認できます。
https://unity3d.com/jp/unity/roadmap

Unityは以上！

# iOS

## 2016年末 ATS対応義務化を延期
> アップル、iOSアプリのHTTPS通信義務化を延期。
> http://japanese.engadget.com/2016/12/22/ios-https/

> Supporting App Transport Security (公式記事は削除済み?見れない)
> https://developer.apple.com/news/?id=12212016b

当初は2016年までにATS対応必須とされていましたが
2016年末にATS対応義務化の延期が発表されました。
2017年12月26日現在続報はまだないようです。

## 5月 Sketch形式のデザインテンプレート公開

> Design Resources for iOS Apps Now Available
> https://developer.apple.com/design/resources/#ios-apps

2016年から公式でiOSのデザインテンプレが公開されています。
今年からpsd形式のみでなくsketch形式も提供されるようになりました。
モック作成や企画書作成はこちらをつかうのが良さげ。

## 5月 AppStoreでのレビュー返信機能追加

> 
Ratings, Reviews, and Responses on the App Store
> https://developer.apple.com/news/?id=03272017c

iOS10.3でレビューに関するAPIが追加されたのと
AppStoreでねんがんのレビュー返信ができるようになりました。

## 6月 iOS11での32bitアプリサポート終了を発表

> 64-bit Apps on iOS 11
> https://developer.apple.com/news/?id=06282017b

32bitアプリはiOS11でサポート外になりました。
64bitアプリ対応機種はiPhone5SからなのでiPhone5以前の端末は実質サポート外になり、
iPhone4Sなどの640x480(3:2)端末のサポート外を同時に意味しています。

## 9月 モバイル通信のダウンロード制限緩和

> Higher Limit for Over-the-Air Downloads
> https://developer.apple.com/news/?id=09192017b

iOS11からモバイル通信からのダウンロード制限が100MBから150MBに緩和されました。
やった！

## 11月 iPhone X発売

11月3日発売。画面の解像度と画面比率が変わるだけではなく、

- ノッチ/Notch
- セーフエリア/Safe Area

という新しい概念まで生み出しました。
またホームボタンが画面下スワイプになったので競合を避ける必要があります。
Unityでの対応方法は[別記事](https://qiita.com/keidroid/items/6729cec6b45633d09841)で書きました。

iPhone Xの資料は公式からたっぷり用意されているので
以下のどれかで情報が取得できるのではないかと思います。

> Creating apps for iPhone X.
> https://developer.apple.com/iphone/

> Update your apps for iPhone X.
> https://developer.apple.com/ios/update-apps-for-iphone-x/

> Designing Websites for iPhone X
> https://webkit.org/blog/7929/designing-websites-for-iphone-x/

Unity公式のiPhone対応状況は以下のページにあるので続報を待つ感じです。

> Unityナレッジベース（技術情報）／ 2017年の新iPhoneへの対応状況
> https://helpdesk.unity3d.co.jp/hc/ja/categories/200285600

## 12月 ガイドライン更新(ガチャに関する確率明記)

gigazineの記事がわかりやすいのでこちらのリンクを貼ります。

> Appleが「ガチャの確率開示」をルートボックス対策で義務化
> https://gigazine.net/news/20171222-apple-disclose-loot-box/

英語版App Store Review Guidelines 3.1.1の項目追加。

https://developer.apple.com/app-store/review/guidelines/

> Apps offering “loot boxes” or other mechanisms that provide randomized virtual items for purchase must disclose the odds of receiving each type of item to customers prior to purchase.

googleで翻訳。ガチャ提供をしている場合は注意。

> 「ルートボックス(=ガチャ)」または購入のためのランダム化された仮想アイテムを提供する他のメカニズムを提供するアプリケーションは、購入前に各タイプのアイテムを顧客に受け取る確率を開示しなければならない。


iOSは以上！

---


# Android

## 1月 Playゲームサービスの仕様変更

> ゲーム認証にGoogle Sign-In APIを採用
> https://developers-jp.googleblog.com/2017/01/games-authentication-adopting-google.html

Playゲームサービスで以下変更となりました。

- クライアント作成方法の変更
- iOSからのアカウント作成のサポート終了
- Google+統合の終了

Playゲームサービスを使用して放置している方は確認を。

## 4月 GoogleがWebViewでのOAuthリクエストをブロック

> ネイティブアプリのOAuthインタラクションを最新にしてユーザビリティとセキュリティを向上する
> https://developers-jp.googleblog.com/2016/09/modernizing-oauth-interactions-in-native-apps.html

上記は2016年の記事ですが、GoogleがWebViewでのOAuthリクエストを
2017年4月20日にブロック開始しました。
主に「GoogleでLogin」に使用している箇所です。
ブロック対象になると403エラーが表示されます。

上記の記事では
AndroidのWebViewはChromeCustomTabへの移行、
iOSのUIWebView/WKWebViewはSFSafariViewControllerへの移行を
推奨しています。

＃ UserAgentを書き換えれば通り抜け出来ますがセキュリティ的によろしくない。

ーー

> WebViewセキュリティの新機能
> https://developers-jp.googleblog.com/2017/07/whats-new-in-webview-security.html

一方でAndroidのWebViewはセキュリティ強化やセーフブラウジング機能追加を行っています。
WebViewを引き続き使用したい場合は上記も参考にどうぞ。


## 4月 新アスペクト比(18:9)端末の対応方法公開

> アプリをアップデートして Android の新しいハイエンド端末で大きなアスペクト比を活用する
> https://developers-jp.googleblog.com/2017/04/update-your-app-to-take-advantage-of.html

解像度問題について[別記事](https://qiita.com/keidroid/items/6729cec6b45633d09841)でまとめました。
最新端末Galaxy S8やLG G6などの縦長端末の対応方法です。

## 8月 Android Testing Support Library公開

> Android Testing Support Library 1.0 が登場！
> https://developers-jp.googleblog.com/2017/08/android-testing-support-library-10-is.html

Espresso 3.0.0やパーミッション付与のスキップ機能、ContentProvider向けテストなど。


## 8月 Android O発表

発表日は8月22日。Android 8.0/targetSdkVersion:26です。
自分が大きく変わったと思うのは通知周りですが
量が多いので機能概要ははこちらで↓

> Android Oreo
> https://developer.android.com/about/versions/oreo/index.html?hl=ja
> Android O API 最終版が登場、今こそアプリの準備を！
> https://developers-jp.googleblog.com/2017/06/android-o-apis-are-final-get-your-apps.html

動作変更に関する特筆すべきトピックスはこちらで↓

> Android Oでの端末識別子の変更について
> https://developers-jp.googleblog.com/2017/04/changes-to-device-identifiers-in.html

> Android OのHttpsURLConnectionで安全でないTLS バージョンのフォールバックを廃止
> https://developers-jp.googleblog.com/2017/05/android-o-to-drop-insecure-tls-version.html


マイナーですが野良アプリ(GooglePlay外)で提供している場合はこちらも合わせて読みたい↓

> Android Oでもっと安全にアプリを入手できるようにする
> https://developers-jp.googleblog.com/2017/09/making-it-safer-to-get-apps-on-android-o.html


## 10月 Android Studio 3.0公開

追加された機能はKotlinサポート、Java 8 言語機能、Instant App、アダプティブアイコンなどなど。
Android Studio 2.0は2016年4月だったので1年半ぶりのメジャーアップデートです。
機能が多いのでこちらで↓

> Android デベロッパー ブログ: Android Studio 3.0
> https://developers-jp.googleblog.com/2017/11/android-android-studio-30.html

Kotlinを使う理由やスタートガイドは6月頃に公開されていました↓

> AndroidによるKotlinのサポート
> https://developers-jp.googleblog.com/2017/06/android-announces-support-for-kotlin.html

Support Library 27ではKotlinを使いやすくする更新がありました↓

> Kotlin で Android アプリを作るための最新情報
> https://developers-jp.googleblog.com/2017/12/update-on-kotlin-for-android.html

## 10月 Google Play Billing Library 1.0公開

> Google Play Billing Library 1.0 をリリース
> https://developers-jp.googleblog.com/2017/10/google-play-billing-library-10.html

概念的に新しいものではなく
既存のIn-app Billing Version 3 APIを使いやすくラッピングしたライブラリです。

自身では開発中のアプリで導入していますが、コード量が減りAIDL不要になったので
Androdネイティブアプリ開発で課金を利用している場合は入れ得だと思います。

## 11月 Chromebook向けAndroidアプリ最適化方法を公開

> Chrome OS Systems Supporting Android Apps
> https://sites.google.com/a/chromium.org/dev/chromium-os/chrome-os-systems-supporting-android-apps
> Chromebook向けAndroidアプリの最適化
> https://developers-jp.googleblog.com/2017/10/optimize-your-android-apps-for.html

2017年以降のChromebookはAndroidアプリが動作することと、
Microsoft社のOfficeアプリがChromebook対応したことにより
Chromebook向けAndroidアプリ対応の需要が高くなる流れになっています。

＃日本では販売している端末が少ないですが・・

非タッチパネル端末への対応が主です。

## 11月 Architecture Components 1.0公開

> Architecture Components 1.0 安定版のお知らせ
> https://developers-jp.googleblog.com/2017/11/announcing-architecture-components-10.html

Androidアプリのアーキテクチャ指針として
公式がLifecycle／LiveData／ViewModel／Roomなどを提唱し、
ライブラリを提供しています。
今後標準になるかもしれないので頭に入れておくと良さげ。

## 12月 来年以降のセキュリティ・パフォーマンス改善について

> Improving app security and performance on Google Play for years to come
> https://android-developers.googleblog.com/2017/12/improving-app-security-and-performance.html

~~まだ日本語記事出ていませんのでざっくり翻訳した内容をのせます。~~
12月26日に[日本語記事公開](https://developers-jp.googleblog.com/2017/12/improving-app-security-and-performance.html)されました。。


> August 2018: New apps required to target API level 26 (Android 8.0) or higher.
> November 2018: Updates to existing apps required to target API level 26 or higher.
> 2019 onwards: Each year the targetSdkVersion requirement will advance. 

2018年8月以降は新規アプリでtargetSdkVersion:26要求。
2018年11月以降は既存アプリでtargetSdkVersion:26要求。

> 64-bit support requirement in 2019
> :
> Apps that do not include native code are unaffected.
> This change will come into effect in August 2019

2019年8月にネイティブコード64bitサポート要求予定とのこと。
(ネイティブコードを使用しない場合は影響なし)

とりあえず2018年夏を目処にtargetSdkVersion:26での動作確認が必須になりそうです。

Androidは以上！

# Firebase

## 1月 GoogleがFabricを買収

> Welcoming Fabric to Google
> https://firebase.googleblog.com/2017/01/FabricJoinsGoogle17.html

2017年の年始早々、発表されました。
ざっくりいうとFabricはTwitter社が2014年から運営していた開発向けプラットフォームで
Twitterを使用するためのTwitter Kitやクラッシュ分析のCrashlyticsなどの機能がありました。

Firebase自体にもCrash Reporting機能があったので、
FirebaseとFabricどちらをつかうか迷いどころでしたが
アナウンスよりCrashlyticsを優先する流れになりました。

## 3月 Unity向けドキュメントがやたら充実する

> Unityプロジェクトに Firebase を追加する
> https://firebase.google.com/docs/unity/setup?hl=ja

個人的な所感ですが、このあたりから動画がついたりして
FirebaseのUnity向けドキュメントがやたら充実していった気がします。

[去年はPlayGamesResolverから導入していました](https://qiita.com/keidroid/items/76ff2c7b38cb86b7b691#2016%E5%B9%B45%E6%9C%88-google-googleio%E3%81%A7firebase%E3%83%AA%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%A2%E3%83%AB%E3%82%92%E7%99%BA%E8%A1%A8)が
いまや公式から出ているunitypackageですぐ導入可能なので敷居が一気に下がりました。

## 10月 Cloud Firestore(beta)提供開始

> Cloud Firestore のご紹介: アプリ用の新しいドキュメント データベース
> https://developers-jp.googleblog.com/2017/10/introducing-cloud-firestore.html

Realtime Databaseの問題を改善したCloud Firestoreのbetaが公開。
リアルタイムDBは今後はこちらが推奨されるようです。

比較は以下ドキュメントで挙げています
https://firebase.google.com/docs/firestore/rtdb-vs-firestore


## 11月 Firebase Crashlytics Beta公開

> Announcing Firebase Crashlytics Beta
> https://firebase.googleblog.com/2017/11/announcing-firebase-crashlytics-beta.html

2017年12月現在、CrashlyticsのSDKは前と同じくFabricで導入する方式ですが
Console上ではCrashlyticsの結果が表示されるようになりました。

# まとめ

細かい所をあげればキリがないですが、
今年はiPhone XとAndroid O, Android Studio 3.0を抑えておけばなんとかなるはず。(個人の感想です)
追記: 特にAndroidのtargetSdkVersion:26対応..
Unity関連は今年の分の移行はスムーズだったので書くことがなかった。

よいお年を！