こんにちは。 Sansan 株式会社 技術本部 Mobile Application グループのアプリ横断チームにて iOS アプリケーションエンジニアをしている多鹿です。 今年もやってきましたね。新しい iOS SDK のリリース。 本記事では、 iOS 16 SDK への対応について、必要になりそうなことを調査したのでまとめていきます。
目次
結論
Sansan
および Eight
iOS アプリケーションにおいては、特別な対応をせずとも 大きな問題はなく iOS 16 SDK (Xcode 14) でアプリケーションを動作させることができました 🎉
(後述しますが、実際にまだプロダクトコードに反映させてはいません。また、網羅的な調査ではないです。)
背景
Sansan 株式会社では、主に Sansan
および Eight
というプロダクトにおいてモバイルアプリケーションの継続的開発を行なっています。
私はアプリ横断チームに所属し、上記のようなプロダクトの開発に直接的に関わるのではなく、主に iOS アプリケーション開発全般の技術リスクに向き合ったり、新技術の導入に向けての調査を行なったりしています。
※ アプリ横断チームについては下記をご参照ください。
Sansan
および Eight
の各 iOS チームは、当然それぞれに各プロダクトの開発業務があります。
そのため、例年の新 iOS SDK 対応については、プロダクトの機能開発との優先度の兼ね合いで、新 iOS SDK のリリースからある程度の時間が経ってからの対応となっていました。
※ 昨年の対応については弊社山名の記事をご参照ください。
今年はアプリ横断チームができて初めての新 iOS SDK リリースということもあり、アプリ横断チームにて事前に対応すべきことがないかを調査することとしました。
前提
上記のような背景がある中で、今回の調査内容には以下のような前提があります。
- 調査対象
Sansan
およびEight
の iOS アプリケーション
- 調査観点
- 新 iOS SDK でビルド可能か
- ビルドエラーになる場合は何が原因でどういう対応が必要か
- 新 iOS SDK でアプリを起動した時に見た目上に目立った表示崩れが発生しないかどうか
- 目立った表示崩れ → iOS 15 SDK 対応の時にナビゲーションバーが透過するようになったなど、明らかにおかしいもの
- 新 iOS SDK でビルド可能か
- 調査方法
- 新 iOS SDK でビルドを実施
- 主要画面をいくつか見てみて、見た目上の変化がないか確認する
- ログイン後の各タブとそこから1タップで遷移できる画面くらい
- 新 iOS SDK でビルドしたアプリに関してサポートしている OS メジャーバージョンごとの見た目の差分がないか確認する(特定の OS でのみ発生する事象がないか確認する)
- iOS 16 SDK のリリースノートで関連しそうなものがないかを確認
- 調査時点でやらないこと
- 実際にプロダクトコードに修正を反映する
- 修正自体はプロダクトチームにお願いする
- アプリ横断チームでは解決方法の調査や情報整理まで
- 調査の過程で一時的に修正を入れても、プロダクトコードには反映させない
- 各プロダクトごとに画面を網羅しての動作検証
- これはプロダクトチームにお願いする
- 実際にプロダクトコードに修正を反映する
上記を見ていただいて分かる通り、今回はあくまで事前調査までとしています。 各プロダクトを網羅的に調査したり、プロダクトコードに必要な対応を反映して結合テストを実施したりというところは行っていません。 (今回の調査範囲外の網羅的な調査や結合テストは各プロダクトのチームにて実施予定)
調査内容
さて、ようやくですが調査内容の話に入りましょう。
調査環境
- iOS 16 SDK (Xcode 14)
- Release Candidate
- シミュレータ OS ver
- 上記 Xcode 14 RC 版に同梱のもの
- 実機OS ver
- iOS 16 Beta
調査1: ビルド可能かどうか/ビルド可能にするために必要なこと
ビルドできるようにするまでに Sansan
および Eight
両アプリで共通して必要だったことは下記の通りです。
- Carthage で管理しているライブラリのビルドし直し
Sansan
およびEight
ともに Carthage を使用しているので、新しいビルドツールを使って Carthage で管理しているライブラリをビルドし直す必要があります。この作業は毎度のことですね。
- 各種 3rd party 製ライブラリのアップデート
- 利用している 3rd party 製のライブラリで Xcode 14 に対応していないバージョンのものがあれば、対応しているバージョンまでアップデートします。
- 具体的に
Sansan
およびEight
では以下の 2つのライブラリのアップデートが必要でした。- FloatingPanel: v2.5.3 以上にアップデート
- realm-cocoa: 調査時点での latest (Sansan: v10.28.7, Eight: v10.29.0) にアップデート
- こちらは、realm-cocoa のリリースノート見ると v10.28.1 あたりから Xcode 14 Beta への互換性の対応が始まっているようで、
Sansan
およびEight
ともにそれらのバージョンよりも低いものが使われていたためアップデートの必要がありました。
- こちらは、realm-cocoa のリリースノート見ると v10.28.1 あたりから Xcode 14 Beta への互換性の対応が始まっているようで、
今回は上記のみでビルドを通すことができ、 iOS SDK 16 起因でのビルドエラーなどは Sansan
および Eight
アプリでは発生しませんでした。
調査2: 見た目上の大きな変化がないか
こちらは結論で述べている通り、誰が見ても明らかにおかしいような見た目上の変化はありませんでした。
Sansan
および Eight
ともにログイン前の画面から、ログイン後の主要な画面を約 30~40 画面ほど見てみましたが、目立った表示崩れや色の変化などは見られませんでした。
iOS 15 SDK への対応の際にナビゲーションバーの見た目が大幅に変わったことがあり、そういったものが出てくるのではないかと思っていたのである意味拍子抜けでした(もちろんポジティブな気持ちです!)。
そんなわけで、見た目上の変化についての調査は「大きな問題は 発見されず」という結果になりました。
調査3: iOS メジャーバージョンごとに固有の問題がないか
最後に、iOS 16 SDK でビルドしたアプリについて iOS メジャーバージョンごとに固有の問題がないかを軽く確認しました。
対象は Sansan
および Eight
アプリでそれぞれ iOS 13-16 を確認しました。(マイナーバージョンまでは見ていないです)
こちらも結論としては、軽く触る程度で分かるような「大きな問題は 発見されず」という結果になりました。
その他 Xcode 14 / iOS 16 での変化について
最後に、必要な対応ではないですが、調査の中でいくつか気になった Xcode 14 や iOS 16 のアップデートにも触れておきます。
Xcode 14 について
AppIcon の指定を 1種類にすることができるようになった
これまで、アプリのアイコンは用途に応じて複数のサイズを用意する必要がありました。
Xcode 14 からは、 AppIcon を一つ用意すれば他のサイズは自動生成してくれるようにアップデートされました。(もちろん、従来通り複数サイズを指定することもできます。)
ただし、これはあくまで選択肢が増えたというだけで、アイコンデザインによっては、サイズごとにより見やすく調整されたものを使うのが良いという考え方は変わらなそうです。もしシンプルなアイコンデザインで、小さいサイズであっても調整なしで綺麗に表示されるようであれば新しく追加された Single Size
を選択すると良いかもしれません。
詳しくは WWDC 2022 の What's new in Xcode
のセッションを参照ください。
ビルドパフォーマンスの改善
Xcode 14 ではビルドタスクの並列処理が調整され、より効率的にビルドが実行されるようになりました。
実際に手元で Sansan の iOS アプリケーションをフルビルドしたところ、Xcode 13.2.1 と比較すると約10%短い時間でビルドが完了していました。
これは Xcode 14 を使うのが楽しみですね!
こちらも WWDC 2022 の What's new in Xcode
のセッションを参照ください。
iOS 16 について
ペーストボードへのアクセスを許容するかどうかをユーザが選択できるようになった
iOS 14 にて、アプリケーションが iOS のペーストボードにアクセスすると、トーストのような表示が出るようになりました。導入しているライブラリが内部的にアクセスしていることで意図せず通知されるようになり、慌てた開発者も多かったのではないかと思います。
ユーザがペーストボードにコピーしたセキュアな情報をアプリ側が取得できる可能性があるため、アプリがユーザの意図しない形でペーストボードへアクセスしていることを通知すること自体は、セキュリティ面でも良いアップデートではあったと思います。
ただ iOS 14, 15 では通知されてもユーザが取れる選択肢は「アプリを使わない」くらいしかなかったのではないでしょうか。
それが、今回のアップデートによってアプリがペーストボードへアクセスすることを許可するかどうかをユーザが選択できるようになったので、ユーザとしては「アプリ自体は使うが、アプリがペーストボードにアクセスするのは禁止する」という選択ができるようになりました。
さて、なぜこの機能を本記事でピックアップしたかというと、「許可ダイアログ」が出るということで開発者の方ならピンとくるかと思いますが、 Info.plist への記述が必要な類かなと思ったためです。
ただ、調べていると、こちらはカメラや写真へのアクセス許可のように Info.plist への記述は不要なようで、特段対応は不要そうでした。
ただし、これまでもそうですが、ユーザの意図しないペーストボードへのアクセスにはより注意を払ってアプリケーションを開発していった方が良さそうです。
最後に
今回はアプリ横断チームができて初めての新しい iOS SDK に関する対応調査を Sansan
および Eight
アプリにおいて横断的に行いました。
前述の通り、各プロダクトでの細かい機能に関する網羅的な調査や結合テストは別途行う必要がありますが、先んじて大きな問題の把握/対応方法の調査を行っておくことで、いざプロダクトチームが対応しようとなった時にスムーズに対応できるのではないかと期待しています。
幸いにも大きなハマりポイントはなかったので、読者の皆様にとっては有益な情報が少なかったかもしれませんが、少しでも参考になれば幸いです。