はじめに
ライブアクティビティ(Live Activity)にいくつかバグなのかわからないができないことが三つあった。調べてみると英語のものしか出てこなかったので、それらもまとめつつ、打開策も書いてみた。
できなかったことたち
- timerの謎の余白
- Imageがボケる
- ライトモードダークモード判定
ちょっと宣伝
今回書いてる内容は↑を開発しているときに出てきたことである。
概要 & 打開策 or 解決策
1. timerの謎の余白
概要
左上のスクショのようにdynamic islandを作りたかった。テキストのtimerのところにText(OOOO, style: .timer)を使ってカウントアップするものにしたかった。いざ実装してみると、timerの右側に余白ができてしまい、レイアウトの調整ができなかった。
Liveactivityでは↓これを中心に持ってくるようにしたが、できなかった。spacer()とかalignmentが効かなかった。
Text(context.attributes.startTime, style: .timer)
Text view with .timer style expands too much in Live Activity,Apple Developer Forum
にも同じような問題が挙げっていた。おそらくLiveActivity側の問題なのかなあ、、
打開策
あえてtrailingに持っていっちゃう。spacer()とかalignmentとかを使ってもできず、multilineTextAlignmentを使う必要があった。
Text(context.attributes.startTime, style: .timer)
.multilineTextAlignment(.trailing) //これを追加するとtrailingに行く
まあ右に不自然な余白があるのに比べたら、いい感じにはなってるんじゃないかなと
参考
widgetでも同じような問題があるらしい。
https://forums.developer.apple.com/forums/thread/723316
https://forums.developer.apple.com/forums/thread/735125
https://stackoverflow.com/questions/66210592/widgetkit-timer-text-style-expands-it-to-fill-the-width-instead-of-taking-spa
何かしら解決策あれば教えていただきたい。
2. Imageがボケる
概要
- Dynamic Island
左で「シュッキン」のロゴを入れてるんだが、モザイクがかかってるような感じになった。
- Live Activity
右のように「シュッキン」のロゴを入れてるんだが、モザイクがかかってるような感じになった。
解決策
原因は画像がデカすぎたからだと思ったが、調べてもあんまりおなじことが起きてる記事を見つけることはできなかった。公式ドキュメントDisplaying live data with Live Activitieで↓のように書かれてた。
"""
The system requires image assets for a Live Activity to use a resolution that’s smaller or equal to the size of the presentation for a device. If you use an image asset that’s larger than the size of the Live Activity presentation, the system might fail to start the Live Activity. For example, an image you use for the minimal presentation of your Live Activity shouldn’t exceed 45x36.67 points. For size guidance of Live Activity presentations, refer to Human Interface Guidelines > Live Activities.
Each Live Activity runs in its own sandbox, and — unlike a widget — it can’t access the network or receive location updates. To update the dynamic data of an active Live Activity, use ActivityKit in your app or allow your Live Activities to receive ActivityKit push notifications as described in Starting and updating Live Activities with ActivityKit push notifications.
"""
要は画像を小さくしろということ
小さくしたらすぐに解決した
3. ライトモードダークモード判定
概要
ライトモードダークモードで色を変えようとしたが、できなかった。
colorScheme == .dark ? Color.red : Color.blue
これが効かず、Color.redで常に表示される。
developer forumでは同じような問題が挙げられていた。
https://forums.developer.apple.com/forums/thread/720670
https://forums.developer.apple.com/forums/thread/717669
おそらくできないんだろうと理解した。そのうちできるようになるのか、、
打開策
ライトモードでもダークモードでも馴染むカラーにする。
LiveActivityは強調したいことだと思うからいっそのこと強気の色使いをする。
くらいかなと思い、シュッキンでは強気の色使いをすることにした。
おわりに
まだ出たばっかだからか対応してないことも多いのか、調べるのが下手だったのか、
LiveActivityとかマイナー?な機能になると日本語での記事は全然なかった。