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

iOS関連のことを調べてみた2021年09月30日
目次

CombineとVIPERでアプリを構築する

## はじめに
iOS13以降、Frameworkとして提供されたCombine。
上記のおかげで外部ライブラリに頼らずにリアクティブプログラミングを使うことができるようになり、アプリを構築する上での選択肢の一つとして考えられている方も多いのではないでしょうか?
では、実際にアプリを作る上でどういった形でCombineを使っていくことになるか…
ということで、今回はCombineとVIPERを使って簡単なアプリ作ってみましたので、作ったアプリを元に処理の流れを記載していきます。

## CombineとVIPERとは
まずは、CombineとVIPERについて軽く紹介したいと思います。

*※ CombineとVIPERの詳細については、今回の本筋から逸れるため、詳細な説明はいたしません。
詳しくは知りたい方は別記事をご参照いただきますようお願いいたします。*

### Combineとは
イベントをどのように処理するかを宣言的に記述することができるAPIです。
関数型リアクティブプログラミング(FRP)のフレームワークであり、FRPだと他にはRxSwiftといった外部ライブラリが

元記事を表示

抵抗値のカラーコード表は二度と見たくないので、AIがリアルタイムに物体検出をして抵抗値を計算してくれるスマホアプリをリリースしてみた

## これは何

スマホをかざすと、AIがリアルタイムに物体検出を行い抵抗値を判別してくれる抵抗値AI計算機というアプリを作成しました。

logo
Google Play で手に入れよう

元記事を表示

MVPについて

#はじめに

MVPは

“Model“
“View(View,ViewController)“
“Presenter“

の3つで構成されています。“MVC“では“View“と“ViewController“は分けて考えられていましたが、“MVP“においては“View“として扱われます。

#なぜMVPなのか

“MVC“では“ViewController“の責務が大きくなってしまうため、テストの容易性や作業分担のしやすさといった問題があります。それを解決するためのアプローチが“MVP“です。以下では、“MVP“における役割分担を“MVC“と交えながら確認していきます。(なお今回は“MVP“の中でも“PassiveView“パターンを取り扱います。)

