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

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

iOSアプリにApple Music機能を追加(音楽の検索と再生) (MusicKit)

これまでは、楽曲を検索するにはApple Music APIを使用する必要がありました。新たに発表されたiOSのMusicKitフレームワークによって、楽曲を検索したり、アルバム内の曲をすべてリストアップしたり、楽曲を再生したりするためのリクエストをより簡単に行えるようになりました。

このフレームワークは、Androidシステムでも利用可能です。この記事では、これについては触れません。

MusicKitの新たなフレームワークには、新しくなったSwiftの並行処理も採用されています。データのリクエストに対するレスポンスを待つには、`await`コマンドを使用することができます。

この記事では、`Apple Music`のカタログを検索し、音楽を再生するアプリの構築について説明します。

## 使用事例

Appleによると、可能となる使用事例にはゲーム内のBGM、トレーニング中の音楽、ソーシャルメディアなどが含まれています(しかしながら、ご使用の際にはライセンスや著作権などに関して、常にご確認をいただくようお願いします)。

## 最初にEntitlementを追加する

最初に

元記事を表示

【Swift】知っておきたいKeyPathの基本と使い方

# この投稿は何?
Swiftにおける`KeyPath`について、基本から解説します。

## 実行環境

– macOS 12.1
– Xcode 13.2.1
– Swift 5.5

# KeyPathとは
要は、「あるデータ型に定義されたプロパティまでの参照(パス)」です。

