Zones, FitPort, Standland, Cube, Timesheet, Timelet, Coyomi
OS正式リリースの前日、9月18日にリリース予定です。お楽しみに!
対応、いやー大変でした。
なにが大変だったかというと、なんかもう、いろいろ?
Localize Bug
いくつかあったのですが、最後まで様子見していたのが、テーブルセルのローカライズがされない問題。以下の場合に発生します。
- Storyboardの.strings ファイルを使ってローカライズしている
- TableViewCellのStyleにBasicやRight Detailなどを利用している
結局最後のGMまでFixはされなかった。
遭遇する人は多いと思ったのだが、Feedback AssistantでReportした内容をみると、
Recent Similar Reports: Less than 10
...って、10以下って少なくね!?
Page Sheet
XCode 11でビルドして最初に気づくのが、ModalのデフォルトがPage Sheetになっていること。
iOS 12時代の形式に戻すには、Full Screen系に選択しなおしすればOK。
だけど、せっかくならPage Sheet使ってみたいなー と気軽に入れ始めたら、あれこれ引っ掛った。
- Modalの画面からさらにModalを出していた場合の対処
- 編集画面の場合は、変更有無をチェックして Swipe to Dismiss できない処理を追加
- 元画面が見えている扱いなので、viewWillAppear 系の呼ばれ形が変わる。たとえば、viewWillAppearで変更内容を一括して再更新している画面(手抜き処理)が元画面の場合、小画面で変更した内容が反映されない など
- 元画面がSceneKitの場合は、Renderingでの処理を止めてからNodeを操作するなどの考慮が必要
Page Sheetをデフォにするのは思い切ったなー と思うが、おかげで、Swipe to Dismiss する操作がみんな慣れているものになるのも早いと思う。
「Closeボタンを上に置くと操作しにくいから、下に置くか?」という迷いももう解決っす。
あ、でも、Closeボタンはちゃんとあったほうが良いです。Voice Over/Voice Control のために。
Page Sheetと同じ動きだけど、もっと高さが小さいバージョンのものが欲しくなったので作成したりした。こういうやつ。
標準でできるといいのになぁ。
Dark Mode
前回のブログで対応方法を書いた。
実際に移行するときの手順は、以下のような感じになると思う。
できるだけSystem Colorsを使っていきたい所だけど、限られた中から選ぶの結構迷います。
そしてアプリ独自の色もLight/Darkで色を調整したくなってくるという...。
UILabelなどUIKitのコンポーネントに設定したDynamic Colorは、Light/Darkのモード切替時に自動的に反映してくれるけど、CGLayerなどで利用したCGColorは自前で更新する必要があります。
StoryboardのGlobal Tint Colorに、独自に作成したCustom Color Setを指定した場合、その色が他要素に使われていないとXCode再起動などで色設定が消えてしまうバグ?があります。
前からある現象だけど、StoryboardでCustom Color Setを設定している箇所にコードから色を設定しても反映されない(viewDidLoad以降にStoryboardの設定で上書きされてしまう?)ことがあります。
実際に移行するときの手順は、以下のような感じになると思う。
- Storyboard、コードで描いている色を整理
- System Colors, Dynamic System Colors に置き換え可能なものを検討する
- 整理したものをAsset の Color Setに定義
- 利用画像もLight/Dark用を用意 or TintColorで切替にする
- Storyboard、コードの色設定をColor Setのものに変更する
- cgColor を使っている所は、traitCollectionDidChange や tintColorDidChange などで変更に対応する
できるだけSystem Colorsを使っていきたい所だけど、限られた中から選ぶの結構迷います。
そしてアプリ独自の色もLight/Darkで色を調整したくなってくるという...。
UILabelなどUIKitのコンポーネントに設定したDynamic Colorは、Light/Darkのモード切替時に自動的に反映してくれるけど、CGLayerなどで利用したCGColorは自前で更新する必要があります。
StoryboardのGlobal Tint Colorに、独自に作成したCustom Color Setを指定した場合、その色が他要素に使われていないとXCode再起動などで色設定が消えてしまうバグ?があります。
前からある現象だけど、StoryboardでCustom Color Setを設定している箇所にコードから色を設定しても反映されない(viewDidLoad以降にStoryboardの設定で上書きされてしまう?)ことがあります。
Voice Control, Voice Over
Voice Control がiOS 13で追加になります!
Voice Overよりも、Controlの方が対応が簡単と思うし、使いたい人も多いと思うので、Accessibilityの第一段階として取り組むのはいいと思った。
Voice Overの場合は、読ませる順番、読ませる内容、スクロールの移動、ローター使った見出し移動 など注意すべき箇所は多いのですが、Voice Control の場合は、操作できるところを明確にするだけでも助かるはず。("Show Numbers" で番号を表示して使う)
さらに、名前も整理しておくと、 "Tap [名前]" のように直接操作できるようになる。(何回も操作が必要なStepperなどでは名前がないと操作がツライ。)
Accessibility系をやりながら思ったこととしては、
まとめて読ませる括りのものは1つのViewにいれて、専用のクラスを設定するようにしておくと、やりやすいです。
accessibility***系メソッド をoverrideして書けるので。
Voice Overよりも、Controlの方が対応が簡単と思うし、使いたい人も多いと思うので、Accessibilityの第一段階として取り組むのはいいと思った。
Voice Overの場合は、読ませる順番、読ませる内容、スクロールの移動、ローター使った見出し移動 など注意すべき箇所は多いのですが、Voice Control の場合は、操作できるところを明確にするだけでも助かるはず。("Show Numbers" で番号を表示して使う)
さらに、名前も整理しておくと、 "Tap [名前]" のように直接操作できるようになる。(何回も操作が必要なStepperなどでは名前がないと操作がツライ。)
Accessibility系をやりながら思ったこととしては、
まとめて読ませる括りのものは1つのViewにいれて、専用のクラスを設定するようにしておくと、やりやすいです。
accessibility***系メソッド をoverrideして書けるので。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//MARK:- Accessibility | |
override var accessibilityLabel: String? { | |
get { | |
return activityTypeLabel.accessibilityLabel | |
} | |
set { } | |
} | |
override var accessibilityValue: String? { | |
get { | |
var params:[String] = [] | |
if !locationLabel.isHidden, let value = locationLabel.accessibilityLabel { params.append(value) } | |
if let value = dateLabel?.accessibilityLabel { params.append(value) } | |
if let value = timeLabel?.accessibilityLabel { params.append(value) } | |
if let value = sourceLabel?.accessibilityLabel { params.append(value) } | |
return params.joined(separator: ", ") | |
} | |
set { } | |
} |
他にも色々学んだことは多いのだけど、書くとめっちゃ長くなりそうなのでまた機会があれば。