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

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

【Swift】Viewが生成されてからレイアウトしたい

# はじめに
Qiitaに書くほどではないとは思いますが、
UIKit初心者の自分からしたらどうやってやるの?ポイントだったので記事にしておきます

# やろうとしてること
① UIViewControllerでWKWebViewを表示します
② 作ったUIViewControllerをUIViewControllerRepresentableでViewにします
③ SwiftUI側でsheetで表示します

# 問題点
iPadの`sheet`は全画面ではないのでWebViewがはみ出る
|iPhone|iPad|
|:-:|:-:|
|![simulator_screenshot_C3E6D1A2-91C1-4992-A399-57FD25C93EA8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/59b4560f-a945-ddce-97b8-7598a9d76d07.png)|![simulator_screenshot_9881A23D-FBC7-43C2-831E-173F1

元記事を表示

AppiumでAndroid/iOSアプリのテストコードを書いてみた

# これは何?

所属しているチームのお隣のQAチームがテスト自動化ツールであるAppiumを使う機会があり、そこにちょっとだけ参加することになったので、お盆休みの勉強がてら環境構築とテストコードを書いてみました。
この記事は、そのときの手順を示しています。

# Appiumについて

https://appium.io/

Appiumは、モバイルアプリ向けのUIテスト自動化ツール。

サーバクライアントモデルを採用しており、テストコード側からクライアントライブラリ等を介してWebDriver API(の拡張)を叩くと、APIサーバ側でそれを解釈して、プラットフォームごとにあるUIテスト自動化ツール(UIAutomatorやXCUITestなど)の命令に変換し、アプリ操作の自動化を実現している。
クライアントの部分をAppium Client、APIサーバをAppium Server、命令を変換する部分をDriverと呼んでいる。

誤解を恐れずに言えば、Seleniumのモバイルアプリ版。

アーキテクチャについては、下記記事内の図が非常にわかりやすいのでお借りします(2022/

元記事を表示

【AdMob】iOSでテストデバイスを設定する方法

# はじめに
現在AdMobではシュミレーターで起動した際には自動でテストモードの広告が表示されます。
しかし、実機でビルドした際には本番広告が表示されます。
実機テストの際に本番広告を謝ってタップしてしまってポリシー違反に引っ掛かってしまわないように実機テストするデバイスはテストデバイスに登録が推奨されています。

今回はAdMobにテストデバイスを登録する方法を紹介します。

# アプリ側での実装
場所はどこでも構いません。
`AdSupport`をインポートして広告IDを取得します。
“`swift
import AdSupport

print(ASIdentifierManager().advertisingIdentifier)

// XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
“`

取得できたらコードは削除して大丈夫です。
後ほど使うので広告IDは控えておきましょう。

# AdMob側での設定
「設定」を選択します。
![スクリーンショット 2022-08-11 23.51.22.png](https://qiita-image-s

元記事を表示

Google AdMobにアプリを登録する方法

### アプリ登録の手順メモ

1. AdMobのホーム画面を開く
1. 画面左側の[アプリ]-[アプリ追加]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/6af7f5ad-8f05-1819-ad7a-1086dd3cd657.png)
1. プラットフォームとストアにリリースされているかを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/9fa1f34c-9ba0-1aa3-38a7-7236099c48d0.png)
1. アプリ名を入力(リリースして場合は後から変更されるので適当で良い)
1. ユーザ指標を選択し、アプリ追加をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/9d224a77-5dfc-cc87

元記事を表示

【SwiftUI】BindingのあるViewでPreviewを表示させる方法

# 解決方法
“`swift
import SwiftUI

struct TextView: View {
@Binding var text: String
var body: some View {
Text(text)
}
}

struct TextView_Previews: PreviewProvider {
static var previews: some View {
TextView(text: .constant(“プレビュー用デフォルトテキスト”))
}
}
“`

# 解説
こちらで囲うことによって`Binding`に変換されます。
“`swift
.constant()
“`
https://developer.apple.com/documentation/swiftui/binding/constant(_:)

# おわり
BindingはSwiftUIに絶対に付いてくるので知ってて損はないと思います。

元記事を表示

adMobの審査が通らない

# 初めに
今回、Flutterでアプリを制作し、アプリの下部にGoogle adMobで広告配信することにした。
通常、adMobの審査は24~48時間とドキュメントに書かれているが、今回、自分のアプリでは約8日間時間を要した。時間がかかった原因について記録を残しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663093/dfc92bef-0366-d63c-2d3d-2f98c41dceb6.png)
# 結論
結論としては下記の画面のお支払いの設定が必要だった可能性があると考えている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663093/03cd9441-ca30-c9ed-c725-3917a8247fcb.png)
この支払の設定を行うと約12時間後に審査が通り、広告が配信されるようになった。
キュメント上に記述はなく、完全な因果関係はわからないが、これが審査が

元記事を表示

日付、カテゴリなどに基づいたCore Dataエントリのグループ化(iOS 15, SectionedFetchRequest)

取得したCore Dataのデータは、各項目内のプロパティを使用して分類することができます。
例えば、日別のToDo項目を保存している場合、日別に分類し、リストの異なるセクションに表示することができます。

![date-category.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/cd19e1ab-c166-353f-051c-c2a1237bf20e.jpeg)

あるいは、異なるカテゴリーに基づいて収納する場合にも することもできます。

![stars-category.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/3084bad8-c8f9-af21-c60f-a5e6adaa9de6.jpeg)

## ステップ1.キー識別子として文字列を作成する

