AndroidのNotification Channels is 通知チャンネル OR 通知チャネル

Android O(Android 8.0)から追加されたNotification Channelsですが、これの日本語訳がぶれていてどっちで会話すればいいのか困っています。

FirebaseのSwiftPM対応に伴ってGoogle Tag ManagerもSwiftPMでインストールできるようになっていた

iOS(ないしAppleプラットフォーム全般)のFirebaseといえばこれまでインストール方法はCocoaPodsが基本だったが、バージョン8.0.0からSwiftPMでもインストールできるようになっている。

さて、Firebase Analyticsと組み合わせて使えるツールとしてアプリ向けのGoogle Tag Manager(以下GTM)もあるのだが、これもSwiftPMで扱えるのか。8.0.0がリリースされた直後の2021年5月時点ではサポートされていなかったのだが、2021年8月からひっそりとサポートされるようになっていた。

ということでGTMのSwift Packageは https://github.com/googleanalytics/google-tag-manager-ios-sdk で公開されているので、これを使えば良いことがわかった。


ところでGTMのSwift Packageはバイナリとしては https://dl.google.com/firebase/ios/tagmanager/swiftpm/7.4.0/GoogleTagManager.zip というzipを参照していて、これはCocoaPods向けの https://dl.google.com/firebase/ios/tagmanager/405c0e6ab8f653b7/GoogleTagManager-7.4.0.tar.gz とは別物になっている。中身を確認してみたところ、CocoaPods向けバイナリ(xcframework)では TagManagerResources.bundle というバンドルがxcframeworkのResourcesに含まれていて、podspecでもそのバンドルがアプリに追加されるようになっている。

https://github.com/CocoaPods/Specs/blob/a26c0002e6e8fe7fcd3059ec699d1f2e05f71400/Specs/9/5/6/GoogleTagManager/7.4.0/GoogleTagManager.podspec.json#L29-L31

TagManagerResources.bundle の中身は Info.plist を除くと TAGRuntime.js.dat というファイルが1つだけだった。SwiftPM向けのxcframeworkを確認してみると、そこにはResourcesも TagManagerResources.bundleTAGRuntime.js.dat も見当たらない。これはちゃんと動くのだろうかと不安になったが、Mach-O Executables · objc.io に書かれている手段で、otool を使って中身をチェックしてみた。

$ xcrun otool -v -s __TEXT __cstring -arch arm64 GoogleTagManager.xcframework/ios-arm64_armv7/GoogleTagManager.framework/GoogleTagManager | grep TAGRuntime
0000000000001857  T@"TAGRuntime",&,N,V_runtime
GoogleTagManager.xcframework/ios-arm64_armv7/GoogleTagManager.framework/GoogleTagManager(TAGRuntime+Script.o):
GoogleTagManager.xcframework/ios-arm64_armv7/GoogleTagManager.framework/GoogleTagManager(TAGRuntime.o):

TAGRuntime+Script.o というのがいかにも怪しい(それっぽい)のでセクションの中身も見てみる。

