SwiftUIでは、@Stateや@Environment*などのプロパティラッパーを使って状態を管理します。@Stateは多くの開発者に親しまれていますが、@Environmentはその適切な使い方が十分に理解されていないことが多いです。本記事では、@Environmentの基本的な仕組みから高度な応用方法までを詳しく解説します。
本記事では以下の内容をカバーします:
本記事を通じて、@Environmentの基礎から応用までを学び、SwiftUIアプリの開発において効果的な状態管理手法を習得できます。初心者から中級者まで幅広い層に役立つ内容を提供します。
*: 本記事では@Environment(.keyPath)のみを取り扱います。@Environment(ObjectType.self)は敢えて取り上げません。
アプリ開発において重要な通信系処理ですが、OpenAPI Generatorを利用することで、OpenAPIのAPI定義書からクライアントコードを自動生成することができます。
このトークでは、OpenAPI GeneratorをKotlin Multiplatformで活用し、より効率的にアプリを実装する具体的な方法と工夫を紹介します。
このトークでは、以下のポイントに焦点を当ててお話します。
Kotlin MultiplatformでAndroidとiOSの開発を効率化したうえで、更に楽に実装できるようにしていきましょう!
Network Frameworkは、WWDC18で発表されたデータ送受信のためのネットワーク接続用フレームワークです。このフレームワークを使用することで、TLS、TCP、UDPなどのプロトコルに直接アクセスが可能です。また、URLSessionの内部でも使用されており、多くのアプリケーションを支えています。
Bonjour (ボンジュール) は、Appleが開発したゼロ・コンフィギュレーション技術で、IPアドレスやホスト名を入力せずに接続する方法を提供します。例えば、AirPrintのプリンター自動検出やHomeKitへの接続に使用されます。
本稿では、Network Frameworkを活用し、NWBrowserでのネットワークサービスの検出と、NWListenerおよびNWConnectionを用いた通信について解説します。
Xcodeのプレビューは動作や表示を簡単に確認することができるため、UIKitやSwiftUIを利用した開発において非常に便利です。
一方、通常の実行時に利用できるCapture View Hierarchyなどのデバッグ機能や、サードパーティのデバッグ用ライブラリを使うことができないため、
プレビュー上では各Viewの位置やサイズの確認が難しいという課題があります。
本トークでは、プレビュー環境特有の制約を回避しながら、Swift Macrosを使うアプローチで、プレビュー上で動作するViewのデバッグ機能を実装する方法について説明します。
このトークで話す内容:
Swift 5.9からSwift Macroが使えるようになり、iOSアプリ開発の現場でもその活用が進んでいます。Swift Macroは手作業で書く必要があったコードを自動生成できボイラープレートを減らす上で非常に有効です。
このトークでは、
Swift Macroの簡単な概要と従来のコード生成系ライブラリにはない長所を説明し、私が公開したswift-property-name
というSwift Macroの実装について詳しく紹介します。
このトークで取り上げない内容として、Swift MacroのFreestanding MacroとAttached Macroのさらに細かい分類については触れません。さらに、コンパイル時間はどうなるのか、手作業でボイラープレートを書くほうがトータルでは効率良いこともあるのかないのか、などにも触れません。それらの話は、他のトークに期待したり、各種ドキュメントを参照していただくのが良いと思います。
私が今回話すのは、複数あるSwift Macroの実装方法のなかで、私が何を考えてそのようにしたのかだけです。このトークを通じて私の実装についてGitHub上でフィードバックしていただくことを目指しています。そのついでくらいに、みなさんのiOSアプリ開発の効率化にも何かしら役立てていただければ幸いです。
Are you a Swift developer looking to expand your skills into Objective-C? Join us for a comprehensive session that bridges the gap between Swift and Objective-C. This talk will demystify the complexities of Objective-C grammar. It includes method declarations between Objective-C and Swift, memory management with ARC, and understanding header and implementation files, and more. You will learn the key differences and similarities between the two languages, enabling you to maintain and integrate Objective-C code in your Swift projects with confidence.
注意!! プロポーザル期間中に発表が聞けないため、タイトル詐欺になる可能性があります。
5月から6月にかけて多くのビッグテック企業が発表を行い、その中でも生成AIに関連するトピックが注目されています。これまで私たちが開発してきたアプリは、私たちの意図通りに動作していましたが、今後はシステムが私たちの予想を超える応答を返す時代へと移行しています。ビッグテック企業が生成AIについてどのようなテーマで語ったか、そして6月に開催されるWWDCで生成AIがどのように扱われるか語らせてください。
はたして発表日当日トークタイトルどおりの内容のセッションになるでしょうか。
これまで、データが非同期に流れてくる処理には Delegate パターンなどが用いられてきました。また、Apple プラットフォームでは Combine といったフレームワークも使用されてきました。
これらのほとんどは、Swift 5.5 で追加された AsyncSequence を使用する方法へと移行できます。実際、Apple が提供するフレームワークでも、従来 Delegate パターンが用いられてきたような非同期にイベントを伝える API について、最近新規に追加されたものは AsyncSequence を採用しています。この AsyncSequence に移行することで、Swift Concurrency が持つアクター分離などのさまざまなメリットを享受できます。一方で、非同期なシーケンスならではのメモリリークにも注意が必要です。
このトークでは、AsyncSequence の基礎について簡単におさらいし、Delegate パターンからの移行方法、移行するメリットや注意点について、iOS アプリの具体例を用いながら詳しく紹介します。
Delegate、今までありがとう。これからは AsyncSequence でやっていくよ。
これまで、データが非同期かつ継続的に流れてくる処理や、いつ発生するか分からないイベントを受け取る処理には、クロージャや Delegate、オブザーバーなどが用いられてきました。また、Apple プラットフォームでは Combine、サードパーティの OSS では RxSwift などといった外部のフレームワークも使用されてきました。
これらのほとんどは、Swift 5.5 で追加された AsyncSequence を使用する方法へと移行できます。実際、Apple が提供するフレームワークでも、従来 Delegate が用いられてきたような非同期にイベントを伝える API について、最近新規に追加されたものは AsyncSequence を採用しています。他のデザインパターンから AsyncSequence に移行することで、Swift Concurrency が持つアクター分離などのさまざまなメリットを享受できます。一方で、非同期なシーケンスならではのメモリリークにも注意が必要です。
このトークでは AsyncSequence の基礎、他のデザインパターンからの移行方法、移行するメリット、注意点まで、UIKit・SwiftUI を用いたアプリの例を使いながら詳しく紹介します。
Delegate、今までありがとう。これからは AsyncSequence でやっていくよ。
iOSアプリのアクセシビリティ対応は、全てのユーザーに高品質な体験を提供するために重要です。私自身、アクセシビリティ機能を使ってアプリを操作する機会がなく、開発中も必要だと感じていませんでした。しかし、ある方から「操作が難しい」と言われたことがきっかけとなり、考え方が変わりました。
本セッションでは、アクセシビリティの概要、必要性、そしてiOSが提供しているアクセシビリティ機能についてお話します。
また、アクセシビリティ対応を実際にアプリに適用する際の考え方や、開発者への情報共有の方法、フィードバックの活用についても私の経験を基にお話しします。提供しているアプリを万人に使ってもらいたい方や、後でアクセシビリティ対応が必要と言われて苦労したくない開発者の皆様にとって、このセッションが少しでもアクセシビリティについて考える機会になれば嬉しいです。
Swiftが公開され今年で10年目となったように、iOSアプリ開発も長い年月をかけて運営し開発を続けていく現代では、プロダクトにおけるテストコードの量も自然と大量になっているはずです。そのうえ大人数がプロジェクトに関わっているのなら、機能追加や不具合の修正に加えてテストコードも日々大量に増え続けていることでしょう。
そして現代のプロジェクトでは、新たに開発した機能や不具合の修正は既存の全てのテストコードが正常に成功しないとマージできないという開発のフローを採用しているはずです。そのような開発フローにおいて、意図せず稀に失敗するようなテストコードが紛れ込んでいると、自分が関与していない不安定なテストが自分の開発リズムに割り込んでくる厄介な状況が発生します。
さらには大量のテストコードが実行時間をかけた末に失敗してしまうと、各メンバーがスムーズに作業を進められず、開発時間が不要に伸び開発体験が低下してしまうのも問題です。
このトークでは、結果が不安定となるテストコードの原因を分類し、具体的な例を交えながら改善点について解説します。
また、Xcode 16で正式統合されそうなswift-testing
を活用することで、ある種の不安定なテストを解決できるのではないかという事についても話しができればと思います。
好きなSwift発表ドラゴンが
好きなSwiftの言語機能を発表します
Swiftは2014年にWWDCにて発表された、Appleの開発するオープンソースのプログラミング言語です。
「モダン、安全、高速、インタラクティブ」を特徴とし、iOSやmacOSなどのAppleプラットフォームだけでなく、LinuxやWindowsでも利用でき、アプリケーション開発のみならずCLIやサーバーサイド向けのソフトウェア開発も可能です。現在はSwift 5までバージョンを重ねており、来るSwift 6にて大幅に機能が追加される見込みなど絶賛成長中の言語です。
本LTでは定番の言語機能から正式名称がわからない言語機能まで発表していきます。
Swift初心者の方からベテランの方までSwiftの素敵な言語機能を確認してSwift力を高めていきましょう!
Xcode は iOS アプリ開発者にとって必要不可欠なツールですが、豊富な機能を最大限に活用するためには効率的なショートカットの利用が鍵となります。
開発効率を劇的に向上させる Xcode の便利なショートカット 20 選を紹介します。
初心者から上級者まで、すぐに使えるショートカットを厳選し、具体的な使用例と使わなかった場合の機会損失を解説します!
(開発経験が豊富な人でも意外と知らないショートカットもあるかも!)
この記事を読むことで、Xcode のショートカットを効果的に活用する方法を学び、日々のコーディング作業がより効率的かつ生産的になることを期待できます!
例えばアプリの使用調査の時間を削減させたり、コードリファクタリングの時間を半減させたり、デバッグ作業を迅速に進めることが可能になります。
この記事を読んで開発時間の短縮とコード品質の向上を実現し、より良い開発ライフを送ってみませんか?
ショートカットアジェンダ
Swiftでのアプリ開発において、CI環境の構築や移行は大変です。しかし、Makefileを活用することで、その作業を簡単に行うことができました。
Swiftでのアプリ開発において、継続的インテグレーション(CI)環境の構築や移行は、多くの開発者にとって悩ましい課題です。特に、目まぐるしく変化するCIツールやプラットフォームに対応するのは容易ではありません。そんな中、Makefileを活用することで、この問題を驚くほど簡単に解決できました。
たとえば、以下のような内容をMakefileに記述しました。
makefile
test:
bash run_tests.sh
coverage:
bash run_coverage.sh
このように、テストやコードカバレッジの実行をMakefileで一元管理することで、CI環境の移行が非常にスムーズになりました。新しいCIツールに移行する際も、.ymlファイルのようなワークフローが記載されてるファイルを変更するだけで済むため、時間と手間を大幅に削減することができました。
この方法は、Swiftでのアプリ開発だけでなく、他の言語やプロジェクトにも応用できるため、CI環境に悩む全ての開発者にとって有益です。ぜひ、Makefileを活用して、より効率的な開発環境を構築してみてください。
Swift Playgroundsは、iPadで動作する開発環境です。MacやXcodeを使わずにiPadで開発できるため、iOSエンジニア以外の人でも手軽にiOS開発に挑戦できます。この記事では、DevRelである私が初めてのiOSアプリとしてごくシンプルなお絵描き練習ゲームを開発したプロセスを紹介します。
開発するアプリは、絵の定番の基礎練習である「正確な円を描くこと」を目指すゲームです。
概要
この記事により、人事や広報など非エンジニアのiOSDC参加者がアプリ開発に挑戦する助けになれば良いなと思います。またSwift Playgroundsを使ったことがないiOSエンジニアの方にも新たな発見と学びとなることを期待しています。
このセッションでは、実務の中で経験したSwiftUIを用いたショート動画タイムラインの実装と課題解決について解説します!
プロジェクトの初期設計から実装、そして直面した課題とその解決方法まで、実際の開発経験を元にした具体的なストーリーを共有します。
このセッションは、SwiftUIの基礎を理解しているiOS開発者を対象としています。
特に、動画コンテンツを扱うアプリケーションを開発しようと考えている開発者にとって有益です!
参加者は、SwiftUIを用いたショート動画レイアウトの実装方法やAVPlayerを使った再生、キャッシュの仕組みなどを学び、複雑なUIの実現とパフォーマンスの最適化についての具体的な知識を得ることができます。開発中に直面するであろう課題を予測し、それに対する解決策を事前に知ることで、実際の開発において役立つ実践的なノウハウを身につけることができます。
私はiOSアプリの多言語化対応において、LinterをRubyで自作して書きました。
本セッションでは、そのLinterを汎用化したGitHub Actionsに進化させ、Marketplaceに公開して使えるようにするまでをお話します。
といってもまだ公開しておらず、もしこのセッションが採択されたら公開に向けて動きます。そうです、登壇駆動開発です。その時間経過も含めてLTらしく話します。
真面目な話をすると、意外と自作で色々スクリプトを作っているiOSプロジェクトは多いんじゃないかと考えており、それらOSSのタネが開花するきっかけになるとよいなと考えています。
iOSアプリ開発は、サーバーサイドエンジニアやAndroidエンジニア、デザイナーやプロダクトマネージャーといった様々な役割のメンバーと一緒に進めることが多いですね。
しかし、iOSアプリ開発に軸足を置いている人からすると当たり前のことが伝わっていないことが多々あり、それが原因で協業しにくくなることがあります。
たとえば、アプリリリース時の審査プロセスです。審査プロセスがあること自体知らない人もいますし、存在は知っていても審査期間や審査結果のばらつきについては知らない人も多いです。
他にも、デザイナーに対してはSwiftUI事情や限界の話、プロダクトマネージャーに対してはOSサポート事情や段階的更新などリリース関連の話、サーバーサイドエンジニアに対してはAPIインターフェースや強制アップデート機構の話など、最初に認識を揃えておくとよさそうな話が意外と多いです。
このトークでは、そういった「iOSエンジニア以外にも知っておいてもらえるとよいiOSアプリの開発事情」についてまとめてお話します。社内にそのまま共有すれば、より認識が揃って仕事がしやすくなるような内容を目指します。
Swiftの関数名の命名についてお悩みの方はいませんか!?
命名を適切に行うことで、コードの可読性やメンテナンス性を大きく向上させることができます。
Swiftの命名規則に関して参考になるものとして、Swift API Design GuidelinesというドキュメントがAppleから提供されています。
このドキュメントを読むと、Swiftの関数名の命名においては、関数を使用するときの「明瞭さ」そして「自然な文章としての読みやすさ」の2つが重視されていることがわかります。
明瞭で自然な命名をしようと思っても、英語が達者でもない場合、難しいと感じることが多いです。
私自身命名が正しいかどうか思い悩む日々を過ごす中、前置詞を効果的に使うことで明瞭かつ自然な命名ができることに気づきました!
例えば setY(_ x:)
という関数があったとき、XとYがどのように関係しているのかわかりますか?このように、関係性が不明瞭なときに
前置詞が役立ちます。
本稿では、Swift API Design Guidelinesをもとに関数名の付け方の基本を説明した上で、英文法から考えるSwiftらしい関数名の命名について紹介します。
Flutter is a multi-platform system that allows you to write code once to output a variety of applications for iOS, Android, and the Web. Here are some insights gained from building a clone of the famous TikTok app in Flutter. I will share the information on user registration and login, uploading videos and thumbnails, uploading attached information to a cloud database, state management and screen transitions, other libraries used, and more. Some of the content is directly applicable to iOS native app development, so even those who have never touched Flutter will be able to see it.