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

iOS関連のことを調べてみた2022年12月24日
目次

Swift 5.7の新機能を用いて、複数サービスを扱うアプリをリアーキテクチャする

この記事は[レコチョク Advent Calendar 2022](https://qiita.com/advent-calendar/2022/recochoku)の24日目の記事となります。

# はじめに

初めまして、永田です。
株式会社レコチョクでiOSアプリエンジニアとして働いています。

本日はクリスマスイブということでいよいよ年の瀬ですね。
今年の個人的ベストライブは「NUMBER GIRL 無常の日」、ベストアルバムは[柴田聡子「ぼちぼち銀河」](https://recochoku.jp/album/A2002809745/album)でした(柴田聡子さんかなりオススメです)。

さて、現在私が開発を担当している[PlayPASS Music](https://apps.apple.com/jp/app/id1079370868)アプリではリアーキテクチャを推進しています。
その中でSwift 5.7の新機能を用いた設計を導入したので、そのご紹介をしようと思います。

# 開発環境
本記事で扱うコードは以下の環境で動くことを想定しています。

– Xcode 14.1

元記事を表示

Kotlin のマルチプラットフォームモバイル開発の話

# はじめに!

今年久しぶりに ACCESS Advent Calendar 2022 参加させていただきます!
こちらはACCESS Advent calendarの24日目の記事となります。
今回の記事のテーマは **Kotlin のマルチプラットフォームモバイル開発** を試してみた記事です。
書かれていたコードは全部サンプルプロジェクト作ったら生成されているので、興味がありましたら、是非参考のリンクを辿って、試してみてください。

# Kotlin Multiplatform Mobile (KMM) とは?

Kotlin Multiplatform Mobile (KMM) は Android と iOS を開発するための Kotlin の SDK です。
以下の図を見ると、ビジネスロジックは共通することができますが、View は各 OS の実装になります。
Shared Code は Kotlin で書きます。
【Swift】Mozc-for-iOSを使って日本語変換を実装してみた

# はじめに
iOSで日本語の予測変換を実装したいと思い、ちょっと調べてたら[Mozc-for-iOS](https://github.com/kishikawakatsumi/Mozc-for-iOS)を発見しました!!
最終更新が8年前だったので使えないかなと思いましたが、ちゃんと使うことができたので記事にしておきます。

先に言っときますが、大変です笑
単純作業が続きます笑

# 手順
### Python2の環境構築
ここの解説は飛ばします。
私はPython 2.7.18を使用しました。

https://retval.jp/blog/python2-install/

![スクリーンショット 2022-12-23 17.11.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c320f132-2f23-686f-22de-16fb9392fc59.png)

### クローン
“`:ターミナル
cd ディレクトリの移動
git clone https://github.c

元記事を表示

[SwiftUI + CoreBluetooth]感染症対策・熱中症対策に iPhone や MacBook Air(M1)で温度・湿度を測定する

## 記事の内容
ソニーが販売している IoT タグ MESH を利用して、温度・湿度を測定する。
![スクリーンショット 2022-12-20 0.10.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/7b987b7e-4913-532d-33e6-719ceedab15f.png)

## 動機
**感染症対策・熱中症対策として、部屋の温度・湿度を測定したい**

「感染症対策・熱中症対策には温度と湿度の管理が大切」 ということはわかっていたが、実際の温度・湿度は把握していなかった。

単純に温度計・湿度計を購入して測定すればいいが、自動的に一定間隔で測定データを記録して、そのデータを可視化したり機械学習で活用できるのではないか。

また以前、BLE通信を利用してセンサと接続できる iOS アプリを開発するプロジェクトに参画していた。その際の内容を思い出すためにも、温度・湿度を測定できる iOS アプリの開発に挑戦した。

## 開発環境
**PC**
MacBook Air(20

元記事を表示

WebViewの動画広告をインライン再生させる時の注意点

WebView内の動画広告をインライン再生させようとしたが
思うようにいかない部分があったので注意点と共にご紹介します。

#### ■インライン再生させるには、これを追加するだけ
“`swift
configuration.allowsInlineMediaPlayback = true // インライン再生を許可
configuration.mediaTypesRequiringUserActionForPlayback = [] // すべてのメディアについてユーザインタラクションなしの自動再生を許可
“`
:::note warn
↓上記のコードを入れようと思ったが使えない:sweat:
:::
![スクリーンショット 2022-12-23 16.31.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2370083/3dff6ba1-0c02-5db3-6836-cc30af35732e.png)

# ■使えなかった理由と注意点
1.インライン再生のコードを追加するには、WKWebVi

元記事を表示

Flutterで、flutter_stripeを利用してサブスクリプションの決済画面を作成する

この記事は、[Flutter Advent Calendar 2022](https://qiita.com/advent-calendar/2022/flutter) 23日目の記事です。

Flutterを利用してDartでiOS / Androidに対応したアプリケーションを開発できます。

この記事では、FlutterでStripeの決済情報入力画面を表示するためのライブラリ「`flutter_stripe`」を利用して、サブスクリプションの申し込みを完了する方法を紹介します。

## 事前準備

Flutterを動かすために、DartとFlutter CLIをインストールしましょう。

### Dartのインストール

Homebrewを利用して、Dartをインストールします。

“`bash
$ brew tap dart-lang/dart
$ brew install dart
“`

今回は、以下のバージョンを利用しています。

“`bash
dart –version
Dart SDK version: 2.18.5 (stable) (Tue Nov 22

元記事を表示

SwiftUIで、外部からテキストを受け取りMarkdown表示する

# 概要

SwiftUIのTextなどは、Markdown記法が使えるようになりました。例えば以下のTextは、

“`swift
struct MarkdownView: View {
var body: some View {
List {
Text(“**BOLD**”)
}
}
}
“`

実際にプレビューに表示するとBold表示になります。

![MarkDownでBold表示](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687960/63bd7562-71d9-6ff8-642e-c472359ca013.png)

# パラメータとしてマークダウン文字列を取得する

例えば[Qiita API v2](https://qiita.com/api/v2/docs)などは、レスポンスの中にMarkdownで記述されたbodyがあります。これをMarkdownで表示しようと思います。
(Qiita APIからデータを取得する

元記事を表示

長年運用しているプロジェクトがPeripheryを導入してスリムアップした話

# これは

この記事は、[Yamapエンジニア Advent Calendar 2022](https://qiita.com/advent-calendar/2022/yamap-engineers)の12月23日の記事です。

こんにちは、YamapでiOSエンジニアをやっている竹ノ内です。

普段はiOSアプリの開発に従事しています。

Yamapアプリは、歴史のあるアプリで元々はObjective-Cで書かれていましたが、それをSwift化したり、度々のリファクタリングと並行しながら、機能追加を重ねて成長してきました。

ただ、長年運用されている影響で全体を通して、
使われていないコードががそのままになっているところもあり、見通しが悪い箇所がありました。

なので、Peripheryを導入して、シェイプアップを図ることにしました。

# そもそもPeripheryとは

[Periphery](https://github.com/peripheryapp/periphery)とは使われていないコードに対して、警告を出してくれるライブラリです。

> The goal of

元記事を表示

OperationQueueを活用して、前処理,後処理,キャンセル処理が必要なタスクをバックグラウンドで行う

# はじめに
この記事はand factory.inc Advent Calendar 2022 23日目の記事です。
昨日は @twumo さんの 「[【JetpackCompose】テキスト入力された最後の文字だけマスクを外したい](https://qiita.com/twumo/items/155a7f1cc53aa55dc739)」でした。

開発中の機能で`OperationQueue`について調べていた時期があり、大変便利だったので備忘録がてら共有です。

今回は表題の通り、
– 時間のかかる複雑な非同期処理をバックグラウンドで行いたい(ex: データダウンロード)
かつ
– 前処理(ex: 実行前に事前準備となる処理), 後処理が必要
– キャンセル処理(前処理~後処理のいずれかのポイントで問題が発生した時に、必ず実行したい処理)
があるようなケースを想定し、`OperationQueue`を活用したデモを作成しました。

# デモ
今回実装した[簡易デモ](https://github.com/ykkd/OperationQueueDemo)の画面収録が下記になります

元記事を表示

2022年にいまさら振り返るObjective-C

好きな言語は`C++`です.どうも @mizuhugu35 です.
いかがお過ごしでしょうか.私は今朝寝違えたため,首がとても痛いです.

## 初めに
Objcを触る機会があって,基本ができていない気がしてきたので,今年の4月頃に勉強しました.
それをこの2022年の最後として,Objective-Cを再確認しよう!という記事です.

(iOSアプリ開発は,Swiftから入ったクチです)

すべてを書くと長すぎるので端折るか,また違う記事として書こうと思います.

間違っているところがありましたら,ぜひコメントお願いします!

## Objective-C
名前の通りオブジェクト指向の言語で,**メッセージ式**と呼ばれる記述方法が特徴的です.

“`objective_c
// – (id) a; で自分自身を返すメソッド
[object a];
// ネストできる
[[[object a] a] a];
“`
初めて見たときは, なんかLISPみたいな見た目してんな…と思いました.

## コンパイラ指定子
`@`から始める命令のことで,代表的なのは`@intarface

元記事を表示

【SwiftUI】Toggleのスタイルについて

# はじめに
iOS15からToggleのスタイルが増えてたので整理してみました。

# スタイル
## iOS
### switch
“`swift
import SwiftUI

struct ContentView: View {
@State private var isOn = false
var body: some View {
Toggle(“トグル”, isOn: $isOn)
.toggleStyle(.switch)
}
}
“`
![Simulator Screen Recording – iPhone 14 Pro – 2022-12-22 at 20.45.02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3e288046-b2fa-ae51-4b77-ab76b4e95d43.gif)

### button
“`swift
import SwiftUI

struct ContentV

元記事を表示

iOSのViewable Impression対応の話

社内で内製化のログシステムを推進している中で、ZOZOTOWNのiOSアプリはLoggerの内製、またはクリック、Viewable Impression(以降、view-impと表記)などイベントの対応してきました。
この記事では、先日に公開されたTechBlog[【ZOZOTOWNホーム画面におけるログ設計と改善サイクルの紹介】](https://techblog.zozo.com/entry/zozotown-home-data-driven)のview-impについてのiOSの実現方法を深堀りして紹介します。
画面の構成や実装により、適切な対応がそれぞれになりますが、今回の対応で気づいたポイトンがきっとどこかで参考になると思います。

# おさらい

## 背景
ホーム画面は主に**バナー**と「タイトル、一覧ページへのリンク、商品コンテンツ」という3つのパーツを持つ**モジュール**で構成されています。
これまで定性的な意思決定に基づいたモジュールの運用を、定量的に運用できるように、次ページ遷移率(以降、CTRと表記)をKPIとしました。

“`math
CTR = コンテン

元記事を表示

UDLとよくあるお問い合わせ

ハッピーホリデー!本日はわたくしアラがAppsFlyerのアドベントカレンダーを書かせていただきます。

###### 自己紹介
AppsFlyer入社3年目のサポートエンジニアです。弊社入社前はウェブアプリやモバイルアプリのエンジニアをしていました。
毎日AppsFlyerをご利用いただいている皆様からの技術的なお問い合わせやシステムの調査依頼等を対応しています。日本語でお問い合わせいただくと高確率で私が出現します。(全ての言語で対応しておりますのでお気軽にご連絡ください!)

本日は多くの皆様にご利用いただいているUDLというAppsFlyer SDKの機能の一部と、よくあるお問い合わせ、その解決方法をご紹介したいと思います。

## そもそもAppsFlyer SDKで何ができるの?
AppsFlyer SDKでは主にインストールデータやアプリ内イベントデータの送信、アトリビューション時のパラメータの取得が行えます。
アトリビューションとはどの広告(リンク)からアプリがインストールされたかを決定する仕組みで、**AppsFlyer SDKではそのリンクのパラメータが取得可能**と

元記事を表示

Flutterアプリをリリースするために僕が考えたブランチ戦略とデプロイ方法と仕組みについてまとめてみた!

# はじめに
この記事は[MIXI DEVELOPERS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/mixi) の22日の記事です。

# この記事はなに?
昨年からFlutterでアプリ(iOS/Android)開発をはじめ、今年の頭に初めてアプリをリリースしました!
リリースする際に考えたブランチ戦略、デプロイ方法と仕組みについてまとめてました!

## この記事で紹介すること
– ブランチ戦略について
– デプロイ方法と仕組みについて

上記について紹介します!

# 環境
今回の記事は以下の環境、ツールを使用しています。
– MacOS: monterey 12.6 2
– Flutter: 3.0.2
– Fastlane: 2.190.0
– GitHub
– DeployGate
– Bitrise

# ブランチ戦略について
まずはアプリをリリースするまでのブランチ戦略についてご紹介していきます!

## 具体的なリリース手順
以下の図でリリース作業を進めています。それぞれ解説してい

元記事を表示

iOSアプリのデータ保存場所

## 保存場所
– メモリ
– NSCache:メモリが足りなくなれば自動的にアイテムが消される
– Dictionary や Array
– ファイルシステム
– ディレクトリ:基本的に iCloud へバックアップされる
– UserDefaults:プリミティブ型のユーザ設定を保存する、起動時にメモリに展開される、iCloud へバックアップされる
– データベース:Core Data、Realm、SQLite など
– KeyChain

## ファイルシステムの構造
“`
/
Applications/ (大事)
Developer/
Library/
System/
User/
bin/
dev/
etc/
lib/
mnt/
private/
sbin/
tmp/
usr/
var/ (大事)
“`
## /Applications
“`
/
Applications/
{$a

元記事を表示

iOS上でずんだもんにお話ししていただく

ネット流行語100(2022)にてニコニコ賞を受賞したずんだもんにお話しをお願いしました。
## はじめに
VOICEVOXは読み上げ音声エディタであり、読み上げ音声の一つとして ずんだもん が使えます。
VOICEVOXはWindows, Mac, Linuxに対応したエディタで、現在(2022/12)ではiOS向けのリリースはされていません。が、開発はオープンソースで行われており、音声合成のコア部分もソースコードが開示されています。(\*1)
以下は奮闘の軌跡です。

## iOS向けにBuildしてみる
iOS向けにコアをビルドしてみます。
READMEによれば、onnxruntimeが必要そうなので、こちらもビルドします。公式ドキュメントに従って
~~~
./build.sh –config MinSizeRel –use_xcode –ios –ios_sysroot iphoneos –osx_arch arm64 –apple_depro

元記事を表示

【SwiftUI】外部APIを叩いて取得した結果をListに表示する・改

## はじめに

以前 SwiftUI の勉強会ネタとして connpass の API を利用して,
YUMEMI.swift という勉強会を検索して検索結果をリストに表示して,
詳細画面にマップや勉強会の内容などを表示するサンプルアプリを SwiftUI で作りました。

あれからだいぶ経ったので少し機能追加,リファクタリングを今回やってみようと思います。
だいぶ開発しやすくなったね,と感じることができるかが気になるところです。

## アプリの詳細

詳しくは過去の記事をご覧ください。

https://qiita.com/MilanistaDev/items/64dca8c9d5099a19529e

### API

connpass の API で勉強会検索します。
エンドポイントは下記のままです。
`https://connpass.com/api/v1/event/?keyword=YUMEMI.swift`

### アプリ構成

大きく 3 画面で今回手を入れるのはリスト画面と詳細画面になります。

* **リスト画面**: API を叩いて取得できた勉強会たちをリ

元記事を表示

【SwiftUI】キーボードツールバーを実装する

# はじめに
DeepL翻訳アプリを使用していたらキーボードの上にツールバーが表示されていたので同じように実装してみました。
![IMG_1843.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ed482a32-e094-5276-767c-3889ae3f85f9.png)

# サンプルアプリ
![Simulator Screen Recording – iPhone 14 – 2022-12-21 at 21 30 53](https://user-images.githubusercontent.com/84154073/208905758-a6a78e3b-5c8c-48ce-8a76-2a21ec8d48da.gif)

# 実装
“`swift
import SwiftUI

struct ContentView: View {
@State var text: String = “”
var body: some View {
TextF

元記事を表示

iPhoneのSMSを取り出す

# バックアップを取る
iTunesなどでiPhoneのバックアップを取る

全バックアップが面倒なら自己責任でサードパーティ製のものを使うと個別バックアップできるかもしれません。

# バックアップしたフォルダからSMSのデータを探す

Windowsであれば`%userprofile%\Apple\MobileSync\Backup`内にバックアップした日時毎のデータがあるので適当にバイナリgrepする。

自分の場合は`chat_id`で検索するとすぐでした。
他にも送信者などでも良いと思います。
(迷惑メールなら送信者が特殊なアドレスなので引っかかりやすいです。)

バイナリgrepは[msys](https://www.msys2.org/)や[cygwin](https://www.cygwin.com/install.html)などでやるのが楽と思います。
例)
“`shell
$ grep chat_id . -nr
Binary file ./3d/3d0d7e5fb2ce288813306e4d4636395e047a3d28 matches
“`

# DB

元記事を表示

[Swift]タイプライター風にUILabelをアニメーションさせる

# 参考動画
![-gdjupqclrgqq32do.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/1a7a2107-61b2-62d4-fb63-f71d0cceb873.gif)

このようにUILabelを1文字ずつ表示するアニメーションをする方法を紹介します。

# コード
“`.swift
final class View: UIView {
@IBOutlet weak var label: UILabel!
private var timer = Timer()
private var currentTextCount = 0
var text: String?

private func setTimer(_ text: String) {
timer = Timer.scheduledTimer(timeInterval: 0.075, target: self, selector: #selector(textA

元記事を表示

OTHERカテゴリの最新記事