Metalは2014年のWWDCでGPUを扱うフレームワークとして登場しました。
直接使うことは多くないとはいえ、今や数多くのフレームワークを支えている重要なフレームワークです。
しかしなぜMetalという名前なのでしょうか?
私はその名前の由来にたどり着くことはできませんでした。
そういえばこの世界も見渡せば数多くのものが金属に支えられており、金属なしには現代文明は成り立ちません。
もしかすると様々なものの土台となる存在としてMetal(金属)と名付けられたのではないでしょうか?
私は日々そんなことを考えながらMetalを使ってプログラムを書いたり、砂鉄を集め炭で加熱し鉄を作ったりしています。
このLTでは我々に最も身近な金属である鉄と、フレームワークとしてのMetalの共通点を探ります。
何を言っているのかわからないと思いますが鉄の作り方を通して暑い夏をより熱く盛り上げます。
依存性の注入(DI)によりコンポーネント間の結合度を低めるのは良いことですが、コンポーネントの再利用にかかる依存関係解決のコードはボイラープレートになりがちです。この問題を解決する手段として、依存関係およびそれらのライフタイムを管理するコンテナクラスであるDI Containerの導入が考えられます。
本トークでは、SwiftUIで開発されたiOSアプリにDI Containerを段階的に導入しながら、各ステップでどのような問題が解決されていくかについてお話しします。
アジェンダ
・DIおよびDI Containerについて
・DIの導入
・DI Containerの導入
・動的な依存関係の解決
・静的な依存関係の解決
・コードの自動生成による静的な依存関係の解決
・DI Containerでのスコープ管理
・マルチモジュールにおけるDI Container
「WKWebViewではAPIがないから、JS挿入するか」
皆さんはこんな状況に遭遇したことはありませんか?
ご存知の通りWKWebViewはアプリでWebコンテンツを表示、操作が可能な便利なAPIです。
WKWebViewでは提供されていないコンテンツ操作をしたい場合でも、JavaScript(以下JS)を挿入することで可能になります。
しかしJSに頼った実装にはデメリットも。。
そんな中iOS14.5やWWDC21の発表で、コンテンツ操作のAPIが新たに加わりました。
本LTでは、そのAPI登場前の実装との比較を用いてその威力を紹介します。
【目次】(予定)
今年の6月、個人的に作り始めたSwift言語ガイド日本語版のリンクを公式サイトに掲載していただきました。
最初から目標としていた訳ではなく、ふとした思いつきから始め、途中で「せっかくだから何か目標が何かあった方が良い」と思い、後付けで目標を掲げたところ、多くの方のサポートや応援をいただき、今回1年越しに達成することができました。
何かやってみようと思ったけどやらず、「やっぱりやっておけば良かったかなあ!」と後悔すること、ありませんでしょうか?僕はいつもです。
そんな僕でも、なんだかんだ色々なことを始め、結果やって良かったと思えることがたくさんあります。今回は、僕が「よし、これやってみよう」と行動を始めるきっかけをどう作り、続けていくかをお伝えすることで、何かちょっと始めてみようかなと考えるきっかけになれば良いなと思っています。
※ 技術的な話はしません。ただただ僕の思いを伝えます。
macOSやiOSのアプリケーションアイコンは強いスタイルがが存在します。「立体的に」とか「シンプルに」とかHIGでも書かれているけど、書くは易し。実際には何をどう描けばその立体感は実現するのでしょうか。特にmacOSのアイコンは物体のリアリズムが求められ、リッチな陰影表現が必要となります。大丈夫です。3Dモデリングをせずとも、ぼかしやグラデーションなどの組み合わせでこう言った表現は実現できるのです。
このセッションでは、CotEditorやSparkleフレームワークなどのアプリケーションアイコンを手掛けた1024jpが、Illustratorを使ってmacOSアプリケーションアイコンを解説しながら実際に時間内でイチから描きます。これはライブです。
HealthKitを使ったアプリの開発経験はありますか?
近年の健康志向の高まりからヘルスケア連携したiOS開発に関わる機会も増えていると思います。
このLTではHealthKitをはじめて扱う上で最低限抑えておきたい知識や、実際に利用したアプリを作った際に気づいたポイントについてご紹介します。
・HealthKitでできること
・扱えるデータの種類について
・データのプライバシーについて
・注意するポイント
「運動しなきゃなぁ」と思っている皆さん。自分でHealthKitを使ったアプリを作って運動不足解消しませんか?
iOSにおけるIn-App Purchase(アプリ内課金)はiOS 3から利用可能であり、その歴史は10年以上に及びます。
この長い歴史の中で、Ask to BuyやUpgrade / Downgrade、お試しオファーなどの多くの仕組みが追加され、やれることが格段に増えました。
アプリ内課金をサポートするための仕組みも、Store Kit 2による実装方法の変更やアプリ内での返金機能をはじめ、Server NotificationsやTransaction Receiptのフォーマットの変更など、新しいものが次々にリリースされたり、StoreKit Testingによって自動テストが出来たりSandbox環境がアップデートされたりなど、課金のテストにまつわる状況も大きく変わりました。
本トークでは、5分間でIn-App Purchaseの激動の歴史を爆速で振り返っていきます。
Xcodeの複数バージョンを使い分けようとしたらDockに同じアイコンが並んでどれがどうだかもうわからない!
_人人人人人人_
> もう嫌だ! <
 ̄Y^Y^Y^Y^Y ̄
