Swiftでもシェルスクリプトのようなことができるのは既に知られていることかと思います。
しかし、標準の開発環境であるXcodeではSwiftスクリプトのサポートがほとんどされておらず、標準APIのコード補完すらできないのが現状です。
一方で、VSCode (Visual Studio Code)にSwiftプラグインを導入することでコード補完はもちろん、変数の型の確認が容易になるなどの恩恵を受けられます。
更に、GitHub Copilotも標準サポートされているのである程度の単純作業であればすぐにスクリプト化することができます。
本セッションではSwiftでスクリプトを書く際の注意点を紹介しつつ、実際に使っているシェルスクリプトをVSCode+GitHub CopilotでSwiftに書き直す様子をライブコーディングでお届けします。
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に移行しましょう!
コードレビューはアプリやコードの品質向上とチームの成長に不可欠なプロセスです。
しかし、効果的なコードレビューを行うのは簡単ではありません。
コードレビューのやり方や観点については様々なところで紹介されていますが、やり方を知っているだけではPull Requestの差分から適切な指摘事項を見つけ出すことはできません。
このトークでは、より良いコードレビューを行うための実践的な方法について詳しくお話しします。
これにより、今まで何となくApproveしていたコードレビューにおいて、自信を持ってコメントやApproveできるようになる手助けになれば幸いです。
トピック:
Swift Concurrencyは、非同期処理を便利にするSwiftの機能です。iOSアプリ開発においてゼロからの開発でこの機能を利用する場合は比較的スムーズに導入できますが、既存のアプリに導入する際にはさまざまな課題が発生します。我々のチームでは、開発効率向上を目指し、すでにリリースされているアプリにSwift Concurrencyを全面的に導入しました。
まず、API通信のような非同期で結果が返る処理をasync/awaitに変換することから始めました。具体的には、従来のCombineのAnyPublisherを戻り値としていた非同期処理をasync関数に置き換えました。次に、UI更新以外の処理をなるべくメインスレッド以外で実行する試みを行いました。例えば、データの読み込みや保存といったI/O操作をバックグラウンドスレッドで実行するように変更しました。
さらに、SWIFT_STRICT_CONCURRENCYオプションを有効にすることで、コンパイル時に非同期処理に関する潜在的な問題を発見し、修正することができました。
本トークでは、導入ステップの具体的な手順の紹介や、導入途中で遭遇した問題とその解決策、そして私たちのチームが採用したSwift Concurrencyの利用方針について詳細に説明します。また、導入後に得られた効果やメリットについてもお話しします。
Embark on a journey through more than 30 errors I really encountered during Flutter app development and release. This session offers an in-depth look at the troubleshooting process from an iOS engineer’s perspective. Learn how to diagnose and fix issues efficiently, avoid common mistakes, and improve your app release workflow. This talk is designed to equip iOS developers with the knowledge and confidence to tackle Flutter development head-on.
iOS14での登場以来、Widgetはユーザー獲得とエンゲージメント向上のために重要な役割を果たしています。
これまでも、Widgetのサイズ追加、スタンバイWidget、ロック画面Widgetなどの機能が追加され、ユーザーとの接点を拡大してきました。
しかしながら、今までユーザーはWidgetを受動的に利用しており、ユーザーがアクティブな操作をするためには、必ずアプリ本体を起動することが必要でした。
iOS17で、この制約を打破する「Interactive Widget」が導入され、直接Widgetからデータ更新や表示切替といったアクティブな操作が可能になりました。
この変化は、Widgetの利用価値を大きく高め、開発者にとって新たな可能性を開くものと考えています。
このLTでは、以下の内容に焦点を当てて解説します
参加者は、Interactive Widgetを通じて、アプリの魅力をさらに引き出せるかについての具体的な知識と技術を得ることができます。
iPhone, iPad, Apple Watch, AirTag, AirPods, Mac。
iOSDCに参加されている方なら、これらをたくさんお持ちだと思いますが、自分に合ったちょうどいいスタンドなどのアクセサリを見つけるのはなかなか難しいですよね。実際に使ってみないと、そのアクセサリが本当に良いかどうかわからないので、色々試してみたくなることはありませんか?
購入する以外にも、CADと3Dプリンタを使って自分で作るという選択肢が増えれば、様々なアクセサリを試すことができたり、世界に一つだけのオリジナルなものを作れたりと、日々の生活がさらに楽しくなります。
そこで、Apple公式の「Appleデバイス用アクセサリのデザインガイドライン」を元に、作り方の手順や完成データの探し方、私が実際に作ってみたものを紹介しながら、発表したいと思います!
個人アプリ開発において、収益化は非常に難題です。広告を置いて収益化したいけどUXは損ねたくない、、、!
そんな誰しもが持つ悩みをこのLTで解決します!
僕自身、動画広告やアプリ内課金を導入するほどではないけどなんとかしてバナー広告は避けたい!と何度も思ってきました。
そこでたどり着いたのが、Native Adsです。
Native Adsは広告のUIを自由にカスタマイズでき、アプリ内に自然に配置することが可能です。
自身でカスタムした広告は、好きな場所に配置することができアプリの世界観やUXを損なうことなく、広告を配置することができます。
しかし、その自由さがゆえにバナー広告よりも少し実装が手間であったりレイアウト崩れが起きてしまったりします。
このLTでは、僕自身がアプリにNativeAdsをどのように組み込んだのか、レイアウト崩れをどのように解決したのかをお話しします。
具体的には次のトピックについてお話しします。
皆さんも、Native Adsを実装してアプリのUXを高めてみませんか?
WWDC2023で発表されたSwiftDataは、iOS17以降で使用可能なアプリ内でのデータを永続化するための新しいフレームワークです。
アプリ内でのデータ保存には既存のRealmやCore Dataがありますが、ではなぜSwiftDataを選ぶべきなのでしょうか?
本LTでは、SwiftDataの基礎知識を整理し、デモアプリを用いてSwiftDataの魅力を伝えることを目指します。
LTで話すこと
・Swift Dataとは
・SwiftDataを使うときに考慮したいこと、詰まった所
・SwiftDataのいいところ
・従来のアプリ内データ保存(Realmなど)とSwiftDataの比較
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.
2年前、弊社アプリはSQLiteからFirestoreへデータ基盤の移行プロジェクトを行いました。
Firestore自体は当時のユースケースとしてはベストな選択でしたが、ここ最近求められる新機能や施策の実現に対してFirestoreではコスト面や横断したデータの活用などの観点から実現が難しいと判断することが増え、今回アプリ・サーバーサイドと合わせデータ基盤を大きく作り変える決断をしました。
そうして始まった大規模な移行プロジェクトですが、今回は「グロースなどの開発を並行しながらデータ基盤を移行してほしい」というオーダーもあったため、iOSチームとして通常の施策実装と並行して安全にデータ基盤を差し替えていく仕組みを考え実践しました。
今回のトークでは安心・安全にデータ基盤を移行するためにアプリ開発チームとして工夫したこととその実践内容について、
以下の内容を踏まえつつお話していきます
swiftUIで pull to refresh を実現するにはApple純正のrefreshableを使うのが一般的です。
ただし、私が開発しているアプリでは、この純正機能を使用することで、レイアウト崩れや予期しない動作が発生していました。
具体的には、リフレッシュした後にスクロールview の画面が下にずれる問題が発生していました(詳細はこちら: https://stackoverflow.com/questions/76943913/swiftui-scrollview-refreshable-doesnt-work-appropriately)
他にも対応している、アプリがiOS15以下も対応していたため、そもそもScrollViewのリフレッシュが使えない。
私のUIKit経験値が低いために、UIKitでのリフレッシュバグが起きた際に対応しきれなかった。
そのためswiftUIのみでcustomRefreshableを作ろうと思いました。
swiftUIで pull to refresh を実現するにはApple純正のrefreshableを使うのが一般的です。
ただし、私が開発しているアプリでは、この純正機能を使用することで、レイアウト崩れや予期しない動作が発生していました。
具体的には、リフレッシュした後にスクロールview の画面が下にずれる問題が発生していました(詳細はこちら: https://stackoverflow.com/questions/76943913/swiftui-scrollview-refreshable-doesnt-work-appropriately)
他にも対応している、アプリがiOS15以下も対応していたため、そもそもScrollViewのリフレッシュが使えない。
私のUIKit経験値が低いために、UIKitでのリフレッシュバグが起きた際に対応しきれなかった。
そのためswiftUIのみでcustomRefreshableを作ろうと思いました。
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の実践方法を紹介します。
【このセッションで紹介するトピック】
私は23新卒iOSエンジニアとしてChatworkに入社し、この1年で多くの対外活動に取り組んできました。
具体的には、
対外活動に取り組んでみると「日々の自分の活動をふりかえることができる」「自分の知見を共有することでフィードバックや思わぬ意見から学びが得られる」「さまざまな経歴を持った社外の方々と交流ができる」など、良いことがたくさんありました。
そして、通常業務と並行して対外活動に取り組むことで、自然と「通常業務での学びをイベントでアウトプット」 → 「アウトプットへの反応からの学びを通常業務に活かす」 → 「通常業務での学びをイベントでアウトプット」 …といったようなサイクルを回すことができたり、対外活動の取り組みが評価され、社内のアワードを受賞することができました。
このLTでは、僕が新卒1年に取り組んできた対外活動の経験を交えながら、そこから得られた学びや通常業務への学びの活用を共有し、対外活動に取り組む良さを紹介したいと思います。
iOS開発者にとって避けて通れない「アプリ審査」。
リリースには「新しい審査基準で審査が通るのか」「どのようなことが確認されるのか」といった疑問を抱えることが多いのではないでしょうか?
そこで、Appleでは審査プロセスをスムーズに進めるために「1 on 1 App Reviewコンサルテーション」を実施しています。
このセッションでは、私自身の経験を基に「1 on 1 App Reviewコンサルテーション」の詳細とその活用方法を紹介します。
具体的な手順や注意点を共有し、iOS開発者がアプリ審査の疑問を解消する手助けとなることを目指します。