## Swift3時代のString KeyPath
`KeyPath`は、Objective-Cの時代から利用されていました。
Swiftでもそれを受け継いでおり、クラスに`objcMembers’属性をマークすることで利用できました。

“`swift:参照型データの場合
@objcMembers class Kid: NSObject {
dynamic var nickname: String = “”
dynamic var age: Double = 0.0
dynamic var bestFriend: Kid? = nil
dynamic var friends: [Kid] = []

init(nickname: String, age

元記事を表示

Flutter モーダルボトムシート(iOS風)でWebView表示

# はじめに
**Flutter**で**iOS風 モーダルボトムシート**(モーダルが下から出て、後ろの画面が少し小さくなるあれ)でWebView表示を実装しました。

# 環境
– Dart: 2.15.1
– Flutter: 2.8.1

# 完成形

![modl_bottom_sheet.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1519965/ad735574-504d-e6fc-6494-c85c8edbf69f.gif)

# 実装
WebViewの説明に関しては、以下の記事で説明しているのでご覧ください。
– [Web画面表示(進捗バー付き)](https://qiita.com/k2rt/items/77cbd77b486c1b825d3f)

## Package

[modal_bottom_sheet](https://pub.dev/packages/modal_bottom_sheet)を使用します。(名前そのまま)

“`pubspec.yaml
dependen

元記事を表示

RxSwift入門に丁度いいサンプルコード書いてみた

## はじめに
最近、少しずつ`RxSwift`の勉強をしています。
僕が勉強始めた時、いい塩梅のサンプルコードを探すのに、少しだけ時間がかかってしまったので、自分が書いたサンプルコードを記事にしようと思いました。

これから`RxSwift`の門を叩く方のお役に立てれば幸いです。

## 前提条件
– Swiftが読めること
– Codableを利用したAPIリクエストについて理解していること
– MVVMの特徴を理解していること
– RxSwiftが概要レベルで分かること

## サンプルコードの概要
アプリを起動すると、Qiitaの記事一覧の検索APIをコールして、そのレスポンスをTableViewに表示するだけのアプリです。

`RxSwift`で動く簡単なアプリを第一目標にしたので、

– Protocolで抽象を参照するなどのリファクタリングはしてません。
– エラーハンドリングとか適当です。

↑ご容赦ください。

## コード&解説

`RxSwift`を利用するからには、データバインディングを活用したMVVMアーキテクチャを採用したいということで、今回は、MVVMで実

元記事を表示

【Swift】Screen(画面)・StatusBar・NavigationBar・TabBarのサイズ取得を集約

#はじめに
画面の縦横の幅やそれぞれのバーの高さを取得することが割と多く感じたのでまとめました。

#コード

“`swift
import UIKit

struct ScreenBarSizes {

// 画面の縦幅を取得する。
static func screenHeight() -> Int {

return Int(UIScreen.main.bounds.size.height)
}

// 画面の横幅を取得する。
static func screenWidth() -> Int {

return Int(UIScreen.main.bounds.size.width)
}

// ステータスバーの縦幅を取得する。
static func statusBarHeight() -> CGFloat {

return UIApplication.shared.statusBarFrame

元記事を表示

【iOS】世界一分かりやすいオープンソースライブラリの実装

#はじめに
アプリをリリースする際に著作権情報として使用したライブラリのライセンスを表示するかと思います。
LicensePlistを使用すると一発で使用中ライブラリを取得し設定アプリに表示してくれます。
アプリにコピペしなくて済む上に、ライブラリの追加・更新作業も自動でやってくれます。
もし他のサイトを参考にやってみたけどうまくできないという方にもお勧めです。

https://github.com/mono0926/LicensePlist

#実装
今回はCocoaPodsにて導入していきます。
Podfileにて↓を記入してpod installします。

“`
pod ‘LicensePlist’
“`

プロジェクトを開き、NewFileにてSettings Bundleを追加します。

![スクリーンショット 2022-01-24 15.45.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656839/54bf6d16-949e-cd26-06ec-39d02fd97080.p

元記事を表示

【iOS】App内課金のレシート検証で responseBody.Latest_receipt_info が undefined だった時の対処法

“NG:“ responseBody. **L** atest_receipt_info
“OK:“ responseBody. **l** atest_receipt_info

先頭を小文字にすればOKでした。

公式DOC([responseBody.Latest_receipt_info _ Apple Developer Documentation](https://developer.apple.com/documentation/appstorereceipts/responsebody/latest_receipt_info))は大文字始まりで書いてあるので注意です。

元記事を表示

【Flutter】Shimmerを利用してUXの高いローディング処理を実現

インドネシアの[PT.AQ Business Consulting Indonesia](https://aqi.co.id/)でFlutterのエンジニア兼アドバイザーをしております菊池と申します。

Zennで本を出版しております[flutter chips](https://zenn.dev/tetsukick/books/06ee607e30e243)(30,000字程度)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/5183aafc-d1d7-534f-f618-031f10790fdc.png)

## Shimmerとは
データの読み込み中であることをユーザーに伝える方法の一つとして、読み込み中のコンテンツの形状に近似したUIの上に、グレー等の色でローディング状態を表現するアニメーションです。

以下、[Flutter公式](https://docs.flutter.dev/cookbook/effects/shimmer-loading)から参照。
![]

元記事を表示

Apple ホームAppで暖房の予約をする

#オフトゥンから出られない
執筆時現在の季節は真冬です。この寒い季節、私は朝布団からすぐに出ることができません。
そこで、起きる前にどうにかエアコンをつけて部屋を暖めておくことはできないかと考えました。

#自室の環境
エアコンの制御はhomebridgeを母艦とするAppleのホームAppを使用しています。
iPhoneのホームAppからエアコンの任意の設定を行うことが可能です。
わかりやすく言うと、iPhoneでエアコンのオンオフや温度設定を自由に行える状態にあるということです。

また、起床時のアラームはiPhoneの標準時計アプリを使っており、8時に予鈴が1回、20分後に1回鳴ります。

#環境の理想系
・就寝直前、翌朝の気温を確認して予約をする。
・予約がある場合、8時になったらエアコンをつける。
といったものを想定しました。

ここで必要になる事は、
__(A) 就寝から8時までの間、予約をすることを記録しておく事__
__(B) その記録を元にエアコンをつける事__
の両方を満たす事です。
この環境でのこれらを満たす最適解を見つけようとしました。

#解決策

###(i

元記事を表示

FlutterでFirebaseを使ってみる〜Firebase導入編(iOS)〜

## 投稿の経緯
FlutterのキャッチアップでFirebaseと連携してFirestoreを使うサンプルプロジェクトを立ち上げました。今回はiOSアプリにFirebaseを導入してエミュレーターでビルドするところまでを書こうと思います。

## 環境
Flutter:2.8.1
MacOS:12.1

## サンプルプロジェクト
GitHubにコードPushしています。気になる方はご覧ください。
![QR_925113.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/f774b418-6fc2-a814-c742-ebf8dde02847.png)

## Firebaseの導入
公式情報を参考にして進めていきます。

https://firebase.google.com/docs/flutter/setup?platform=ios#analytics-not-enabled

#### Firebaseプロジェクトの作成
![a800c466878afb7914d8583967d7

元記事を表示

【Combine】debounce(for:schedule:option) オペレータを理解する

今回は、`debounce`というオペレータについて、理解してみようと思います。

## 環境

【Xcode】13.1
【Swift】5.5
【macOS】Big Sur バージョン 11.4

## 公式ドキュメントから理解する

まずドキュメントにあったコードは以下の通り

“`swift
// 以下のimportはドキュメントにはなかったので追加
import Combine
import Foundation

let bounces:[(Int,TimeInterval)] = [
(0, 0),
(1, 0.25), // 0.25s interval since last index
(2, 1), // 0.75s interval since last index
(3, 1.25), // 0.25s interval since last index
(4, 1.5), // 0.25s interval since last index
(5, 2) // 0.5s interval

元記事を表示

[iOS] 国際宇宙ステーション(ISS)を歩く AR アプリを作る

![title_1024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420332/e44ab591-1fc5-d9e1-6b33-c879334a4d2f.png)

閉じた空間の中にある構造物を歩き回る体験を AR(拡張現実)を使って提供します.iOS SDK の ARKit と RealityKit を使うと数行のコードでこれを実現することができます.この記事では、宇宙空間に浮かぶリアルスケールの国際宇宙ステーション(International Space Station: ISS)(一部分のユニット)の中を自由に歩き回ることができるアプリの作成方法を説明します.

# 仕組み

ISS(一部ユニット)のリアルスケールの 3D モデルを用意します.AR 体験を開始する際のデバイスの位置を ISS モデルの通路に位置合わせして仮想空間を作成します.こうすることで、背丈の異なる大人や子供が、AR 体験を開始したデバイスの位置に合わせて作られる仮想空間により、通路の中を自然な姿勢で歩くことができます.

元記事を表示

アニメ変換をiPhoneでつかいたい — CoreMLに変換すればOK

#AnimeGAN2-pytorchをiPhoneで使える形式に変換する方法です

変換ずみモデルを入手したい方はこちら:

https://github.com/john-rocky/CoreML-Models

アニメ変換機械学習モデルであるAnimeGAN2をiPhoneアプリで使えるようにします。

#AnimeGANはかっこいい、、でもPythonかあ。。。

アプリケーションでPythonのモデルを使うには、サーバーに画像をアップして処理したり、、、と大変そう。

#CoreMLに変換すれば

元記事を表示

よく使うコマンド集

コマンドを使用する際に、いつも検索する事から始めてしまい、時間も取られてしまうので、予めメモとして投稿しようと思いました。
– – –
#指定先に移動する
“`
cd 指定ファイル、フォルダまたはディレクトリ
“`
cdの後に半角スペース、後は指定先をドロップアンドドラッグでOKです。
#gitの初期化
“`
git init
“`
#設定したRepositoryの確認
“`
git remote -v
“`
#コミット履歴確認
“`
git log
“`
#ローカルエリアの差分確認
“`
git status
“`
#ステージングエリアに保存(全て)
“`
git add .
“`
#コミットする
“`
git commit -m”任意のメッセージ”
“`
#現在のブランチの確認
“`
git branch
“`
#リモート環境にアップロードする
“`
git push origin master
“`
“`
git push origin main
“`
– – –
#・トラブル発生時によく使うコマンド
#ファイル全体のキャッシュ削除
`

元記事を表示

【SwiftUI】アラートを表示する

#環境
Xcode 13.2.1
Swift 5.5.2

#実装
ボタンをタップした時にアラートを表示する場合は以下のようなコードになります。

“`swift
struct ContentView: View {
@State private var isShowingAlert: Bool = false

var body: some View {
Button(“アラートを表示する”) {
isShowingAlert = true
}
.alert(“Text”, isPresented: $isShowingAlert) {
Button(“Button1”) {
// タップした時の処理
}
Button(“Button2”) {
// タップした時の処理
}
} message: {

元記事を表示

Unity の SystemInfo.deviceModel が表示するiPhoneの情報

Unity の SystemInfo.deviceModel が表示する iOS の情報についてです。

# 結論
https://www.theiphonewiki.com/wiki/Models の Identifier が表示されています。

# 背景
問い合わせ用に Unity の SystemInfo.deviceModel の情報を取得しようとして、自身の端末 iPhone 11 Pro が iPhone 12,3 と表示され、なんのこっちゃと思ったので調べました。
Android は未調査です。

# 参考
* [iPhone iPad 端末での 一般名と内部名の対応表](https://qiita.com/YumaInaura/items/31838a72678fa09d7e19)

元記事を表示

UIViewでTap検出

UIViewでTap検出を行う

・Viewの作成時にGestureRecognizerをタップを検出したいUIViewに追加する

~~~
UIView* LabelA;
~~~

~~~objc
// TapGestureRecognizer作成 タップ検出時LabelAをコールするよう登録
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(LabelATap)];

// UIView LabelA にタップ検出をアタッチ
[self.LabelA addGestureRecognizer:tapGesture];
~~~

~~~
// LabelAタップ検知時処理
-(void)LabelATap{

}
~~~

[Apple Developler](https://developer.apple.com/documentation/uikit/uitapgesturerecognizer)

元記事を表示

文字列からスペースと改行を削除

# 環境
– Swift ver 5.5.1

# コード
## 文字列の前後から

利用しているメソッド

– Apple Developer Documentation – [trimmingCharacters(in:)](https://developer.apple.com/documentation/foundation/nsstring/1415462-trimmingcharacters)

### スペースを取り除く

“`swift
let text = “ 前後にスペース ”
let trimmedText = text.trimmingCharacters(in: .whitespaces)
print(trimmedText, terminator: “”)
// 出力:”前後にスペース”
“`

### 改行を取り除く

“`swift
let text = “\n前後に改行\n”
let trimmedText = text.trimmingCharacters(in: .newlines)
print(trimmedText, terminat

元記事を表示

プリクラ並みの美肌フィルターをつかう #YUCIHighPassSkinSmoothing

#iPhoneでつかえる美肌フィルターのつかいかたです

#見たいものを見せることがサービスには肝要です
現代は浄化されたものが好まれる時代だと思います。
SNSでも、何も加工せずに顔写真を載せている人はむしろ珍しいのではないでしょうか?
もしもあなたが画像アプリを作りたい場合、美肌フィルターが必要になることもあるかもしれません。
さて、どのようにして商用アプリ並みの美肌加工を実装できるのでしょうか?

Swift Package内のリソースにアクセスする便利な方法

## はじめに

本記事は [Swift/Kotlin愛好会 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/love_swift_kotlin) の14日目の記事です。
空いていたので埋めました。

Swift Package内のリソースにアクセスするには `bundle:` に `Bundle.main` でなく `Bundle.module` を指定する必要があります。
毎回指定するのが手間なので、私は便利メソッドを実装し、さらに __リソースへのアクセスを1つのSwiftファイルにまとめています__ 。
その方法を紹介します。

## 環境

– OS:macOS Big Sur 11.6
– Swift:5.5.2
– Xcode:13.2.1 (13C100)

## リソースの格納

Swift Packageにおいて、リソースのほとんどは `Sources/{target name}/Resources/` フォルダに格納すれば自動的にリソースと認識します。

## リソースにアクセスする便利な方

元記事を表示

OTHERカテゴリの最新記事