プログラミング可能なロボットキットである「LEGO BOOST」の発売以降、Bluetoothによるリモートプログラミングに対応しているレゴのセットがたくさん発売されています。その数はなんと20以上!
その中にはプログラミングできることをアピールしていないセットも多くあります。プログラミング=マインドストームではありません。あなたがお持ちのセットも実はプログラミング対応しているかもしれませんよ?
本トークでは、レゴ社が公開している「LEGO Wireless Protocol」を中心に、どんな種類のレゴブロックがどんな感じでプログラミングできるかについてお話しします。あなたのレゴ作品をiPhoneやApple Watchとつなげて、思う通りに動かしましょう!
iOSアプリ開発に限らず、コードを保守しやすい状態に保つことはとても重要です。
では保守が難しい箇所を特定するにはどうすればいいでしょうか。また、リファクタリング後に何をもって保守がしやすくなったと判断すれば良いでしょうか。
その方法の一つにMaintainability Index(保守容易性指数)の計測があります。
Maintainability Indexとはその名の通り、コードがどれくらい保守しやすいかを表す指標のことであり、VS Codeでは一部の言語で計測することができます。
このトークでは以下のトピックを話します。
このトークがみなさんのコードの保守性の改善のお役に立てば幸いです。
SNSにおけるプロモーションや、Webのユーザーをアプリユーザーに転換させるような施策を実施したい場合にディープリンクを利用したいケースはよくあるでしょう。
ディープリンクを利用してユーザーをアプリに連れてくる際「ユーザーが文脈を理解できている状態」というのは重要で、ユーザー状態に応じたフローを組むだけでは施策の効果を十分に発揮できない可能性があります。
このセッションでは、滑らかな体験でアプリにユーザーを連れてくるために「ディープリンク」を効果的に活用する方法やその仕組みについて紹介します。
話すトピック
・概念としてのディープリンクおよび、ディープリンクを実現するための機能紹介
・アプリのインストール状況や初回設定状況などのユーザー状態に応じた適切な遷移方法
・ユーザーに文脈を理解した状態のままアプリに来てもらうために活用できる仕組み
・コンバージョンの計測方法
ここでの「行動ログ」とは、特定の画面の表示、ボタンのタップなど、ユーザー操作を起点に送信するものを指します。集めた行動ログは、サービス開発上の分析や実態把握に役立ちます。
アプリ開発者は、そのログを仕込む役割を担いますが、しばしば課題にぶつかります。
本セッションでは、行動ログにまつわる悩みの種のうち、ログ実装の「仕込み」にフォーカスして、ミスを防ぐ仕組みや工夫の事例をご紹介します。
トピック
など
MDMの機能の一つである「Managed App Configuration」を使うと、MDMで配布したアプリごとに個別の設定ができるようになります。会社や教育現場において、全端末に設定を一括で行ったり、アプリの動作を強制変更させたりすることができる、大変便利な機能です。
Managed App Configurationは、アプリ開発者から見るとその仕組みや実装はとても簡単なのですが、MDMを使える環境がないと動作の確認やデバッグが難しいという難点があります。そのため、個人の開発者が対応をするのはなかなか難しいかもしれません。
本トークでは、教育現場でも使われているScratch専用ブラウザアプリ「Scrub」をManaged App Configurationに対応させた経験から、その実装方法や動作確認のやり方、デバッグ、対応のコツなどをお話しします。
iOSアプリの配布や、リリース作業のように、
「手作業で繰り返し、自動化が可能で、長期的な価値がない、サービスの成長に比例して増加する」作業は、SREの原則の中でToil(トイル)と呼ばれています。
Toilは、機能開発に集中していたりすると、中々手が回らなかったり、作業への慣れや習慣化によって改善が行われにくくなります。
Toilに対して、よく考えずに自動化を行ってしまうと、システムが複雑化していくことで、その自動化を行った人しか理解できずに属人化が起こります。
そのため、日頃から作業が持つ本質的な価値にフォーカスして整理し、シンプルかつ誰でもメンテナンスできるようにしておくことが大切です。
このトークでは、チームの開発者体験を向上させるために、実際に観測したToilを例に、どのようにカイゼンの試行錯誤を行っていけばよいか、また具体的にどんなカイゼンしたのかをお話しします。
iOSアプリの配布や、リリース作業のように、
「手作業で繰り返し、自動化が可能で、長期的な価値がない、サービスの成長に比例して増加する」作業は、SREの原則の中でToil(トイル)と呼ばれています。
Toilは、機能開発に集中していたりすると、中々手が回らなかったり、作業への慣れや習慣化によって改善が行われにくくなります。
Toilに対して、よく考えずに自動化を行ってしまうと、システムが複雑化していくことで、その自動化を行った人しか理解できずに属人化が起こります。
そのため、日頃から作業が持つ本質的な価値にフォーカスして整理し、シンプルかつ誰でもメンテナンスできるようにしておくことが大切です。
このトークでは、チームの開発者体験を向上させるために、実際に観測したToilを例に、どのようにカイゼンの試行錯誤を行っていけばよいか、また具体的にどんなカイゼンしたのかをお話しします。
世界中のユーザーへ向けてサービス展開する場合、システムのグローバリゼーション及びローカリゼーションが必要です。
ローカリゼーションではまず「特定言語への翻訳対応」が行われますが、その結果としてアプリの開発フロー内で継続的な「翻訳データの管理」と「テキストの翻訳作業」が必要になってしまいます。
日本語、英語の2言語までは「なんとなくスプレッドシートで管理してみる」が通用しなくもないのですが、対応言語数が増えるほど翻訳データ自体と翻訳タスクの管理コストが増え、結果として運用や品質に対して悪影響が出やすくなっていきます。
本トークでは、12言語に対応している「REALITY」アプリの事例をもとに翻訳フローをどのように構築したか、対応言語を増やした結果どのような問題が起きたか、その問題にどう対処しているか、現状の課題は何で今後どうしようと考えているか、などをお話します。
高度な並行アルゴリズムを提供するSwift Async AlgorithmsにAsyncChannelというものがあります。チャネルとはスレッド間でメモリを共有する手法の1つで、特にGo言語での採用により近年一般的になっています。
本発表ではGo言語での使用例を用いてチャネルの概説を、そしてAsyncChannelとの差異に思いを馳せチャネルについて簡単な認識を持つことが目的です。
スレッド間のメモリ共有は、共有メモリを使い危険領域を排他制御等で保護する手法が一般的ですが、チャネルを使うと同期が入出力としてより素直に表現できます。Go言語にはDo not communicate by sharing memory; instead, share memory by communicatingという格言がありますが、 他方、チャネルとバグの研究を取り上げ現実についても触れたいと考えています。
SwiftUIが発表されてから約3年が経過し、最近ではプロダクトでの採用例も見られるようになってきました。
しかしながら、SwiftUI登場以前から運営しているアプリを完全にSwiftUIへ移行するのは簡単なことではありません。
そこで、小さなComponentから徐々にSwiftUI化を行っていくというのは効果的な移行戦略の1つです。
小さな単位で移行を行うことによって、SwiftUIへ移行する上での課題を素早くキャッチし、改善サイクルを徐々に回しながら移行できるというメリットなどがあります。
本トークでは
について、実プロダクトで移行を続けている中で得られた知見や具体例と共に解説します。
株式会社JMDCでは、新規モバイルアプリの立ち上げに向けて企画・開発を進めています。
PMF達成前のプロダクトフェーズでは、優先すべき仮説からコンパクトに素早く検証を行う必要がありますが、時にストアの審査基準がプロダクトフェーズを進める足枷になることもしばしば...
そんな時React Native for Web(RNW)を使えば、モバイルアプリ開発用のリソースをそのままWebに転用し、Web上で高速なイテレーションを回すことができます。本セッションでは、RNWの紹介と、RNWを使った成長戦略を紹介します。
このLTはiOSコミュニティといままで関わったことがない技術広報がなぜプロポーザルを出したのか。そしてどうやって社内のiOSエンジニアを巻き込みプロポーザルを出すに至ったのか。多くの企業が「自社から登壇やプロポーザルが出されない」課題を抱えています。登壇に関する情報発信のノウハウを共有することで多種多様な企業、プロダクトの発表が増え、iOSコミュニティ全体の活性を促進することを期待しています。非エンジニアのかたにとってコミュニティとの関係性を構築していくエッセンスをお届けします。
ダイナミックデスクトップが登場してから早4年。
動く壁紙というのは、身近な存在になってきているのではないでしょうか?
AppStoreにも動く壁紙を設定できるアプリはちらほら存在します。
どのように実装しているのかは謎ですが、壁紙をハックするのはなんだか夢があって楽しそうですよね。
そんな方のために、このLTではmacOSの壁紙に関するハック術を紹介します。
YouTubeの動画も壁紙にできちゃうかもしれません!
この機会にあなたの壁紙をパワーアップしてみませんか?
「え、CryptoKitを使いたいけど、いつ、何を使うべきかわからない。。。」の方はもう心配いらない。このトークで一緒にCryptoKitの謎を解きましょう!
ユーザーのデータを暗号化しないといけない開発案件が出てきて「CryptoKitを使うチャンス!」を思って調べてきました。それでみんなにそのKnowledgeを共有したいと思っています!みんなCryptoKitマスターになりましょう!
Content
データセキュリティーのために知っておきましょう!
API が絡む開発を行う際、大抵以下のような複数のビルド設定が必要になるかと思います。
今回 .env と Xcode の Run Script を使って各環境ごとに異なる API 接続用の値をビルド時にアプリに組み込む方法で開発を行ったのでその方法について共有します。
2021年12月、弊社 ROUTE06 においてとある新規アプリの開発プロジェクトがスタートしました。
今振り返ってみて、初めに整えておいて良かったなと思うことをお話しします。
以下のような内容を予定しています。
弊社アプリは長い開発期間の中で多くの負債を抱えていますが、複雑な依存関係や少ない開発リソース(現在iOS開発は1人)で通常施策の実装を行いながら改善する余裕がない等の理由でコアな部分の実装には手を入れられず放置されてきました。
負債の一つとして、弊社アプリには神(オブジェクト)がいらっしゃいます。
そこに含まれている内の一つ、API関連の機能はCodableも無い時代に作られているために現在メンテされていないライブラリに依存をしており、以前から改善したい機能として挙げられていました。
本トークではなんとなくで使われていたOpenAPIドキュメントをコード生成が正しく行えるように整備し、そこからコード生成を行い開発フローに組み込んだ方法について紹介します。
Firebase InApp-Messagigng(以下FIAM)は、Firebaseを導入していれば特別な実装をすることなくAnalyticsのイベントを利用して細かく表示タイミングの制御したり、配信先ユーザーのターゲットを細かく絞って配信することが出来とても便利です。
ただデフォルトの機能のままだとFIAMで表示される画面のデザインがアプリとは合わない、利用できるデザインに制限があるなどしっかり運用しようと思うと物足りない部分があります。
弊社アプリでは、コンテンツをよりよく見せるために動画を再生できるようにしたり、WebP画像を使って通信量を削減するといったカスタマイズを行いました。
本トークでは実際の実装経験をもとにどのようなカスタマイズが出来るのか、どのように作るのか、その他Tipsを紹介します。
また実際にFIAMを利用してどのような効果があったかをお話しします。
TabularDataはiOS 15/macOS 12から追加された、機械学習モデルの学習に使う表形式データを閲覧したり、加工したり、書き出したりするための新しいフレームワークです。
このセッションではオープンデータとして公開されているデータをTabularDataを使ってデータ処理する方法について紹介します。
以下のような内容を紹介する予定です
・TabularDataのAPIの紹介
・表形式データからのサマリー抽出について
・非構造化データの変換
・表形式データの結合
リアクティブプログラミングは非同期プログラミングの手段として使われることがありますが、本来は非同期データストリームをうまく扱うためのものです。Swift Concurrencyが導入された今こそ、Combineなどの具体的なライブラリから一歩距離を置いて、リアクティブプログラミングそのものを学習しておきましょう。
このトークでは、リアクティブプログラミングがデータフローの記述方式であるということを基本からおさらいします。リアクティブプログラミングを図的に理解でき、UIや通信のイベント配送設計も自在にできるようになります。
非同期はリアクティブプログラミングの外の世界と接続するときや内部実装には必要です。両者のポジションの違いを整理し、Concurrencyの機能をそのまま使うべきところと、リアクティブプログラミングでデータフローを記述すべきところが、よく分かるように説明します。