第9回コベチケの会

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

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

m1シミュレーターで起きている問題 @takkumattsu

新しくM1 Mac を購入して快適な開発をしているのですが一部うまく動かない部分があるので共有しておきます。

ImagePickerがうまく動かない

https://developer.apple.com/forums/thread/676243

今のところ解決策は示されていないです、実機でやればちゃんと動作します

ペーストがうまくできない

https://developer.apple.com/forums/thread/682395

こちらも今のところ解決策は示されていないです、同じく実機でやればうまく動作します

ひとまず実機で試す方法

本来はApple Developer登録をして実機の登録をして動かすけどひとまず動かすだけであれば、個人アカウントに変更してbundle id をかぶらないものに変更すると実機で動かすことができます。

例として https://github.com/MessageKit/MessageKit のexample を実機で動かすときは以下のようにします。

before after
image.png (151.5 kB) image.png (135.1 kB)
  • Automatically manage signingをオンにする
  • TeamをPersonal Teamにする
  • Bundle Identifier を独自のものにする

こうすることでProvisioning Profileが作成されて実機で試すことができます。

感想

エラーログを見るにファイル読み込み関連にバグがあるっぽい?(クリップボードもファイルから読み込んでエラーになってたっぽいログだった)

2021-09-27 17:06:13.851150+0900 [46701:5365988] [claims] Upload preparation for claim 36D06C03-244C-4BB7-A1B6-5E28ED00A779 completed with error: Error Domain=NSCocoaErrorDomain Code=256 "The file "a1f477955a4802084a69112ee986ef75c0231332" couldn't be opened." UserInfo={NSURL=file:///Users/takkumattsu/Library/Developer/CoreSimulator/Devices/59B8BC24-7667-4A3F-9668-68F6A6334FFB/data/Library/Caches/com.apple.Pasteboard/eb77e5f8f043896faf63b5041f0fbd121db984dd/a1f477955a4802084a69112ee986ef75c0231332, NSFilePath=/Users/takkumattsu/Library/Developer/CoreSimulator/Devices/59B8BC24-7667-4A3F-9668-68F6A6334FFB/data/Library/Caches/com.apple.Pasteboard/eb77e5f8f043896faf63b5041f0fbd121db984dd/a1f477955a4802084a69112ee986ef75c0231332, NSUnderlyingError=0x600002750cc0 {Error Domain=NSOSStatusErrorDomain Code=-10817 "(null)"}}

M1 Mac での開発を一回経験してしまうともうintelの遅さには戻れないですね、ただ未だに問題もあるので早くこの辺が解決してくれることを祈るばかりです

image.png (85.3 kB)

OSS のライブラリとかを素早く読み解く方法 @mironal

  • 色々ググった果に結局公式ドキュメントに書いてあった...
  • 君それドキュメント読んでないでしょ?

などなどの経験から。

当たり前だが、RxSwift や MessageKit などそれなりにでかい規模のライブラリはなれるまではどのように使えばよいかわからないことが多い。

なので○○がしたいけどどうしたらいいのか? という場面でどのように調べるかについて僕なりの解説。

注意してほしいのは今回は使い方がわからない場合に対してフォーカスしている。なんか思ってる挙動と違うとかバグっぽい挙動で調査が必要な場合はまたちょっとアプローチが違う。

まず問題にぶち当たったら、いきなりググって stack overflow や qiita を探すのは辞めよう。

情報源は優先度の高いものから以下のような順序になる。

  1. 公式ドキュメント
  2. 公式のサンプルコード・テストコード
  3. 公式の Issue, Pull Request
  4. Stack Overflow
  5. ネット上にある有象無象
    • インターネット上の情報は多すぎるからいきなりここに手を出すと目当ての情報にたどり着くのに時間がかかるから注意

まず最初に見るべきは公式ドキュメント・サンプルコードである。 ググる必要なし。

日本語で書いてあるからと言っていきなり Qiita やそのへんの適当な解説記事は読まないほうがいい。なぜなら情報が古いこともあるし、普通に間違った方法を説明してることもある。最初のうちは何がいい方法で何が間違った方法なのかも分からないから、そういう判断がつかないうちは公式の情報のみを正としよう。

あと英語だからといって臆することはない。基本的にコードも交えて説明してるからコード読めればなんとかなる。コードも読めない場合はスキル不足だからそこは頑張って勉強しよう。それがプログラマの仕事だ。

多くのユースケースに対しては普通に公式ドキュメント・サンプルコードに書いてある。まずそれを見よう。

僕はよく Github の検索機能を使って特定のメソッドやプロパティを検索してどういう風に使うことを意図しているものなのかを調べている。

そのライブラリにテストコードがある場合はそれも役に立つ。テストコードみると「そういう状態で使われることを考慮してるのね」みたいなのが読み取れる。

探し方のコツ

僕なりのコツとして、ライブラリ側のコードを読むのではなくてサンプルコード側のコードから読むのがいいと思う。自分が今欲しているのに近い使い方のサンプルを見つけてそれを追いかける感じ。

でもそんなにサンプルが充実していないこともあると思うので、そこは頑張ろう。

頑張りが必要なところ

とはいえ、コードリーディングが遅い人はそれでも時間がかかると思う。なので頑張ってトレーニングしよう。それが仕事だ。

探すときの具体例。

ローカルに clone

もっと色々しっかり見たい場合はローカルに clone してエディタとかで見てみるといいと思う。 僕はある程度の規模の OSS なら clone して動作を追いかけたりしてる。

ちょっと調べるぐらいなら GitHub の検索でもいいけど、全然わかってない最初のうちはローカルに持ってきててサンプルコードを実際に動かしながら使い方を追いかけるのが面倒くさそうだけど一番早い方法だと思う。

メソッド名やプロパティ名から探す場合

こっちで探すと issue とかも同時に検索されて効率が良い。

image.png (50.4 kB)

ファイル名から探す場合

こっちは目的のファイルがあって見たい場合。

image.png (94.7 kB)

Android WebViewデバッグ方法 @numa08

小ネタ

https://code.visualstudio.com/blogs/2021/06/10/remote-repositories

そういえばAndroidのWebViewってChromeでデバッグできるよ。

WebViewの場合

Remote debugging WebViews - Chrome Developers

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    WebView.setWebContentsDebuggingEnabled(true);
}

↑のコードを書いてadbに接続したPCからchrome://inspectを開くといつものChrome開発コンソールを開いてWebページやリクエストなどのデバッグができる。

image.png (429.0 kB)

CustomTabsの場合

adbで接続していれば、chrome://inspectからデバッグできる。