##MVC
![2E0B0170-7948-47E7-BFFB-96A59F001A52.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170864/961f67fe-ada2-b473

元記事を表示

アニメーションライブラリ「Comets」を使ってみた

# はじめに
Swiftのライブラリで「[Comets](https://github.com/cruisediary/Comets)」というアニメーションライブラリがちょっと気になったので触ってみました。

流れ星のような表現を簡単にできるライブラリで非常に簡単にアニメーションを実現できるので、その方法を記載します。

# 今回作ったアニメーション
早速ですが、今回作ったアニメーションは以下のようなもので、サンプルに沿ってコードを記載するとサクッと以下のようなアニメーションを実現できました。
![comets01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122007/0b16a6f0-d03a-d54c-0c13-2683e4288b59.gif)

# 作り方
## ライブラリのインストール
ライブラリのインストールにはCocoaPodsかCarthageが使えます。

“`:CocoaPods
pod “Comets”
“`

“`:Carthage
github “cruisedia

元記事を表示

iOS で物体の向きをリアルタイムに計算②【方向成分抽出、表示】

前回の記事[『iOS で物体の向きをリアルタイムに計算①【2D FFTでパワースペクトル画像生成】』](https://qiita.com/pic18f14k50/items/6ebba549ff411c11dd2a)の続きです。
パワースペクトルから方向を抽出して表示します。

<完成イメージ>
![demo2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71605/4c02cb64-213e-b775-b7dd-ddc1578b9ca6.gif) ![demo3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71605/169b0696-28dc-10ed-f54b-f4249c3a02eb.gif)

左上の赤い線が抽出した方向を表しています。
前回の記事のでは上半分の画像はFFTに入力する画像(周囲を暗くした画像)を表示していましたが、今回は暗くする前の画像を表示しています。

コードはGithubに置いてい

元記事を表示

Flutter&Codemagicを使用してMacなしでiOSアプリを開発および配布する方法

![remote-access-virtual-macos-build-machine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028491/232a98a9-8ce6-0e7d-e332-146282e392f6.png)

この投稿から、LinuxでiOSアプリを構築する方法を学びます。FlutterとCodemagicを使用すると、Macを使用せずにLinuxでiOSアプリを開発および配布できます。これにより、LinuxでのiOS開発が簡単になります。
ほとんどの場合、iOSアプリはmacOSマシンから開発および配布されます。macOSなしでiOSプラットフォーム用のアプリを開発することは想像しがたいものです。ただし、Flutterと[Codemagic](http://codemagic.io/)を組み合わせることで、macOSを使用せずにiOSアプリを開発および配布できます。 前回の投稿では、Macを使用せずにiOSアプリに[コード署名するプロセスについて説明しました](https:/

元記事を表示

外部ツール無しでiOS Appが生成されたファイルを取得する方法

iOS アプリの開発にあたって、アプリから生成された実機内のファイルの内容を確認する必要がある。

XCodeを起動する。ケーブルで実機と繋ぐ

以下のようにファイルをMacマシンに落とす。
iOS:Xcode → window → Devices→ Select the corresponding device → Select the corresponding app → Click the Settings button below the app list → Download Container → Right click the downloaded file
落とされたファイルで以下の操作でパッケージ中を開く
and select Show Package Contents → AppData → Library →

アプリの実行中にそれぞれ生成されるファイルが確認できる

元記事を表示

AppStoreリリース申請でGuideline 4.0 – Designによってリジェクトされた件

## 投稿の経緯
個人開発アプリをAppStoreへリリース申請した際に、**`Guideline 4.0 – Design`**によってリジェクトされたので内容と対処法について投稿しようと思います。

## 環境
macOS BigSur バージョン 11.6
Swift バージョン 5.5
Xcode バージョン 13.0

## リジェクト内容
> Guideline 4.0 – Design
We noticed an issue in your app that contributes to a lower quality user experience than Apple users expect:
– Your app included hard to read type or typography.
Next Steps
To resolve this issue, please revise your app to address all instances of this type of issue.
Resources
For information on im

元記事を表示

iOS 15: SNSアプリ向けのインテントにより、通知UIやSiriからの提案を改善。

この機能はSNSアプリ向けです。この機能を実装することで

– アプリのアイコンだけでなく、チャットのアバターが通知に表示されます。

(アプリアイコンは右下に表示されます。このデモではアプリアイコンは空白です。)

– システムの連絡先アプリや共有シートを通して、アプリ内の連絡先をシステムが提案できるようになります。

– ユーザーがフォーカスモードをオンにして、選択した相手だけからの通信を許可すると、これらの人たちがあなたのアプリを通じて送信したメッセージが通知されます。

– 通知サービス拡張機能を使って、あなたのリモート通知を画面に表示される前に編集することができます。

## プロジェクトの設定を行う

まず、あなたのXcodeプロジェクトの `Communication Notifications` の機能を有

元記事を表示

空の配列に対してallSatisfy(_:)を実行するとtrueが返ることとvacuous truth

# allSatisfy(_:)

`allSatisfy(_:)`はSwift4.4で追加された`Sequence`のメソッドで、すべての要素が与えられた条件を満たすかを判定するメソッドなのですが、このメソッドを空の配列で使うと`true`を返します。

このことはアップルの公式ドキュメントにも記載があります。

https://developer.apple.com/documentation/swift/array/2994715-allsatisfy

“`
If the sequence is empty, this method returns true.
“`

# 誤解: falseを返すと思っていた

自分は直感的に`false`を返すだろう、と思ってある判定式に使っていたのですがユニットテストが失敗してこの振る舞いに気が付きました。
空なんだから各要素は何も条件を満たしていないじゃないか、という考えでした。

ググってみるとswiftのフォーラムでも同じ疑問を持った方が質問をしていました。

https://forums.swift.org/t/unexpect

元記事を表示

【iOS】続 AssetCatalogの素材をXcodeを使わなくてもいい感じに見る

[【iOS】AssetCatalogのColorSetを閲覧できるツールを作ったお話](https://qiita.com/MYamate_jp/items/a0c1404dedac6957e1ad)
こちらの記事の続きです。

# 背景
業務中のデザイナーさんとのやり取りで、「今、リリースされているアプリに含まれている素材一覧をください」と言われるシーンが何回か発生したことがありました。
もちろん、元データの管理はなされているもののマスターデータの整理をされる際にリリース済みのアプリに含まれている素材を知れると便利ということでした。
最初からしっかり素材の命名規則であったり管理方法を決めた上で運用することができていれば良いのでしょうが、実際には担当者の移動や退職による引継ぎがうまくなされなかったり、ルールがあってないような状態に陥ってしまうとどの状態が最新の素材なのか管理しきれなくなってしまいます。
そういった時にリリース済みの最新の素材の利用状況を把握するためにAssetCatalog内のデータを全て欲しいということは割とあるのかなと感じました。

デザイナーさんにXcodeを入れ

元記事を表示

Swift Package Manager 活用時に「remote repository could not be accessed」が出た時に確認すること

## 概要
Swift Package Manager を導入しようとしたらエラーが出て進めませんでした、、
ググってもあまりドキュメントが出てきませんでしたので、解決策を共有します。

## 再現環境
Xcode12.5.1
zsh

## Swift Package Manager とは?
Xcode11 からiOS向けアプリでも活用可能になった、依存関係を解決しつつライブラいの導入ができるApple製のパッケージ管理ツールです。
この辺の資料が分かりやすいです。
https://qiita.com/hironytic/items/09a4c16857b409c17d2c

## エラー内容
今回起きたエラーはXcodeの「File > Swift Packages > Add Package Dependency」から `https://` 指定でプライベートなライブラリをURL検索した際に発生しました。

内容は下記の通りです
“`
The remote repository could not be accessed.
Make sure a valid reposito

元記事を表示

iOS15でのIDFA許可要求の仕様変更とその対応方法

##このページの概要

IDFA取得許可リクエストを行ってダイアログを表示する処理について、
iOS15以降では、アプリの状態が Active の場合にリクエストしないと
ダイアログが表示されなくなりました。

特に注意が必要なのは、位置情報やプッシュ通知などの許可要求と連続でリクエストしたり、
他のリクエストのcompletionHandler内で実行している場合です。

問題が発生するパターンと、その対応方法について記載しています。

##iOS15で新たに加わった制限の内容

公式ドキュメント

https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorization

に以下の記載があります。

“`text:
Calls to the API only prompt when the application state is: UIApplicationStateActive. Calls to the AP

元記事を表示

userDefaultsに保存した値をTableViewで表示する(swift)

#概要
userDefaultsに保存した値をTableViewで表示する機能を独学で実装してみました。
storyBoadとラベル配置の説明は省略します。

![2021-09-27 16.52のイメージ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1261100/d8a5d61f-466d-db1d-14f1-a20c587443ac.jpeg)

#①userDefaultsに保存するための空配列を作成する
“`swift:sample
var saveArray :[String] = []
“`

#②textFieldの入力値やpickerで選択した値を配列に追加する

“`swift:sample
var textFieldValue :String = “”
textFieldString = textField.text!
saveArray.append(“\(textFieldValue)”)
“`

#③userDefaultsに保存
“`swift:sample

元記事を表示

カプセル化をわかりやすく

##前提として
本記事は私自身の備忘録として執筆しています。
ですので間違っていたらご指摘いただけますと幸いです。
少々わかりにくい部分や表現がありますことをご了承ください。

※そもそもカプセル化という言葉自体、抽象的な言葉で本記事では実際にprivateを使ったケーススタディを紹介しています。

##イメージ
まず「カプセル化のイメージ」について
・何かに包まれている
・外から守られている
・カプセル化を崩すとあまりよろしくない 等

こちらが私が最初に聞いた時のイメージです。
結論から言うと、これらは概ね正解と言えるでしょう。

##どこから守るのか
カプセル化についてはオブジェクのデータやメソッドについて使われることが多いようです。

一言で言うと「オブジェクト内にあるデータ」を外部からの不正アクセスから守ると言うことになります。

すごく簡単に言い換えるとこうです。
「そのオブジェクトやメソッドに対する外からのデータアクセスを拒否する」
と言うことです。

##なぜ守るのか(カプセル化の必要性)

目的は大きく分けて2つです。
・外部から不正なアクセスから守る
・外部から意図

元記事を表示

iOS で物体の向きをリアルタイムに計算①【2D FFTでパワースペクトル画像生成】

物体の向きを周波数領域で判定してみます。

<完成イメージ>
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71605/72c6767f-b912-daca-f1f0-05a71328ccd0.gif) ![demo4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71605/73fc6b1c-c1fd-3887-ed7c-9355b40df78d.gif)

これだけでは画像の中での物体位置を考慮した判定はできませんが、物体が強いエッジをもっている場合であれば判定できそうです。
この記事では上記のようにパワースペクトルを表示するまでを記載します。
向きを求める方法は次の記事に記載予定です。
(周波数領域での周波数成分が物体のエッジと直交ので、角度別扇状の成分の総和の比較で判定できると考えてます)。

サンプルコードはGithubに置いています。

https://github.com/tamai999/D

元記事を表示

[iOS]Firebase Analyticsのみを使う場合App Tracking Transparency によってユーザーに許諾を得る必要があるか?

– [Ad Support Frameworkを導入](https://firebase.google.com/support/guides/analytics-adsupport?hl=ja)している場合
– IDFA(広告識別子)を収集しているので、ATTによる許諾が必要。
– Ad Support Frameworkを導入していない場合
– iOS11をサポートしている場合
– [iOS11だと明示していないのに内部的にAd Support Frameworkを使用しておりIDFAを収集してしまうらしい](https://github.com/firebase/firebase-ios-sdk/issues/1686)。そのため、info.plistの`FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED`をtrueとするか、podfileで`pod ‘Firebase/Analytics’`の代わりに`pod ‘Firebase/AnalyticsWithoutAdIdSupport’`を用いるなどしてIDFA収集を阻

元記事を表示

SwiftUIのPreviewをつかってUIカタログを出力する

SwiftUIのPreviews機能を利用するとシミュレータを起動することなくViewの動作を確認できます。

> Generate dynamic, interactive previews of your custom views.

[Previews in Xcode | Apple Developer Documentation](https://developer.apple.com/documentation/swiftui/previews-in-xcode)

プレビューを利用して開発する中で、プレビューのスナップショットが一覧で見られると便利だと思ったので、それを行うライブラリを作ってみました。

※ SwiftUIのプレビュー機能を利用しているViewが対象となります。プレビューされていないViewのスナップショットは作成されません。

## つくったもの

[yyokii/UIPreviewCatalog](https://github.com/yyokii/UIPreviewCatalog) というものを作りました。

`createCatalog(previ

元記事を表示

【Flutter】簡単なToDoアプリの作成手順

皆さんこんにちは!現役大学生のKamichan_R(@Kamichan_R)です。
今回は、世界中で多く利用されているクロスプラットフォーム開発のフレームワークであるFlutterでアプリ開発をしました。Flutterでアプリ開発をするためにDart,SQLiteを勉強しました。そして、学習のアウトプットとしてToDoアプリを制作しました。
この記事では、今回制作したToDoアプリの説明・開発手順と学習の振り返りを紹介します。

#アプリ制作の説明と経緯
ここでは、ToDoアプリの概要と使用した技術と学習の目的を説明します。
##アプリの概要
今回開発したアプリは基本的なToDoアプリの機能が実装されています。タスクの追加・読取・編集・削除(CRUD)の機能があります。タスク作成時は、タスク名・優先度・期限・メモを入力します。複数のタスクがある場合は期日が早い順に並べるという機能があります。

OTHERカテゴリの最新記事