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

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

iPadOS18のTabbarの仕様変更を回避する

## 概要

iPadOS18でタブバーのUIが刷新されました。

https://developer.apple.com/jp/videos/play/wwdc2024/10147/

これに伴い、これまで`UITabBarController`や`TabView`を用いて実装していたアプリはこの変更がアプリのUIに影響を与えないかのチャックや必要に応じて改修する必要があります。

この記事では、この変更を回避し、既存のタブバーのデザインを残すコードを紹介しています。

※2024/07/26現在は有効ですが、今後無効化される可能性があります

## 回避するためのコード

iOS17から追加された`UIView`の`Instance Property
`である`traitOverrides`の`horizontalSizeClass`に`.compact`を代入することで、タブバーの変更を回避することができます。

“`swift
class MyTabBarController: UITabBarController {
override func viewDid

元記事を表示

英語日記アプリアップデート!!

## はじめに
みなさんこんにちは。奥江です。
個人アプリをリリースしてから1年くらい経過したので現状を報告します!
それと同時にこんな機能あったらいいのにとかUI変えた方がいいよなどありましたらどしどしコメントしてくれると嬉しいです!

## どんなアプリ?
私自身英語を勉強しており、英語日記かくといいよみたいな記事を発見したのと、本で英語日記は絶対にするべきと書いてあったので、じゃ自分で作ってみよう!となり作ってみました!
日々のこんなときなんて英語で言うのかな?時ってあると思います。そんな時にメモしておいて、英文を作成し繰り返し復習することが出来るアプリです。
オンライン英会話などと一緒に使って頂けるともっと役に立つアプリかと思います。
現状App Storeで「英語日記」と検索すると上から3番目くらいに表示されているかと思います。

https://apps.apple.com/jp/app/ai%E7%BF%BB%E8%A8%B3-%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB%E8%8B%B1%E4%BD%9C%E6%96%87-

元記事を表示

【備忘録】初めてのiOSアプリ開発 第8回 アノテーション

## アノテーションとは
・コードに注釈を追加する機能のこと
コードに付加情報を提供するためのラベルやマークのようなもので、特定の部分に追加の情報や意味を持たせることができる

### アノテーション
・コンパイラの挙動を制御する。
・コードの意図を明確にする。

## アノテーションの役割
・特定のコード部分のコンパイル方法を変更
・特定の最適化を適用

コードの文書化
・コードの意図や使用方法を明確にするための情報を提供する

警告やエラーの生成
・あるコード部分が非推奨であることや、特定の状況下での使用を避けるべきであることを表す

## アノテーション(属性)の種類
@IBOutlet
Interface Builderでユーザーインターフェース要素とコードを接続するために使用されます。通常、IBOutletはビューコントローラーのプロパティに付けられます。

@IBAction
Interface Builderでアクションを接続するために使用されます。ボタンなどのユーザーインターフェース要素がタップされたときに呼び出されるメソッ

元記事を表示

【備忘録】初めてのiOSアプリ開発 第7回 プロトコル

## プロトコルとは
・あるデータ型オブジェクトが何かを実行するときのルール
プロトコルでは定義のみを行い、メソッドやプロパティ、イニシャライザなど実装は記述しない。
・実装はプロトコルを「採用した」クラスの中で記述する。
・複数継承させることができる。
・プロトコルがプロトコル自体を継承できる。

### 型のインターフェースを定義するもの
・インターフェースを定義し、抽象化する。
・複数の型で共通の機能を実装することができる。
・クラス、構造体、列挙型などで使われる。

プロトコルのインターフェースを満たす型は、「プロトコルに準拠している」と言われる。
プロトコルを使うことを「採用する」「適合する」という。

## 参考サイト
https://www.sejuku.net/blog/35550

https://dotinstall.com/lessons/basic_swift_v2/39126

https://memoriainc.com/2024/01/30/%E3%80

元記事を表示

【個人開発】PasswordBoxってアプリを作ったよって話

個人開発でアプリ作ったので、紹介とかいろいろ語ります。
正直、技術的な話はあまりしません。

# アプリの紹介
改めて、個人開発で iOS アプリケーションを作成しました。
名前は “PasswordBox” です。
名前に「パスワード」とある通り、Password Manager アプリです。
しかし、ただのパスワード管理アプリではなく、パスワードを生成してくれるアプリケーションとなっています。

https://apps.apple.com/jp/app/passwordbox/id6520392403

## アプリの詳細
このアプリは大きく分けて、3個の機能があります。
– ロック画面:FaceIDでアプリのロックを解除します
– パスワードの作成・編集
– アプリの情報

とてもシンプルでチープなアプリだと思います。

### ロック画面
このアプリではパスワードを扱う以上、セキュリティ性を高めるためにアプリを使用するにはパスコード等を使ってアプリを使う必要があります。
しかし、ログイン画面を1から使うのは大変だし、個人的にこのアプリで Firebase などを使ったログイン

元記事を表示

実機ビルドする時

cd ios からの pod installを忘れない!引っかかる時間が無駄ですよ!

元記事を表示

【備忘録】初めてのiOSアプリ開発 第6回 Delegate

## Delegateとは
・あるオブジェクトから別のオブジェクトへ処理を任せる
・どのクラスなのか、どんな処理をするのか移譲先を意識しなくていい
・再利用ができる
「delegate」の意味を直訳すると「人に任せる」、「代理人」という意味

## Delegateの使い方
#### 1.ルールを確認する
公式文書を読む。
#### 2.「それができます」と宣言する
処理を受け付けるオブジェクトを選択する。
#### 3.計画する
どのように処理をするか考える。
#### 4.仕事を受け付ける
オブジェクトに仕事が渡されることを確認する。

## Delegateの使い方を使った実装方法
#### 1.プロトコル
・任せる処理をメソッドとして定義する。
#### 2.処理を任せるクラス
・処理の流れを記述
#### 3.処理を任されるクラス
・デリゲートメソッドを実装

## 参考サイト
https://qiita.com/natya/items/326bd50a78cf34371169

https://youtu.be/Ph8d_UkQeIU?si=oTn2CiHsm

元記事を表示

Xcode16 Beta 3 を入れると Loading a plug-in failed というエラーが出る

## 解決策

Xcode 16 Beta 2 を先に入れると解決する

## 概要

BETAの Xcode 16(BETA3)をダウンロードし実行すると、`Loading a plug-in failed`というエラーが出る

Appleの不具合の様子
> Xcode will fail to launch for some users. Users who have not installed Xcode 16 beta or Xcode 16 beta 2 will see a “Loading a plug-in failed” alert. (131066390)
> Workaround: Use xcode-select -s $PATH to choose Xcode 16 beta 3. Then run xcodebuild -runFirstLaunch. Then Xcode will be able to launch.

https://developer.apple.com/documentation/xcode-release-notes/xcode-

元記事を表示

iOSに組み込まれたBERTでテキスト埋め込み・ベクトル検索をオンデバイス実行する

## 概要

iOSに組み込まれたBERTでテキスト埋め込みおよびベクトル検索をオンデバイス実行するためのアプリケーションのコードサンプルとその解説記事になります。

## 背景

ChatGPTが話題を博し、LLMを活用した要約や文章作成、テキスト埋め込みなどさまざまなアプリケーションが登場しました。([筆者もOpenAIのAPIを用いて議事録の要約を実装した](https://qiita.com/5enxia/items/ee1e9536a87b46ed61c5))テキスト埋め込みの例として、[OpenAIのAPIにはテキスト埋め込みのAPI](https://platform.openai.com/docs/guides/embeddings)があり、与えたテキストをベクトルに変換することができ、ベクトルDBと組み合わることでセマンティック検索が可能になります。

本記事は、そんなテキスト埋め込みとベクトル検索をiOSやMacOSに組み込まれている自然言語処理フレームワークである`NaturalLanguage`の`NLContextualEmbedding`と数値計算フレームワ

元記事を表示

初心者がiOSのプッシュ通知を実装できた話(何からしたらいいんだろうを解決)

# はじめに
プッシュ通知の実装にあたり、どこから手をつけていいか全く見当もつかなかった。色々と調べていくと、iOSアプリ側のコード、AWS SNSの設定、DynamoDBの設定など、複数が関わるため非常に複雑だった。なんとか実装できたので記録として残す。ここでは、具体的なコードではなく、実装の手順や流れについて書く。

# 使ったもの
今回は諸事情によりAWS SDKを使えず、API Gateway経由でLambdaを実行し、プッシュ通知を実装した。
* AWS SNS
* AWS Lambda
* AWS DynamoDB
* AWS API Gateway
* Swift

# 前提

[2019年度版]AWS SNSでiOSのプッシュ通知 設定手順まとめ

これを参考にしてAWS SNSでプラットフォームアプリケーションの設定は完了している。

# 最終的に作りたいもの
**アプリ内にあるボタンを押した時に関連する人へプッシュ通知を送るというもの**

# プッシュ通知実装までの過程

### 1. 色々と調べた
最初からサーバーと連携させ

元記事を表示

GitHub APIを使った単体、複合テスト実装ガイド

## はじめに
最近、個人開発アプリのテスト書いて見ようと思ったのですが、スタティックメソッド使っていてモックが使えなかったり、アクセス修飾子にprivateがついてるときはどうするんだろうとわからないことが多かったのでのでテストについて学習しました。

理解を深めるためにGitHub APIを使った単体、複合テストの実装していきます。

Xcode Version 15.2
Swift Concurrencyのasync/awaitを使うのでSwift5.5、iOS 15以降が対象です。
↓sampleリポジトリ

https://github.com/kabikira/GitHubAPITest

## 完成イメージ

ユーザー名を検索してリポジトリ名、スター数を表示する。

## マッピング
https://api.g

元記事を表示

【備忘録】初めてのiOSアプリ開発 第5回 メインスレッドとは

## メインスレッド(Main thread)とは
ブラウザーがユーザーのイベントや描画を処理する。
・UIの更新やユーザーの入力処理はメインスレッドで行われる。

### 1. UIの更新
mainスレッドで行う必要があり、UIの変更がユーザーインターフェースに即座に反映されるようにするため

### 2. レスポンスの確保
メインスレッドで長時間のブロッキング操作を行わないようにする。

バックグラウンドスレッドで長時間かかる処理を実行する。
・ネットワーク通信
・データベースのクエリ

結果が得られたらmainスレッドに戻してUIを更新する。

### 3.イベント処理
ユーザーのタップやスワイプといったイベントをメインスレッドで処理することで、一貫性を保つ。メインスレッドの負荷を軽減し、アプリケーション全体のパフォーマンスを向上させることができる

## 参考サイト

https://jp-seemore.com/app/15513/

元記事を表示

【備忘録】初めてのiOSアプリ開発 第4回 DispatchQueue

## DispatchQueueとは
・タスクの非同期実行や並列処理を行うためのキュー
・バックグラウンドタスクの実行やメインスレッドでのUI更新を簡単に行う。
・AppleのGrand Central Dispatch(GCD)技術の一部。システムリソースを効率的に利用しながら、アプリケーションのパフォーマンスを向上させる。

## Grand Central Dispatch(GCD)とは
・Appleが提供する並列プログラミングのための技術。
・iOSやmacOSで効率的なマルチスレッド処理を実現するために使用される。マルチスレッドを使用することで、プログラムの並列処理の実行や応答性の向上を図る。
・開発者がスレッドやキューを直接管理する必要なく、並列処理を実装できる。

## DispatchQueueの種類
### 直列キュー (Serial Queue)
タスクを順番に1つずつ実行します。タスクの実行順序が保証され、競合状態を避けるのに適しています。

・キューに追加されたタスクを一つずつ順番に実行する。
・1つのタスクが完了するまで次のタスクは実行されません。
・すべて

元記事を表示

iOS18の「アイコンの見た目をLight, Dark, Tintedから選べる例の機能」がやっているであろう処理の推測とアセットの準備方法

本記事の内容はiOS18 beta3, Xcode16 beta3時点のものです。

# TL; DR
– iOS18のアイコンの表示モードを選べる機能では、モードごとにアセットの処理プロセスが異なる
– 各モードの処理特性(推定)を踏まえると、以下のようにアセットを準備するのがよいと考えられる
1. Lightアセットは従来通り
2. Darkアセットの背景は透明にし、アクセントカラーを調整してメインの意匠を配する
3. 色合いを調整用アセットの背景は単色の黒色にし、メインの意匠はモノクロのグラデーションにする

# 前提: iOS18の「アイコンの見た目をLight, Dark, Tintedから選べる例の機能」
iOS18から利用可能になる、ホーム画面上のアイコンの表示をライトモード、ダークモード、色合いを調整(Tinted)の3つから選択できるようになる機能のことです。[^1]

ちなみに、本記事の作成にあたりWWDCビデオやらHIGを見返したんですが、一言でズバリ言い表す機能名がないっぽいですね…
以降、本記事中では「アイコンの機能」と表記します(もし正式名称をご

元記事を表示

【2024年7月版】iPhone / iPad上で 脱獄なし に Linux を動かす【UTM SE / 脱獄なし】

# はじめに

UTM SE(SlowEdition)がApp Storeの審査通ったらしいのでつかってみよう

iPhone上で Linux のVMが動いたらいいのになぁ。。。を叶えてくれる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/e941b9d1-b777-0371-e060-29de1ebe6afa.png)

# 環境

iOS: 17.5.1
機種名: iPhone 14 Pro Max

インターネットにWiFiなどで繋がっていることを前提

# 目標

UTM SE 上で Linux を動かす、ここでは Alpine Linux 3.20

# 概要

1. UTM SE をインストールする
1. インストールしたい Linux の iso をダウンロードする
1. UTM SE で iso からインストールする
1. Linux 起動

# 詳細

Alpine Linux 3.20 ARM64 をインストールして起動します。

## UTM SE

元記事を表示

実機テスト@Xcodeでエラー「Please reinstall cocoapods with `bundle exec pod install`」が発生した時の対処法

## 背景
iPhone7@Xcode14.3.1で実機テストを実施しようとした(再生ボタンをクリックした)ところ、「Please reinstall cocoapods with `bundle exec pod install`」というエラーが発生しました。エラーの対処方法を紹介します。

## 環境
macOS Monterey:12.1
Ruby:3.0.6
Rails:6.1.0
React Native:^0.74.3
expo SDK:~51.0.20
bundler:2.5.3、2.4.13(default:2.4.13)
node:16.20.0
npm:8.19.4
yarn:1.22.19
webpack:4.46.0
※エディターは、VSCodeを使用しています。
※デプロイ先は、herokuです。

## 問題
・Xcodeのログに、以下のエラーが発生しました。
“`
Codegen did not run properly in your project. Please reinstall cocoapods with `bundle exec pod i

元記事を表示

Compose Multiplatformを触ってみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796622/ad1209ef-0318-1d8e-b1d5-d3e763db2f36.png)

## 挨拶

初めまして。
bravesoft株式会社でエンジニアリングマネージャーらしき事をしているおじさんです。

以前弊社技術blogにて[KMMについての記事](https://www.bravesoft.co.jp/blog/archives/13377)を書いていたので、今回はUIも共通化出来るようになった「Compose Multiplatform」について触ってみて所感を書いていこうと思います。

## 始め方

まずは[公式](https://www.jetbrains.com/ja-jp/lp/compose-multiplatform/)の[チュートリアル](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-gett

元記事を表示

[iOS] Apple Storeのリジェクト、Guideline 4.3(a) – Design – Spamへの対応

# はじめに
iOSアプリの申請をしていてリジェクトがくることも結構あるのですが、大半は審査側があまり良く見ずにリジェクトしているのではないかと思うような内容が多く、チャットで少しやり取りしたり、スクリーンショットを添付して送るとそのまますんなりと申請が通ることが多いです。

今回はリジェクトの対応に少し時間がかかってしまったので、解決法のひとつとしてメモしておきます。

# Guideline 4.3(a) – Design – Spam について
今回受けた上記のリジェクトの全文は以下の通りです。

>Guideline 4.3(a) – Design – Spam
>
>We noticed your app shares a similar binary, metadata, and/or concept as apps submitted to the App Store by other developers, with only minor differences.
>
>Submitting similar or repackaged apps is a form of

元記事を表示

iphoneでmarkdownを書くなら「 # Type」がおすすめ

iphoneでmarkdownファイルを読み書きするのにいいアプリはないかと探したところ、

「**\# Type**」 [^1]というアプリに出会いました。

「**\# Type**」 はiphoneユーザーのqiitaをよく使う人におすすめできるmarkdown editor アプリだと思います。

以下、おすすめする理由と使い方を紹介します。

# iphoneのファイル内の.md形式のファイルを自由に開いて編集できる

## 使い方

右上のボタンを開けば、iphoneのファイルが開きます。

![fK1U39SctfVxS1X1Gyfnr27neyF3/0cUWQjpc2OWAXNi3.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/fK1U39SctfVxS1X1Gyfnr27neyF3%2F0cUWQjpc2OWAXNi3.jpg?alt=media&token=ee66e48d-e130-404a-bec1-6c789b8c9f4b)

# qiita への投

元記事を表示

CombineでReactiveSwiftのthrottle(while:on:)が使いたい

# 前書き
皆さん、ReactiveSwiftはご存知だろうか?

正直なところ、RxSwiftと比べてシェアは低く、Combineが登場した今、新たに導入することはあまりないと思う。

実際この記事を書いている時点で、QiitaのRxSwiftの記事は562件あるのに対し、ReactiveSwiftの記事は13件しかなく、ReactiveSwiftのシェアの低さを物語っている。

しかし、ReactiveSwiftには他のReactiveProgrammingのライブラリにはない便利なオペレーターが存在する。

今回紹介する`throttle(while:on:)`もそのひとつ。

`while`に指定した`Property`の値が`true`の間、上流から来る値を堰き止め、`false`になったタイミングで最後に流れてきた値を下流に流す。

ReactiveSwiftのオペレーターについては@sei_kataokaさんの記事が非常に分かりやすいのでおすすめだ。

https://qiita.com/sei_kataoka/items/8e401e9d5b55ff40f3ed#thr

元記事を表示

OTHERカテゴリの最新記事