note社では自動化に力をいれ、リリースフローを大幅にカイゼンしました。
具体的には、SlackからAppStoreConnectやTestFlightへの登録、リリースブランチの作成、メンテナンスやリリースノートの作成を自動化しました。
さらに、CI/CDを全面的にXcode Cloudに移行することで、煩雑だった証明書やプロビジョニングプロファイルの管理からも開放されました。
本トークではエンジニアがエンジニアリングに注力するために、実施した自動化とCI/CD最適化とそのポイントを紹介します。
[内容]
201x年、30代前半未経験のおじさんエンジニアが誕生しました。
もともと趣味の個人開発でアプリを作成していましたが、とあるきっかけでカジュアルゲームのiOSアプリ開発を手伝うことになりました。振り返ると当時の自分にとっては、変数名を大文字で宣言する、似たようなViewControllerを大量生産する、脳死コピペで実装するといった初歩的なエンジニアリングのミスは日常茶飯でした。
しかし、開発していたアプリが無料ランキングで1位になったことで転機が訪れました。その後、Android、フロントエンド、バックエンド開発、プロジェクトマネジメントと業務領域を広げ、転職を繰り返しながら今に至ることができました。
では、どうして今日に至るまで成長し続けることができたのでしょうか。このセッションでは、これまで取り組んできた学習方法を中心に、持続可能な成長方法を詳しく紹介します。
【このセッションで紹介する主なトピック】
このセッションが皆さんのキャリアのサポートとなることを願っています。
Nothing is too late to start !
アプリ開発においてCICD環境はなくてはならない存在です。エンジニアの開発生産性向上、そしてエンドユーザへ良いプロダクトを届け続けることなどはその導入目的となるでしょう。
アプリのCICD環境を構築する方法はさまざまあります。自前でビルドサーバを用意する方法、そして数多あるSaaSの中でチームや組織に合うサービスを選択することも良い方法です。
本セッションでは株式会社出前館が提供するエンドユーザ向けアプリ出前館アプリにおけるCICD環境(bitrise)の導入、React NativeからFlutterへの移行に伴う改修、そして新たなCICD環境(Teamcity)への移行についてお話します。4年間という短い期間にこれだけの取り組みをしてきたチームは少ないと自負しており、その苦労と葛藤について共有します。
CICD環境はチームや組織の事情、そしてプロダクトなどさまざまな要素の影響を受けます。本セッションを通して、これらの変化に柔軟に対応しつつ、CICD環境と付き合う術を共有できれば幸いです。
iOS 16.4 からPWA(Progressive Web Apps)にリモートプッシュ通知を送ることが出来るようになりました。
これによって、PWAとネイティブアプリの大きな差の一つが無くなったことになります。
そこで今回は iOS上のPWAで出来ることを振り返りつつ、どこまでネイティブアプリに近づけられるかを検証します。
このセッションを通して、PWAの可能性と限界を理解しつつ、ネイティブアプリでサービスを提供する意味を考えていければと思います。
2025年8月25日にFirebase Dynamic Links(以降 FDL)サービスが終了を迎えます。
本発表では、FDLとお別れをする方法などについて、いくつかの方法を提案させていただきます。
本発表は以下に該当する方に参考にしていただければと思っています。
本発表では以下の内容で説明します。
現在、iOSでグラフを実装するには様々な選択肢があります。WWDC22ではSwift ChartsというApple公式のframeworkが公開されましたが、それまでは多くのプロダクトがDGCharts(旧Charts)というサードパーティ製のライブラリを使用していました。WWDC23ではSwift Chartsにアップデートが加えられましたが、DGChartsも引き続きアップデートされています。
では、今グラフを実装するならSwift ChartsとDGChartsのどちらを選ぶべきでしょうか?
このトークでは、Swift ChartsとDGChartsの性能を比較して、どちらを使うべきかを検討します。
具体的には以下の内容について比較・検討します。
また、Swift ChartsとDGChartsの基礎についても学ぶことができるため、事前知識がなくても聞くことができます。
このトークに参加してSwift ChartsとDGChartsの違いを深く理解し、あなたのプロジェクトに最適なグラフツールを一緒に探してみませんか?
最近採用されることが多くなってきたUIフレームワークFlutterですが、そのFlutterでiOSのUIをどう実現しているかご存知でしょうか? FlutterでのiOSのUIの実現は、実は独自に描画されたもので、全てがiOS標準のUIをそのまま使っているわけではありません。
このセッションでは、そんなFlutterでのiOSのUIの実現方法について、Flutterの描画エンジンの話から実際のFlutterのソースコードを追いながら説明していきます。
このセッションは以下のような流れで行います。
Unlock the secrets of exporting privacy reports in Xcode.
A privacy report in iOS development refers to a detailed document that outlines how an app collects, uses, and shares user data.
This session covers typical errors you might encounter and also introduces a rare error uncovered by the speaker which is not written on the internet. You would be in trouble if you needed to handle it on your own. But don't worry! Gain a competitive edge by mastering these troubleshooting strategies, ensuring your iOS apps remain compliant with privacy standards. Don’t miss out on these essential insights!
iOSアプリをテストしたりリリースする際に、皆さんはApp Store Connectを頻繁に使用していると思います。App Store Connectは主に人が操作するWebシステムですが、App Store Connect APIを使用することで多くの操作を自動化することが可能です。
レポーティングやアプリ内課金の操作や、Fastlaneを使った操作ではお使いの方も多いかと思いますが、申請やTestFlight、メンバー管理など多くの操作を自動化でき、ちょっとした調査にも便利に使えることをご存知でしょうか。
このセッションでは、実際の開発チームにおいて行ったTestFlightや申請業務の業務効率化の例を通じて、App Store Connect APIの使い方や、簡単に試す方法をご紹介します。
皆さんのプロジェクトでは、Swift Concurrencyの導入は進んでいますか?
ここ1年で、iOS 15のサポートを終了するアプリも増えており、Swift Concurrencyの導入が本格化しています。現場でのSwift Concurrency移行時には、複雑なBlock構文、レガシーライブラリからの脱却やRealmのスレッド移行に苦労しましたが、その過程で多くの知見を得ることができました。
このセッションでは、既存アプリの非同期実装をSwift Concurrencyに移行する方法や、チームで効率的に移行しリリースする方法に焦点を当て、その手法を詳しく紹介します。
【主なトピック】
将来的なSwift 6への移行に備えて、この機会にSwift Concurrencyに移行しましょう!
Swift Concurrencyは、非同期処理を便利にするSwiftの機能です。iOSアプリ開発においてゼロからの開発でこの機能を利用する場合は比較的スムーズに導入できますが、既存のアプリに導入する際にはさまざまな課題が発生します。我々のチームでは、開発効率向上を目指し、すでにリリースされているアプリにSwift Concurrencyを全面的に導入しました。
まず、API通信のような非同期で結果が返る処理をasync/awaitに変換することから始めました。具体的には、従来のCombineのAnyPublisherを戻り値としていた非同期処理をasync関数に置き換えました。次に、UI更新以外の処理をなるべくメインスレッド以外で実行する試みを行いました。例えば、データの読み込みや保存といったI/O操作をバックグラウンドスレッドで実行するように変更しました。
さらに、SWIFT_STRICT_CONCURRENCYオプションを有効にすることで、コンパイル時に非同期処理に関する潜在的な問題を発見し、修正することができました。
本トークでは、導入ステップの具体的な手順の紹介や、導入途中で遭遇した問題とその解決策、そして私たちのチームが採用したSwift Concurrencyの利用方針について詳細に説明します。また、導入後に得られた効果やメリットについてもお話しします。
Join us for an in-depth exploration of advanced methodologies for distributing iOS SDKs. From Swift Package Manager to XCFrameworks, learn how to leverage these tools to simplify your development process and ensure seamless integration. SDK distribution skills are a key factor in making you a more exceptional engineer than your colleagues. Gain insights into the pros and cons of each method, real-world use cases, and tips for optimizing your workflow. This session is designed for iOS engineers aiming to elevate their expertise and adopt industry-leading practices in SDK distribution.
Swift Package Managerの登場により、iOSアプリにおけるライブラリの導入に大きな変化が起きました。
最近ではアプリ開発でもSwift Packageによるマルチモジュール開発の手法が確立しつつあります。
しかし、何も考えずにPackage.swiftを書いていると不要なライブラリがキャッシュに混ざったり、余計なビルド時間がかかってしまう場合があります。
本トークでは、個人でライブラリを複数リリースした経験とそのライブラリを実際に使ってアプリ開発を行ってきた経験を元に、Package.swiftを最適化するためのポイントを紹介します。
具体的には、以下の内容を解説します。
このトークを通じてビルド時間の短縮や不要なライブラリの混入を防ぐことでDX(開発者体験)の向上に寄与することを目指します。
Flutterを用いてモバイルアプリを開発する際には、
showModalBottomSheet
は必須の機能と考えます。
しかし、特定の要件や要求に対応するためには、showModalBottomSheet
だけでは不十分な場合もあります。
例えば
showModalBottomSheet
に関する情報を調べることが日常茶飯事かもしれません。そこで、今回はFlutterにおけるモーダルシートの基本について深く掘り下げ、
外部パッケージの紹介や、特定の要件に対応するためのモーダルシートの実装方法に焦点を当てて話していきたいと思います。
具体的には、以下の内容について説明します。
showModalBottomSheet
の内部実装の解説このトークを通じて、Flutterのモーダルシートに関する理解を深めていただけることを心から願っています。
WWDC2023でAppleが発表したObservationフレームワークは、オブザーバーパターンによりデータバインディングを高いパフォーマンスで実現することが可能なフレームワークです。
このセッションでは、昨年の発表以降におけるObservationの最新事情を探ります。また、今後iOS17以降をターゲットとするアプリでは、SwiftUI、Concurrency、Observationがデファクトスタンダードになることも踏まえながら、Observationの実践方法を紹介します。
【このセッションで紹介するトピック】
近年注目度が上がっている生成AIですが、その中でもGitHub Copilotはコーディングをサポートするツールとして最も注目度の高いサービスの一つです。
GitHub Copilotは2024年2月にリリースされたGitHub Copilot Enterpriseや、現在開発段階で非常に注目されているCopilot Workspaceなど、より便利な機能が追加予定であり、今後デファクト・スタンダードになると私は期待しています。
しかし、このように注目されているGitHub Copilotですが、iOS開発においては少し盛り上がりに欠けているような印象があります。最も大きな理由としては、Xcodeが公式にサポートされていないためだと考えられます。
本セッションでは、GitHub Copilotの「Chat」機能に焦点を当て、Xcodeが公式にサポートされていない中でも使い方次第でとても便利なツールであることを実際のデモ動画などを交えて紹介いたします。
また、その他にも以下のトピックについてお話しいたします。
・ 弊社におけるGitHub Copilot普及のための取り組みとそのポイント
・ 全社的に実施したGitHub Copilot使用者のアンケート結果(全社/iOSチームの比較も紹介)
・ VScode(公式サポートエディター)とXcodeでできることの差
アプリ開発において重要な通信系処理ですが、OpenAPI Generatorを利用することで、OpenAPIのAPI定義書からクライアントコードを自動生成することができます。
このトークでは、OpenAPI GeneratorをKotlin Multiplatformで活用し、より効率的にアプリを実装する具体的な方法と工夫を紹介します。
このトークでは、以下のポイントに焦点を当ててお話します。
Kotlin MultiplatformでAndroidとiOSの開発を効率化したうえで、更に楽に実装できるようにしていきましょう!
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アプリ開発の効率化にも何かしら役立てていただければ幸いです。
これまで、データが非同期に流れてくる処理には Delegate パターンなどが用いられてきました。また、Apple プラットフォームでは Combine といったフレームワークも使用されてきました。
これらのほとんどは、Swift 5.5 で追加された AsyncSequence を使用する方法へと移行できます。実際、Apple が提供するフレームワークでも、従来 Delegate パターンが用いられてきたような非同期にイベントを伝える API について、最近新規に追加されたものは AsyncSequence を採用しています。この AsyncSequence に移行することで、Swift Concurrency が持つアクター分離などのさまざまなメリットを享受できます。一方で、非同期なシーケンスならではのメモリリークにも注意が必要です。
このトークでは、AsyncSequence の基礎について簡単におさらいし、Delegate パターンからの移行方法、移行するメリットや注意点について、iOS アプリの具体例を用いながら詳しく紹介します。
Delegate、今までありがとう。これからは AsyncSequence でやっていくよ。
iOSアプリのアクセシビリティ対応は、全てのユーザーに高品質な体験を提供するために重要です。私自身、アクセシビリティ機能を使ってアプリを操作する機会がなく、開発中も必要だと感じていませんでした。しかし、ある方から「操作が難しい」と言われたことがきっかけとなり、考え方が変わりました。
本セッションでは、アクセシビリティの概要、必要性、そしてiOSが提供しているアクセシビリティ機能についてお話します。
また、アクセシビリティ対応を実際にアプリに適用する際の考え方や、開発者への情報共有の方法、フィードバックの活用についても私の経験を基にお話しします。提供しているアプリを万人に使ってもらいたい方や、後でアクセシビリティ対応が必要と言われて苦労したくない開発者の皆様にとって、このセッションが少しでもアクセシビリティについて考える機会になれば嬉しいです。