iOS関連のことを調べてみた

iOS関連のことを調べてみた
目次

[WWDC24][概要] Platforms State of Union

WWDC24で発表される機能の概要を説明したビデオ「Platforms State of the Union」のまとめ記事になります。皆様のご参考になれば幸いです。

https://developer.apple.com/videos/play/wwdc2024/102/

# Apple Intelligence
– Apple Intelligenceは、Appleのプラットフォームに強力な生成モデルをもたらすパーソナル人工知能システム
– iOS、iPadOS、macOSに統合され、言語と画像の理解と生成、ユーザー操作の支援を行う強力な新機能を提供
– すべてはユーザーのパーソナルコンテキストの認識に基づいており、プライバシーを考慮して一から構築

![Apple Intelligence](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/bf39ce49-7a27-c915-6262-9504b77

元記事を表示

[Swift] Spritekitでキャラクター表示を勉強してみた!

いろいろなアプリ制作ができるようになるため勉強していたところ、2Dゲーム制作などに使えるSpriteKitに興味が出てきたのでさっそく勉強してみました。

## SpriteKitとは?
SpriteKitは、Apple が提供する 図形、粒子、テキスト、画像、およびビデオを2次元で描画するための汎用フレームワークです。Metal を活用して高性能レンダリングを実現し、ゲームやその他のグラフィックを多用するアプリを簡単に作成できるシンプルなプログラミング インターフェイスを提供します。
iOS、macOS、tvOS、およびwatchOSでサポートされており、GameplayKitやSceneKitなどのフレームワークとうまく統合されています。

Swiftで開発をしている自分にとっては、学習コストが低くとりあえずシンプルなゲームを作るには十分な機能を備えているのでゲーム開発の初期学習には十分かと思います。

https://developer.apple.com/documentation/spritekit/

## ・参考
今回、勉強するにあたり下記の方の記事を参考にさせていただき

元記事を表示

CVPixelBufferからCMSampleBufferに変換

### 実現したかった内容
1. Flutterでリアルタイムに取得した画像をUint8形式へ変換
2. 画像ごとにMethodChannelでプラットフォーム(Swift)に送る
3. SwiftでUint8からCMSampleBufferに変換する

というような処理を作成していました。その際、Uint8からCVPixelBufferまでの変換は調べると沢山の例が出てきたのですが、CVPixelBufferをCMSampleBufferに変換する例は少なく、実装するのに苦労していました。
今回は自分で作ってみてひとまず動いた例を紹介します。

### 変換に必要な物

– CVPixelBuffer(用意済み)
– CMSampleTimingInfo
– CMVideoFormatDescription

### CMSampleTimingInfoを用意
画像の時間情報を生成します。単位はナノ秒を使用し、Dateを拡張してタイムスタンプを生成しています。
“`swift
let timeScale = CMTimeScale(NSEC_PER_SEC)
let pts = C

元記事を表示

iPadOS 18でのTabbarの仕様変更は結構骨が折れるやつかもしれない

[WWDC2024](https://developer.apple.com/jp/wwdc24/)が開催中ですね。
その発表の中で気になる点があったので速報と備忘録としてまとめてみます。

# TL; DR
– iPadOS 18ではタブが再設計され、タブ⇔サイドバーの切り替えが可能に
– タブバーは画面上部に移動した
– `SwiftUI.TabView` だけでなく、 `UITabBarController` を使っている場合も影響がある(6/12現在のiPad OS 18 betaの挙動)
– 「タブ」の前提が大きく変わりそうなので、がんばりましょう

# 環境
– Xcode 16 beta(Released in June 10, 2024)
– iPadOS 18 Simulator

# 前提: iPadOS 18 で再設計されたタブバー
– iPadOS 18において、タブバーは画面上部に表示されるようになった[^1]
– iOS 18では、従来通り画面下部のまま

![image.png](https://qiita-image-store.s3.ap-

元記事を表示

Swift & SwiftUIでタロットカードアプリを作る

# はじめに
Swiftの学習を兼ねて、簡単なタロットカードアプリを作ってみました。
今回は画像を使わず、文字だけで作ります。

Xcodeが必要なので、環境はmacOSです。
(私のMacが古いので、今と違うところがあるかもしれません)

# 要件
– 起動したら「カードを引く」ボタンを表示
– ボタンをタップしたらタロットカードをランダムに表示
– 「もう一度引く」ボタンで再度タロットカードをランダムに表示

# 準備
### Xcodeプロジェクトの作成
1. Xcodeを起動し、新しいプロジェクトを作成します

2. “App”テンプレートを選択し、”Next”をクリックします
Flutter案件待ち間の冒険:アプリ模倣チャレンジ – 第1章「時計」アプリ

## さあ、皆さん!最初の冒険の始まりです!

こんにちは、Flutterファンの皆さん!今回は、FlutterでiPhoneのデフォルト「時計」アプリを模倣するチャレンジの第一章をお届けします。どのように実装したか、皆さんと一緒に探求していきたいと思います!

## 進捗とスクリーンショット
まずは、iPhoneのデフォルト「時計」アプリの各機能のスクリーンショットをご覧ください。これらを参考にして、Flutterで再現していきます。

| 世界時計 | ストップウォッチ | タイマー | アラーム |
|:-:|:-:|:-:|:-:|
| Flutter案件待ち間の冒険:アプリ模倣チャレンジの始まり!

## はじめに
こんにちは、Flutterファンの皆さん!アプリ開発の魔法使いを目指して、今、私が取り組んでいるのはちょっと変わったチャレンジです。それは、既存のアプリをFlutterで再現してみるというもの。これは単なる時間つぶしではなく、Flutterの可能性を探求し、その過程を共有するための冒険です。どのようにアプリが構築されているかを探り、それを自分の手で再現してみる。面白そうじゃないですか?

## チャレンジの背景
新しいプロジェクトのオファーを心待ちにしながら、技術の磨きをかけるのに最適な方法として、この「アプリ模倣チャレンジ」を始めました。選んだアプリはiPhoneの定番から、皆さんがお勧めするアプリまで様々。Flutterでどこまで再現できるか試してみます。

## このチャレンジで期待すること
– **新しいトリックの発見**: 既存のアプリから新しいプログラミングの技術やアイディアを学び取ります。
– **コミュニティとの交流**: GitHubにコードをアップすることで、世界中のFlutter愛好家と知識を共有し、彼らからのインサイトを得ます。
– **創造的

PlaygroundにSwiftパッケージを追加したプロジェクトを爆速で作る

## はじめに

こんにちは。
最近、プロジェクトで新しいSwiftパッケージを試したいと思うことが増えてきました。
しかし、Xcodeを普段お使いの方には伝わるかと思うのですが、新しいパッケージを試すためだけの環境をすぐに用意するのは思ったよりも手間がかかりますよね。
とくにXcodeに慣れていない方(私もその一人です)にとっては、とりあえず試したい環境を作りたいだけなのに…と大変に感じると思います。

そこで、色々調べてみたのですが、ArenaというCLIツールを使うと簡単に作成できることがわかりました。
あまり知られていないかもしれないので、今回はこのArenaを使ってPlaygroundにSwiftパッケージを追加したプロジェクトを爆速で作る方法を紹介します!

:::note warn
本記事では以下の環境を想定しています

– macOS Sonoma 14.3
– Xcode 15.2
:::

## Arenaとは


https://github.com/finestructure/Arena

元記事を表示

コードの品質を向上!SwiftLintとSwiftFormatの導入と結果比較

お疲れ様です。Chamujiです。
今回は***SwiftLint***と***SwiftFormat***の2点について調べた内容を書きたいと思います。

そもそも***SwiftLint***と***SwiftFormat***ってなんだ?という方もいらっしゃいます。
それらを書く前にまずはコーディング規約というものについて説明をさせてください。

# 1. コーディング規約とは
– 複数人でプログラミングをする際、***全員で統一したソースコードを書くために定めるルール***です。
– プログラムの作り方はエンジニアごとに異なるため、他のエンジニアが書いたコードを理解するのは難しいです。
– その結果以下のような**問題**が起こります。
– **可読性低下により新規メンバーが理解できないため属人化・学習コストが高くなる**
– **保守性の低下**
– **潜在的なバグの原因**
– **チーム全体の生産性の低下**

これら問題を解決するために、**コーディング規約を設けることが重要**になります。

## 1-1.コーディング良い・悪い例

元記事を表示

Swift Package Managerでライブラリーを導入してみる

普段はAndroidエンジニアをしているのですが、Xcodeを久々に使用し、ライブラリーの導入について調べていたところ`Swift Package Manager`というのを知りました。

Xcodeにライブラリーを導入するために`CocoaPods`を使用していましたが、AndroidStudioと比べて、少しハードルがあると感じてました。
ですが`Swift Package Manager`では簡単にライブラリーを導入が可能になりました。

https://www.swift.org/documentation/package-manager/

# 導入方法
今回は導入方法のみです。

`PROJECT → Packge Dependencies → + `のアイコンをクリック

![スクリーンショット 2024-06-09 19.22.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/fc7003dc-ec66-8338-6ffa-89a8d342535d.png)

元記事を表示

cocoapods の pod install で `[!] Unable to find a specification for ‘ライブラリ名’` というエラーが出たら

## 落ち着いて

ライブラリ名のスペルミスや TYPO の可能性がないか、確認しましょう(私はこれが一番多い)。

## そうでなければ

そうでないことがハッキリしたら、以下を参照しましょう。

– [pod install で Unable to find a specification エラーがでたら #iOS – Qiita](https://qiita.com/amazedkoumei@github/items/fef8f9b04930927f4069)
– [cocoapodsで \[!\] Unable to find a specification for `ライブラリ名`のとき #iOS – Qiita](https://qiita.com/burakon/items/716174ee003ea48373ed)
– [ios – Unable to find a specification in CocoaPods – Stack Overflow](https://stackoverflow.com/questions/25913733/unable-to-fin

元記事を表示

【Swift】ファイル操作を簡単にするための extension を作ってみた

元記事を表示

iOSでもバックグラウンドでWeb Audio APIの音が鳴るようにする

## 問題提起
iPhone、iPadなどに搭載されているmobile safariの仕様により、WebAudioAPI経由で出した音はホーム画面に戻った際に中断されます。
もう一度safariを開いた際に音は中断したところから再開されますが、以下のコードを記述すればバックグラウンドでも音が再生され続けます。

## 解決策
“`javascript:解決策.js
/* let audioContext; */

window.addEventListener(“visibilitychange”, () => {
if (document.visibilityState !== “hidden”) {
return;
}
audioContext.resume();
});
“`
もっといい方法があれば教えてください🙇‍♂️

### 参考文献
https://developer.mozilla.org/ja/docs/Web/API/Document/visibilitychange_event

https://kimizuka.hat

元記事を表示

iOS開発者向けの Developer Roadmaps が公開されてた

# これ

https://roadmap.sh/ios

# 追加されてる!

![スクリーンショット 2024-06-07 11.20.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281147/e7d7a9d1-2ec0-3dd4-4f02-7ff2eb666d9b.png)

https://roadmap.sh/

今までは同じモバイルアプリでもAndroidだけしかなかったりと、[実は長らく求められていた](https://github.com/kamranahmedse/developer-roadmap/issues/3280)

# デベロッパーロードマップとは?

開発者がその界隈を学ぶ際い体系的にどのスキル・技術を学ぶべきかを表したものです。
OSSでアクティブなもの。

# あとがき

– iOSはSwiftUIが出てきたりして何からやればいいのか複雑だったので、他の人にとっても、個人的にもかなりありがたいのかなと思ってます。
– WWDC2024がいよいよ来週から!楽しみ

元記事を表示

SwiftUI boldのModifierが冗長だった件について

# **背景**
今まで`Text`に対して、`.font(.system(size: ))`のModifierを付与しているときも`.bold()`のModifierを付与していました。
なんとなくFigmaのPluginsの SwiftUI Inspector使った時に、
`.font(.system(size: 14, weight: .bold))`を提案されました。

1行で済むのか…

これは盲点でした。

# **Before**
“`swift
Text(“Hello World”)
.bold()
.font(.system(size: 16))
“`

# **After**
“`swift
Text(“Hello World”)
.font(.system(size: 16, weight: .bold))
“`

**Figma の SwiftUI Inspector**
【Swift】ファイルやディレクトリのパスが長すぎていやだ – URL.shortPath()

長すぎですよね。

![sc 2024-06-07 at 1.17.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/f6804d4a-2f8b-563d-c262-090fc1a651df.png)

“`URL.shortPath()“` を使います。

“`swift
let documents = URL.documentsDirectory

print(documents.shortPath())
// /HOME/Documents/

print(
documents
.appending(component: “Documents and Settings/”)
.shortPath()
)
// /HOME/Documents/Documents%20and%20Settings/

print(
documents
.appending(component: “Documents and Settings”, director

元記事を表示

SwiftUIのDatePicker(graphycal)をタップした時にサイズが変わってしまう問題の対処法と備忘録

# **背景**
SwiftUIのDatePickerは何かと扱いが難しいと感じています。
例えば、DatePickerStyleのdefaultまたはcompactで表示されるselectionのラベルはカスタマイズができないようです。SwiftUIのDatePickerを扱ったことのある人であれば必ず通るのではないでしょうか?
本記事では、ラベルをカスタマイズする方法とその課題についても触れています。

表題の事象にハマった人の一助となれば幸いです。

# **1. graphycalでタップした時にサイズが変わってしまう問題の対処法**

このような事象は許容できなくもないですが、できれば解決したいはずです。
以下のように.frame(width: 320)を追加することで回避できます。
widthを指定しなかったり

元記事を表示

【Swift】fastlaneを使用してリリースまでのステップを自動化する

## はじめに
リリース作業で時間を取られたり手間がかかっているという問題を解決すべくリリース作業を自動化してみようと思います。導入から実行まで紹介します。

## fastlaneとは
iOSやAndroidアプリのビルド、テスト、リリース作業を自動化するためのツールです。

## 導入方法

### 1. fastlaneをインストール

https://docs.fastlane.tools/getting-started/ios/setup/

今回はHomebrewを使用してインストールします。
“`
brew install fastlane
“`

### 2.ターミナルで追加対象のプロジェクトのディレクトリに移動し、initを実行します。

“`
cd /xxx_project

fastlane init
“`

### 3. 質問にいくつか答えます
![インストール開始.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/66f08aee-8c68-500f-910

元記事を表示

Apple Pencil Proのスクイーズに対応する

# はじめに

[Apple Pencil Pro](https://www.apple.com/jp/shop/product/MX2D3ZA/A/apple-pencil-pro)が2024年5月に発売され、ペンの操作に新しいアクション: **スクイーズ** が追加されました。
スクイーズ(squeeze)とは、「強く押す」といった意味などがある単語です。Apple Pencil Pro対応の新しいAPI[^newapi]を使うことで、ペンをギュッと握ったときのアクションを実装することができます。

本稿では、スクイーズの実装例を僕が個人開発している手書きノートアプリ[^bluesketch]から一部抜粋して紹介します。

# スクイーズ時のアクション

Apple Pencil Proをスクイーズしたときのアクションは 設定 > Apple Pencil で選択することができます。

![ApplePencilPro_settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73490/59

元記事を表示

ビルドエラー解決方法 ‘DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead’

環境
Xcode15.0.2

“`
‘DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead’
“`

Xcodeのバージョンを上げてアプリをビルドする際に上記ビルドエラーが発生しましたのでメモ。

## 解決方法
ターミナルで対象アプリのディレクトリに移動します。
以下コマンドを実行します。

CocoaPodsのバージョンを確認して、Homebrewでアップデートします。

“`
pod –version
brew upgrade cocoapods
pod –version
“`

Podsディレクトリを削除して、再度pod installします。
“`
rm -rf Pods
pod install
“`

## 参考
https://blog.landhighest.com/article/179

元記事を表示

OTHERカテゴリの最新記事