WWDCはいつから始まったか知っていますか?
2010年…?2000年…?いえ、実はWWDCの始まりは1990年代まで遡ります。もっと言えばその前身となるイベントは更に昔から開催されています。
WWDCの公式サイトはその年のものに更新されていくため、10年前や20年前の情報はもちろん、30年前の1990年代の情報なんてそう簡単に得られるものではありません。
今回私は可能な限り、創設当時のWWDCや、その前身となるイベントについて調べてみました。
私たちはその年のWWDCの情報を追いかけることが多いですが、一度昔のWWDCを覗いてみませんか?
このトークは以下について話します。
WWDCは毎年最新の情報を得る機会となるため、今や私たちのプロダクトを成長させるためには必要不可欠なイベントとなりました。このトークを通じてその歴史を探る旅へ出ませんか?
ある日、ショッピングアプリのQA中に1つのバグ報告がありました。
ショッピングアプリの主要な機能である「価格の絞り込み」や「カート投入時の数量」などで利用するTextFieldで一律「2」が入力できなくなっていました。
この致命的なバグに、全く想像もつかず、チーム全員が固まってしまいました。
最初に疑ったのはソースコードの実装。ですが、ソースコードには特に問題は見当たりませんでした。それでは、特定のOSの問題か?どうもこれも違うようでした。
いったいなぜ「2」が入力できないのか?
そして辿り着いた原因は、我々が全く想像しなかったものでした。
笑撃の結末を見逃すな!乞うご期待ください!
USキーボードを使っていると左右の⌘キーを使って英数入力とかな入力を切り替えたくなることが多いと思います。この機能を実現するためのアプリは既に存在しますが、このLTでは、私が行った再発明を通じて学んだ、iOS開発においてあまり触れる機会のないSwiftUIやAppKitの機能、そして開発中に直面した課題について紹介します。
発表に含まれる内容:
RealityKitはiOSやvisionOS向けのARアプリケーションを開発するための強力なフレームワークです。
これを用いることで、任意のオブジェクトを現実世界に呼び出すことが簡単に実現可能です。
では移動や回転(Transform)はどうでしょうか?
並行移動や単純な回転をさせることは簡単です。しかし、少し複雑な挙動をさせようとすると途端に難しくなります。
私の場合、「オブジェクトの向きをカメラに追従させる」機能を実装する際に沼にハマり、これを解決するためにオイラー角や行列を使った計算が必要でした。
このようにRealityKitを扱う際にはオイラー角や行列、ワールド座標にローカル座標など、普段の開発ではあまり見慣れない概念を適切に扱う必要がありますが、これらの概念を理解し、コツを知ることで、実は簡単に扱えるようになります。
本LTでは、この「オブジェクトの向きをカメラに追従させる」という具体的なユースケースを例に、一見難しく見えるオイラー角や行列を使ったオブジェクトのTransformを、簡単に考え・実装する方法を5分間でお伝えします!
皆さんはプログラミングやiOSアプリ開発をどのように習得しましたか?
私は、頼れる人が周りにいない状況で、独学でプログラミングとiOSアプリ開発を学んできました。
このセッションでは、iOSアプリ開発を始めた理由から、当時のメモやソースコード、開発したアプリを紹介しながら、技術習得のための取り組みや歩み等をお話しします。また、独学での学習を続けるためのメンタル管理の方法等についても共有します。
具体的なトピックは以下の通りです。
Swift 6.0 への対応を進める中で、Combine の実装を async/await に置き換えたいと感じる場面が増えてきたのではないでしょうか。2022年にAppleが公開したOSSである Swift Async Algorithms を使用することで、時間経過に伴う処理を async/await で記述できるようになりました。
Swift Async Algorithms は、 Combine のように様々なオペレーターを利用しつつ、非同期処理を for-in ループで実装することができる強力なライブラリです。これにより、より直感的で Swift らしいコードを書くことが可能になります。
本LTでは以下の内容について紹介します。
・Swift Async Algorithms と Combine の比較
・Swift Async Algorithms を用いた時間経過処理の結合方法
・Swift Async Algorithms の便利な API の活用法
スマートホームとは、家の中の家具や家電をインターネットに繋いで可視化・操作できるようにする技術です。AppleはiOS 8でこれを実現するための「ホーム」アプリと「HomeKit」を発表しました。
照明をはじめとしたHomeKit対応アクセサリは、「ホーム」アプリに簡単に追加でき、操作が容易であるという魅力があります。
しかし、発表から数年が経過しても、国内のHomeKit対応のアクセサリの数は依然として少ないままです。最近では、複数のメーカーがそれぞれのアプリで操作するスマートホーム製品を発売しています。
HomeKit対応製品の少なさや各メーカーの専用アプリに依存してしまうことから、「ホーム」アプリによるスマートホームの導入を諦めてしまった方も多いのではないでしょうか。
このLTでは、「ホーム」アプリによるスマートホーム環境の構築を諦めきれない一人のApple信者が、HomeKit非対応アクセサリでも「ホーム」アプリに追加して操作するためのOSS"Homebridge"と新しいスマートホーム規格"Matter"を紹介します。
またそれぞれの技術の実際の使用例を交えながら、現状できることや得意・苦手なことを説明して、今からスマートホームを始める際のおすすめの方法を解説します。
これを聴けば、Appleのスマートホームに関する最近のトレンドや課題が分かるようになります。
突然ですが、皆さんはSNSアプリケーションを3週間の短い期間で作り上げる挑戦をしたことはありますか?
私が所属する某企業では、新卒研修の一環として、この「SNSアプリケーションの開発」が出題されました。
しかし、Firebaseなどのサーバーレス開発ではなく、クライアント、サーバー、インフラ、ML/DSの職種を活用した開発です。
私が所属する某企業では、新卒研修の鬼門として「SNSアプリケーションの開発」が出題されました。
開発期間が短いため、戦略として「機械的反復的なコードは自動生成に任せ切ろう!」という方針のもと最新技術を積極的に採択していきました。
本セッションではより短い期間で品質を担保しつつアプリケーションを開発するための技術的tipsを紹介します。
具体的には、以下の導入からメリット、デメリットと苦戦したことについて解説し、短期間でのアプリ開発でとるべき技術戦略を紹介します。
本セッションを通じて、個人開発や小規模開発におけるを最適解を見つけましょう。
近年、CocoaPodsからSwift Package Manager(SPM)に移行したプロジェクトが増え、Firebase iOS SDKでもSPMでのみ利用可能なバージョンがリリースされました。新規開発においても、CocoaPodsを使わずにSPMのみでパッケージ管理を行うケースが増えています。
SPMの利用頻度が高まる中で、初めて自作ライブラリをSPMで導入する方法について解説します。具体的な手順やコード例を交えながら、SPMの利便性と自作ライブラリの開発プロセスを理解することで、開発効率をどのように向上させるかについて詳しく説明します。
本トークでは、以下の内容を話します。
・ 自作ライブラリを開発するメリット
・ 初めての自作ライブラリをSPMで導入する方法(具体的な手順とコード例)
・ 開発中に直面した課題とその解決方法
WWDC23で密かに公開されたTestFlightの新機能、「TestFlight Internal Only」をご存じでしょうか?
この機能を利用することで、誤ったIPAファイルが本番環境にリリースされるのをシステム的に防止できます。
しかし、TestFlight Internal Onlyを有効に活用するためには、さまざまな設定が必要です。
本トークでは、私が実際に経験した大規模サービスでのCI/CD環境構築の実例を交え、
TestFlightとCI/CDツールとの連携部分にも焦点を当てながら、安全で安心なCI/CD環境の構築方法をご紹介いたします。
具体的には、以下のポイントについて詳しく解説します。
本トークを通じて、皆さんが安全で安心なCI/CD環境を構築する上でのヒントを提供できればと期待しています。
また、皆さんが考える安全で安心なCI/CD環境についても一緒に考察していきたいと思います。
あなたのアプリ、カメラを使った認証機能(QRコード読み取り、本人確認書類)搭載されてませんか?
もし搭載されている場合、実は裏でこんな問題が発生しているかも知れません。
それは、
『iPhone14Pro移行のデバイスで近距離撮影のピントが合わなくなってしまう問題』です!
iPhoneが搭載するレンズはUI以外にも変化を遂げており、実は世代やモデルによってカメラのフォーカス位置、広角から超広角にスイッチする距離などが異なります。
iPhone11の登場によりPro以上の上位モデルにはトリプルカメラが搭載されるようになってから5年の月日が経ちますが、実は年々撮影最短距離も変わってきています。
そんな中、実際発生した14Pro移行のピントが合わなくなってしまう問題をケーススタディとして、原因と対応策について解説していきます。
このセッションではカメラレンズの歴史に触れつつ、具体的には以下の内容に触れていきます。
本セッションを通じて、普段触れないレンズの挙動について詳しくなりませんか?
iOSにおけるSwiftUIやAndroidにおけるJetpack Composeの利用拡大でモバイルアプリ市場における宣言的UIフレームワークの利用拡大は増加の一途を辿っている道半ばでしょう。
宣言的UIフレームワークの利用が拡大することで現代フロントエンドの進化やエッセンスがモバイルアプリ界隈にも徐々に取り入れられ、さらなるハイブリットが生まれることも推測できます。
2021年中頃から末にかけてJetpack Compose / SwiftUIに「Atomic Design」と呼ばれるデザイン手法を実験的に採用された事例が増えていたことも記憶に新しいです。
フロントエンドのエッセンスがモバイルアプリ界隈に取り入れられることで
「WebアプリもモバイルアプリもTypeScriptで実装したい」というニーズが出てくるのは自然なことだと思います。現在であれば React Navive + TypeScript が最有力候補です。
しかし、私は「Nuxt Ionicを用いて Nuxt + Vue.jsで開発することも出来る」という一石を投じたいと考えています。
本登壇にて「モバイルアプリ開発でもNuxtという選択肢をあなたへ」提示したいと思います。
登壇者情報: フロントエンド開発をメインとし、Nuxtのコントリビューターなどをしています。LTの味変枠としてお聞き頂きたいです。
WWDC23の「Meet StoreKit for SwiftUI」にてアプリの課金実装をSwiftUIで簡単に実現できるAPIが紹介されました。これまで開発ハードルが高かったアプリ内課金の実装が、誰でも簡単にできるようになっています。
本LTでは、ProductViewを使用してミニマムでアプリ内課金を実装する方法を紹介します。特に、個人でアプリをリリースしているが課金機能の実装はまだ経験がない方々に向けて、この新しいAPIを活用し、手軽に課金機能を追加する手順を説明します。
モバイルアプリケーションの開発において、スクリーンショットはユーザーエクスペリエンス(UX)向上のための貴重なリソースです。従来は主にApp StoreやGoogle Play Storeでのプロモーションに利用されてきましたが、実はスクリーンショットにはさまざまな使い道があります。
本トークでは、スクリーンショットの新たな活用法に焦点を当て、開発者やデザイナーがアプリのユーザー体験を向上させるためにどのように活用できるかを紹介します。
具体的には、以下のポイントについて詳しく解説します。
プロモーション以外でのスクリーンショットの活用法
• ユーザーフィードバックの収集
• UI/UXデザインの改善提案
• アプリ内ヘルプやチュートリアルの強化
実際の活用事例とベストプラクティス
• スクリーンショットを活用して成功したアプリの具体例
• スクリーンショットを効果的に使用するためのテクニック
• 参加者が自身のプロジェクトで即座に適用できる実践的なアイデア
本トークを通じて、参加者はスクリーンショットがどのようにユーザー行動の解析やUXの向上に役立つかを理解し、自身のアプリに取り入れることが可能になることでしょう。参加者の皆様にとって、実際のプロジェクトに役立つ具体的なヒントやアプローチを提供することを目指しています。
ARC(Automatic Reference Counting)は、Swiftのメモリ管理の基盤として知られています。
ARCは、オブジェクトの参照カウントを追跡し、メモリリークを防ぐために重要な役割を果たします。
しかし、ARCの一般的な説明だけでは、「どういう仕組みなのか」「どのように動作するのか」を完全に理解するのは難しいことがあります。
本件はARCの詳細な動作原理を深く掘り下げ、実際の使用例を通して理解を定着させることを目的としています。
基本的な仕組みとしては以下になります。
・オブジェクト作成時に参照カウントが1に設定
・参照時: 他の変数がそのオブジェクトを参照するたびにカウントが増加
・参照解除時: 参照が解除されるとカウントが減少し、カウントが0になるとオブジェクトが解放
ただし、ARCも所詮はプログラムです。
ARCには詳しく見てみると、命令は大きく分けて以下の5つの操作があり、それらの命令の組み合わせで実現しています。
この命令群は、どのように実装すればどういうふうに動いてARCを実現しているのか?
メモリの状態はどうなるのか?
最後に、どのようにstrong、weak、unownedを選定すべきか?
これらの、わかった気になっていたARCから完全にわかったARCに変える話をします
近年、ゲーム市場では高品質な3Dゲームが主流ですが、落ち物パズルゲームをはじめシンプルな2Dゲームも支持されています。また、有名ゲームエンジンのインストール料金が発表されたことで、サードパーティ製エンジンに依存しない開発の価値が再認識されつつあります。そこで、今こそApple純正の2Dゲーム開発フレームワークである「SpriteKit」が注目される時代が来たと考えています。
本トークでは、大乱闘な百人組手ゲームの開発を例に、SpriteKitを使用した2Dアクションゲーム開発の実践的なテクニックを3つのポイントに絞って紹介します。具体的なトピックは以下の通りです。
このトークを通じて、SpriteKitを用いたアプリ開発のアーキテクチャ、接触判定、UIの実践テクニックを学ぶことができます。
参加者の皆様にはApple純正のSpriteKitを用いた2Dゲーム開発の魅力と実用性を感じていただき、次世代のヒット作を生み出す手助けができれば幸いです。
「アジャイル開発ってよく聞くけど、実際にはどうすればいいのかよくわからない・・・」
昨今、アジャイル開発を取り入れる現場が皆さんの周りでもかなり増えているのではないでしょうか。今やアジャイル開発はエンジニアとしても無視できない状況となってきています。
しかし、「私はただ開発さえできればいいんだ!XcodeだけがTOMODACHI。」と考えるエンジニアも少なくないと思います。そんな皆さんに向けて、アジャイルな現場での立ち回り術を紹介します。
本トークでは、アジャイルの中でも最もよく使われるスクラムフレームワークをベースに、アジャイルなプロジェクトでどのように立ち回るとプロジェクトから重宝されるか、ひいてはプロジェクトが成功するかについてお話しします。プロジェクトの成功に貢献したいiOSエンジニアの皆さんに、スクラムマスターの観点からコツを解説します。
プログラミングとかけまして音楽と解きます、その心は?
どちらもコード(code | chord)が重要です
プログラマと音楽は相性が良いのです。
私自身も、平日はプログラマ、週末はアイドルなどへの楽曲提供をする作曲家です。
音楽はセンスがないとできないというわけではありません。
コードネームから構成音を求めるプログラムを作ることができます。
コード進行やリズムにはパターンがあり、デザインパターンやライブラリのように利用することができます。
音楽にも理論があります。
本トークでは
についてお話しします
プログラマならではの視点で、音楽を楽しんでみませんか?
アクセシビリティに配慮したUIを作成するのは、難しいと思っている方は多いのではないでしょうか?
そう思っているみなさん、Developer ToolのAccessibility Inspectorを使用したことはありますか?
Accessibility Inspectorとは、アプリのUI で発生した一般的なアクセシビリティ問題についてのフィードバックを提供してくれるツールです。
このLTでは、Accessibility Inspectorを使用した以下のようなフィードバックに対する解決方法についてお話しします。
・ 要素の説明:各要素のアクセシビリティラベル(コンテキスト固有の説明的なラベル)を提供しているかをチェック
・ ヒット領域:要素のサイズが小さすぎて人が操作できないかどうかをチェック
・ コントラスト比:重なり合う要素間の色のコントラストが十分かどうかをチェック
・ Dynamic Type:アプリ内のテキストが Dynamic Type をサポートしているかどうかをチェック
個人開発のアプリでAccessibility Inspectorを使用した経験を踏まえて、Accessibility Inspectorを活用したアプリのアクセシビリティ向上方法について紹介します。
弊社では、1週間に1度のサイクルで継続的にアプリをリリースする運用を続けていましたが、リリースに関わる作業が機能開発の時間を奪っているという課題がありました。そこで、状況を改善すべくGitHub Actionsを利用した自動化に取り組み、一定の効果を得ることができました。
当初は改善の効果を感じていましたが、運用を続ける中で新たな課題も見えてきました。このセッションでは、新たに発生した課題を解消するために、どのような取り組みをしたのか?についてお話しします!
話したいこと
・現状のリリースフロー
・新たな課題と改善したこと
・改善後のリリースフロー
・まだまだ改善したいこと
ただ、現状では打ち手だけが見えている状態で、修正し、運用に乗せるところまでできていません・・・このセッションをきっかけに「登壇駆動開発」で動き出したいと考えています。