iOS関連のことを調べてみた2022年05月09日

iOS関連のことを調べてみた2022年05月09日

[iOS]リアルタイム音声認識(Speech to Text)を実装してみる

# Speechフレームワーク

[Speech](https://developer.apple.com/documentation/speech)
[Apple公式のサンプルコード](https://developer.apple.com/documentation/speech/recognizing_speech_in_live_audio)
音声をマイクから認識して文字列に変換するという機能を提供してくれています。
標準のキーボードのマイクボタンを押した時と同じ機能をアプリ上から利用できます。

# 処理の流れ
1. 音声認識機能利用の権限の確認、取得
1. リクエスト作成、設定
1. タスク作成
1. マイクインプット作成、設定
1. 録音開始
1. テキスト変換結果の取得

# カスタムクラス実装
以下のクラスを実装していきます。
#### SpeechRecognizerクラス
– Speechフレームワークを利用するクラス

#### ListenViewModelクラス
– SpeechRecognizerクラスを保持

#### ListenViewクラス
– L

元記事を表示

【Swift】Alamofire6でresponseJSONが使えなくなるらしい

# 警告文が突然出現
“`
‘responseJSON(queue:dataPreprocessor:emptyResponseCodes:emptyRequestMethods:options:completionHandler:)’ is deprecated: responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead.
“`
responseJSONは非推奨です。
Alamofire 6で削除される予定です。
代わりにresponseDecodableを使ってください。

だそうです。

気づいた時に修正しておくのが一番ということで修正したので共有します。

# 結論
“`diff_swift
– AF.request(“”, method: .get).responseJSON
+ AF.request(“”, method: .get).responseData
“`

警告文にはresponseDecodableと記載してあったがresponse

元記事を表示

第4回iPhoneアプリ開発入門〜Appleのチュートリアルの進め方〜

# はじめに
この記事では、プログラミング初心者向けにAppleのチュートリアルの進め方を解説します。

# 翻訳
まず、下記のURLをクリックしてAppleのチュートリアルにアクセスしてください。

https://developer.apple.com/tutorials/app-dev-training/

Appleのチュートリアルは全て英語で書かれています。そのため、英語が苦手な方はブラウザの翻訳機能を使うことをおすすめします。翻訳機能は、SafariよりもChromeの方が精度が高いため、Chromeを使うことをおすすめします。

Chromeをお使いの方は、ページ上で右クリックし、日本語に翻訳をクリックします。
![スクリーンショット 2022-05-08 23.24.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/9ef4c4f8-7d0b-c0bf-3e79-f944fad1d3ea.png)

# はじめよう
そうしたら、「はじめましょう」をクリックして、チュート

元記事を表示

CoreMotionを使ってiPhoneから気圧を取得してみた

## 投稿の経緯
業務でiPhone標準搭載の気圧計を使った機能の開発をするかもしれなくなったので、事前に技術検証としてCoreMotionを触ったので記事にします。

## 環境
Mac Monterey 12.3.1
Swift 5.6
Xcode 13.3.1

## サンプルアプリ
![QR_017541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/06a226ce-ade6-ea92-a198-c5e902cbf18b.png)
コードはGitHubにPushしています。気になる方はご覧ください。
https://github.com/ken-sasaki2/CleanArchitectureTraining

## 実装
“`ContentView.swift
import SwiftUI

struct ContentView: View {
private let altimator = Altimator()

var body: some V

元記事を表示

正方形の画像からアイコン画像を生成する

## 要件検討

– iOSのアイコンなので単純な角丸形状ではなく、複数のRを用いて直線部分と滑らかに接続された角丸形状にする。
– 背景と同化する場合があるのでドロップシャドウを軽くかける。

## 実装方法
単純なRを用いた角丸ではないので`icon.layer.cornerRadius`は使用できない。
また、表示するサイズごとにRの値を計算するのも面倒。
よって、以下の手順で実装

1. アイコン形状のマスクを用意
2. マスクを使ってアイコン画像(UIImage)を切り抜き
3. UIImageViewのimageに切り抜いたUIImageを指定し、シャドウを設定する

## マスクの生成
Appleのwebで使用されていたアイコン表示のマスクイメージを拝借しベクタデータを生成。単純にPDF画像を参照しても良いので

元記事を表示

【SwiftUI】リワード広告の表示

# はじめに
多くのドキュメントはUIKitで書かれていてSwiftUIで書かれていることはほとんどありません。
ドキュメントを見て毎回書き直すのは苦痛です。楽しくありません。
今回のお題である[AdMobのリワード広告ドキュメント](https://developers.google.com/admob/ios/rewarded?hl=ja)もUIKitで書かれています。
今後、同じ事をするであろう方のために書き直したものを公開しておきます。

# 実装準備
実装の前に[スタートガイド](https://developers.google.com/admob/ios/quick-start?hl=ja)に記載してある事を行います

①: Mobile Ads SDK のインポート
②: Info.plist の更新
③: Mobile Ads SDK の初期化

こちらはUIKitでもSwiftUIでも同じなので割愛します
これが終われば準備は完了です。

# 実装
“`Reward.swift
import GoogleMobileAds

class Reward: NSObj

元記事を表示

【SwiftUI】Lottieでアニメーションを表示する

# Lottieとは
![](https://github.com/airbnb/lottie-ios/raw/master/_Gifs/Examples1.gif)

https://github.com/airbnb/lottie-ios

簡単にアニメーションを表示できるライブラリです
[こちら](https://lottiefiles.com/featured)で公開されているアニメーションがすぐ使えるようになります。
そしてとても軽いので使いやすいです。

# インストール
– CocoaPods
– Carthage
– Swift Package Manager

上記3つがサポートされています。

今回はSwift Package Managerでインストールしていきます。

①: [lottie-ios](https://github.com/airbnb/lottie-ios)のURLをコピー
![スクリーンショット 2022-05-07 15.06.30.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

[Xcode] The value for key CFBundleShortVersionString [hoge] in the Info.plist file…に対する処方箋

## 初めに
iOSアプリをAppStoreに新しいバージョンをリリースする際にこんなエラーに当たったので解決方法を載せておきます。

今回のエラーはアプリをアーカイブし、その後Validate Appをした際に発生しました。

![スクリーンショット 2022-05-07 14.43.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/f68d4653-ec6b-9bb6-1d00-677813e4a9e4.png)

## 原因
今リリースしている(アーカイブした)バージョンよりも低いまたは同じ数値を設定しているために発生していると思われます。
例えば、バージョン1.1.0で公開しているものをバージョン1.0.1などでアーカイブしようとした場合です。

## 解決方法
メニューバーより>Product>Archiveから今回リリースしたいアプリを選択し、バージョンを確認しましょう。
今回審査に提出したいバージョンが1.0と前回提出したバージョンより低い数値にになっています。
(()な

元記事を表示

Godot用 iOS版 Firebase Cloud Messagingのプラグインを作った

## 概要
以前、似た内容で[Godot用iOS版 Firebase Analyticsのプラグイン](https://qiita.com/yokochi@github/items/7df54cbf331408d1255d)を作りました
今回はプッシュ通知を送りたかったのでFirebaseのCloud Messagingのほうのプラグインになります。

作成したプラグインはこちらです
https://github.com/funseek/godot-ios-firebase-message

プラグインの作成方法は上記のプラグインと流れはまったく同じです。

## PlayFabでもプッシュ通知を送りたい
現在作成しているゲームではバックエンドに[PlayFab](https://azure.microsoft.com/ja-jp/services/playfab/)を利用しています。
全員にプッシュ通知をする場合はFCM、何かのトリガーで個別にプッシュ通知を送りたい場合はPlayFab側で送信という想定です。

ですので、PlayFab側にもプッシュ通知で必要なトークンを登録してあげ

元記事を表示

ID を持つエンティティにはIdentifiableを積極的に採用

## before
“`
struct User: Decodable {
let id: Int
}

struct UserDataSource {
// 引数はIntであればなんでも受け入れるように見えてしまう。
func loadUser(for id: Int) -> User {
// 本来はDBなどから取得したものを返すなど
}
}
let user = UserDataSource().loadUser(for: 1)
“`

## after
“`
struct User: Decodable , Identifiable {
let id: Int
}

struct UserDataSource {
func loadUser(for id: User.ID) -> User {
// DBなどから取得したものを返すなど
}
}

元記事を表示

【Flutter】XcodeでCould not inspect the application package.というエラーと2日戦った話

掲題のエラーと戦い続け、とても単純な原因で休日を2日潰しました。
私及び読者が同じ轍を踏まないように戒めとして残しておきます。
※エラー原因が特殊だった可能性もあるので、あくまでも一例としてご理解ください。

## 結論 (原因)

**pubspec.yml**のassetファイルのパス指定ミスが原因。


before: **lib/asset/aaa/image**
after : **asset/aaa/image**

## 事象概要
– 半年ぶりに自分のアプリをアップデートしようと思い、各種プラグイン/Flutter/Gradle/Pod諸々全て最新に更新
– XcodeにてiOSの実機ビルドは成功するがインストール時に以下発生

“`
Details

Unable to install “Runner”
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402653103
User Info: {
DVTErrorCreationDateKey = “2022-05-05 04:09:24 +0000

元記事を表示

SwiftUIでAPI(クロージャとasync/await)を利用するViewModelクラスをテストする

## アプリ
SwiftUIにて、任意のユーザー名のGitHubリポジトリを取得し、スターの数が50以上のものをリスト表示します

## SwiftUIのターゲット構成
GitHubリポジトリを取得するAPIメソッドをクロージャとasync/awaitの2つ用意しました
また、APIを利用するViewModelクラス(GitHubRepositoryManager)をXCTestによる単体テストします

| クラス | 説明 |
|:-|:-|
| GitHubRepository | GitHubリポジトリのEntityクラス |
| GithubAPIClient | APIクライアント |
| GitHubRepositoryManager | リポジトリ一覧を取得するViewModelクラス |
| GitHubRepositoriesView | リポジトリ一覧を表示するViewクラス |

## GitHubリポジトリのEntityクラス
“`swift:GitHubRepository.swift
struct GitHubRepository: Co

元記事を表示

第3回iPhoneアプリ開発入門

# はじめに
今回は、カウンターアプリを装飾していきます。まず、前回のプロジェクトを開いてください。

# Modifier
まず、ボタンを装飾します。次のように書き換えます。

![スクリーンショット 2022-05-05 12.30.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/ccdff0db-36c1-c1fb-f0f2-3f3af50a7e8c.png)

Buttonに「.buttonStyle(.borderedProminent)」とつけることで、Buttonの見た目を整えることができました。このような、Viewの見た目を整えるものをModifierといいます。ちなみに、Textについている「.padding()」は余白をつけるModifierです。

# 背景色を変える
次に、背景色を変更します。
![スクリーンショット 2022-05-05 12.47.54.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

第2回iPhoneアプリ開発入門

# はじめに
今回は、前回作ったカウンターアプリを改良しながらプログラミングについて学びます。

# 前回作ったプロジェクトを開く
まず、前回作ったプロジェクトを開きます。Xcodeを起動すると表示されるこの画面の右側から、最近使ったプロジェクトを開けます。この画面が表示されない場合は、Xcodeを選択した状態で、「コマンド+シフト+1」キーを押します。
![スクリーンショット 2022-05-03 19.13.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/31d2e475-0bba-7285-4f1a-320267dfde2a.png)

# if文
前回は、ボタンを押すと押した回数だけ数字が増えました。では、今度は数字に上限を設けましょう。ソースコードの17行目あたりを下のように書き換えます。
![スクリーンショット 2022-05-03 19.57.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

第1回iPhoneアプリ開発入門

# はじめに
この記事では簡単なカウンターアプリを作成して、プログラミング初心者向けにiPhoneアプリの作り方を解説します。
![スクリーンショット 2022-05-01 20.13.57.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/17c8ef26-816a-cf94-9014-2579f6b0c038.jpeg)

# 必要なもの
– Mac

# Xcodeのダウンロード
まず、MacにXcodeというアプリをダウンロードします。このアプリを使ってアプリ開発を進めていきます。

https://apps.apple.com/jp/app/xcode/id497799835?mt=12

上記のリンクをクリックして、App Storeでダウンロードしてください。これには時間がかかります。
![スクリーンショット 2022-04-22 18.54.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/

元記事を表示

【Swift】オリジナルのSFSymbolを作成する

# 素材
![スクリーンショット 2022-05-05 0.18.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5a400211-3a69-4471-0893-ffc7179d0f0e.png)
今回はTwitterの公式から提供されている「[Twitter logo](https://about.twitter.com/en/who-we-are/brand-toolkit)」をSFSymbol化していこうと思います。

# 手順1
![スクリーンショット 2022-05-05 0.18.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7d12d4bc-eba0-e8a7-e763-dc20a0af5b55.png)

初めに「circle」を選択します。

![スクリーンショット 2022-05-05 0.19.02.png](https://qiita-image-stor

元記事を表示

ARKitの3次元座標を画面上の2次元座標に変換する

# AR3次元座標が画面上の2次元座標のどのポイントに当たるのか

# ARKitで一発で取得

“`swift
func session(_ session: ARSession, didUpdate frame: ARFrame) {
let pointInDisplay = frame.camera.projectPoint(node.simdWorldPosition, orientation: .portrait, viewportSize: view.bound.size)
}
“`

?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)

元記事を表示

Xcode13でUser-Difined Settingを使用して、debugとreleaseで値を切り替える

# 目次
– [はじめに](#はじめに)
– [環境](#環境)
– [実装方法](#実装方法)
– [さいごに](#さいごに)

# はじめに
個人開発したiOSアプリに「Google AdMob」を導入した際に、テスト環境と本番環境で値を切り替えたい場面がありました。
その際にXcodeで用意されている「User-Difined Setting」という機能が便利に活用できたので、今回記事にしてみました。

# 環境
– Xcode13.2.1
– Swift5

# 実装方法
実装方法は非常にシンプルです。

– XcodeのPROJECTを選択した状態で、「Build Settings」タブを選択し、「+」ボタンから「Add User-Defined Setting」を選択します。
![スクリーンショット 2022-05-04 18.58.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793562/62b11a42-6052-b919-144f-f3971931a58c.png)

– 「

元記事を表示

UICollectionViewCellのXIBからContentViewが消えた?

![Xcode-13.1](https://img.shields.io/badge/Xcode-13.1-brightgreen)

## はじめに
この前モブプロ?のようなことをやっていると `UICollectionViewCell` の XIB に `contentView` がない!なんでだ?ということがありました。

## 現象
どうやら Library(右上の+ボタン)から追加すると `contentView` ありで生成され、クラスファイル作成時に Also create XIB file をチェックして追加すると `contentView` なしで生成されるようです。

cell

Interface Builder の上のセルが XIB チェックで作成したセル、下のセルが Library から追加したセル

元記事を表示

【Swift】レビューについて

# やり方1
アプリ内でレビュー依頼を行う
“`Swift
import StoreKit // 必須

if let windowScene = UIApplication.shared.windows.first?.windowScene {
SKStoreReviewController.requestReview(in: windowScene)
}
“`

# やり方2
AppStoreのレビュー欄に遷移する
“`Swift
guard let url = URL(string: “https://itunes.apple.com/app/id{アプリID}?action=write-review”) else { return }
UIApplication.shared.open(url)

元記事を表示

OTHERカテゴリの最新記事