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

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

Flutterアプリに(ホーム)ウィジェットを追加してみる+α

この記事は [NTTテクノクロス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ntt-tx)の20日目です。

こんにちは。NTTテクノクロスで、エバンジェリストとして活動している神原([@korodroid](https://twitter.com/korodroid))です。実は、本日投稿予定だった弊社の別メンバがやむを得ない事情により、担当できなくなりました。同記事を楽しみにしてくださっていた皆様、申し訳ございません。代わりに、私が20日目をお送りします。

自己紹介は、投稿済みの14日目の私の別記事[「海外活動を通じて得た英語の学び方+α」](https://qiita.com/korodroid/items/193788fd1a911be77725)をご覧いただけますと幸いです。よろしければ、記事も合わせて読んでいただけたらうれしいです。

それでは、今回の内容に入っていきます。先日、 **Flutterでアプリを作っていて、このアプリに(ホーム)ウィジェットを追加したいという衝動に駆られ、実現しま

元記事を表示

SwiftUI の裏にある UIKit をカスタマイズする Introspect の使い方と仕組み

これは [Kyash Advent Calender 2021](https://adventar.org/calendars/6274) の20日目の記事です。最近 Kyash の iOS アプリで使っているライブラリのコードを読んだら動作の仕組みが面白かったので、使い方も含めて紹介したいと思います。

## 概要

SwiftUI は Apple のデバイス上で UI を作るための新しいフレームワークです。2019 年の登場からまだ間もないこともあり、成熟した UIKit と比べると足りないコンポーネントや機能が多いです。とくに、iOS 13 など最新ではない OS もサポートしているアプリで SwiftUI を使うのはかなり苦労する場面があるのではないでしょうか。

SwiftUI の機能不足を解決するライブラリのひとつに SwiftUI-Introspect があります。

https://github.com/siteline/SwiftUI-Introspect

Introspect は SwiftUI の View の裏側で使われている UIKit のコンポーネントを探

元記事を表示

既存の動画にフィルターをかけたいなら、一枚一枚処理すべし

#既存の動画ファイルにフィルターをかける
カメラで撮りながらリアルタイムでフィルタをかけるのではなく、
既存の動画ファイルにフィルターをかける方法です。

#画像だけではなく動画にもフィルターをかけたい。しかもフィルターを設定して撮った動画ではなく、撮った後の動画にかけたい。
既存

元記事を表示

iOSのPWA対応時に気をつけるべきこと

iOS(Safari)は、Androidに比べるとHTML標準仕様への対応が遅れがちです。
PWA仕様への対応も例に漏れず、最新のiOS15.2においても不完全な状態です。

それでもiOS13辺りからはそれなりに使える状態になってきたので、個人的に開発しているWebアプリではiOS13.4以降をPWAに対応させました。

今回はその経験から、iOSのPWA対応時に気をつけるべき事やちょっとしたテクニックを紹介します。

## PWA対応の目的

なぜWebアプリをPWA対応させるのか?

自分としては以下2点がPWA対応の主なモチベーションだと考えています。

– ネイティブアプリのようにスマートフォンのホーム画面に導線を置ける
– アドレスバーなど不要なUI無しのフルスクリーンでWebアプリを起動できる

実はこの2点に関しては、Webアプリモードという機能を使うことでiOS4の頃には既に実現可能でした。

ただWebアプリモードはOAuthが使えなかったり起動時のURLを指定できなかったりブラウザバックできなかったりで使いづらい点も多く、PWAとして良い感じに生まれ変わること

元記事を表示

StoreKitTest によるアプリ内課金テストの連続実行で失敗するケースの検証

## 概要

StoreKitTest を使った課金のユニットテストを回していると、たまに fail することがありました。
一見コードに誤りはなさそうなのになぜテストが失敗するのか、その原因を探ってみました。

## たまに失敗するテストの例

というわけで、StoreKitTest を使った購入のテストを書いてみました。

https://github.com/manicmaniac/StoreKitTestingExample/blob/5ae3a57c5b9ce1fe4329c385f7fcb97a65c6a4e1/StoreKitTestingExampleTests/StoreKitTestingExampleTests.swift

以下、見やすいように少し編集しつつ、何をしているか説明します。

`setUpWithError()` で `SKTestSession` のインスタンスを作成します。
その後 `.clearTransactions()` を呼び出して前回のテストの transaction を消去し、`.resetToDefaultState()` を呼

元記事を表示

同じような処理だけどこっちの方がいいよってやつ

Appleのプラットフォームでコードを書く上で、ほぼ同じ挙動でも用意されたAPIを使うとその後のOSアップデートや対応が楽に出来るというケースがあります。
これらを使うことで次のような恩恵があります。

– OSアップデート時に追加される機能が変更なしで動くようになる
– マルチプラットフォームでの修正が少なくなる
– より標準に近い見た目になる
– より実際の挙動を表現したコードになるので可読性が上がる

思いついたらどんどん追加します。

# 角丸のボタンを作る

“`swift
let button = UIButton()
button.layer.cornerRadius = 6
“`

“`swift
let button = UIButton(configuration: .filled(), primaryAction: nil)
“`

# ボタン押す時の処理

“`swift
buton.addAction(action, for: .touchUpInside)
“`

“`swift
buton.addAction(action, fo

元記事を表示

VIPERアーキテクチャの所感と僕の考えるリファクタリング案について

# はじめに

VIPERアーキテクチャで新規開発する経験がいくつかあり、その経験を踏まえてVIPERアーキテクチャについて思ったことを書きます。
そのあとに、VIPERアーキテクチャでリファクタリングで工夫したこと、苦労したことをポイントとして挙げようと思います。
(アドベントカレンダー遅れてすみません。。あとでもう少し丁寧に書き直します。)

# 定義

まずはプロトコルの定義をしようと思います。サイトによって命名規則などが異なるので。。

– `EventHandler`
– ViewからPresenterへのProtocol (ViewのEventを検知するという意味合いがある。)
– `UserInterface`
– PresenterからViewへのProtocol (UIの操作をするという意味合いがある)
– `InteractorInput`
– PresenterからInteractorへのProtocol (Interactorへの入力)
– `InteractorOutput`
– InteractorからPresenterへのProtocol (Int

元記事を表示

[個人開発] 外岩情報をシェアできる地図アプリを作っている話

# はじめに
個人開発でiOSアプリを作ってます。
丁度開発を始めてから1年位で、かつアドベントカレンダーの時期とも被っていたので記事にしてみました。
正直まだリリースしただけでコンテンツも機能も全然足りていないので、こうして記事として紹介するのは若干恥ずかしいんですが。。。
これから個人開発やってみようと思っている方に部分的に参考になる情報があるかもしれないので、どんなアプリをどうやって作っているかみたいなところをまとめました。

# 何を作っているのか
**RockMap**という**クライマーのための外岩情報をシェアできる地図アプリ**を作っています。

https://apps.apple.com/in/app/rockmap/id1576276950

レポジトリは公開しながら作っています。

https://github.com/toya108/RockMap

このアプリが何をするためのアプリなのかを理解するためには、クライミングというアウトドアアクティビティについて知る必要があります。
世の中には岩や壁を登って楽しんでいる人達がいまして、彼らが登る外の岩を外岩(そといわ

元記事を表示

XcodeのInterface Builderでハンバーガーメニューの配置の制約を簡単に設定する方法

# TL;DR
画面上部にハンバーガーメニューなどを配置する際に便利な、制約の設定方法についてです。

# ポイント
iOSの標準コンポーネントではないものの、様々なアプリで利用されているハンバーガーメニュー
このメニューのボタンの制約をInterface Builder(Storyboard, xib)で設定するなど、画面上部のアイテムに配置の制約をつける際には気をつけなければいけないことがあります。(参考:[iOSアプリ ノッチ判定](https://qiita.com/yannagi41/items/a6d215071a33ccce494e))

|ボタン|開かれたメニュー|
|:-:|:-:|
|![IMG_5F1EE9A677D6-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146971/8f3c76d1-7fa2-d895-d810-d2b389015fe0.jpeg “ハンバーガーメニューボタンの例”)|![IMG_76A0872B9194-1.jpeg](https://qiit

元記事を表示

MacのTransporterでAppleStoreConnect転送前の検証失敗「A new version of iTMSTransporter is available 」

## 私の動作環境
### Mac
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/ded6a381-a399-956f-9067-5925adc712d8.png)

– Macbook Pro
– バージョン12.1(Monterey)

### Xcode
13.2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/f1234011-d579-bb34-9ebe-23005dbfd00b.png)

### Transporter
1.2.2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/da38d195-eaa1-63f5-d9fc-447d8688142d.png)

## 事象
MacのTransporterアプリでApple Store Co

元記事を表示

Moya ✖️ CombineでAPI通信してみる

## やること
Combineを用いたiOS開発でWebAPI通信を簡単に実装する。

## 実装概要
Moyaを使用するので、CocoaPodsでインストールします。
`pod ‘Moya/Combine’, ‘~> 15.0’`

QiitaのAPIを使用するので、Qiitaでトークンを発行しておきます。
設定 > アプリケーション > 個人用アクセストークン で作成できます。

次に実装ですが、まず複数のAPIを使用できるようにAPIClientを実装します。
APIを呼び出すときの共通処理をここに記述します。
また、今回はQiitaのAPIのみ使用しますが、例えばTwitterのAPIも同じアプリ内で使用したい場合などにもすぐに対応できるようにします。

そして、実際に呼び出すエンドポイントなどを記述するQiitaAPIを実装します。
ここにQiitaのAPIを使用するために必要なトークン情報なども記述していきます。

最後にViewModelで、QiitaAPIを呼び出し、記事を取得します。

## APIClinet

“`swift
import Moya
import

元記事を表示

アニメフィルターをかけるなら、iOSでAIパワーをつかえる

#iPhoneでCGキャラ風アニメフィルターをつかう方法

短いコードでAIのアニメフィルターをつかう方法です。

#アニメフィルターを使ってみたい

写真をアニメ風に変換するフィルターをたまに見かけるけれど、あれってどうやっているのだろう。

###AIの画風変換がつかえそうだけど、AIを使うのって難しいのでは?

写真をアニメ風のスタイルに変換してくれるAIがあるらしい。
しかし、AIってそんな簡単につかえるのだろうか?

#CoreMLを使えばかんたん

Apple

元記事を表示

【Flutter】FlutterJsonBeanFactoryがとても便利という話

インドネシアの[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)

## FlutterJsonBeanFactoryとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/d1b52181-fefe-1141-e570-5fa8e81ec090.png)
[FlutterJsonBeanFactory](https://p

元記事を表示

SwiftUIを使ってWidgetを実装

# はじめに

この記事は、[NTTテクノクロス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ntt-tx) 19日目です。

NTTテクノクロスの神長です。社内では、モバイル向けアプリ開発の技術支援、ノウハウ記事の執筆、[社内研修講師](https://www.ntt-tx.co.jp/products/soft_dojyo/?utm_source=qiita&utm_medium=ac2019&utm_campaign=13)等を担当してます。

また、業務外の活動は[2018年から地域の小学生を対象にしたプログラミング教育](https://www.ntt-tx.co.jp/column/p-education.html)や[社内の仲間と技術書典へ書籍の出展](https://techbookfest.org/product/5925951072370688?productVariantID=4873627981840384)等を行ってます。

今回、Widgetを題材にした記事を書こうと考えた理由は、

元記事を表示

[Firestore][iOS] Ballcap-iOS 使用時に子 View が更新されない場合がある

Firestore のラッパーライブラリ [Ballcap-iOS](https://github.com/1amageek/Ballcap-iOS) を使っていた時に、思っていたのと違う挙動が起きたので、解消法についてメモします。

# 問題は何?

以下の View で “recreate item“ をタップすると “vm.item“ が更新され、 “ChildView“ の表示( “item“ の生成時刻 = “item.dateDebugDescription“ )が変わるはずですが、変わらないという問題です。

“`swift:
import SwiftUI

struct MyView: View {

@ObservedObject var vm = MyViewModel()

var body: some View {
VStack {
ChildView(item: vm.item)
Button(“recreate item”) { vm.rec

元記事を表示

リモート(lldb)でiPhone端末に接続してデバッグすることはできるか

### ある日浮かんだアイディア
LLDBのマニュアルには`Remote Debugging`について説明している部分があります。
![スクリーンショット 2021-12-18 18.03.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142904/9989fa0f-17e2-7b54-f676-e5afe508559f.png)
そして最近`ish shell`や`a-shell`など、iPhoneデバイス上でjailbreakしなくても「コマンド実行環境」を簡単に用意できるようになっていることから

##### もしかしたらリモートでiPhone端末に接続してデバッグすることができるかもしれない

と思いました。ここで「セキュリティー的にそんなことが出来るわけがない」と思った方もいるでしょう。この記事を書いている自分もそう思いましたが直接やってみて確認したかったので、検証してみました。
結論を先にお伝えしますと

##### 予想通りjailbreakしないとできません
lldbはリモートデバ

元記事を表示

M1(pro)でpod installができない時の処方箋?

##?はじめに
先日M1Proチップ搭載のMacを調達したのですが、そこでcocoaPodsのインストールができなく結構苦戦してしまい貴重な休日の勉強時間を削られてしまったので、
同じようなエラーが出ている人がサクッと開発に取り組めるようにこの記事を執筆します。

##?発生したエラー
エラーは全てのライブラリをインストールする時に現れるわけではなく、インストールできないライブラリとできるライブラリが存在したので余計解決を拗らせました。
実際に出たログはこちらです。

“`
[!] Oh no, an error occurred.

Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=xx

If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new

B

元記事を表示

【iOS】ストレージの空き容量を取得する方法 & 容量不足のデバッグ

# はじめに

この記事はand factory.inc Advent Calendar 2021 18日目の記事です。

昨日は @ichikawa7ss さんの「[アプリ・Webサービス開発者に必要なUIデザインの知識 – UIデザインの教科書をまとめた -](https://qiita.com/ichikawa7ss/items/5eb4d465aa550b346e0f)」でした。

こんにちは、and factory iOSエンジニアのykkdです!

さて今回は、

– iOS端末の空き容量を取得する方法
– デバッグ目的で実機、simulatorそれぞれにおいて、なるべく簡単に容量不足を再現する方法

について書きます。

# 端末の空き容量を取得する方法

## 実装

“`swift
let url = URL(fileURLWithPath: NSHomeDirectory())
do {
let result = try url.resourceValues(
forKeys: [

元記事を表示

ios ヘルスケアデータの一覧

iOSのヘルスケアで取得できるデータの一覧
DeveloperDocument を直訳したものになります

| データ | |
| :— | :— |
| ActiveEnergyBurned | ユーザーが消費した活動エネルギー量を測定する量的サンプルタイプ |
| ActivitySummary | アクティビティリングビューで表示されるアクティブサマリー |
| AppleStandHour | 1日のうち、1時間あたり1分以上立って動いた時間数をカウントするカテゴリサンプルタイプ |
| AppleStandTime | ユーザーが立っていた時間を測定する量的サンプルタイプ |
| AppleWalkingSteadiness | ユーザーの歩行の安定性を測定する量的サンプルタイプ |
| BasalEnergyBurned | ユーザーの安静時消費エネルギーを測定する量的サンプルタイプ |
| BodyMass | ユーザーの体重を測定する量的サンプルタイプ |
| DistanceCycling | ユーザーが自転車で移動した距離を測定する量的サンプルタイプ |

元記事を表示

安全なAndroid OS環境を子供世代に

今や老若男女問わずスマートフォン(スマフォ)は生活の必需品になりつつあります。しかしながら、いきなり子供世代にスマフォを無防備に渡すことは、80歳のペーパードライバー祖父にフェラーリをプレゼントするようなものに違いありません。
私はかねてよりiOSもAndroid OSもアプリ開発等携わってきた経緯があるものの、普段使いではiOSを比較的好み子供世代にも使い古しのiPhoneを主にあてがってきました。

#1. iOSのペアレンタルコントロール

iOSにはスクリーンタイムという標準のペアレンタルコントロール機能が付加されていて、主に次のような機能を使うことになると思います。
![IMG_583B97170C98-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206965/83484c7c-29dd-c0b7-d8b5-ab87726a18b8.jpeg)

1. 休止時間➡1日の使用時間制限(一括も、曜日毎も可能)
1. App使用時間の制限➡アプリごとの使用時間制限(アプリごと、ジャンルごと)

元記事を表示

OTHERカテゴリの最新記事