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

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

Flutter調べ備忘録

## この記事は?
Flutter調べたことメモ。
全体像の俯瞰用にシンプルにまとめ。
(気が向いたら随時更新)

## 記載範囲は?
– 言語の特徴
– UIに関して
– アーキテクチャ
– メリデメ

## 言語の特徴
### dart
– オブジェクト指向
– 静的型付け

JAVAライク。

## UIに関して
### 大きく2種類
#### material
Android、MaterialDesignのUI。
[Material Components widgets](https://flutter.dev/docs/development/ui/widgets/material)

![スクリーンショット 2021-08-19 043125.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700755/220a2fee-92cf-494c-a920-6ffe379634d5.png)

#### Cupertino
iOSなUI。 iOSでよく見るUI部品は大体ある。
[Cupertino

元記事を表示

[SwiftUI]タップでキーボードを閉じる方法

## 投稿の経緯
個人開発中のアプリでタップしてキーボードを閉じる機能を実装したので記録に残します。

## 環境
Swift version 5.4.2
Xcode version 12.5.1

## extensionの実装
まず、UIApplicationUIApplicationを拡張します。

“`swift
import Foundation
import SwiftUI

extension UIApplication {
func closeKeyboard() {
sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}

“`

簡単に何をしているか説明すると、sendActionでセレクターに対してアクションを送信し、`UIResponder.resignFirstResponder`に`nil`を設定することで、最上位のファーストレスポンダがnilとなり、何もアクションしていない状態となりキーボードも閉じ

元記事を表示

[iOS15] 「アップデートの必要があります AppをこのバージョンのiOSで動作させるには、デベロッパによるアップデートが必要です」で自作アプリがインストールできない時

# とりあえず、検証結果

– **Xcode10.xでビルドしたアプリは動かない!**
– Xcode11は未検証です。AppCenterでビルドしてみればいいけど、そのためのコード変更がめんどくさいのでやってません。
– 一部僕のところで発生したアプリでは、Swift3を使ったライブラリをリンクしてあるので、それも問題かも。(だからXcode10から離脱できなかった)

**ありがとう iOS15! やっとXcode10を捨てられるよ!!**

元記事を表示

Unityでスマホアプリを開発する

Unityでスマホアプリを開発するために必要なものを全てドキュメントに残します。
また、自分自身Unityを使ってのアプリ開発は初めてなので少しでも疑問に思ったことは全てメモしていこうと思います。
完成するまでに随時アップデートします。

## プロジェクト作成までにするべきこと
### Unityのインストール
Unity Hubをインストールするのが良いでしょう。
そこからUnityをインストールします。
※ここでiOSとandroidのモジュールを追加すること
※後からでも追加できます。
(自分は後からモジュールを追加しました)
※日本語化したい人は日本語化のモジュールもインストール

![スクリーンショット 2021-08-18 9.21.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615043/d9c21920-81ed-f69c-1524-0fe5dae42418.png)

こうなっていればOK!

### 2Dと3D両方のスクリーンが出てくる場合はどうすればいい??
→一旦2Dで

元記事を表示

【Flutter】ShareExtensionのアプリ名をローカライズする

ShareExtensionのinfo.plistに下記を追記する必要があります。

“`Runner/ShareExtension/info.plist
LSHasLocalizedDisplayName
“`

元記事を表示

[2021年版/BigSur対応]iOSPush通知証明書の更新方法

## はじめに
iOSエンジニア年1回の恒例行事、iOSのPush通知証明書の更新方法についてまとめました。
OSがCatalinaからBig Surに変わり、キーチェーンアクセスのUIが微妙に変わって苦戦したので、備忘録としてメモを残しておきます。

作成日: 2021/08
Mac OS: Big Sur 11.4

## STEP1. ローカルPCで証明書の要求ファイルを作成する

– キーチェーンアクセスを起動します。
– メニュー「キーチェーンアクセス」→「証明書アシスタント」→「認証局に証明書を要求…」を実行します。
![キーチェーンアクセスから認証局に証明書を要求.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539259/137970b2-0956-6dad-d3c3-7955b331d186.png)

– 証明書アシスタントが起動するので、証明書情報を記入します。
– ユーザーのメールアドレス:開発者のメールアドレス
– 通称: 適当な名前を入力。キーチェーンアク

元記事を表示

Swift初心者が一ヶ月でアプリ開発するまで

#はじめに
この記事はSwift初心者の自分がiOSアプリを開発するまでに読んだ教本、参考になった動画について書きました。文才はないので分かりにくかったらすみませんm(_ _)m
# 自己紹介
高校3年生 将来エンジニアになりたいので夏休みからSwiftの学習を始めました。
プログラミング経験はPythonを少し触ったことのあるくらいでオブジェクト指向もよくわからない程度でした。
パソコンオタクだったのでブラインドタッチは早いです(笑)
#作ったアプリ
中学生時代はバスケ部で、たまに友達と体育館を借りて試合をすることがあるので電子得点板のようなアプリを作りました(調べたらもう似たアプリが結構あった:sweat_smile:)![Simulator Screen Shot – iPhone 11 – 2021-08-17 at 14.02.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1281785/6a4cb966-5587-0e32-385e-48d1630f72b9.png)

自作アプリは初

元記事を表示

SwiftUI 環境で表示中のUIViewControllerを取得する

## 概要

SwiftUIのプロジェクトで、現在フロントにあるUIViewControllerを手軽に取得する方法についてのTips

## SwiftUIとUIKitの連携

SwiftUIのViewとUIKit間での連携は

– UIHostingController
– UIViewRepresentable

を使った方法がある。

ただ、SwiftUIのプロジェクトで外部ライブラリなど使用する場合に

いま提示している「UIViewController」を渡すことが必要になるケースがある。

例えば、Googleの「UserMessagingPlatform」を使って

ATT事前許諾プロンプトを提示する際に

SwiftUIのコンテキスト上からライブラリ側にUIViewControllerを渡す必要がある。

方法は他にも色々ありそうだが、その時の対応メモ。

## 現在のUIViewControllerを探す

表示中のUIViewControllerを探す流れは

まず

1. UIApplicationから接続中のUISceneたちを取得
2. 前面にあるアクテ

元記事を表示

Building Mobile Apps at Scaleの自動テストの部分で知らなかったところメモ

世界的な会社がどうテストしているのか、ちょっとテスト関連のベストプラクティスを探して読んでみています。

個人的にはrobot pattern testingはちょっとした収穫でした。
またかなりSnapshot testが行われていることが印象的でした。
詳しくは以下

https://www.mobileatscale.com/

(ユニットテストは大事的なのが書いてあるんですが、知らなかったところ中心で書いているので飛ばしています)

### Snapshot test

IntegrationテストやUI/E2Eテストの特別な形。スクショをとって、保存されている画像と比較する。データは通常モックが使われる。違うとテストが失敗する。失敗の理由として画像が使われる

Snapshot testのUberでの事例

* iOSではFacebookからiOSSnapshotTestCaseを引き継いで、多用していた
* デバイスのサイズが多様だったのでAndroidで適切なスナップショットを行うための労力がこのプラットフォームでは高すぎると考えたのでAndroidでは行わないことを

元記事を表示

iOSのユニットテストでSceneDelegateのMockを作成する

# はじめに
前回投稿した記事でユニットテスト実行時の副作用を減らしていくためにテストターゲットではAppDelegateのMockを作成してみました。

今回は、SceneDelegateのMockを作成して、ユニットテスト実行時はそれを使用するようにしてみたいと思います。

# 前回の内容
前回の記事を前提に説明を記載しますので、そちらも併せて確認してみてくださいm(_ _)m

– [iOSのユニットテストでAppDelegateのMockを作成する](https://qiita.com/y-okudera/items/bf91374fdb4acfab927c#appdelegate%E3%81%AEmock%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)

# 前提
今回は、シングルウィンドウのアプリを想定しています。
マルチウィンドウの場合も同様で問題ないかどうかは確認ができていないですm(_ _)m

また、古いOSバージョンをサポートしているとSceneDelegateを使用できるかどうかOSバージョンによる分岐が発生すると思い

元記事を表示

[SwiftUI]トラッキング許可アラートを表示する

## 投稿の経緯
個人開発でトラッキングアラートの表示を実装したので備忘録として。今回は最低限の実装を紹介します。(機能的には充分です)

## 環境
Swift version 5.4.2
Xcode version 12.5.1

## Info.plist
`Privacy – Tracking Usage Description`を`Info .plist`へ追加して値を設定します。今回は`『許可するとユーザーに無関係な広告が表示されにくくなります』`というように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/103b2a25-f1c5-ba3f-91e0-8e2d72c21f2f.png)

## ライブラリをインポート

“`swift
import AdSupport
import AppTrackingTransparency
“`
ふたつのライブラリをインポートします

## requestTrackingAuthorizationを書く

元記事を表示

[swift]API通信を利用しているクラスをUnitTestしてみる[stubとmockの使い方]

## はじめに
外部依存のあるコンポーネントはUnitTestが書きづらいです。
今回は書きづらいUnitTestをAPI通信を利用しているクラスを用いて、stubやmockを利用してtestできる状態までを実際に触りながら紹介していきたいと思います。
またUnitTestが分からない方は是非下記の記事をご覧下さい。

https://qiita.com/yuujioka/items/10f889fccb61b27213bc

## 環境
・Xcode : 12.5
・macOS : Big Sur
## 内容
今回はAPI通信を行なっているクラスを対象にUnitTestを行います。
クラス内で完結しているテストは非常に書きやすい事は前回の[試して学ぶUnitTest](https://qiita.com/yuujioka/items/10f889fccb61b27213bc)に記述していますが、外部に依存しているコンポーネントは非常に書きづらいです。そこで今回は依存コンポーネントを差し替え(DI)を行い、stubやmockを利用したUnitTestをサンプルを交えながら解説していきま

元記事を表示

[iOSショートカット] ログインユーザー名・パスワードを入力

:::note info
クリップボードが「ユーザー名 → パスワード」に切り替わるので、ペーストするだけでログインできる
キーボード入力から開放されるので、タイピングミスによるエラーはなくなる
:::

## 事前準備

[iPhone、iPad、iPod touch で共有ショートカットを有効にする](https://support.apple.com/ja-jp/HT210628)

## 共有ショートカット

https://www.icloud.com/shortcuts/457ef554498f475b8fe77b64e2b076e3

:::note warn
マイショートカットに追加されるので、ユーザー名とパスワードを編集してください
:::

## 導入後のログイン操作

“`
メニュー「クリップボードにユーザー名にします」をタップ

IDにペースト

パスワードがコピーされたメッセージが表示されたら、
パスワードにペースト

“`

:::note info
オートメーションで、アプリ起動時に上記の共有ショートカットを実行させることで、
起動時にログインユ

元記事を表示

UIKitのUIViewController/UIViewをSwiftUIで利用する場合の利用方法とその詳細

# はじめに

UIKitのUIViewController/UIViewをSwiftUIで使う場合の方法とその詳細について書いておきます。

大抵コード書いてるときに検索してから要点が見つかるまで時間がかかるため先に結論をテンプレートとして示します。

# 結論: このテンプレートを埋める

UIViewControllerを利用したい場合は、下記コードを加筆修正しいけば最低限動くレベルになるはずです。

“`swift
import SwiftUI
import UIKit

struct SampleViewController: UIViewControllerRepresentable {
// 1. 利用したいViewControllerにエイリアスをつける(もちろんつけずに下記コードで都度書いてもいい)
typealias UIViewControllerType = UINavigationController

// 2. 必須のメソッド。作成したいViewControllerを返すメソッドを実装する
func makeUIViewC

元記事を表示

iOS12以下でSign in with Appleを実装する

# 概要
アプリが、サードパーティのログインサービスを利用してログインを実装する場合、Appleでサインイン(Sign in with Apple)の実装が必須になりました。

通常はAuthenticationServicesに含まれているAPIでSign in with Appleの処理が可能ですが、Sign in with Apple関連のAPIはiOS 13以上の対応になるので、iOS 12では別な手段を講じなければいけません。
その手段について説明します。
他プラットフォームでも一部は共通する手段になるかと思います。

# 必要なもの
以下の実装はUniversal Links対応されていることを想定しています。

# App Developer Programで必要な作業を行う

## Service IDの追加
以下の手順を参考に、Services IDsの追加を行います。
App Developer Programの構成は更新される可能性があるので参考程度にしてください。

– identifierを選択し、+ボタンを選択
– Services IDsをチェックし、co

元記事を表示

IPAファイルを再署名する方法(Mac)

## はじめに

Xcode 12.4以下で署名したIPAファイルは、どうやらApp StoreやTestFlight以外からではiOS 15の端末にインストールできないようです。

そのため、IPAファイルを再署名することにします。

## 環境

– OS:macOS Big Sur 11.5.2

## IPAファイルの再署名

IPAファイルの再署名は、コマンドの実行のみで完結します。

“`bash
# IPAファイルを展開する
# `Payload` というフォルダが作成される
# 私の環境ではファイル名が補完されなかったので `unzip *.ipa` で展開した
$ unzip ○○.ipa

# アプリの署名を確認する
$ codesign -dvvvvv ./Payload/××.app

# アプリを再署名する
$ codesign -s “{キーチェーンアクセスに表示されている証明書の名前}” -f –preserve-metadat

元記事を表示

iOSのユニットテストでAppDelegateのMockを作成する

# はじめに
ユニットテストをするときに、可能な限り**副作用**を減らしていく必要があるかと思います。

ここでいう「副作用」とは、**他の機能の結果が影響して、テスト対象の機能の結果が変わってしまうこと**です。また、正確なカバレッジが取れないこと・サーバーへ負荷をかけてしまうことも副作用であると考えます(`・ω・´)

今回は、iOSアプリ開発のAppDelegateの副作用をどうやって無くすか考えていきます。

# 前提
– 本記事では、SceneDelegateを使用していないプロジェクトを想定しています。
– Test Doubleでいうと、Fake Object的なものを作りますが、命名はxxxMockにしています。

テストカバレッジの確認から順を追って説明していきますので、
本題のAppDelegateのMock作成だけ確認したい方は
飛ばして[こちら](https://qiita.com/y-okudera/items/bf91374fdb4acfab927c#appdelegate%E3%81%AEmock%E3%82%92%E4%BD%9C%E6%88%90%E

元記事を表示

KMMを触ってみて思ったこと

##はじめに
KMM(Kotlin Multiplatform Mobile)とは、Kotlin/NativeというKotlinのコードをさまざまなOSのネイティブコード(マシン語)に変換する技術を使って、モバイル(iOSとAndroid)に特化したクロスプラットフォーム開発をできるようにするSDKです。

僕は~~KMMってなんか響きがかっこ良いんで~~KotlinでiOSアプリが作れるっていうところが凄いなと思って勉強を始めてみました。勉強を始めて一番最初に浮かんだ疑問として、Kotlinで開発するのであればただのAndroid開発と何が違うのかというのがありました。その疑問について色々調べてみました。

##仕組みの違い
そもそもAndroidのネイティブ開発ではKotlinやJavaを使うことができます。それぞれのコードがART(Android RunTime)という実行環境でAndroidOS上で動くようなネイティブコードにコンパイルされることで動いています。

対してKMMはKotlin/NativeがKotlinを各OSのネイティブコードに変換するための諸々をやってくれて

元記事を表示

protocolの基本と種類(swift)

#protocolとは
直訳すると議定書・手順。

swiftでは、クラス・構造体などに対してプロパティとメソッドを定義する機能。
プロトコルを適用したクラス・構造体は、プロトコルに定義されているプロパティ・メソッドを必ず定義しなければならない。

つまり、「クラス作成のルールを定めて、それを守らせる」という認識であっているでしょうか。

#protocolを定義する

“`swift:sample
protocol プロトコル名 {
var プロパティ名 : 型 {set get}
func メソッド名(引数名 : 型) -> 戻り値の型
}
“`

プロパティ名の横には{set get}もしくは{get}
を記入する。
`{set get}` 読み書き可能
`{get}` 読み込み専用

#代表的なプロトコルの種類

###CustomStringConvertible
インスタンスの文字表現を自由にカスタマイズできるプロトコル。

“`swift:CustomStringConvertible
class Shoe: CustomStringConve

元記事を表示

【iOS14】UITableViewをUICollectionViewに書き換える練習

UITableViewが非推奨の方向らしい?

資料を参考にすれど、む・・・むずかしい。

https://qiita.com/shiz/items/4227accc7d13ae439d1d

こういうときは、簡単なサンプルを書いてみようと思い
そういう事をされている方の記事を見つけました。

https://qiita.com/hiiragi252/items/70b02bf22bec51f3b97a

こちらの記事を参考させて頂き、今回はセクションを使わない
UICollectionLayoutListConfiguration.Appearance.plain
なものを作りたかったので、改変した結果がこちらです。

自分の分かる範囲では、Sectionは完全に消せなかったのでIntにして
layoutConfig.headerMode = .none としてみました。

【新しい疑問点】
dataSourceは新しくなったけどdelegateはそのまま?
=>

元記事を表示

OTHERカテゴリの最新記事