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

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

ライブラリを分解して組み合わせて、車輪の再発明をするーードキュメントスキャナ

# 置かれた書類を検知して真っ直ぐにする機能を作ります

# 置かれた書類を自動検知して真っ直ぐにしたい
置かれた書類をカメラで撮影すると、斜めになることがあります。
それを自動で真っ直ぐに直してくれる機能があればいいですよね。

で、iOSではVisionKitというフレームワークですでに実現できます。

![Mar-01-2022 08-45-00](https://user-imag

元記事を表示

Flutterでダークモード時に画像を切り替える【Dart】

Xcode/AndroidStudioでそれぞれ開発するときは、ライトモード用とダークモード用の画像を用意しておくと勝手に切り替えてくれる機能がありますが、Flutterではそれを使うことができないようです。

以下のようにして対応します。

“`.dart
Image.asset(
Theme.of(context).brightness == Brightness.dark
? ‘assets/images/image_dark.png’
: ‘assets/images/image_light.png’,
),
“`

`(bool変数) ? (trueのときの処理) : (falseのときの処理)`の構文を利用して、
ダークモード(Theme.of(context).brightness == Brightness.dark)のときは、image_dark.png、
ライトモード(Theme.of(context).brightness == Brightness.light)のときはimage_light.png
を表示させます。

[Twitte

元記事を表示

エラーが出て、 CocoaPods をインストールできない。「You don’t have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.」

## 1. やりたいことを確認する。

#### CocoaPods をインストールしたい。

> CocoaPodsとは、定番のCocoaの依存管理マネージャーです。アプリ開発で煩雑となりがちな外部ライブラリの管理を、簡単な記述とコマンドだけ支援するものです。
>

https://dev.classmethod.jp/articles/cocoapods/

こちらの記事を参考に、 CocoaPods をインストールしようとしているところ。

## 2. 課題(エラーの状況、不明点、エラーログ)を確認する。

#### ⚠️ cocoapods をインストールできない。

“`bash
$ sudo gem install cocoapods
Password:
Fetching rexml-3.2.5.gem
Fetching colored2-3.1.2.gem
Fetching claide-1.1.0.gem
Fetching atomos-0.1.3.gem
Fetching ruby-macho-2.5.1.gem
Fetching nanaimo-0.3.0.ge

元記事を表示

[Swift]Delegateについて 初級編

# この記事を書いた理由
Swiftを勉強し始めて、ずっと分かんなかったよ。
難しい。難しいよDelegateの理解。

というわけで、もしかしたら他にも同じ方いらっしゃるのではないかと思いDelegateについて備忘録的に私の理解を記載したいと思います。
Delegateは色々なされ方がありますが、まずは初級として概念的に理解していただければと思います。
まだ勉強中なので間違えていましたらご指摘いただけますと幸いです。

# 目次
[1.Delegateとは?](#Delegateとは?)
[2.どんな時にDelegateは必要なの?](#どんな時にDelegateは必要なの?)
[3.メンドクサイから処理の一部を、他にやってもらう](#メンドクサイから処理の一部を、他にやってもらう)
[4.エラーが出てしまう理由](#エラーが出てしまう理由)
[5.protocolを使用する](#protocolを使用する)
[6.まとめ](#まとめ)

# Delegateとは?
結論から言うと、Delegateとは **「あるクラスから他のクラスに処理を任せる」** というデザインパターンのこ

元記事を表示

URLProtocolでURLSessionの通信をハンドリングする

# 概要

例えば、通信などが起きたときに、そのログを残しておいたり、通信量を調べたい時があると思います。
そんな通信のハンドリングを行うために、URLProtocolを利用します。

## 通信をURLProtocol継承クラスに処理させる
通信をハンドリングするには、ハンドリングするためのURLProtocol継承クラスを用意します。ここではMyURLProtocolという名前にしました。
URLProtocol継承クラスの実装に関しては後ほど説明します。

URLProtocol継承クラスを用意したら、各種通信がURLProtocol継承クラスを通して行われるようにします。

### URLSession.sharedの場合
もしURLSession.sharedしか使われていないのであれば、`URLProtocol.registerClass` を使うことで全てのURLSession.sharedの通信がURLProtocol継承クラスを通してハンドリングされます。

“`swift
URLProtocol.registerClass(MyURLProtocol.self)

元記事を表示

AIが文章の表現や文体をチェックしてくれるアプリを作った?

# はじめに
文章を分析してアドバイスをしてくれるAIアプリをリリースしました。今回はその機能と使用した技術についての記事になります。ダウンロードは画像もしくは[こちらのリンク](https://textcheckai.page.link/first)からどうぞ。ちなみに画像のキャラクターがAIの「ホメロス」です。

[](https://textcheckai.page.link/first)

# ホメロスができること
![AI編集者が 文章チェック!のコピー-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/12432fe4-f6a5-7f9a-28d2-2d09bff59378.png)

## 文体分析
ユーザーが入力した文章を分析し、その文

元記事を表示

斜めに置かれた書類をまっすぐにしたい。画像変形する技術がすごい

# ドキュメントスキャナーのような画像変形を行う方法です。
![Feb-27-2022 23-14-57](https://user-images.githubusercontent.com/23278992/155886008-ecf1d7cb-eea0-4923-9e42-d9499c4911e2.gif)

# おいた書類をまっすぐに切り取りたい
書類などを机に置いて斜めから撮影すると、台形に移ります。
これをまっすぐな長方形にするには、画像を変形させる必要があります。

# DDPerspectiveTransformが使える
ライブラリを使えば、手動で簡単に画像を整形できるUIがつかえます。

https://github.com/d-dotsenko/DDPerspectiveTransform

# 使い方

DDPerspectiveTransformをプロジェクトに入れ、UIを表示します。

“`swift
let cropViewController = DDPerspectiveTransformViewController()
cropViewControll

元記事を表示

ショートカット+CoinGecko API+Subscan APIでDOT保有分を日本円換算した結果を確認する

# 作成したもの
iPhoneで保有するDOTを日本円換算し、計算結果をクリップボードにコピーするショートカットを作成しました。

ショートカット名:calcHoldDOT-JPY

https://www.icloud.com/shortcuts/09fa7af649ca4b1db1c228d474604c43

# 処理の流れ
1. [CoinGecko API V3](https://www.coingecko.com/ja/api/documentation?)を使用して**Polkadot**の日本円換算の値を取得するショートカットを実行して変数に設定
2. [Subscan API](https://docs.api.subscan.io/#introduction)を使用して指定したアドレスで保有するDOT(**Balance**)を取得するショートカットを実行して変数に設定
3. 1.と2.の変数を掛けて DOT保有量の日本円換算した結果をクリップボードにコピーし、ショートカットをの実行を停止
iOSのNSTimeZoneのUTCってnameがGMTなんだ..

![GMT_UTC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152641/ac5ea486-92d4-d55f-c618-9febbf5f2194.png)

AndroidとiOSでTimeZoneのUTCにまつわる調査をしていたところ想定外の結果になったので書き残しておきます。誰か真相を知っていたら教えて下さい。

# GMTとUTCの違い
GMTとUTCの違いをググるとCITIZENの用語集とよくある質問リストが最初に出てくる

https://citizen.jp/faq/detail/id1363

>両者は、目的も概念も算出方法もまったく異なりますが、日常生活に不都合のない精度の時間測定(整数の秒)であれば、ほぼ差がないと考えて問題ありません。

そう、ほぼ一緒と考えてよいということ。日本のAsia/Tokyo(+9:00)より9時間前のタイムゾーンということだ。

# Android(Kotlin)の場合

“`kotlin
import java.util.TimeZone

f

元記事を表示

【Swift】Combine ✕ Firestore ✕ Codableで通信処理を書く(取得・追加・削除の処理)

## はじめに
Combineを使った非同期処理として、`URLSession`は標準ライブラリが提供されておりますが、`Firestore`は自分で実装する必要があります。

このあたりの日本語での情報量が、`URLSession`と比較して、未開拓に感じましたので、自分が実装したサンプルコードを記事にしてみました。

今回、書いた処理は、Firestoreからの**取得・追加・削除**の処理です。(CRUDの中では更新がありませんが、更新処理は追加処理とほぼ変わらないため割愛します。)

## 前提条件
– `FirebaseFirestore`と`FirebaseFirestoreSwift`がプロジェクトに導入されていること
– ジェネリクスについて理解していること
– `Combine`と`Firestore`の使い方を理解していること

#### ジェネリクスについて
https://swift.codelly.dev/guide/ジェネリクス/#ジェネリック型-generic-types

#### Firestoreについて
https://firebase.googl

元記事を表示

【iOS】アーキテクチャ MVVM 解説してみた!

# 目的
iOS開発における MVVM について知ること

(キーワード: `データバインディング`, `リアクティブプログラミング`, `RxSwift`, `Combine`)

# MVVM とは?
`データバインディング`という仕組みを使用したアーキテクチャです。(データバインディング?超重要)

構造は `M: Model` `V: View` `VM: ViewModel` となる。
**画面の描画 = View** と **プレゼンテーションロジック = ViewModel** を分離するためのアーキテクチャ。GUIアーキテクチャの1種。

ViewとViewModelを`データバインディング`という仕組みで関連づける。
ViewModelの状態変更に同期してViewの状態も更新され、画面に反映される。

元記事を表示

GitHub Actions から Autify for Mobile (iOS) テストを実行する

GitHub Actions から Autify for Mobile (iOS) テストを実行する方法を解説します。

## 前提

* Autify for Mobile(iOS) で Simulator テストを実行する

## fastlane 設定

Autify へアップロードするために、*.app を生成します。

以下の fastlane を設定します。

Autify は x86_64 Simulator で実行されるため、arm64 ではなく x86_64 の *.app を生成するようにしています。

`fastlane/Fastfile`

“`ruby
lane :build_simulator do
gym(
scheme: “MyApp”,
skip_package_ipa: true, # *.app を生成するため、*.ipa は不要
skip_codesigning: true # Simulator 実行のため署名不要
destination: “generic/platform=iOS Simulator”

元記事を表示

Fast-Neural-Style-TransferをiOS、MacOSで使えるようにする CoreML変換

# Fast-Neural-Style-TransferをiOSで使う方法です

[iOS/Android]FirebaseAuthの電話番号認証(SMS)にてボット判定(reCAPTCHA 検証)をなくす方法

# 概要
この記事ではFirebaseAuthの電話番号認証(SMS)にてボット判定(reCAPTCHA 検証)をなくす方法についてご紹介します。
今回iOS,Androidそれぞれボット判定を消す事が出来たのでそれぞれ解説します!

# そもそもボット判定とは?
以下のような画面を指します。まずこのような画面が表示されたあとに
![スクリーンショット 2022-02-25 11.02.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49347/a06d2f79-d54f-4d07-8e5d-b14e5c108553.png)

このような画面が出る場合があります。
![l_mm_captcha_05_w290.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49347/89a1a2e7-ae64-e3c5-d431-334d8a8acb5f.jpeg)

これをユーザにサインアップ、ログインしてもらう度に実施して

元記事を表示

WidgetKitで天気予報アプリ作ってみた〜記事まとめ〜

## はじめに
この記事は**WidgetKitで天気予報アプリ作ってみた**シリーズで書いた記事のまとめです。

## 記事一覧
1.天気情報取得編

https://qiita.com/nkekisasa222/items/359192455b65fb60705d

2.位置情報取得 & 保存編

https://qiita.com/nkekisasa222/items/249240ad36128de05557

3.Widget Extension追加編

https://qiita.com/nkekisasa222/items/744754523172035cc9bf

4.タイムライン作成編

https://qiita.com/nkekisasa222/items/b22c98249330f3f5c459

5.View実装編

https://qiita.com/nkekisasa222/items/93991d64e8b5b5396b36

誰かの役に立てば幸いです!

## おしらせ
現在副業でiOSアプリ開発を募集しています。
ご依頼は[Twitter DM](ht

元記事を表示

2022年のiOS/Androidの技術をざっくりキャッチアップ

ネイティブアプリにも宣言型UIとかなんかいろいろ入ってきたので、「いい加減そろそろ覚えないとな~~」ってなってる人は少なくないと思ってるんですけれど、一足先に一通り触ったのでどんな感じで学べばいいのかなという参考になればという感じの記事です。

# 宣言型UI

WebにjQueryがもたらされたとき、だれでも簡単に直接DOMを触ってViewを弄れるようになった結果、アプリの大規模化・保守の長期化に伴って手に負えなくなったので、それを解決するためにReact辺りが宣言型UIの思想を生み出した…というざっくりした認識を持ってるんですけれど、合ってるかは知りません。

とまれ、ネイティブアプリにも数周遅れではありますが宣言型UIの流れがきています。

## SwiftUI

SwiftUIの現在の最新バージョンは3です。

どんどん便利になるのはいいことなんですけれど、サポートするiOSのバージョン指定によっては使えない機能とかがあります…。

これは公式のコードなのですけれど、

“`swift
struct Content: View {
@State var model =

元記事を表示

【iOS】AppleSilicon環境(MacOS)でiOSアプリを実行した時にMacで実行しているか判定する

# iOSアプリをAppleSilicon環境(MacOS)で実行した時の判定
以下質問にて@nukka123さんに回答いただきました。
https://qiita.com/Howasuto/questions/3fc5ba81ea6240470ac4

以下のコードでAppleSilicon環境での実行時の判定を可能にします。
またUIDevice.current.userInterfaceIdiomでの判定基準はあくまでユーザーインターフェースのため、AppleSilicon環境で実行した際にはiPad用のインターフェースが適応されるため、判定結果としてはiPadとして判定されます。

“`swift
if ProcessInfo.processInfo.isiOSAppOnMac {
// iOSアプリをMacで実行時
print(“iOSAppOnMac”)
} else if UIDevice.current.userInterfaceIdiom == .phone {
// iPhone用インターフェースで実行時
print(“iPhone”)
}

元記事を表示

WidgetKitで天気予報アプリ作ってみた〜View実装編〜

## 投稿の経緯
この記事は、前回投稿した**WidgetKitで天気予報アプリ作ってみたシリーズ~タイムライン作成編~**の続編です。
今回はいよいよViewを実装していきます。

前回の記事を見てない人は先に↓こちら↓を確認してください。

https://qiita.com/nkekisasa222/items/b22c98249330f3f5c459

## 環境
Swift 5.5
Xcode 13.2.1

## サンプルプロジェクト
GitHubにPushしています。気になる方はご覧ください。
https://github.com/ken-sasaki-222/WeatherWidget
![QR_615642.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/8c43013f-9757-f7dd-5946-2684f30f63b7.png)

## Viewで表示する内容
![image.png](https://qiita-image-store.s3.ap-no

元記事を表示

SwiftUIでテーブル形式のビュー(Listなど)でローディング中のスケルトンを適用する方法

# はじめに
`List`や`LazyVGrid`などの画面初期化時にリスト数が決まっていないViewに対し、YoutubeやFacebookで使われているような、ロード中のスケルトンを表示する方法を書いてみました。

ちなみにスケルトンスクリーンとは、このようなやつです。

https://ws-design.net/skeleton_screen/

実装イメージは下記です。

dummy real

# 結論
当たり前っちゃ当たり前なので

元記事を表示

カテゴリとクラス拡張についてメモ

 UIImage+Rect.mとか、NSString+size.mとか、不思議だなと思っていた。

やっていることは、もともとのiOSフレームワークを活用して、やりたい機能だけ追加しているという感じだった。
なので、もともと存在するiOSフレームワークにだけ使える拡張機能かと思っていたが、違うらしい。

新規で作成したVCなどにも活用できる。

いや、そりゃそうでしょって感じなのですが。

クラス拡張は、UIImageやNSString、UIButton、UILabelなどよく使うUIKitやFoundationの機能拡張が多い。
カテゴリは。冗長化してきたソースを機能ごとに分割するのに使うケースが主流なのかな。

そうじゃないよ、というときは、指摘していただければ、確認しますので、
気楽にコメントください。

元記事を表示

OTHERカテゴリの最新記事