2024年2月にUS限定でApple Vision Proが発売されました。
5月現在、このApple Vision Proはまだ日本で発売されていませんが、一定台数のApple Vision Proが国内に存在しています。
しかしこのApple Vision Pro、なにも知らずに国内で電源を入れると「電波法」に抵触します。
皆さん、ちゃんと「技適未取得機器を用いた実験等の特例制度」を申請していますか?
本記事では、電波法と技適とその特例制度について、その存在意義と申請までの手順を解説します!
同制度を利用することによって技適未取得のデバイスを気軽に、合法的に、利用できるようになります。
現代のアプリ開発において、アクセシビリティは欠かせない要素となっています。特に視覚障害者にとって、VoiceOver対応は非常に重要です。本記事では、SwiftUIを用いたVoiceOver対応のアプリ開発に焦点を当て、その具体的な手法を紹介します。
アクセシビリティラベルの設定
ボタンや画像などの要素には、意味のあるアクセシビリティラベルを追加します。これにより、VoiceOverが適切な情報を読み上げることができます。例えば、"再生"ボタンには"音楽を再生するボタン"というラベルを設定します。
要素の順序設定
画面上の要素が論理的な順序で読み上げられるように設定します。特にフォームや複数のボタンがある場合、ユーザーの操作がスムーズになります。例えば、入力フォームでは、名前、メールアドレス、送信ボタンの順に読み上げられるようにします。
アクセシビリティインスペクタを使用したテスト
アプリのVoiceOver対応を確認するために、アクセシビリティインスペクタを使用してテストを行います。これにより、VoiceOverが期待どおりに機能しているかどうかを確認できます。
以上の手法を組み合わせることで、視覚障害者を含む多くのユーザーにアクセス可能なアプリを提供し、ユーザー体験を向上させることができます。
Pull Request (PR) が不毛なコメントばかりでなかなかマージされない。
PR を開いたものの、差分が大きすぎてそっと閉じた。
という経験が誰しもあると思います。
本記事では、作成した PR が素早くマージされるため、レビュアー/レビュイー双方の手間を削減するノウハウを共有します。
特別なツールを導入したり、ChatGPT に業務のセンシティブな情報を投げてしまう前にやれることがきっとあるはずです。
皆さん、*許可リクエストをしっかりハンドリングできてますか?👀
アプリ上で位置情報やATTなどのプライバシーデータを扱う場合、アクセスするために*許可リクエストを適切に行うことはアプリ開発者において重要な責務の一つです。
ただ、データを扱うフレームワークごとに許可リクエストのAPIは異なっており、後続処理の制御にコールバックが提供される場合もあれば、位置情報やBluetoothのようにDelegateパターンで提供される場合もあります。
そのため、複数のリクエストを同時に呼び出したり、”データをこのように使用します”という事前説明画面の後に呼び出すなど、前後処理に紐づけて柔軟に呼び出すケースでは複雑な実装となりがちです。
本記事では、以下の二つをコードを交えてハンズオン形式で紹介していきます。
・既存のコールバックやDelegateパターンの実装をSwift Concurrencyのasync/awaitで扱えるようにする
・異なるフレームワークの許可リクエストを共通のAPIから呼び出せるようにする
withCheckedContinuationでコールバックやDelegateを置き換えたり、Actorでデータ競合対策など、実際のコードを置き換えながら学んでいきましょう!
* 本記事では、プライバシーデータにアクセスするための処理を「許可リクエスト」と表現しています。
みなさん、技術書を書いたことはありますか?
紙の本として印刷する場合、様々な決まりに従ってレイアウトを施す必要があります。例えば、用紙サイズ・左綴じと右綴じ・余白・断ち切り・背幅・トンボ・ノンブルなどがあります。
これらの設定を手助けしてくれるツールは数多く存在しますが、本稿では Adobe InDesign を例に技術書作りのノウハウをご紹介します。
特に、言語設定が原因で締め切りギリギリで再入稿することになった経験など、実体験を踏まえた注意点や便利な機能の活用法を紹介します。
パンフレットを読んで「私もパンフレット記事を書いてみたい!」と思った方はもちろん、他のツールを使って執筆を行っている方にとっても有益な情報となること間違いありません!
iOSDC Japan 2023 のパンフレット記事として掲載された「Apple Silicon のためのアセンブリ入門」の続編です。
前回はニーモニックと文字出力について解説しましたが、本稿では演算処理をアセンブリで記述する方法に焦点を当てます。
Intel CPU を搭載した Apple デバイスがストアから姿を消すなど、 Apple Silicon は大きく進化しました。
私たちがこの Apple Silicon と非常に近い距離で対話する手段、それがアセンブリです。
アセンブリは機械語に非常に近い低水準言語であり、特定の CPU アーキテクチャに依存して記述方法が異なります。これに対して、Swift などの高水準言語では記述方法がほとんど変わらないため、アセンブリの特性について疑問を抱く方もいるかもしれません。
本稿では、 Apple Silicon 上でアセンブリを用いて演算処理を行う方法を紹介します。最初は仕事に直接役立たないように思えるかもしれませんが、日常的に Swift で書いている演算処理がコンパイラによってどのように機械語に変換されているのかを理解する絶好の機会です。きっと Apple Silicon がさらに魅力的に感じられるでしょう!
「SwiftLint」という、Swift用の静的解析ツールがあります。
SwiftLintには標準で多数のルールが用意されていますが、正規表現を使って自分でカスタムルールを作ることもできます。
私は主に以下の観点でカスタムルールを作っています。
Date()
より .now
を好む)foregroundColor()
より foregroundStyle()
を使う)本記事では私が実際に使っているカスタムルールを紹介します。
取り入れなくても読むだけで勉強になりますし、正規表現なのでそのまま一括で置換もできます。
ぜひこの機会に処理の統一化や非推奨APIの置き換えを図りましょう!
Swiftでもシェルスクリプトのようなことができるのは既に知られていることかと思います。
しかし、標準の開発環境であるXcodeではSwiftスクリプトのサポートがほとんどされておらず、標準APIのコード補完すらできないのが現状です。
一方で、VSCode (Visual Studio Code)にSwiftプラグインを導入することでコード補完はもちろん、変数の型の確認が容易になるなどの恩恵を受けられます。
更に、GitHub Copilotも標準サポートされているのである程度の単純作業であればすぐにスクリプト化することができます。
本記事では、VSCodeにSwiftプラグインを導入する手順を解説し、実際にzshで書いたスクリプトをSwiftで書き直した事例を紹介します。
SwiftUIでは、@Stateや@Environment*などのプロパティラッパーを使って状態を管理します。@Stateは多くの開発者に親しまれていますが、@Environmentはその適切な使い方が十分に理解されていないことが多いです。本記事では、@Environmentの基本的な仕組みから高度な応用方法までを詳しく解説します。
本記事では以下の内容をカバーします:
本記事を通じて、@Environmentの基礎から応用までを学び、SwiftUIアプリの開発において効果的な状態管理手法を習得できます。初心者から中級者まで幅広い層に役立つ内容を提供します。
*: 本記事では@Environment(.keyPath)のみを取り扱います。@Environment(ObjectType.self)は敢えて取り上げません。
Network Frameworkは、WWDC18で発表されたデータ送受信のためのネットワーク接続用フレームワークです。このフレームワークを使用することで、TLS、TCP、UDPなどのプロトコルに直接アクセスが可能です。また、URLSessionの内部でも使用されており、多くのアプリケーションを支えています。
Bonjour (ボンジュール) は、Appleが開発したゼロ・コンフィギュレーション技術で、IPアドレスやホスト名を入力せずに接続する方法を提供します。例えば、AirPrintのプリンター自動検出やHomeKitへの接続に使用されます。
本稿では、Network Frameworkを活用し、NWBrowserでのネットワークサービスの検出と、NWListenerおよびNWConnectionを用いた通信について解説します。
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らしい関数名の命名について紹介します。
スワイプ等をはじめとする指の動きに合わせた変化量や画面要素内のスクロール処理を連動する様な、機能性と触り心地に加えささやかな遊び心も兼ね備えたUI実装に関しては、UIKitがメインであった当時から、様々な創意工夫の余地があり使いやすく利用できるOSSも沢山生まれてきた経緯があったかと思います。
SwiftUIでのUI実装が徐々に普及し、SwiftUIに備わった機能やできる事も徐々に増えていった現在では、これまではUIKitを活用する事で実現していた様な複雑な実装であっても、徐々に実現可能になりつつあるので、今後は複雑なUI実装にも積極的に活用できる可能性を感じています。
本稿では、SwiftUIを活用した実装方針の中で、
の様なトピックにフォーカスをして、実現にあたり押さえておきたいポイントを解説します。
macOS上で動作するIMEを開発するために、Appleが公式で提供するInputMethodKitを利用して開発しました。
InputMethodKitでは主に、IMKInputController、IMKCandidates、IMKServerの3つのクラスを使って開発します。実際に開発をする中で、特にロジックが集中するIMKInputControllerのコードが肥大化し、コードの見通しが悪くなるという問題に直面しました。他にもIME開発特有のデバッグの煩わしさもありました。
そこでコードの見通しの悪さに対してはThe Composable Architecture(TCA)を導入し、IMEのデバッグの煩わしさに対しては、fastlaneを使った自動化や、Repository層とUseCase層を採用したマルチモジュール構成でデバッグ専用のアプリを開発し煩わしさを軽減しました。
本稿では開発を通して得た知見について、実際のコードと一緒にInputMethodKitとTCAを組み合わせた開発手法と、fastlaneを使った効率的なデバッグ方法について解説します。