今年の4月、Apple製の紛失防止タグ「AirTag」が発売されました。
AirTagはUWB(超広帯域無線通信)技術が使われていて、高い精度で位置を検知することができます。
このUWB技術を使った空間認識を開発者でも使えるようにするフレームワーク Nearby Interaction について紹介したいと思います。
大幅リニューアル後に、放置していたクラッシュが、なんと一日数千件まで爆発してしまった!?しかもそれは再現方法も原因の手がかりもまったくつかめないクラッシュなの?
結論から書くと原因はメモリ不足でした。メモリ不足によるクラッシュは直接の原因がログやスタックトレースに現れないので再現が容易でなく調査が困難です。
このトップクラスのクラッシュに対して、クラッシュログから原因を推測し、メモリ不足と仮定して、Allocationsで調べながら、リファクタリングを行いました。そしてリリースしたバージョンを観測した結果、無事解決できていることが分かりました!
このLTでは、このような再現手段がない、特定ができない問題について、どのように仮説を立てて、解決していったのかを紹介します。
WWDCの直前に、いきなりアップルのM1チップにM1racleと名付けられた脆弱性の話が出てきました。
簡単にどんな脆弱性かを説明しますと、M1チップでは、任意の二つのアプリがCPUの管理外で、独自で秘密なチャンネルを構築し、交信できるということです。しかもこれハードウェアの脆弱性なので、そもそものハードウェアの設計を変えない限りどうにもできない、つまり既存のM1チップのMacやiPad Proは全てどうにもならない、ということです。
え?やばくね!??どうしようどうしよう!!
このLTは、その発見者にM1racleと名付けられた脆弱性の発見や対策などについて話します。
注:大事な話なので2回言います。このトークは技術の話はしません!このトークは技術の話はしません!!
Teslaのハードウェアとソフトウェアの洗練さは、まさに車業界のAppleですよね!
エンジニアなら、誰しも憧れで一度は乗ってみたい、触ってみたいですね?
ちまみに、わたしは持ってません。
このプロポーザルが採択されたら、弊社NOT A HOTELの社長のTesla Model Xを借りて乗ってみようと思います。
Unofficialですが、Tesla APIを使ってハックして遊びます。
以前はFlutter appで自社アプリに組み込んで遊んでみました(Twitter参照)が、SwiftUI nativeなアプリへ移植を試みます。
https://twitter.com/wa_kinchan/status/1366964772894203904?s=20
ありがたいことに、ピクシブ株式会社では2年連続でデザインスポンサーをおまかせいただきました。他のスポンサー枠とは毛色が異なる「デザインスポンサー」。みなさんの企業・団体・個人でもデザインスポンサーをして、iOSDCを自分色に染めてみませんか?
このトークではデザインスポンサーをやってみたい方たちの参考になるように、
についてお話します。
みなさま、notificationは利用されていますでしょうか。
私もappで提供する機能の一部として動作させる、マーケティングで活用するなど、様々な用途で利用してきました。
一方で、必要ないタイミングで通知した、あるユーザーにとって不要な情報を配信してしまったなど、
意図せずユーザー満足度を下げてしまうこともあったかと思います。
そんな中、WWDC21にて多くの新機能が発表されました。
集中モードやNotification summaryでnotificationの受け取るタイミングなどをユーザー自身が制御可能となり、
Interruption Levelにより、配信時の挙動がより細かく定義されました。
これにより、これまでの配信内容を見直す必要性が出てきており、
今までと同様では期待する効果を得るどころか、
ネガティブな印象を与えてしまい、appがアンインストールされるなどの可能性も出てくるかと思います。
本LTでは、新機能をおさらいしつつ、今後どのような影響が考えられるか、
またiOS 15以降のnotificationのあり方についてこれまで通知してきた内容を基に考察していきます。
[想定する方々]
・notificationをマーケティングなどで利用している方々
[ゴール]
・次の日からすぐにiOS 15リリース後のnotificationについて検討が行える
[アジェンダ](検討中)
・これまでのnotificationについて
・WWDC21で追加された新機能
・Notification summary
・集中モード
・Interruption Level
・iOS 15リリース後に想定される影響について
・iOS 15リリース以降のnotificationの内容について考察
Safariには、設定 → Safari → 詳細 → Experimental Featuresという、そこそこ深い場所にある「実験的なWebKitの機能」に、文字通りSafariの標準機能には組み込まれていない実験段階の機能が羅列されています。普段気にしている方はそう多くないかもしれませんが、オフになっているものをオンにすることで動作するようになる機能もありますし、その逆もまた然りです。
本トークでは正式版が公開されている“iOS 14.x”時点の「実験的なWebKitの機能」の概要を眺めながら、特に注目の機能について解説します。
なお、もしもiOSDC Japan 2021当日以前に“iOS 15”がリリースされた場合は、質疑応答や公開資料の中で補足します。
ちなみにAR的な観点から現時点で最も注目している実験的な機能は“HTML <model> element”です!!
皆さんSwiftUI.Text使ってますか?
SwiftUI.Textには知っていると便利な機能がいくつか存在していて、例えば
Text("iOSDC Japan")
+
Text("2021").fontWeight(.bold)
このように書いて、Textを結合することができたりします(これはSwiftUI.Textに public static func + (lhs: Text, rhs: Text) -> Text が定義されていて、Textの結合ができるようになっています。)
このLTでは、SwiftUI.Textに存在する不思議な(面白い)挙動をする機能について紹介します。
メンテナンス時や障害時など、アプリ側で500系エラーが表示されてしまう場面はあると思います。そんなとき「情報を伝えているようで、何も伝えていない画面」ではなく、ちゃんと意味のある画面を表示したいですよね。
ではどんな要素を表示したらそのような画面を作ることができるのでしょうか。私はそれを解明すべく、約半年に渡ってTweetDeckに「鯖落ち」検索タブを常設しました。「○○が鯖落ちしてる」というツイートを見かけたら該当のアプリを起動してスクショ撮影。もし未インストールのアプリだったらアプリをインストールするところから開始。そうして集めたエラー画面のスクショたちからは、様々なことが学び取れました。
そこで、本発表では次の事項について説明したいと思います。これを元に500系エラー画面を刷新すれば、きっとユーザはよりあなたのアプリを好きになってくれる、はず。
・「イケてない」500系エラー画面とは
・なぜイケてないのか
・「親切な」500系エラー画面とは
・私達はどのような500系エラー画面を作るべきか
※発表の中では具体的なサービスのエラー画面スクショは使用せず、あくまで要素の紹介に留めます。
通販サイトの会員向けセールを物色していた時、ふと目に入った「SwitchBot」。
Apple Watchに話しかければベッドからでもエアコンが、照明が、テレビが操作できる、
そんな生活に心のどこかで憧れを抱いていた私は、半額セールの勢いで購入することにしました。
SwitchBotには専用のiOSアプリがあり、このアプリから赤外線リモコンの登録や操作、
シーンの操作などを行うことができるのですが、HomeKitには対応していません(Siriショートカットのみ対応)。
しかし、iOSエンジニアとしてはやはりホームアプリケーションから家電を操作してみたい。
SwitchBotをホームアプリケーションで操作するための記録とその結果できるようになったこと、
そしてHomeKitでもう一歩遊ぶためのヒントをご紹介します。
非同期のコードはよく書くものの、その振舞いを把握できているか不安になることもありますよね。
そのようなとき、オートマトンや状態遷移系のような知識は役に立つのでしょうか?つまりそれ自体を使ってコードを書くことはないものの、基礎的な考え方になるようなものです。並行計算の分野ではCCS(Calculus of Communicating Systems)やpi-calculusのような理論が提唱されていました。このLTではCCSを中心に計算理論の例をみていきます。
CCSで記述することで、並行計算を状態遷移として捉えることができます。状態を数えることができれば、非同期に惑わされずに振舞いを把握できます。そこでは同期通信とインターリーブという抽象化された計算過程があります。何を抽象できるかのインスピレーションが得られるでしょう。
async/awaitなどの実際的な機能も重要ですが、ここらでちょっと理論面にも目を向けてみようかな?というきっかけになればと思っています。たった5分で、「それ聞いたことがある」状態になれることをサポートします。
Network Device Interface(NDI)はIP ネットワークを経由し映像を伝送する方式の1つです。
現在世界で最も利用されているIP伝送テクノロジーで、高画質な映像を無線で送受信できます。
iOSからでもSDKを通じて使用可能です。
(SwiftからNDIを使うのは少し大変でした!)
シンプルに映像送信するところから始め、
フレーム単位でメタデータを付加できることを利用しARの新たな映像表現に活用してみました。
送信アプリ実装、受信側設定、作った表現と工夫点など。
デモ、ソース解説を中心に、ARと映像の新しい形態を解説します。
Swiftの標準ライブラリには数多くのアルゴリズムが用意されていますが、その中で最も頻繁に使われているものの1つはソートであると言えるでしょう。
そんなSwiftのソートアルゴリズムですが、具体的にどのようなアルゴリズムが採用されているかご存知でしょうか。
また、ソートアルゴリズムの重要な指標である時間計算量、空間計算量、安定性はどのような特徴を持っているでしょうか。
もし知らなければ、知っておいて損はないでしょう。5分で解説します。
Eigen は高速な行列計算を行うための C++ ライブラリで、ヘッダのみで構成される純粋なテンプレートライブラリです。
現時点では Swift は C++ と直接連携できないので、Swift から Eigen を使うには C または Obj-C でブリッジする必要がありますが、 Linux でも使えるようにするには Obj-C は選択肢から外れます。
また Eigen はテンプレートライブラリなので、「Swift 側の Wrapper 型も係数に関して generic にしたい」(× EigenIntMatrix, EigenDoubleMatrix, … / ○ EigenMatrix<Int>, EigenMatrix<Double>, …)という欲求も生まれます。
この LT では、両立が難しそうな二つの課題:
の解決法を紹介し、私が数学の研究のために行っているホモロジー群の計算を高速化した事例を紹介したいと思います。
みなさん、IDFAとは何者か知っていますか?ATTはどのように表示していますか?
2021年4月末にリリースされたiOS14.5から、AppTrackingTransparency(ATT)のリクエストをしない場合、IDFAの共有がデフォでオフになる仕様に変更されました。これはユーザがプライバシー情報の開示をコントロールするために欠かせない変更となりますが、ATTはどのように表示すべきか、代替手段はあるのか悩む人は多いはず。
そこで、このトークでは
・IDFAとは
・ATTの表示タイミングや事前確認ポップアップを試行錯誤して実装した結果Appleにリジェクトされた戦績
・代替手段のSKAdNetworkの解説
を5分で面白くお伝えしようと思います。
新機能開発を絶賛開発していてもうすぐリリース。1ヶ月後・3ヶ月後にリリースする機能も決まっている。将来に向けてリファクタリングや自動化のタスクとやりたいことがいっぱいある状況。
しかし、終わりは突然やってきます。
会社の統合によって、担当していたアプリはサービスを継続するが最終的には他のアプリに統合することに。
近い将来に終わりが見えてる状況で、長年保守開発してきて様々な思い出が詰まったアプリの終活についてこの1年間でどんなことを思い、どんな視点でどんな対応をしたかをご紹介したいと思います。
便利なWebサービス・APIが増えている昨今ですが、 デバイスの進化にも目を見張るものがあります。
iPhone 12 Pro / Max では新たにLiDARセンサが搭載されて話題になりましたが、そもそも iPhone は高性能なカメラから、加速度、気圧センサなどあらゆる入出力に対応した優れたデバイスということは言うまでもありません。
これらのセンサを自在に操れることは、サーバサイドやWeb開発とは異なる、クライアントアプリケーション開発の魅力の一つだと考えています。
ということで、
これらについて改めて整理し、センサを使ったユニークなアプリ開発につながるヒントを共有できれば幸いです。
Kyash iOSアプリは2017年4月にリリースされてから4年が経ちました。
リリースしてから品質とどう向き合い、変化してきたかを話します。
Unitテストを書く指針を決めたり社内でBugBashを行ったり外部にQAを委託したり、思えば色々ありました。最近ではAutify for Mobileを使ってE2Eテストの自動化に取り組んだりもしています。今でも完璧にできているとは言えませんが、チームでアプリを運用する中でどういう課題に直面し何をしてきたかの実例として、シュッと共有していきます。
Siriショートカット、みなさん使っていますか?
乳幼児の世話で手が離せない時やゲームのプレイ中など、手や目を離せない時に意外と便利な機能です。
例えばiOSアプリでショートカットを実装した場合、シンプルなものであれば、iPhoneだけでなく、Apple Watch、さらにはHomePodでも利用することができます。家の中でも外でもどこでも手軽に使えてとても便利ですね。
さて、遡ること約1年、とあるiOSアプリにアプリ内でショートカットを登録できる機能を追加しました。
機能としてはシンプルで、「数字を入力として受け取り、一定の範囲内の数字であれば保存、それ以外はエラーを返す」というものでした。
iPhoneでちゃんと動いてるし問題なし!リリース!
めでたしめでたし。
ではありません。そうです。我々は対応している全てのプラットフォームで、できる限り動作確認をすることになるわけです。新しいOSがリリースされたら差分も確認します。
すると、次々と見つかるこれらの問題…
「iOSとwatchOSで応対が違う…だと…」
「iOS 13とiOS 14で挙動が…」
「watchOS 7だとそうなるの…」
「HomePod自動アップデートでいつの間にか応対変わってるやん…」
「英語と日本語でなんか違う…」
このLTでは、このような地雷特徴をいくつか紹介します。
実はこれらは知らなくてもそういうものだと割り切れば困りません。
ですが知っていれば、開発時やQA、あるいは問い合わせ対応の動作確認時間をちょっぴり節約できるかもしれません。
ユーザのセキュリティへの意識は上がってきています。
近年、パスワード流出や認証欠陥等のセキュリティインシデントによるニュースが増えてきており、ユーザにとって重要な情報を扱うサービスへのダメージは計り知れません。
このLTでは、
をお伝えし、みなさんが明日サービス側に導入を提案してもらうことを目指します。