Network Frameworkは、WWDC18で発表されたデータ送受信のためのネットワーク接続用フレームワークです。このフレームワークを使用することで、TLS、TCP、UDPなどのプロトコルに直接アクセスが可能です。また、URLSessionの内部でも使用されており、多くのアプリケーションを支えています。
Bonjour (ボンジュール) は、Appleが開発したゼロ・コンフィギュレーション技術で、IPアドレスやホスト名を入力せずに接続する方法を提供します。例えば、AirPrintのプリンター自動検出やHomeKitへの接続に使用されます。
本稿では、Network Frameworkを活用し、NWBrowserでのネットワークサービスの検出と、NWListenerおよびNWConnectionを用いた通信について解説します。
Xcode は iOS アプリ開発者にとって必要不可欠なツールですが、豊富な機能を最大限に活用するためには効率的なショートカットの利用が鍵となります。
開発効率を劇的に向上させる Xcode の便利なショートカット 20 選を紹介します。
初心者から上級者まで、すぐに使えるショートカットを厳選し、具体的な使用例と使わなかった場合の機会損失を解説します!
(開発経験が豊富な人でも意外と知らないショートカットもあるかも!)
この記事を読むことで、Xcode のショートカットを効果的に活用する方法を学び、日々のコーディング作業がより効率的かつ生産的になることを期待できます!
例えばアプリの使用調査の時間を削減させたり、コードリファクタリングの時間を半減させたり、デバッグ作業を迅速に進めることが可能になります。
この記事を読んで開発時間の短縮とコード品質の向上を実現し、より良い開発ライフを送ってみませんか?
ショートカットアジェンダ
Swift Playgroundsは、iPadで動作する開発環境です。MacやXcodeを使わずにiPadで開発できるため、iOSエンジニア以外の人でも手軽にiOS開発に挑戦できます。この記事では、DevRelである私が初めてのiOSアプリとしてごくシンプルなお絵描き練習ゲームを開発したプロセスを紹介します。
開発するアプリは、絵の定番の基礎練習である「正確な円を描くこと」を目指すゲームです。
概要
この記事により、人事や広報など非エンジニアのiOSDC参加者がアプリ開発に挑戦する助けになれば良いなと思います。またSwift Playgroundsを使ったことがないiOSエンジニアの方にも新たな発見と学びとなることを期待しています。
Swiftの関数名の命名についてお悩みの方はいませんか!?
命名を適切に行うことで、コードの可読性やメンテナンス性を大きく向上させることができます。
Swiftの命名規則に関して参考になるものとして、Swift API Design GuidelinesというドキュメントがAppleから提供されています。
このドキュメントを読むと、Swiftの関数名の命名においては、関数を使用するときの「明瞭さ」そして「自然な文章としての読みやすさ」の2つが重視されていることがわかります。
明瞭で自然な命名をしようと思っても、英語が達者でもない場合、難しいと感じることが多いです。
私自身命名が正しいかどうか思い悩む日々を過ごす中、前置詞を効果的に使うことで明瞭かつ自然な命名ができることに気づきました!
例えば setY(_ x:)
という関数があったとき、XとYがどのように関係しているのかわかりますか?このように、関係性が不明瞭なときに
前置詞が役立ちます。
本稿では、Swift API Design Guidelinesをもとに関数名の付け方の基本を説明した上で、英文法から考えるSwiftらしい関数名の命名について紹介します。
iOSアプリ開発のチュートリアルや入門書は多く存在しており、学校の授業で扱われることもあります。しかし一方で、実際のアプリ開発の業務では、より多くの知識が求められます。このギャップに初学者がとまどうことも少なくありません。
この記事では、業務レベルのアプリ開発でどんな知識が求められ、どんなツールが使われているのかをざっくり紹介します。初学者に参考にしてもらうとともに、中級〜上級者にも開発環境を俯瞰的に捉える機会になればと考えています。
・プログラミング言語、UIフレームワーク(UIKit、SwiftUI)
・IDE、ビルド設定、LinterやFormatter
・プロジェクト構成、パッケージ管理(SwiftPMなど)
・デザインや設計のガイドライン(HIGなど)
・API通信、プッシュ通知
・各種フレームワーク、データベース
・ローカライズ、アクセシビリティ
・テスト、CI(Xcode Cloudなど)、アプリ配布
スワイプ等をはじめとする指の動きに合わせた変化量や画面要素内のスクロール処理を連動する様な、機能性と触り心地に加えささやかな遊び心も兼ね備えたUI実装に関しては、UIKitがメインであった当時から、様々な創意工夫の余地があり使いやすく利用できるOSSも沢山生まれてきた経緯があったかと思います。
SwiftUIでのUI実装が徐々に普及し、SwiftUIに備わった機能やできる事も徐々に増えていった現在では、これまではUIKitを活用する事で実現していた様な複雑な実装であっても、徐々に実現可能になりつつあるので、今後は複雑なUI実装にも積極的に活用できる可能性を感じています。
本稿では、SwiftUIを活用した実装方針の中で、
の様なトピックにフォーカスをして、実現にあたり押さえておきたいポイントを解説します。
アプリ開発において、UIイベント・Network通信に関連する非同期イベントなどを取り扱う場面等では、Combineを利用した実装や処理に触れる機会はまだまだあると思いますし、上手に活用する事で処理の見通しをより良い物にしたり、内部処理の統制をうまく取る役割を担う事もできます。
昨今のSwift Concurrencyの登場により、既存のCombineベースで記載した処理をよりシンプルかつ見通し良くする事が可能な余地も増えた様に感じます。補う必要がある部分はCombineで補いながらも、アーキテクチャ内部の処理を徐々に置換する際には、段階的に処理を置換可能にするためのちょっとした工夫や考え方の方針があると心強いと思います。
本稿では、
等のトピックに関連する考察や、async/awaitベースの処理への置換でよりシンプル化ができる事例をご紹介致します。
昨今のペーパーレス化が進む社会でも、サーマル(感熱紙)プリントを見る機会は依然として多いです。iPhone や iPad を利用した POS レジからレシートを受け取った経験があるでしょう。その iPhone からどのようにレシートを印刷しているのか気になったことはありませんか。
印刷といえば iOS には Wi-Fi に接続されたプリンターを制御する AirPrint があります。しかしながら、業務用サーマルプリンターは Wi-Fi 非対応の機種も多く、AirPrint は利用できません。サーマルプリンター向けの印刷命令を実行する必要があります。Bluetooth で接続可能なサーマルプリンターを対象として、命令コマンドを iOS から実行する方法を紹介・実演します。また、サーマルプリンター対応アプリを作る際の注意点も紹介します。サーマルプリンターに興味ある方・そうでもない方も、iPhone だけには収まらない、外部ハードウェアと連携するアプリ開発について、談義しましょう。
昨今のペーパーレス化が進む社会でも、サーマル(感熱紙)プリントを見る機会は依然として多いです。iPhone や iPad を利用した POS レジからレシートを受け取った経験があるでしょう。その iPhone からどのようにレシートを印刷しているのか気になったことはありませんか。
印刷といえば iOS には Wi-Fi に接続されたプリンターを制御する AirPrint があります。しかしながら、業務用サーマルプリンターは Wi-Fi 非対応の機種も多く、AirPrint は利用できません。サーマルプリンター向けの印刷命令を実行する必要があります。この記事は、iOS デバイスを利用してサーマルプリンターを制御する方法を説明します。Bluetooth で接続可能なサーマルプリンターを対象として、接続や印刷する方法を説明します。また JavaScript で作られたレシート印刷に便利な OSS を iOS アプリで実行する方法も紹介します。この記事を読むことで、業務用サーマルプリンター対応アプリの実装方法を理解し、レシートを印刷できるようになります。今すぐにサーマルプリンターを買い求めたくなるでしょう。
macOS上で動作するIMEを開発するために、Appleが公式で提供するInputMethodKitを利用して開発しました。
InputMethodKitでは主に、IMKInputController、IMKCandidates、IMKServerの3つのクラスを使って開発します。実際に開発をする中で、特にロジックが集中するIMKInputControllerのコードが肥大化し、コードの見通しが悪くなるという問題に直面しました。他にもIME開発特有のデバッグの煩わしさもありました。
そこでコードの見通しの悪さに対してはThe Composable Architecture(TCA)を導入し、IMEのデバッグの煩わしさに対しては、fastlaneを使った自動化や、Repository層とUseCase層を採用したマルチモジュール構成でデバッグ専用のアプリを開発し煩わしさを軽減しました。
本稿では開発を通して得た知見について、実際のコードと一緒にInputMethodKitとTCAを組み合わせた開発手法と、fastlaneを使った効率的なデバッグ方法について解説します。
Swift 6のリリースが近づく中、Swiftの新しい言語機能や改善点を事前に把握しておきたいと考えている方も多いでしょう
将来的にSwiftで導入される新機能は「Upcoming Feature Flags」を使うことで事前に有効化することが可能です。
このポスターセッションでは、この「Upcoming Feature Flags」で有効化できる機能のうち、Swift6より前のバージョンで実装済み(Implemented)になっているものについて全て解説します。
一つでも多くの「Upcoming Feature Flags」を有効化することで、Swift 6のリリースに備えながら、新機能や改善点を効率的にキャッチアップできます。
【内容】
・ Upcoming Feature Flagsで機能を有効化する方法の解説
・ https://www.swift.org/swift-evolution/#?upcoming=true でSwift6より前のバージョンでImplementedになっている全ての機能について、その概要と具体的な例の紹介
Swiftコードバトルの準々決勝 マッチ1
toshi0383 さん vs. Ryu0118 さん
与えられたお題をSwiftで書いてコードが短い方が勝ち、というルールのSwiftコードバトル、準々決勝 4試合です。
「App Clipをご存知ですか?」
iOSの勉強会等で問いかけると、おおよそ参加者の半数は「知らない」と回答します。
世に出て5年は経過しているにも関わらず、App Clipはあまりパッとしない存在でした。
ところが、2024年に入りApp ClipをUI/UXのプロトタイプ共有に活用するアイデアが知られるようになりました。
ざっくり説明すると、App Clipが実質iOSアプリの「一部分」であることを利用し、UIやUXの部分のみを抽出した「ミニアプリ」を配布するというものです。
これまである種面倒な方法で共有を強いられてきたデザイン開発の世界から見ればブレークスルーと言えるものでした。
iPhoneを持っていれば、QR/NFCなどで直ちにデザインの確認ができるのですから、iOS開発に詳しくない方は勿論、「iOSアプリを任意のiPhoneで動かすのがいかに難しいか」を知っているみなさんにとっても、まさに魔法と言えましょう。
本トークでは、AppClipの概要を再確認しつつ、App Clipによるデザイン共有のアイデアを実際にどのようにプロジェクトで活用できるかを見ていきます。
ウェブサービス、画像、あるいはExcelなどでiOSデザインを共有することに課題を感じる方も多いのではないでしょうか?
iOSデザイン共有の最新アイデアが気になる皆様、よろしければぜひお越しください!
Swiftコードバトルの準々決勝 マッチ2
S-Shimotori さん vs. akkey さん
2024年4月、note iOSアプリはアプリ内課金機能をリリースしました。本セッションでは、StoreKit 2の導入、実装、テストについて説明します。これからアプリ内課金を実装しようとする方にとって、参考になる情報を提供できれば幸いです。
具体的には以下の内容を扱います。
CallKitで音声通話機能を実現したことはありますか?
CallKitはiOS 10 / iPad OS10から利用できる音声通話機能を実現するためのFrameworkで、様々なアプリがCallKitを利用して音声通話機能を実現しています。
おそらくアプリを利用して音声通話機能を実現する場合、1対1の通話を実現が実現できればアプリのユースケースのほとんどを十分にカバーできると思います。
ですが、CallKitを使えば、1つのアプリで友達のAliceとの1体1通話はもちろん、その通話中に友達のBobとの1体1通話に切り替えるといったような、一歩進んだ音声通話機能を実現できるのはご存知でしたでしょうか?
本トークでは下記観点などから、快適な通話の実現に必要なCallKitの実装方法についてタクシーアプリでの活用事例を踏まえつつご紹介します。
VideoToolBoxは、AVPlayerなどが属するAVFoundationのさらに低位のレイヤーで、動画の圧縮(エンコード)や伸張(デコード)を行います。AVPlayerは非常に優秀なため、ほとんどの場合、VideoToolBoxを直接利用する必要はありません。しかし、MPEGの構造を理解し、VideoToolBoxを使って特殊再生を行うことで、AVPlayerがどれほど複雑な処理を行っているかを垣間見ることができます。
このトークでは、カメラで撮影した映像ファイルをVideoToolBoxで特殊再生する方法を解説します。
このトークを通じて、参加者はMPEGフォーマットの重要な仕組みを理解し、VideoToolBoxを用いた特殊再生の実装方法について学ぶことができます。
Swiftコードバトルの準々決勝 マッチ3
kishikawakatsumi さん vs. Kota1021 さん