$ xcrun otool -v -s __TEXT __cstring -arch arm64 GoogleTagManager.xcframework/ios-arm64_armv7/GoogleTagManager.framework/GoogleTagManager | grep TAGRuntime+Script -A2
GoogleTagManager.xcframework/ios-arm64_armv7/GoogleTagManager.framework/GoogleTagManager(TAGRuntime+Script.o):
Contents of (__TEXT,__cstring) section
000000000000000c  \nvar aa,ba=this,h=function(a,b){var c=a.split("."),d=ba;c[0]in d||!d.execScript||d.execScript...

ということで、いかにもJavaScriptらしきものが確認できて、この内容は TAGRuntime.js.dat と合致していた。SwiftPM向けのバイナリではスクリプトがコード中に埋め込まれていたのですね。めでたしめでたし。

チームでのスマホアプリエンジニア採用のために求人票について考えていた

こんにちは。近頃はSwiftUIでの新機能開発に勤しんでいる id:ikesyo です。

そんなこんなで自分が所属しているはてなマンガアプリチームでは最近、iOSエンジニア・Androidエンジニアを積極採用しようと動き出しています。その中でまず求人票の内容を検討していました。これまでしたことがなかったけれど求人票を考えるのは意外と面白くて、

  • 要件の洗い出しを通じて、これは現在のチームメンバーも含めたスキルマップについて考えているのだなと思ったり、
  • チームの様子を伝えようとチームのカルチャーについて考えたり、
  • このチーム・はてなで働くメリットはなんだろうと考えたり、

日々のタスクに向かい合っているだけだと忘れがちなことに目を向ける良い機会になっています。

この新たな求人票・採用ポジションはそのうちお目見えするはずですが、SwiftUI・Jetpack ComposeとGraphQLをガシガシ使った開発に取り組んでいるので、

  • 漫画が好き
  • 宣言的UI
  • GraphQL
  • マルチモジュール化

といったキーワードにビビッとくる方はTwitterのDMなどで是非ご連絡ください。まずはカジュアル面談しましょう!

GitHubのPRのコードレビューにおけるsuggestionとコミットの凝集度、完全性について

  • GitHubのPRのコードレビューではsuggestionという、PRの差分に対して変更を提案する機能がある
  • レビュイーは、レビュワーからのsuggestionを1つずつ適用(コミット)するのと、複数個まとめて適用することができる
  • レビュワーがsuggestionする時、例えば変数名のtypoの修正提案では、変数名の定義箇所だけsuggestionすることもあれば、変数の利用箇所の方も合わせてsuggestionすることもある
    • 利用箇所も合わせてsuggestionするのは、別々にコメントすることになるので数が多いと手間だし、PRのコメント数も増えて見通しが悪くなる
    • ので定義箇所だけsuggestionしておいて、利用箇所も合わせて手元で直してください、という意図の時がある
  • レビュワーとしては、この時のsuggestionはそのままGitHub上で適用されることを意図していない
    • もしレビュイーがひとまずそのsuggestionを適用して、続きの修正を手元で行ってコミットしようとする時、最初のsuggestionだけのコミットはビルドが通らなかったり実行時エラーになる不完全なコミットになってしまう
    • ので、こういう時は直接suggestionを適用せずに、関連箇所も一緒に直すようでありたい

PRのラインコメントが付いたまさにその箇所だけではなく、周辺のコード・PR内の別の差分についても意識したい・されたい、ということを考えていた最近です。

35歳になった

本日7月29日で35歳になりました。この1年は

  • Webアプリ開発チャレンジ
    • GoでGraphQL API作ったり
    • Next.jsでフロントエンド作ったり
  • SwiftUIをガッツリ使い始めた

という感じでした。

社のDeveloper Blogのアンケートシリーズに取り上げてもらったりもしました。

エンジニア定年などと思わずまだまだ頑張っていく所存です。よろしくお願いします。

ウィッシュリストはこちら


はてなで一緒にモバイルアプリ開発してくれる人も求めています!!!

WEB+DB PRESS総集編[Vol.1~120]の特別企画にSwift担当として寄稿しました #wdpress

なんと20年分のバックナンバーが収録された総集編の特別企画「進化するプログラミング言語の魅力」のSwiftの章を担当させていただきました。

■書き下ろし特別企画「進化するプログラミング言語の魅力」

言語に精通された7名のエンジニアの方々に, 7つの人気プログラミング言語(JavaScript, Java, PHP, Ruby, Go, Python, Swift)の魅力を寄稿いただきました。言語の進化を感じ,人気を確立するに至った経緯と今が見えてきます。言語を学び始めるきっかけになれば幸いです。

肝心の発売日は明後日の7月31日です!買って読んでくれ!!

f:id:ikesyo:20210729102808j:plain

SwiftOnTap: SwiftUIの用例集付きAPIドキュメント

SwiftUIを使い始めて、フレームワークが提供する既存のViewに何があって、どういう表示になるのかがまだピンとこない。そんな状況の手助けになるのがSwiftOnTapというサイトです。

swiftontap.com

各ViewやModifierなどの説明にサンプルコードとその実行結果のキャプチャーが付いていて非常にわかりやすい。

f:id:ikesyo:20210604103627p:plain
サンプルコードと実行結果のキャプチャー

このサイトのコンテンツ自体もGitHubでオープンソースとして公開されているので、プルリクエストを出して用例を追加することも可能です。面白いのは、全てのコンテンツは SwiftUI.swift という1ファイルに集約されて ///ドキュメンテーションコメントとして記載されていることですね。ファイルサイズが2MBを超えていてすごい。

f:id:ikesyo:20210604104757p:plain
2MB超のswiftファイル