アプリのアイコンを自由に変更できるmacOSの素晴らしい仕組みを使って、俺得なCLIツールをSwiftで開発しました。
しかもアイコンのテンプレートはみんな大好きSwiftUIで作れるようにしました。
Xcodeの複数バージョンを使い分けようとしたらDockに同じアイコンが並んでどれがどうだかもうわからない!
_人人人人人人_
> もう嫌だ! <
 ̄Y^Y^Y^Y^Y ̄
アプリのアイコンを自由に変更できるmacOSの素晴らしい仕組みを使って、俺得なCLIツールをSwiftで開発しました。
しかもアイコンのテンプレートはみんな大好きSwiftUIで作れるようにしました。
SwiftUIが発表されてからすでに3年が経ちました。
しかしいまだに開発現場から採用が難しいという声が聞こえてきます。
UIKitとSwiftUIの併用も可能ですが、実際に採り入れてみるとさまざまな問題が発生しました。
このセッションではそれらの問題を解決する手法を紹介します。
近年、Human computer interaction(HCI)の研究分野では機械学習を利用しスマートフォンのインタラクションをより豊かにする研究が多く行われています。
・音声認識を利用しスマホで叩いた物体を認識
・画像認識を利用しApple Pencilの機能を拡張
・イヤホンのセンサを活用した行動認識
これらの研究を応用することで例えば、スマホで欲しい物を叩くだけでECサイトでその物を注文できるようになったり、非接触でモバイル端末の操作ができたりと今までのアプリに無いようなインタラクションを実現できます。本セッションではそのような研究事例を紹介し、実際にCreateML/CoreMLでモデル構築、デモアプリの実装を行います。CreateML/CoreMLや機械学習に興味がある方、既存のアプリにはない面白い機能を実装したい方などに興味を持っていただける内容です。
近年、Human computer interaction(HCI)の研究分野では機械学習を利用しスマートフォンのインタラクションをより豊かにする研究が多く行われています。
・音声認識を利用しスマホで叩いた物体を認識
・画像認識を利用しApple Pencilの機能を拡張
・イヤホンのセンサを活用した行動認識
これらの研究を応用することで例えば、スマホで欲しい物を叩くだけでECサイトでその物を注文できるようになったり、非接触でモバイル端末の操作ができたりと今までのアプリに無いようなインタラクションを実現できます。本セッションではそのような研究事例を紹介し、実際にCreateML/CoreMLで機械学習を使った面白いインタラクションをいくつか実装してみます。
昨年から、iPadのSwift PlaygroundsでiOSアプリの開発ができるようになりました。この際、従来のプロジェクト形式とは異なる「.swiftpm」拡張子のプロジェクト形式が使われるのはご存じでしょうか。実はこの「.swiftpm」は、Xcode 13.2以降で「Swift Playground App」としてXcodeでも作成できるようになっています。
この新しいプロジェクト形式は、どのようなもので、何ができるのでしょうか。従来のプロジェクト形式とは何が違うのでしょうか。
「Swift Playground App」の具体的な情報はあまり公開されていませんが、私が手探りながら調査した知見をご紹介します。
Swift-DocCは、Swiftフレームワークやパッケージのためのドキュメント作成ツールです。Swift-DocCの面白い特徴に、チュートリアルを作成できるという点があります。
このチュートリアルの作成方法の詳細は、今回のパンフレット記事に掲載します。
https://fortee.jp/iosdc-japan-2022/proposal/dfd8c56c-468a-4115-804c-d1ca103eed62
本トークでは、具体的なチュートリアルの作成過程をライブコーディングで紹介します。
パンフレット記事とともに実際のチュートリアルの動きを見ることで、より理解を深められます。
React NativeやFlutterなどを使ったマルチプラットフォームアプリ開発は、1つの言語でiOSとAndroidの両方を同時に開発できるとても魅力的なアプリ開発の選択肢です。
しかし、UIデザインの視点から見るとそう簡単にはいきません。それぞれのOSはそれぞれのUIガイドラインを持っており、開発者はそれに沿ったデザインの実装が求められます。
本セッションでは、マルチプラットフォーム開発におけるUIデザインの違いを踏まえた各OSでの実装のポイントや落とし穴をいくつかご紹介します。
目次(予定)
Human Interface Guidelinesとマテリアルデザイン
デザイン実装におけるポイント・落とし穴
・そのアイコン、マテリアルデザイン?
・3ボタンナビゲーションを忘れるな
・ここまで違うの?DateTimePicker
・それぞれのOSで効果的な通知を!
WWDC2021にて簡潔かつ堅牢に並行処理を記述できるSwift Concurrencyが発表されました。
WWDCのセッションを通してSwift Concurrencyを学ぶことができますが、実世界の問題に対してどうこの技術が使えるかという文献はまだ少ないのではないでしょうか。
このセッションではSwift Concurrencyを用いて実装された実プロダクトで利用されているLoggerの実装を基に、どのように技術を適応したかを紹介します。
また、Swift Concurrencyに触れたことがない人でも理解できるように適宜Swift Concurrencyについての説明も行う予定です。
なお引用する予定のコードはすべてOSSとして公開中しています。
https://github.com/k-kohey/Parchment-swift
DAppとはビジネスロジックやストレージが分散されたアプリケーションです。
ブロックチェーンを使って実装されることが多く、DAppには下記のような利点があります。
このDAppをiOSアプリで構築する際には下記の点が障壁となります。
このセッションではこの障壁を減らすべく、iOSエンジニアの視点からEthereumを使ったDAppの開発に必要な知識と作り方を紹介します。
なお、DAppを作ったことがない人・業務でブロックチェーンを使っていない人を聞き手に想定しています。
2年連続で完全オンライン開催となっていたWWDCですが、今年は1日限定のスペシャルイベントがApple Parkで開催されることになりました。
本LTでは、そんなスペシャルイベントに奇跡的に当選した私が、新卒で海外未経験、初WWDCというフレッシュな目線に立ちながらWWDC22に現地参加したことで見られたもの、得られたものを(NDAに抵触しない範囲で)紹介します。
目次(予定)
・コロナ禍における海外渡航で必要だった社内手続き
・Developer Centerではどんな経験ができたのか
・基調講演ライブビューイング中の現地での様子
・Apple Parkで出会った人たちとコミュニケーションをとってわかったこと
・スペシャルイベントにはまだ続きが…? ”so much more…”の正体
・WWDC22が僕をどう変えたか
・プロダクトオーナー「こういう画面を実現したい!」
・エンジニア「できます。。。」
・エンジニア(心の声:HIGに違反しているんだよなー)
・エンジニア(心の声:これ全部満たすと実装コスト跳ね上がるんだよなー)
・エンジニア(心の声:保守性もさがるしなー)
・エンジニア(心の声:でも、言ってもしょうがないし、やるか)
これを実現したプロダクトは、プロダクトオーナーが望む結果は得られていますが、HIGや、実装コスト、保守性を考慮した仕様になっていません。
あるべきとしては、実現したい目的を共に理解し、その上で、HIG、実装難度、保守性を考慮した調整を行った上での実装仕様を、エンジニアの方と一緒に決めていきたいという話をしたいと思います。
abceedアプリにおけるiPad対応の経緯と現在の方針について詳らかにします。
abceedは学習アプリとしてtoB向けにも展開していますので通常よりもiPadユーザーの割合が多く、広い画面で気持ちよく学習できるようデザインの最適化を積極的に行っています。
今回は私からアダプティブレイアウトのひとつのやり方としていろいろなトピックを共有し、みなさんのなにか議論のきっかけとなれば嬉しいと思っています!
以下のようなことを話す予定です。