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

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

AppleプロジェクトにFirebaseのカスタムディメンションを作成する

# 実施前提
・FirebaseをAppleプロジェクトに追加済みであること
https://firebase.google.com/docs/ios/setup?hl=ja
・Firebaseのデフォルトのイベントでは足りず、カスタムしたイベントをロギングしたい方向け

# 目次
[1.Firebaseでカスタム定義の設定](#1-Firebaseでカスタム定義の設定)
[2.Appleプロジェクトにコード実装](#2-Appleプロジェクトにコード実装)
[3.Firebase DebugViewで確認する](#3-FirebaseDebugViewで確認する)

# 1. Firebaseでカスタム定義の設定

1. Firebase -> 使ってみる ->プロジェクトを追加
https://firebase.google.com/?hl=ja

2. Firebase Console -> Custom Difinitionsを開く

3. カスタムディメンションを作成を押下
– ディメンション名:任意
– 範囲 ユーザーの場合:ユーザープロパティ ユーザの属性変更のタイミング

元記事を表示

iOS 17.4で気圧が取得できない問題

## 現象
iOS 17.4で気圧計が取れなくなった。

## バグ
気圧計が呼ばれた際にモーション&フィットネスの許諾ダイアログがでるのことが望ましいが、出ない。
おそらくiOSのバグ。

## 対処法
– 高度計や歩数計など他のセンサーだとモーション&フィットネス許諾がでるので、無理やり呼び起こす。
– 高度計:iPhone 12以降で有効。気圧取得の文脈に近いためこちらがベター。
– 歩数計:iPhone 12 未満でも対応しているが、気圧の文脈とかけ離れているためユーザへの説明が難しい。

Appleさん早く対応してくれ〜😭

## 参考
https://developer.apple.com/forums/thread/747797

元記事を表示

2024 年 5 月 1 日以降ITMS-91055: Invalid API reason declaration PrivacyInfo.xcprivacy

2024年5月1日以降アプリを提出する際にPrivacyInfo.xcprivacyが必須になります。うちのアプリでの設定のスクショです。これで通りました。使用APIに対応した理由を選ばないと通りません。
![スクリーンショット 2024-03-18 6.41.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117011/7d11343f-93fe-440c-cb86-c7e853977650.png)

元記事を表示

【Swift5】SystemSoundを繰り返し連続で再生する

システムサウンド(効果音)を連続で鳴らす方法について紹介する。
同じ方法でバイブレーションを再生することもできる。

“`swift
var counter = 3
“`
“`swift
func soundCallback(sID: SystemSoundID) {
counter -= 1
if counter > 0 {
Thread.sleep(forTimeInterval: 0.5)
AudioServicesPlaySystemSound(sID)
} else {
AudioServicesRemoveSystemSoundCompletion(sID)
}
}

func alarmStart() {
let soundID:SystemSoundID = 1036
AudioServicesAddSystemSoundCompletion(soundID, nil, nil, { (soundI

元記事を表示

SwitchBot API を使い iPhoneショートカットでスイッチ操作

SwotchBotのアプリでやればいいんですが、たくさん登録してると単純操作が面倒なので、ショートカット化してみました。
アプリを入れてるなら、アプリをショートカットで動かせばいいんですが、アプリを入れてない家族のiPhoneにも入れたかったので、せっかくなのでAPIを使ってみました。

## ショートカットの設計
今回登録する機器は、照明なんですが、スイッチを1回押すと電気が付き、もう1回押すと、茶色になり、もう1回押すと消える、みたいな順番で状態が変わる照明です。

メニューを出して、下記の3つから選ぶようにしました。「何もしない」があるのは間違えたときの逃げ道(キャンセル)です。
* 何もしない
* ON/OFF(2回押し)
* ON/OFF(1回押し)

## SwitchBot API
下記が公式サイトです。
最新はV1.1なんですが、簡単なV1.0にしました。
https://github.com/OpenWonderLabs/SwitchBotAPI/blob/main/README-v1.0.md

## トークンの取得
いろんなサイトで記事になっていますが、トークンは

元記事を表示

SwiftUIでiOSアプリを作成してみた~Railsしかわからない人がSwiftUIでTodoアプリを作れるようになるまで~

## はじめに
筆者はwebアプリケーションフレームワーク(Rails)しか触ったことがなく、「俺はこのままでいいのか?」と思って今回iOSアプリに挑戦してみました。今までいろいろwebアプリを個人的に作ってきましたが、友達に見せたい時、いちいち「このURLにアクセスしてみて」と言わないといけないし、真っ先に「AppStoreにないの?」と言われてしまう。「このアプリ使ってみて!」とAppStore見せられるほうがカッコいい。
今後デバイスはなんであれApple製にインストールできるアプリの需要は確実にあるはずだから、学んでおいて損はないだろう!と思い今回挑戦しました。

## 最初に思ったこと
– iOSアプリのライフサイクル(webページだったらリロードすれば更新されるけど…)
– データベースってどうなるんだ?(MySQLとかリレーショナルデータベース使えるの?)
– デザインどうするの?
– 静的型付け言語か…初めてだな(RubyとかJSしかやってこなかったしC#は理解する前にやめた)
– VScode使えるのかな?(Xcodeじゃないとだめ?)
– デバッグってどうや

元記事を表示

【iOS】Realmsをインストールする際に出会ったいくつかのエラーとその対処

Cocoapodsを使ってRealmsをインストールする際にいくつかのエラーが出てしまって、すごい困ってました。
なんとなくエラーを解消することができましたので、その取り組みについてまとめてみました。

## 一応、ビルドファイルどPodfileを綺麗に!
下記の方法を適用する前に、XcodeのビルドファイルとPodfileを綺麗にすることをおすすめします。
具体的には、
・ビルドファイル→Cmd+Shift+Kのショートカットでクリアする。
・Podfile→ターミナルから「pod deintegrate」入力して、ProjectからCocoapodsを削除、ProjectフォルダからCocoapods関係のファイルを削除する(Podfile、Podfile.lock、.xcworkspace)

## 最新バージョンのRealmsがインストールできない
Realmsの最新バージョンは、現時点(2024年3月17日)で「10.48.1」ですが、何故かインストールすると、「10.39.1」バージョンがインストールされてしまいました。
ちなみにPodfileは下記の通りでした。
“`

元記事を表示

「ITMS-91053: Missing API declaration」アプリのプライバシーレポートファイル内でのAPI使用宣言

![itms91053-ja-thumbnail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/d459da31-21b2-e38c-4a2a-4b69b76aee51.png)

App Storeにアップデートを提出しようとして、以下のメールを受け取ったことはありますか?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/bb2f2148-f9ca-bf0f-d682-1b441f44bcff.png)

WWDC 2023で明らかになったように、UserDefaultsのようなAPIを使用する場合は、プライバシーレポートを作成する必要があります。2024年5月1日から、このようなプライバシー宣言なしで新しいアプリのビルドをアップロードすることは許可されません。
プライバシーレポートを作成するには、以下の手順に従ってください:

まず、プロジェクトに新しいファイルを作成します

元記事を表示

【iOS】初心者が公式Sample AppをながらARKitとかMetalを理解する②

# はじめに

こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。

今回はポイントクラウドのサンプルアプリと、公式を見ながらARKitとかMetalとか、ついでにSwift UIとかをふんわりと理解していこうの②です。

前回の記事

https://qiita.com/keitaMax/items/468afa789368eabe646a

下にあるサンプルアプリで色々学んでいきます。

https://developer.apple.com/documentation/arkit/arkit_in_ios/environmental_analysis/displaying_a_point_cloud_using_scene_depth

# ARDataProviderをみる

前回、点群情報をARDataProviderファイルの`onNewARData()`に渡しているところで終わったので、この続きからみていこうと思います。

“`swift
func onNewARData(arData: ARData) {
lastArData =

元記事を表示

IPAファイルがApp StoreにアップできないAsset validation failed (90771) Missing Info.plist value.の解決法

# IPAファイルがApp Storeにアップできない
Fastlaneなどでビルドからストアにアップロードまで自動化しているのですが、ストアにアップロードする部分でエラーになりました。。。

https://docs.fastlane.tools/getting-started/cross-platform/flutter/

“`console
ERROR: [ContentDelivery.Uploader] Asset validation failed (90771) Missing Info.plist value. The Info.plist key ‘BGTaskSchedulerPermittedIdentifiers’ must contain a list of identifiers used to submit and handle tasks when ‘UIBackgroundModes’ has a value of ‘processing’.
“`

どうやらinfo.plist?の設定の問題か?と思ったが、、
どうやらXcodeの設定を変え

元記事を表示

【Xcode15】@Bindingを使ったViewの#Previewを表示する方法【SwiftUI】

# 問題のコード
@Bindingを使用したViewのプレビューを作成したいとき、#Previewの下で@Stateを付けた変数を定義して渡す必要があることは知られている。

“`swift
#Preview {
@State var hoge = “hoge”
SecondView(foo: hoge)
}
“`

しかし、それだけではこのような警告が表示されてしまう。

::: note warn
Result of ‘SecondView’ initializer is unused
:::

色々調べて試してみたところ、以下の方法で解決しました。

# 【解決】returnを付ける

“`swift
#Preview {
@State var hoge = “hoge”
return SecondView(foo: hoge)
}
“`
SecondViewのイニシャライザが使われていないという警告が出ていたため、このようにreturnを付けることで解決しました。

詳しい内容については私もまだ理解できていないため、ご存知の方がいれば教え

元記事を表示

【Flutter_iOS】TeachableMachineを使って簡単に音声認識アプリを実装する

## はじめに
TeachableMachineでは、ノーコードで音声認識を簡単に実装することができます。今回はそれをアプリに取り込む方法をお伝えします。

## 今回作るもの
ボタンを押すと録音が開始し、完了すると音を分類してその割合を表示するアプリを作りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/7ee943d3-ffe4-bd5b-827d-ccb2302d9522.png)

## 開発環境
– Flutter: 3.14.0
– Dart: 3.2.0
– tflite_audio: 0.3.0

## TeachableMachineで音声を学習させる
TeachableMachineを用いて音声を学習します。学習の仕方は以下の記事で説明しています。ご参照ください。

https://qiita.com/TajimaMiho/items/b865a05bea69bf70e107

## 学習した音声のデータをエクスポートする
以下の手順で`T

