第12回コベチケの会

コベリンの最近の取り組みとして、業務などで役立ちそうな知見を共有する会を開催することになりました。 そのついでに発表に使ったアジェンダもそのまま公開してしまおうという豪快な企画です。

※ アジェンダをそのままコピペして公開したものなので若干見にくい箇所もあるかもしれませんが、ご了承ください。

Xcode 13 の新機能を試す by @mironal

https://developer.apple.com/jp/xcode/whats-new/

ソースコード管理の統合

これを試したかった。

image.png (68.1 kB)

しかしXcode で GitHub 連携しようとしたら対応していない暗号化形式だった

  • 僕は GitHub の ssh key を ED2551 形式で生成している
    • この形式は GitHub が推奨している
  • Xcode からはこの形式は使えずにエラーになった

image.png (93.4 kB)

終了

Column Breakpoints

行単位じゃなくて、列単位でのブレイクポイント。見たほうがわかりやすい。

func getA() -> String {
    return "A"
}

func getB() -> String {
    return "B"
}

// これが実行されるとき
func exec() {
    _ = getA() + getB()
    print(getA())
}

従来のブレイクポイント

image.png (23.7 kB)

Column Breakpoint

image.png (97.4 kB)

設定するとこうなる

image.png (20.2 kB)

Closure だとうまく動かない

設定しても実行すると無効になる(解決できないってエラーになる).

$0 でも名前をつけてもそうなる.

image.png (20.0 kB)

大人しくこうやれば止められる.

image.png (25.8 kB)

なんかよくわからん...

Vim mode

最高

image.png (30.3 kB)

Cloud Build

試したい.

まとめ

全然試せない

Xcode13とiOS15で起きるクラッシュ @takkumattsu

現象としてはXcode13にしてiOS15で実行すると一部のlayout周りでクラッシュすることがあった。

スクリーンショット 2021-11-09 19.02.42.png (14.7 kB)

内容的には UITableViewCell を使っているところで Must translate autoresizing mask into constraints to have _setHostsLayoutEngine:YES Xcode という実行時エラーが出てクラッシュしたというもの。

修正方法

stackoverflow.com

stackoverflowにあるように LayoutInferred(Constraints) からAutoresizing Mask に変更すると治る

before after
before2.png (85.5 kB) after2.png (58.5 kB)

エラーのヒントが少なくstackoverflowがなかったらかなりハマってた気がする。

M5StickC Plusでビープのボリューム調整をする id:numanuma08

M5StickC Plusは本体にスピーカーを内蔵しているので、ビープ音を鳴らせられる。APIも用意されている。

https://github.com/m5stack/M5StickC-Plus/blob/22bd22a1dc1524ee170c70f2f09beb317a78b113/src/utility/Speaker.h#L30

しかし実際にはボリュームをセットしてもビープ音の音量は変化しない。

UIFlowにも音量変更用のAPIが用意されているし、実際に音量も変化する。

image.png (14.5 kB)

from m5stack import *
from m5ui import *
from uiflow import *

setScreenColor(0x111111)
speaker.setVolume(1)
speaker.tone(1800, 200)

実際に音を鳴らす部分の実装で、セットしたボリュームが利用されていないことが分かった。

https://github.com/m5stack/M5StickC-Plus/blob/master/src/utility/Speaker.cpp#L21-L24

void SPEAKER::tone(uint16_t frequency) {
  if(!_begun) begin();
  ledcWriteTone(TONE_PIN_CHANNEL, frequency);
}

ちなみに、M5Stackのコードではセットしたボリュームが利用されている。 https://github.com/m5stack/M5Stack/blob/511455fd1b0464f33b18455922e44a06e90cc60d/src/utility/Speaker.cpp#L21-L25

void SPEAKER::tone(uint16_t frequency) {
  if(!_begun) begin();
  ledcWriteTone(TONE_PIN_CHANNEL, frequency);
  ledcWrite(TONE_PIN_CHANNEL, 0x400 >> _volume);
}

解決策

M5Stackと同じコードでビープ音を実装すればいい。

#define TONE_PIN_CHANNEL 0 // config.hで定義されている
int frequency = 1800;
ledcWriteTone(TONE_PIN_CHANNEL, frequency);
ledcWrite(TONE_PIN_CHANNEL, 0x400 >> volume);    

音量はM5Stackは10段階だが、M5StickC Plusだとスピーカーが小さいためだいたい5段階しか無さそう。10が最小1が最大なのは同じ。

なんでM5StackC Plusのライブラリでボリュームが利用されていないのかは謎。バグ?