まず、各カテゴリーがそれを説明する文字列を持っていることに注目してください。
たとえば、項目を日付(これは Date オブジェクト

元記事を表示

【Xcode】実機でビルドできなくなった

# エラー
![スクリーンショット 2022-08-04 19.14.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/fd3be3d6-e44c-a126-aceb-6257d70e396c.png)
“`
Faild to prepare device for development.
Please unlock and reconnect the devive.
“`
# 解決方法
端末の再起動

# おわり
簡単なことで時間喰われました。。。

# 参考サイト
https://developer.apple.com/forums/thread/133106

元記事を表示

[Swift] SwiftUI で実装した searchable の見た目をカスタマイズする

# 初めに

色々と調べたものの情報が全く見当たらず困り….
(あったが全く動作しないものが多く困った…)

英語の細かい文献でようやく見つけ、また機会があると思って残しておきます。

## SwiftUI の searchable に関して

`searchable`はiOS15から追加された、検索フィールドを簡単に実装できるものです。

https://developer.apple.com/documentation/swiftui/form/searchable(text:placement:)

## 今回の状況について

引数の`placement`という実装場所を指定できる引数があります。`.navigationBarDrawer()`をセットすることで、ナビゲージョンバーに検索バーを設定することができます。

`UIKit`の時と比べて、**ナビゲーションにカスタマイズせずに検索バーを実装できる**のは大変ありがたいです。

![nav_01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

「Swift5」SwiftでiOSプラグインをUnity向けに実装する方法

# はじめに
SwiftでiOSプラグインをUnity向けに実装する方法について音声読み上げアプリを開発しながらを解説していきます。
この記事はiOSプラグインをSwiftで実装する事にフォーカスしています。
詳細まで完璧に理解したい方は[こちら](https://qiita.com/mao_/items/5b33c90e533a538570b8)を閲覧してください。

# 開発環境
Xcode 13.4.1
Swift5
# この記事の対象者
・Unityでネイティブの機能を実装したい方
・自作のiOSプラグインを作りたい方
・いろんな記事を見たがなぜかできない方<-元々は僕がそうでした # プラグイン作成してUnityで使うまでの手順 1、Swiftで必要な処理をStaticLibraryで実装 (Xcode) 2、Swiftで書いた処理をObjC++で呼び出す (Xcode) 3、ObjC++をC#から呼び出せるようにする (Xcode) 4、C#から[P/Invoke](https://qiita.com/mao_/items/5b33c90e533a538570b8#pin

元記事を表示

【Swift】URLの部分抽出

# URLの構造
![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b8d089e2-954c-44cc-a266-1e34e4364a2a.png)

[こちら](https://innova-jp.com/what-is-url/)のサイトで詳しく説明されています。

# プロトコルの抽出
“`swift
import Foundation

var url = URL(string: “https://taishin-miyamoto.com/ShadowBan?screen_name=SNQ2001”)

print(url?.scheme ?? “”)

// https
“`

# ドメインの抽出
“`swift
import Foundation

var url = URL(string: “https://taishin-miyamoto.com/ShadowBan?screen_name=SNQ2001”)

print(url?.host ?

元記事を表示

「Swift5」オブジェクト指向でAPI通信を実装してみると、意外と簡単だった件

# はじめに
今回は実際にOpenWeatherMapのAPIを使ってサンプルアプリをオブジェクト指向で実装していきます。

# 開発環境
Xcode 13.4.1
Swift5
# この記事の対象者
・SwiftでAPI通信を実装したい方
・API通信の実装方法は理解したが、オブジェクト指向での実装方法を知りたい方
・サンプルアプリを使ってみたい方
・Alamofire等のライブラリを使わず実装したい方
# クラスの説明
・DataManager :APIから取得したデータを格納するためのstruct等を記述するクラス
・MainViewController :UI操作をするメインのクラス
・DataController :URLセッション等のメソッドを記述するクラス
# 実装手順
### ①Open Weather Mapのサイトに登録してキーを取得
### ②APIから取得したデータを格納するためのstructをDataManagerに記述
### ③DataControllerでURLセッション等を記述
### ④MainViewController

元記事を表示

iOSプッシュ通知の新機能 “通知要約” と “集中モード” に対する戦略

※この記事は以前に[こちら](https://techblog.istyle.co.jp/archives/9008)に寄稿した内容の再編集版です

# はじめに
[SARAH iOSアプリケーション](https://apps.apple.com/jp/app/id916083595)の開発をしている Yuki です。iOSのプッシュ通知の “通知要約” や “集中モード” に対する戦略について記します。知っておくと開発だけでなくマーケにも役立ちます。

# “通知要約”と”集中モード”とは
いずれもiOS15で追加された新機能です。設定方法は割愛しますが設定アプリから設定できます。

### 通知要約
指定したアプリのプッシュ通知を指定した時間にまとめて受け取ることができ、指定時間以外は通知されなくなる機能です。
![blog1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2368372/e54d653d-7663-a9eb-741f-a0749aa67d71.png)

### 集中モード
睡眠

元記事を表示

[Swift] actor の init / deinit の意外と複雑な振る舞いを理解する

## 概要

actor の `init` / `deinit` は初見では不可解に思えるような振る舞いをします。例えば、以下のコードでは2回 `print(self.count)` を呼んでいますが2つ目だけに警告が出ます。

“`swift
actor Counter {
var count: Int

init(count: Int) {
self.count = count

print(self.count)
print(self)
print(self.count) // ❗️Cannot access property ‘count’ here in non-isolated initializer; this is an error in Swift 6
}
}
“`
この警告は actor が持つ可変な状態をデータ競合から守るために設定されているものです。この記事では、上記の例も含めて actor の `init` / `deinit` の振る舞いを理解していきます。

記事中

元記事を表示

【Swift】WKWebViewでGoogleログインが表示されない

# はじめに
私はWKWebViewでTwitterログインを実装しようと思ってログイン画面を表示しました。
そしたらなんとGoogleでログインがブロックされている!?!?!?!ってことに気づきました