元記事を表示

App Store Connectでいきなり出てきた赤字警告「デジタルサービス法について」の対応

## 注意点
警告メッセージから調べた内容をメモとしてまとめたものです。
内容には推測であったり、主観が大きく入っております。

この記事を参考にして、いかなる損害が生じた場合でも、筆者は責任を負いかねます。

## 警告メッセージ
いきなりApp Store Connectにこんな警告が出てきた。

![スクリーンショット 2024-03-15 9.52.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469133/9f14495b-37ef-6360-debf-a73a7cd14dc6.png)

## 内容
ちょっと調べてみると、「欧州連合のデジタルサービス法(DSA)導入に伴い、トレーダーであれば情報を開示するように」ということです。

EU圏内のリリースにあたって、そのEU内のルールには従いましょうというところで、おそらくこのデジタルサービス法に準拠する必要がありそうです。

ただ、よくわからん :innocent: :question: :question: :question:

元記事を表示

【Swift】専門家に処理を依頼するDelegate

# 目次
[1.Delegateとは?](#Delegateとは?)
[2.実例](#2-実例)
[3.おわりに](#3-おわりに)

# 1. Delegateとは?
Swiftを勉強していると、初期段階でつまずくのが`Delegate`。
日本語で言うと`委譲`、`委ねる`です。
近年の、オブジェクト指向プログラミングでは、1クラス1機能に特化したクラス設計を行うことが多いです。いわば***その機能の専門家***クラスを作って、使いたいところで呼べば良いよね?という思想です。
Swiftも同様に、他のクラスへ処理を委譲(専門家に処理を任せる)して実装させることが多いです。
そんな時に便利なのが`Delegate`です。

# 2. 実例
コードを見ていきます。
## コード
~~~swift: MainClass.swift
protocol mainDelegate {
func printIntro()
}

class MainClass {
var delegate: mainDelegate?

func introduce() {

元記事を表示

SwiftのThrowsとthrow

## SwiftのThrowsとthrowとは?

Swiftでエラー処理をするときに、提供されている機能でthrowとThrowがある。

throwキーワードは、エラーをスローするために使用され、Throwsキーワードはメソッド宣言で指定されます。

## エラー処理の作り方

Enumを使用して、Error型の列挙型を作ります。ただの定数ですね。errorのcaseに対して必要なだけ書きます。

“`swift
// throwing errors
enum Errors: Error {
case OutOfStock
}
“`

if文でエラーチェックする処理を書きます。メソッドに、`throws`キーワードをつけると、Enumで定義したエラーを使うことができます。

throwを使うには、do catchの中で使う必要があります。

“`swift
import UIKit

// throwing errors
enum Errors: Error {
case OutOfStock
}

struct Stock {
var totalLa

元記事を表示

Swiftのself keywordとは?

## selfとは?
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/methods/

公式によると…

**self プロパティ**
ある型のすべてのインスタンスは、selfと呼ばれる暗黙のプロパティを持つ。selfプロパティは、インスタンスメソッド内で現在のインスタンスを参照するために使用します。

上の例のincrement()メソッドは、次のように書くことができる:
“`swift
func increment() {
self.count += 1
}
“`

実際には、コードに self を書く必要はあまりありません。明示的に self を書かない場合、Swift は、メソッド内で既知のプロパティまたはメソッド名を使用するときはいつでも、現在のインスタンスのプロパティまたはメソッドを参照していると仮定します。この仮定は、Counterの3つのインスタンスメソッド内で(self.countではなく)countを使用することで実証されています。

この

元記事を表示

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”
“`

元記事を表示

OTHERカテゴリの最新記事