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

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

Amazon SNSでiOSプッシュ証明書の更新

## SNSでは一年ごとに証明書の更新が必要
iOSでは認証keyが導入されたため、本来であれば毎年証明書を更新するという作業は発生しないのですが、AWSのSNSは認証keyに対応していないため、従来どおり証明書を更新してアップロードするという作業が必要となってきます(ここの認識間違っていたら教えてほしいです…)。
一年に一回なので忘れがちになるので以下手順をメモしておきます。

## キーチェーンから証明書ファイルの作成
keycahin Access.appを起動する。
上部メニューの
キーチェーンアクセス→証明書アシスタント→認証局に証明書を要求
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290902/6d006af0-7d4f-bcd8-818c-ab46361c9c93.png)
メールアドレスの入力
通称はそのまま
要求の処理を「ディスクに保存」「鍵ペア情報を指定」
あとは続けて、`.certSigningRequest`ファイルをダウンロード

## Apple Dev

元記事を表示

flutter_flavor + flutter_flavorizr を使って Flutter の Flavor を設定する

Flutter で環境ごとにビルド設定を切り替えるためには、Flavor を設定する必要があります。

[Creating flavors for Flutter – Flutter](https://flutter.dev/docs/deployment/flavors)

ですが調べてみると、Flavor を設定するためには各 OS ごとに手動でそれぞれ設定しなければならないため面倒です。

– [【Flutter】Flavor の設定~build まで(Android 編) – Qiita](https://qiita.com/hiromasa-fun/items/c79c99535f6f1db2a6a9)
– [Flutter で環境ごとにビルド設定を切り替える — iOS 編. モバイルアプリ開発において、環境ごとに設定を変えてビルド・配信することはほぼ必須… | by mono  | Flutter ?? | Medium](https://medium.com/flutter-jp/flavor-b952f2d05b5d)

もっと楽して Flavor を設定できないか

元記事を表示

【自分用メモ】iOSアプリ開発:コードだけでUI画面構成を行う方法〜入門〜

#この記事は
iOSアプリの開発で画面構成(UI部分)にはStoryBoardやswiftUIなどがあるようですが、これらはgitとの相性が悪いためコンフリクションを起こしやすく、チーム開発には向いていないらしいです。というわけでStoryBoardでもなくswiftUIでもない、「コードでUIをデザインする」という方法を学習してみます。具体的には「SnapKitなどのライブラリを用いて画面を作っていく」ことになります。

#手順
・CocoaPodsとSnapKitをインストールして、SnapKitをプロジェクトに導入する
・StoryBoardを消す
・Scene Delegateを消す
・AppDelegate.swiftの編集

#CocoaPodsとSnapKitをインストールして、SnapKitをプロジェクトに導入する
私が過去に書いたこちらの記事を参考に進めて下さい。
参考:[Xcode:CocoaPodsをインストールして、CocoaPodsからSnapKitをインストールする!](https://qiita.com/mi_iroha/items/e27fa875743

元記事を表示

Xcode:CocoaPodsをインストールして、CocoaPodsからSnapKitをインストールする!

#この記事では
自分が調べていて意外とこの記事ないなぁと思い、いろんな参考サイトを渡り歩いてインストールできたので、これを機に一つの記事にまとめて誰かの何かの時に役に立てればと思います。

#環境
PC:Mac
ターミナル:zsh

#手順
・CocoaPodsをインストール
・SnapKitをインストール

#CocoaPodsをインストール
「そもそもCocoaPodsって何なのか?」
Xcodeで使えるライブラリの管理をよりカンタンにしてくれるツールです!なんか、Xcodeにライブラリを追加するのは結構複雑らしいですが、CocoaPodsならその部分をカンタンにしてくれるらしいです。実際、機械音痴かつめんどくさがりの私でもそんなに難しくはなかったです。

では、インストールしていきましょう。

まず、
[CocoaPodsの公式サイト](https://cocoapods.org)
へ行きます。

ほんでからターミナルを出して以下のコマンドをサイトからコピペします。
※ $のところは抜いてコピペしましょう。エラーの原因になります。
※ ターミナルは、Finderをクリックし、右上

元記事を表示

expo eject したコードをiOS用にビルド

少しハマったので共有しておきます。
ejectする前に、expo loginしておくのが重要でした。

“`
expo init testApp
expo login
expo eject –no-install
yarn install
npx pod-install
yarn ios
“`

https://github.com/expo/expo-cli/issues/2880

あと、XCodeでbuildしようとしてnodeが見つからないとエラーが出た場合は

“`
sudo ln -s $(which node) /usr/local/bin/node
“`

https://stackoverflow.com/questions/44492197/react-native-ios-build-cant-find-node/50419734#50419734

元記事を表示

iOS14.~ で発生するUITextFieldの入力バグに関しての調査

# iOS14.~で発生するUITextFieldの入力バグに関して

こんにちは。@kj_trsmです。
今回は業務で遭遇したUITextFieldの入力時に発生するバグに関して、いろいろ調査して
ある程度原因と対策がわかったので、共有できればと思います。

## どんな現象が起きるのか
まずはバグが再現する環境を作ってみました。

– ある画面にtextFieldが複数ある
– それぞれのtextFieldは同じ画面に存在し、textFieldが配置されている感覚も 20pt~40ptくらいでそこまで狭すぎない
– 複数配置されているtextFieldの中に一つだけ password入力をするものが存在している
– password入力用のtextFieldには`isSecureTextEntry` を `true`にしてある
– そのtextFieldが配置されているView、(ViewController)のclassNameがLoginや、SignIn, Accountなどのある程度何をするのかがわかるような名前であること(私の場合は `AccountRegisterVi

元記事を表示

【Flutter】Providerで最低限のDIを行ってテスタブルなコードにリファクタリングする

[前回の記事](https://qiita.com/tokkun5552/items/ede8460bef4892f48e37)の最後に書きましたが、テストを行う際はclass同士の依存関係が密になっていると、思うようにテストを行うことが出来ません。
これは、ビジネスロジックを記載している部分にDBのインスタンスやFirebaseのインスタンスを持たせてしまうと、初期化処理などが行えないためです。(※シミュレータなどを使って回避することもできるようです)
そこで、今回は前回と同じ[こちら](https://github.com/tokku5552/TODOAppSample-Flutter/tree/v1.1)のサンプルアプリをリファクタリングして、テスタブルなコードに書き換えてみました。

### やったこと
– FlutterでのProviderを用いたTodoアプリをリファクタリング
– Providerを使ってDIする
– test用のrepositoryを自作する

最終的なコードは[こちら](https://github.com/tokku5552/TODOAppSampl

元記事を表示

【初心者向け】iOSアプリ開発 ガチャアプリ

#ガチャアプリを作ろう
今回は、ガチャアプリを作ります!
ワクワクできるアプリを作っていきましょう!

      ↓↓ 完成図 ↓↓

#開発環境/開発準備
開発環境や開発準備のやり方は前の記事で丁寧に説明したのでこっちを参考にしてね!!
先に下のを見ておくとスムーズに進められるよ!
[【初心者向け】iOSアプリ開発 カウントアプリ](https://qiita.com/kakecyanman/items/b1ccd6d729d0d166b93b “カウント”)

#開発開始
##見た目
ではまず見た目のデザインの部分から作っていきましょう!
そう、Xcodeでは見た目の部分はコードを書く必要がないんでしゅ。
ドラック&ドロップしていくぞーーー?

**Main.storyboard**に移動し、右上の「+」ボタンを押して**O

元記事を表示

SwiftUIでカラーをアニメーションする方法

# 概要
SwiftUIで画面表示後にカラーが変化するようにしたかったので、その方法を記載します。
【デモ】
colorAnimationDemo.gif

# 方法
`@State`でcolorを監視できるようにします。
画面の表示時に`onAppear`が呼ばれるので、
`withAnimation `を用いて、colorプロパティを指定した秒数をかけて変化させます。

“`swift
import SwiftUI

struct ContentView: View {

@State private var color: Color = .blue

var body: some View {
Rectangle()
.onAppear(perform

元記事を表示

Guideline 1.3 – Safety – Kids Category

# はじめに
[みんなの命を守ろう大作戦](https://apps.apple.com/us/app/%E3%81%BF%E3%82%93%E3%81%AA%E3%81%AE%E5%91%BD%E3%82%92%E5%AE%88%E3%82%8D%E3%81%86%E5%A4%A7%E4%BD%9C%E6%88%A6/id1548242204)というアプリをリリースしました。
小学校3年生の児童が医療従事者の実際の声を授業で聞き、コロナ禍で自分たちができることを考えて、それをアプリとするべく企画、デザインに必要なイラストを作りアプリ化したものです。

この授業の内容は[こちら](https://www.kyobun.co.jp/news/20210205_06/)を参照してください。

話は戻りますが、このアプリをリリースする上で知ったことを共有します。
このアプリは、年齢制限の箇所に子供向けに制作9〜11歳としてリリースしました。
(こちらは当初そうしていなかったのですが、概要欄に「これは小学校3年生のクラスのみんながプロのデザイナー、プログラマー、ミュージシャンと共同開発したアプ

元記事を表示

SwiftUIで電卓を作ろう!

![スクリーンショット 2021-02-14 21.55.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567404/96f3072d-ecdb-2b10-c9a8-f203410be394.png)
#初めに
SwiftUIをまともに触るの今回がはじめてなのでやばいコードが多々あるかもしれないですが、暖かい目で見守っていただけると助かります。
また、ロジック部分も無駄なところが多いとは思いますが、そこも暖かい目で見守っていただけると助かります。

#電卓の設計

>github: https://github.com/ryotatanks9981/CalculatorForSwiftUI

レイアウトはこんな感じです。
![Simulator Screen Shot – iPhone 11 – 2021-02-14 at 21.09.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567404/c66ba11

元記事を表示

SwiftUI製アプリにFirebase Crashlyticsを導入する

# 概要
初投稿です…!
SwiftUIの勉強もかねて個人アプリを作成したので、そのときに導入したCrashlyticsの導入方法について記載します。
すでにcocoaPodsやFirebaseの機能の一部を使っていたので、多少端折っています。
プロジェクトの作成や初期設定方法については公式ドキュメントを参照してください。
https://firebase.google.com/docs/crashlytics/get-started?platform=ios

## Firebase Crashlyticsとは
クラッシュレポートを収集して解析するためのサービスです。
他にもSmartbeatなど、複数のクラッシュレポートサービスが存在します。

## 導入方法
### 1.Crashlyticsのインストール
まずはPodfileを更新します。

“`rb:Podfile

pod ‘Firebase/Crashlytics’
pod ‘Firebase/Analytics’
“`
Podfileを更新後、下記を実行してライブラリを使えるようにします。

“`shell-

元記事を表示

Swiftにおける配列操作関数

配列操作関数とは、その名の通り配列を操作するための関数である。

## forEach
よくあるfor文を、配列操作関数forEachに置き換えた場合

“`swift
let arr1 = [1, 2, 3, 4, 5]

do {
for v in arr1 {
print(v)
}
}
“`

“`swift
do {
arr1.forEach { (v) in
print(v)
}
}
“`
“`console
1
2
3
4
5
“`

中身がクロージャになっているので、好きな関数を渡すことができる。

ドキュメントには、
> Calls the given closure on each element in the sequence in the same order as a for-in loop.
(for-inループと同じ順序で、シーケンス内の各要素に対して与えられたクロージャを呼び出します。)

とある。

## filter

filterは、中身のクロージャがtrueの時だけ抜き出すという

元記事を表示

FirebaseAuthのログイン状態によって起動画面を切り替えていく

備忘録

#はじめに
タイトルにも書いてあるようにFirebaseAuthのログイン状態によって起動画面を切り替える方法を
備忘録として書いていきます。

FirebaseAuthの説明や導入方法などは沢山、参考記事がありますので省きます。
そして、ログイン機能も実装している前提で書いていきます。

#実装する前に
Xcodeで最初にプロジェクトを立ち上げると`Storyboard起点`でアプリの画面が表示されます。

このデフォルトのままだと起動画面の切り替えはできないので
まずは`コードベースでアプリの画面を表示させないといけません`。

コードベースでアプリの画面を表示する方法は
私が記事にしていますので良かったら参考にしてみて下さい↓
[画面遷移に関係あるコードの記述を別ファイルに分けて実装する](https://qiita.com/reo0612/items/4235bdf51c3dadd256cb)

#実装コード
まずは、`ユーザー認証を行うメソッド`を準備します。

ViewControllerからFirebase関連のコードを分離させる為に`AccountManage

元記事を表示

古いバージョンのXcodeと最新バージョンのiOSの組合せでデバッグ実行する方法(シミュレータ&実機)

# 解決したい課題

古いバージョンのXcodeでは、最新バージョンのiOS環境でのデバッグは基本的にできません。

例えば、本記事の執筆時点では Xcode 12.4 / iOS 14.4 が最新ですが、アプリを Xcode 12.1 で開発しているとします。
この場合、以下の制約があり、基本的には Xcode 12.1 で iOS 14.4 での動作確認は不可です。

– Xcode 12.1 では基本的に iOS 14.1 までのシミュレータしか入れることができません。
– Xcode 12.1 では基本的に iOS 14.1 までの実機としか繋げることができません。

これを可能にする方法が本記事の内容です。
ただし、公式に認められている方法ではないので(たぶん)、使用する際は自己責任でお願いします。

# シミュレータの場合

## 事前準備

**1.Xcode最新バージョンを普通にApp Storeからインストール。**

**2.Xcode旧バージョンは以下のリンクからダウンロードしてインストール。**
https://developer.apple.com/downl

元記事を表示

【Swift】Cloud Firestoreでmap型を取得するTips

## 修正(02/14)
2つ目の方法は、`FirebaseFirestoreSwift`を使わないとできないというのは自分の勘違いでした。すみません。
現在は、修正しております。

## はじめに
最近、Firestoreを使ったデモアプリを作って遊んでおります。
Firestoreでサポートされているデータ型は色々あるのですが、今回はその中でも**map型**のデータを取得する方法について書きました。
Firestoreでサポートされるデータ型についてはこちらの公式リファレンスをご覧ください。
https://firebase.google.com/docs/firestore/manage-data/data-types

今回は、2つの方法をを載せておきます。

## 動作環境
– Xcode12.4
– iOS14.4

## 今回取得するFirestoreのデータ&Swift側のオブジェクト
Firestoreのmap型を取得するということで、Firestore側のデータ構造があったほうがわかりやすいと思いましたので、載せておきます。

■ Firestoreのmap型デー

元記事を表示

Moyaを使って通信部分のUnitテストを書く

## はじめに

現場で既存のプロジェクトのUnitテストを行うようにしようとなり、まずはAPI通信部分のテストコードを書きました。
大規模なプロジェクトではないですが、その導入までの流れを記述していきます。

## 前提情報

– iOSアプリの開発で言語はSwiftを使用。
– プロジェクトのアーキテクチャは MVC + CleanArchitecture。
– 画面関係なくアプリ全体で使われるAPI通信部分をUsecaseにまとめています。
– そこから画面固有のロジッククラスであるViewModelで呼び出し、利用しています。
– 通信には[Moya](https://github.com/Moya/Moya)を使います。
– テストはXCTTestを使用します。

今回はこのUsecase部分のテストコードを書いていきます。

**※注意**
**現状結果を書いていますが、まだまだ未熟ですのでより良い実装方法や気になる点あればコメントいただけるとありがたいです?‍♂️**

## Moya

Moyaについてはいくつも記事が出ています。
自分は[こちら](https://qi

元記事を表示

Enumを用いたUITableView+RxDataSourcesの実装サンプル

# 環境
– Xcode 12.4
– Swift 5.3.2
– RxSwift 6.0.0
– RxCocoa 6.0.0
– RxDataSources 5.0.0

# 前置き
`RxSwift`と`RxCocoa`に触れたことがあり、
`RxDataSources`をこれから利用するかもしれない方に向けて書いています。

自分にとってRxSwift/RxCocoa同様、学習コストが高く苦労した覚えがあったので、
サンプルが一つでも多くあるといいなと思い、今回記事にしました。

RxSwiftとRxCocoaの記述についてはあまり触れないのでご了承ください:pray:

# 実装内容
`SectionModelType`の`typealias Item`にはEnum(Associated value)を利用しています。
表示するデータはViewModelから適当に流すようにしています。
リロードする度に新しいセクション情報を構成して表示する仕様になっています。

| iPhone8(iOS14.4) |
|—|
|Swiftのオプショナル型について

# オプショナル型とは
オプショナル型とはデータ型の一つで、変数の宣言時に使用します。
特徴としては変数に`nil`の代入を許可することで、逆に非オプショナル型は`nil`の代入を許可しないことになります。

`nil`とはデータが無い(変数が空の状態)を表します。

iOSでは`nil`に対して操作するとアプリケーションが落ちてしまうことがあり、そのような問題を解決するために`swift`では`nil`を基本的には許容しないとのことです。しかし、オプショナル型を使うことで`nil`を扱うことができるようになります。

# オプショナル型の使い方
“`Swift
// オプショナル型
var age: Int?
var name: String!

// 非オプショナル型
var age: Int
var name: String
“`
オプショナル型は最後に`?`か`!`をつけます。非オプショナル型は最後に何もつけません。
また、一般的にオプショナル型 ( Optional Value ) というと`?`、`!`は暗黙的アンラップ型 ( Implicitly Unwra

元記事を表示

CollectionViewで指定のカラム数のレイアウトを簡単に作成するためのクラス拡張

## 説明
UICollectionViewで毎回画面サイズや余白の計算をしてレイアウトを組むのが面倒なのでExtension化してみました。
カラム数、セル間と外側の余白、セルの縦横比を指定したレイアウトが一行で組めます。

## コード

“`swift

import UIKit

extension UICollectionView {

/// 指定のカラム数のレイアウトを作成する
/// – Parameters:
/// – column: カラム数
/// – interMargin: セル間の余白。初期値0。
/// – outerMargin: セル全体に付与する上下左右の余白。初期値0。
/// – aspectRatio: 横を1としたときの縦の比率。初期値1。
func makeColumnLayout(column: Int, interMargin: CGFloat = 0,
outerMargin: CGFloat = 0, as

元記事を表示

OTHERカテゴリの最新記事