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

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

UniversalLinksの設定方法とハマりポイント

# ユニバーサルリンクとは
Webサイトのリンクをクリックした時にiOSアプリを起動させるAppleが提供している機能のことです。
SafariまたはWebサイトを経由することなく、アプリ内のコンテンツに直接リンクすることができます。アプリがインストールされている場合は、アプリでユニバーサルリンクが開きます。インストールされていない場合は、デフォルトのWebブラウザでリンクが開きます。[^1]

# ユニバーサルリンクの仕組み
XcodeのAssociated Domainsで設定したドメインのapple-app-site-association(以下、AASA)が、アプリの初回ダウンロード時・アップデート時にAppleのCDNからダウンロードされることで、AASAに記載されている特定のパスからのみアプリを起動可能になるというものです。
図にすると以下のような感じでしょうか。
![スクリーンショット 2024-03-13 22.51.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425368/4a

元記事を表示

iosで複数のImageViewを拡縮回転して置けるViewを作成をしてみた

## サンプルGif
![RPReplay_Final1709803076.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165363/c280cbac-b1c8-36cf-566e-ce6333b2312f.gif)

## 事前準備など
RxSwiftを使うので追加をしておく
今回はVer6.6.0を使用しました

cocoapods
“`
 pod ‘RxSwift’, ‘6.6.0’
 pod ‘RxCocoa’, ‘6.6.0’
“`

CGPointについてのExの作成
“`swift
extension CGPoint {
// 二点間の距離を返す
func length(from: CGPoint) -> CGFloat {
return sqrt(pow(self.x – from.x, 2.0) + pow(self.y – from.y, 2.0))
}
// 二点を結んだ線分の角度(ラジアン)を返す
func rad

元記事を表示

【知見メモ】NavigationBarのBackButtonのサイズが大きくなってしまうケースの応急処置

# 概要

本記事では、カスタマイズされたNavigationBarを用いて画面遷移した際、BackButtonのサイズが意図せず大きくなってしまう問題の対処法を紹介します。

プロジェクトの構成や具体的な再現方法には触れませんが、同様の問題に直面した際の参考にしていただければ幸いです。

# 背景

私の所属しているプロジェクトでは、不透明な色、透明、および非表示の状態を持つ3種類のNavigationbarがあります。

これらの異なるタイプのNavigationbarが混在すると、画面遷移時にスタイルが崩れやすくなるため、独自にカスタマイズしたNavigationbarを使用しています。

# 問題

特定の条件下で、タイトルの位置がずれるという問題に遭遇しました。
再現手順はアプリに依存するため、エッジケースだと考えられます。

![スクリーンショット 2024-03-13 15.14.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368292/7dcd3f50-12be-eb3d-2f

元記事を表示

Simulatorの画面を録画するbash

# Simulatorの画面を録画する方法

下記シェルを実行することにより、録画できます。

“`bash
xcrun simctl io booted recordVideo ~/demo.mov
“`

aliasにするとこんな感じ

~/.bashrc or ~/.bash_profile

“`bash
alias simrec=”xcrun simctl io booted recordVideo ~/demo.mov”
“`

元記事を表示

Intune から iOS/iPadOS に ブックマーク (Web クリップ) を展開する!【GIF付き】

先日 Intune の「iOS/iPadOS Web クリップ」機能を使って、Intune Company Portal (`portal.manage.microsoft.com`) ブックマークを展開しました。
ユーザー エクスペリエンスなど確認しながらチューニングすると、なかなか奥深かったです。

もともとは Web-based device enrollment[^1] の一部として記事にしようと思っていましたが、任意構成である Web クリップについて語りたいことが増えてしまったため、独立した記事としてこちらを先にまとめます!

「そういえばブックマーク展開したかったんだよね」というみなさまに刺さればうれしいです。

[^1]: Web-based (Web based) device enrollment:日本語表記は「Web ベースのデバイス登録」。2023年10月にGAされた BYOD iOS/iPadOS 向けの新しいデバイス登録方法 (参考:[Set up web based device enrollment for iOS](https://learn.micr

元記事を表示

【Swift】DIとは?コンストラクタインジェクションについて説明

# 目次
[1.DIとは?](#DIとは?)
[2.コンストラクタインジェクションの実例](#2-コンストラクタインジェクションの実例)
[3.おわりに](#3-おわりに)

# 1. DIとは?
正式名称Dependency Injection、通称DI。日本語で言うと「依存性注入」です。
訳分からないですよね?、、
でも、大丈夫です。本記事で誤解を恐れずに、なるべく簡単に説明します。

DIとは、簡単に言うと「オブジェクトを生成する際に(、もしくは遅れて)、必要なデータセットを渡しますよ〜」と言うことです。
その中でもSwiftのDIでは***コンストラクタインジェクション***というものがあります。
コンストラクタインへクションとは簡単にいうと「オブジェクトを生成する際に、必要なデータセットを渡しますよ〜」です。

# 2. コンストラクタインジェクションの実例
早速コードを見てみます。
## コンストラクタインジェクションを***使用しない***場合
~~~swift: HogeWireframe.swift
protocol Wireframe {
associate

元記事を表示

development.csr 証明書の作成

# はじめに

パソコンを新しく乗り換えて、初めての証明書更新
毎年手順が覚えられないので、メモメモです

# 手順

ローカルPCの証明書を発行する。

![スクリーンショット 2024-03-13 1.06.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517291/4794427a-382b-e07d-5cc6-742ee712f04a.png)

![スクリーンショット 2024-03-13 1.07.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517291/f1219b20-18bf-fe6e-1167-9b100ac3f78b.png)

![スクリーンショット 2024-03-13 1.08.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517291/8d655642-b3e0-64cc-3670-

元記事を表示

開発チーム発足時に最初にやったこと

# はじめに
今年度に自身のキャリアとして初めて,新規モバイルアプリケーションの開発にチームビルディングから参加しました。

開発チーム発足時に最初にやったことを備忘録も兼ねて記載していこうと思います。
# ブランチ戦略の決定
発足時は下記のようなブランチ戦略で開発を始めました。
タスク管理にはJiraを使用していたのでGitHub連携機能を使用し, 開発ブランチについてはチケット番号をそのままブランチ名にして管理していました。
![スクリーンショット 2024-03-10 23.52.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1550392/7e085709-af9b-7df1-43b1-9c754d267ff8.png)

|ブランチ名 |役割 |
|—|—|
|main |マスターブランチ このブランチは必ず動く |
|feature(CH-XXXX/CH-YYYY) |開発用ブランチ チケット名をそのままブランチ名に |
|release |リリースブランチ cod

元記事を表示

ビルドできないエラーについて

## はじめに
私は最近プログラミングスクールにて学習をスタートした初学者で、学習していく中で疑問に思ったことや苦労したことなどについて記事を書いております。

知識が浅はかですので、間違っている部分があるかもしれません。
あらかじめご了承ください。

## Realmをインストールしたらビルドができなくなった
cocoapodsにてRealmをインストールしてから急に下記のエラーがでて、ビルドができなくなりました。

![スクリーンショット 2024-02-29 20.48.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715605/20815650-ea48-1ed5-f9e5-a96b330c4d99.png)

**Command PhaseScriptExecution failed with a nonzero exit code**をググってみたところ、同じようなエラーが出ている人の記事を見つけることができましたが、エラー解消につながりませんでした。

## 試したけどダメだった

元記事を表示

【Flutter × Vuforia】flutter unity widgetを用いてiOS向けARアプリを作成する

# はじめに
UnityとVuforiaをFlutterに組み込み、iOS向けのARアプリを作成する方法をご紹介します。

本稿は[【Vuforia × Unity】URLから取得した画像をARマーカーとして使う](https://qiita.com/aosounairo_/items/9a4cb9efed81f5738245)で作成したUnityプロジェクトを使用しています。

https://qiita.com/aosounairo_/items/9a4cb9efed81f5738245

# 開発環境
“`
macOS: 14.1.2
iOS: 17.3
Flutter: 3.19.0
Dart: 3.3.0
Unity: 2022.3.15f1
Vuforia: 10.21.3
VS Code: 1.84.2
XCode: 15.1 (15C65)
“`
# 事前準備

– Unityプロジェクトの作成
https://qiita.com/aosounairo_/items/9a4cb9efed81f5738245

>今回使用するUnityプロジェクトは以上のものを使用し

元記事を表示

デザインパターンと図からさくっと理解するRxSwift

## はじめに

こんにちは。
モバイルアプリエンジニア2年目として、iOSアプリやAndroidアプリの開発を行っています。

最近の開発の中で、ReactiveX(以下、Rx)にはじめて出会ったのですが、このRxなかなかとっつきにくく理解するのにかなり苦労していました。そこでObserverパターンの観点から、Rxの登場人物の役割や関係を図で整理してみるとイメージがかなりつかみやすかったので、記事としてまとめてみました。

最近のトレンドを考えると新規のプロジェクトでRxを使用することは少ないかもしれませんが、自分のように何らかの理由でRxを理解する必要が出てきた場合に、この記事が少しでも役に立てば幸いです。

:::note warn
本記事はSwiftを対象としてます。
具体的なライブラリとバージョンは以下のとおりです。

– RxSwift v6.x
– RxCocoa v6.x
:::

## この記事の対象者

– Swiftの基本的な文法をある程度理解している人
– GoFのObserverパターンについてある程度知っている人
– 本記事でも簡単に触れますが、そうで

元記事を表示

【Flutter × Unity】UnityのSceneをFlutterで制御する

FlutterにUnityを組み込むことができる「flutter_unity_widget」
今回はこのプラグインを用いて、UnityのScene切替をFlutterで制御する方法を紹介します。

# はじめに
### 前提条件
– **flutter_unity_widget** プラグインを使用したことがある

https://github.com/juicycleff/flutter-unity-view-widget?tab=readme-ov-file

:::note warn
注意
本稿では導入に際する詳細な手順(UnityプロジェクトのセットアップやRunnerの設定など)については省略をしています。
:::

# 開発環境
“`
macOS: 14.1.2
iOS: 17.3
Dart: 3.3.0
Flutter: 3.19.0
Unity: 2022.3.15f1
Vuforia: 10.21.3
VS Code: 1.84.2
XCode: 15.1 (15C65)
“`

# Unity側の設定
`Assets` > `Scene`に「Scene1」「Sc

元記事を表示

IsarでMap型は取り扱えないので, IsarLinkを使った話

# Isarとは
[Isar公式ドキュメント](https://isar.dev/tutorials/quickstart.html)曰く,**最もcoolなFlutterデータベース**とのこと。

Flutter のために最適化された高速で軽量なオープンソースのデータベースエンジンであり, 他のモバイルデータベースエンジンと比べてはるかに高速で, あらゆるオブジェクトのデータを保存できます。

執筆時現在, Isarが対応している型は以下です。

– bool
– byte
– short
– int
– float
– double
– DateTime
– String
– List
– List
– List
– List
– List
– List
– List
– List

残念ながらMap型には対応しておらず, 複雑なオブジェクトを取り扱う必要がある時に少し困ります。

# IsarLinkとは
`リンクは、例えばコメントの作成者(User)のようなオブジ

元記事を表示

FlutterFlow GitHub経由でデプロイする際のエラー

## 初めに
### FlutterFlowについて

FlutterFlowは、爆速モバイルアプリ開発を実現する、画期的なノーコードツールです。簡単なアプリなら本当にその日のうちにテストフライトまでが完了していると優れたツールです。
他のノーコードツールと違って書ける、Flutterアプリとして吐き出せる、という点が強みです。
Flutterでできることならなんだってできちゃいます。

https://flutterflow.io/

### GitHubを使った開発が可能

FlutterFlowではコードをGitHubのレポジトリにボタンひとつでプッシュする機能が備わっています。また、それだけではなく、GitHub上のブランチを指定すると、そのブランチのコードを使ってデプロイまでしてくれます。

例えば、僕はFlutterFlowではどうしても修正できない箇所を修正・追加するためにこの機能を使っています。(具体的な手順は下の通り)

1. FlutterFlowからGitHubのレポジトリにプッシュ(flutterflowブランチが作成される)
1. プッシュされたコードをmai

元記事を表示

【iOS】初心者がSwift UI でフェイストラッキングをやってみた

# はじめに

こんにちは、エンジニアのkeitaMaxです。

以下の記事で紹介されているソースを動かしてみてiOSのFace Trackingを自分なりに理解してみようと思います。

https://seeds-digital.com/switui-ar-face-tracking/

# ソースをそのまま動かしてみる。

まずは前回作成した`example-ar-app`に組み込んでみようと思います。

“`swift:FaceTrackingView
import SwiftUI
import RealityKit
import ARKit

struct FaceTrackingView : View {
var body: some View {
ARFaceTrackingContainer().edgesIgnoringSafeArea(.all)
}
}
struct ARFaceTrackingContainer: UIViewRepresentable {

func makeUIView(context: Co

元記事を表示

【SwiftUI】push遷移先でタブバーを非表示にした後、前画面に戻った時にタブの表示が遅れる問題の解決法

## 概要
以下のような仕様を実現したいと考え、TabViewとNavigationStackを使用することにしました。
– 複数のタブがある
– タブの中の画面から別画面にpush遷移するが、その際、表示する画面はフルスクリーンで表示したい
– 別のタブでも上記を実現したい
(複数のタブでNavigationStackによる遷移を利用するため、NavigationStackでTabViewをラップすることは出来ない)

この仕様に対して、TabViewでNavigationStackをラップし、`.toolbar(, for:)`にhiddenを設定すれば良いと考えていましたが、以下の問題が発生しました。

**遷移元から別画面にpush遷移後、遷移元に戻るとタブバーの表示にラグが発生する**

この問題に対して、以下で考察と解決法の実装を行います。

## 考察
遷移先の画面(SecondView)に遷移後、前画面 (FirstView)に戻ると問題なくタブは表示されるのですが、上述の通りタブバーの表示にはラグがありました。
`.toolbar(, for:)`を特に設定しなければ

元記事を表示

SwiftUIでPhoto Libraryを使う

## Photo Libratyから写真を読み込む
iPhoneに保存されている写真を選択して表示するのを今回は、SwiftUIでやってみようと思います。

全体のコード:
“`swift
import PhotosUI
import SwiftUI

struct PhotoLibrary: View {
@State private var pickerItem: PhotosPickerItem?
@State private var selectedImage: Image?

var body: some View {
VStack {
PhotosPicker(“Select a picture”, selection: $pickerItem, matching: .images)

selectedImage?
.resizable()
.scaledToFit()
}

元記事を表示

enumを使ってUIStateを管理する

## 状態でUIを切り替えてみる
enumを使って、ロード中、成功、エラーの分岐処理を作りswitchを使って、Objextを切り替えるのをやってみました。

英語で、loading(ロード中….)、success(成功!)、failed(失敗した!)を意味する`enum`を定義して今回使ってます。
“`swift
enum LoadingState {
case loading, success, failed
}
“`

全体のコード
“`swift
import SwiftUI

struct LoadingView: View {
var body: some View {
Text(“Loading…”)
}
}
struct SuccessView: View {
var body: some View {
Text(“Success!”)
}
}

struct FailedView: View {
var body: some View {
Te

元記事を表示

SwiftUIでキーボードを閉じる

## SwiftUIでキーボードを閉じたい!
SwiftUIでは、キーボード自体に閉じるボタンを追加することはできません。しかし、画面のどこかをタップするとキーボードが閉じるようにすることは可能です。

以下のように、TapGestureを使用して画面全体にタップジェスチャーを追加し、そのアクションでpinFocusStateをnilに設定します。
“`swift
@FocusState var focus:Bool

var body: some View {
VStack {
// Your existing code…
}
.gesture(
TapGesture()
.onEnded { _ in
pinFocusState = nil
}
)
}
“`

こちらに完成品のコードございます。pincodeなるものを作りたくて試してました。キーボードが閉じれなくて困っておりました💦
キーボードの上の画面をタップすると閉じます!

元記事を表示

String Catalog(xcstrings)ファイルでローカライズの手順をおさらい

# 概要

最近、社内のプロジェクトでローカライズが必要になったので、まとめてみました!!

ただ、今回紹介するローカライズの方法はiOSアプリ開発におけるローカライズのベストプラクティスでは**無いと自負しています**ので、もっと効率的な良い方法があればご指導ご鞭撻賜りたいです。

### 実装方針
ローカライズしたい文字列とその文字列を参照するためのKeyをString Catalog(xcstrings)内で管理します。
これは、ローカライズする際に使用するString Catalogファイルがキーとバリューで画面に表示する文字列を変更してくれるためです!

### 結論(学んだこと)
– Xcode15以降ではStringsファイルでなく、String Catalogを推奨されていることとそれを使用する方法
– ローカライズを実装する際に、必要なセットアップ方法と(今の所適切であろう)各言語の管理方法
– 画面に表示する文字列の管理が簡単になる(言語対応しない場合かつ、重複した文字列を使用することが多い場合も楽かも)

### こんな人におすすめ

:::note info

元記事を表示

OTHERカテゴリの最新記事