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

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

App Storeレビュー時に審査員のネットワーク環境が原因でリジェクトされた話

## 結論
[審査員のネットワーク環境が原因で接続を確立できない](https://developer.apple.com/forums/thread/133938)のが原因。

対処法としては…
– レビュワーと交渉して別のネットワーク環境での接続を試してもらう
– 動作時の動画を送って問題なく動作することを証明する etc…

## 問題の発生
ClubHouse等で使われている[AgoraSDK](https://jp.vcube.com/service/agora)を使ったビデオ通話アプリの申請中、
Apple審査員から「通話機能が使えません」とのことでリジェクトされる。
→ ちなみに他の接続を要する機能は使えてました。

## 調査
### 原因の特定
カメラや音声設定の可能性もあるので、ひとまず該当箇所にログを仕込んで原因箇所を特定。
通話処理部分の各ステップごとに自社サーバー側へログを送信する処理を実装。
SDKで用意している関数内で通話接続の確立に失敗していることが判明。

社内Wifiや4G、LTE等の通信環境、端末やOSのバージョンを変えて試して

元記事を表示

deploygate用にipaファイルを作成する方法

deploygate用にipaファイルが必要になったのですが、
app storeの申請とはまた異なる流れですし、
https://docs.deploygate.com/docs/export-ipa
公式のリンクがだいぶ古いものなので、備忘録として記しておきたいと思います。

まずは、apple developerのサイトからログインしてください。
https://developer.apple.com/

## 1. Certificates

iOS Distrubutionで証明書を発行します。
Certificatesの横の+ボタンから発行します。

![スクリーンショット 2021-06-10 19.22.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998564/142bd8b7-5910-eb67-42f0-2a587b788ef8.png)

## 2. identifier
次にidentifierの設定です。(Certificateをすでに作成している場合は、こちらからス

元記事を表示

OHHTTPStubsでHTTPリクエストのテストをする

# はじめに

[OHHTTPStubs](https://github.com/AliSoftware/OHHTTPStubs)はHTTPレスポンスのモックを作るためのライブラリとしてはよく知られていますが、HTTPリクエストのテストを行う方法について調べても具体的な方法がでてこなかったので自分なりにまとめてみました。

# リクエストのテストについて

公式のサンプルコードをみると、最初のところに`stub(condition:)`があるのがわかります。

“`swift
stub(condition: isHost(“mywebservice.com”)) { _ in
// Stub it with our “wsresponse.json” stub file (which is in same bundle as self)
let stubPath = OHPathForFile(“wsresponse.json”, type(of: self))
return fixture(filePath: stubPath!, headers: [“Content-

元記事を表示

iOS/iPadOS 15 での App Tracking Transparency framework 実装

日本の皆さん、你好です

iOS 15で私の既存アプリを動かしたら ATTプロンプトが表示されませんでした。
調べてみたら許可プロンプトを連続で出してる場合は表示されないことが判明。

アイヤー

あらためて目を皿のようにして公式リファレンスを読み込みました。
すると

あら!

> Calls to the API only prompt when the application state is: UIApplicationStateActive.

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

ちゃんと書いてた・・・

ちなみにこの変更がされたのは iOS 15 beta3 か4 くらいです。
その後 beta5, beta6 でも変わらないので Appleはこの仕様を押し通す模様。

私のアプリでは複数の許可プロンプトを連続で表示しています。

元記事を表示

【WidgetKit】SceneDelegateを使用せずにウィジェットからの遷移を実装したい

##はじめに
Widget内で`Link`や`.widgetURL`を使用した場合、SceneDelegate内で処理を追加する必要があります。
AppDelegateのみで実装している場合、後からSceneDelegateを追加するのは面倒です。
そこで、なんとかAppDelegateでできないかなと模索しました。
なんとAppDelegateにUIWindowSceneDelegateを継承させて実装してあげると、なんと動いてしまいました。

##実装方法
下記の例のようにAppDelegateにUIWindowSceneDelegateを継承させて実装します。

“`swift
extension AppDelegate: UIWindowSceneDelegate {

@available(iOS 14.0, *)
// App launched
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UI

元記事を表示

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を捨てられるよ!!**

# 20190819 追記 修正
どうやら、Xcodeのバージョンというよりも、**Development Target**の問題っぽい。
少なくともiOS11 / watchOS3 の設定ではNGでした。@ Xcode12.5.1
何が正解なんだ??
iOS13 watchOS6 の設定にしたところインストールまで出来ました。

どちらにせよ、Xcode10じゃダメってことで。わーい。さようならXcode10

#さらに追記修正 Xcode 12.4 はNGでした
Microsoft Azure AppCenterでXcode 12.4

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事