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

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

SwiftUI: アプリの起動時に1回(だけやりたい/しかやってはいけない)処理はどこに書けばいいのか

自分用の時刻表アプリを作ろう、という記事を以前書いたのですが、

https://qiita.com/tnar-f/items/1a95429cf5e8547f0b2f

これに復路のViewを追加しよう、と思った時に、Viewの.onAppearに起動時に1回だけやる処理を記述していたことが問題になりました。Viewがひとつだけなら問題ないのですが、複数のViewを行ったり来たりする場合、Viewが表示されるたびに.onAppearが実行されてしまいます。

ということで、起動時に1回(だけやりたい/しかやってはいけない)処理はどこに書けばいいのか、調べてみました。

Xcodeでプロジェクトを作った時に(プロジェクト名)App.swiftなるファイルが作られたと思いますが、あれの中に書くのが正解のようです。

“`Swift
import SwiftUI

@main
struct MyProject1App: App {
var body: some Scene {
WindowGroup {
ContentView()

元記事を表示

GIDSignInButton の見た目のカスタマイズ

この前初めて、Firebase Authentication を使用した Google でのサインインを実装しました。

GoogleSignIn のパッケージが提供してくれているデフォルトの `GIDSignInButton`の見た目のカスタマイズがどこまでできるかを調べてみたので、それについて記載します。

SwiftUI を使用したコードになっています。

# 環境

– Xcode 13.4.1
– Firebase 9.0.0
– GoogleSignin 6.0.0 の GoogleSignIn(**GoogleSignInSwiftではない方**)
– iPhone 13 (15.5) Simulator:ライトモード

# カスタマイズ可能な部分

`GIDSignInButton`クラスのコードを確認したところ、そのクラスから提供されているカスタマイズ可能なプロパティは、以下2つです

– `GIDSignInButtonStyle`:レイアウトのスタイル
– `GIDSignInButtonColorScheme`:カラースキーム

![image.png](htt

元記事を表示

SwiftUI: スワイプ動作でViewを切り替える

自分用の時刻表アプリを作ろう、という記事を書いた時に、往路と復路の時刻表画面をスワイプ動作で切り替えられたらいいな、と思ったのでやってみました。

https://qiita.com/tnar-f/items/1a95429cf5e8547f0b2f

Viewを2つ用意します。

Sub1View.swift
“`Swift
import SwiftUI

struct Sub1View: View {
var body: some View {
Text(“This is Sub1View”)
}
}

struct Sub1View_Previews: PreviewProvider {
static var previews: some View {
Sub1View()
}
}
“`

Sub2View.swift
“`Swift
import SwiftUI

struct Sub2View: View {
var body: some View {
Text(“This is S

元記事を表示

Error Analyzing App Version library

xcodeのorganizerからApp Store Connectにアプリをバイナリアップロードしようとしたとき、表記エラーが発生して、アップロードできない。

##調査

検索するといろいろでてくるが、どれも違う。

– https://dev.classmethod.jp/articles/ios-xcode-13-app-store-connect-rxswift-6-2-0/
– https://stackoverflow.com/questions/69548498/xcode-error-analyzing-app-version-when-validating-app-in-archive-organizer
– https://stackoverflow.com/questions/69433432/what-is-an-error-analyzing-app-version-when-distributing-from-xcode
– https://developer.apple.com/forums/thread/693335

##解決
ビルドバージョンに「

元記事を表示

Unity で Google Mible Ads (AdMob) を使うコード

## 前提
– Unity 2021.3.8f1
– Google Mobile Ads Unity Plugin v7.1.0
– Apple App Store、Google Play Store
– この記事では、Google Mobile Adsの一部機能を限定的に使用し、汎用性のない部分があります。
– この記事では、以下の内容を扱いません。
– Google Mobile Adsのルールやコンソールの使い方など
– Unityエディタの使い方やモバイル向けのビルド方法など
– この記事のソースは、実機でテストしていますが、本番広告でのテストはしていません。
– プロジェクトで使用したIDはテスト用のもので、ストアで公開する製品に使用できるものではありません。

## できること
– AndroidまたはiOSで、AdMobを利用します。
– 複数のバナー、インタースティシャル、リワードビデオ広告の表示を制御し、シーンに応じて広告を切り替えます。
– 報酬の獲得を検出します。

## リソース
### このプロジェクト
– [ソース (GitHub)](https

元記事を表示

SwiftUIのTextにマークダウンを使用する

SwiftUIではmarkdownがサポートされているため、テキストを太字にしたり、リンクを組み込んだりすることができます。

# 使い方
“`swift
var body: some View {
VStack {
Text(“**Hello, world!**”)
Text(“[Apple](https://www.apple.com/)”)
Text(“~~striked through~~.”)
}
}
“`

# リンクの色を変更する
`.tint`を使用することでリンクの色を指定することができます。

“`swift
Text(“[Apple](https://www.apple.com/)”)
.tint(.red)
“`

元記事を表示

アプリの通知許可部分の小ネタ

# 現場で知った小ネタの共有
## あの許可モーダルってこんなことやっていたんですね
アプリのインストールして使い始めると「通知の許可」を確認してくるモーダルが出てきたことがあると思います。
あの質問は聞かれた瞬間にアプリの設定に項目を追加しているようです。

こんなやつです。↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/7368eabf-d8cd-944d-f72f-7292ca0c12c2.png)

### 確認モーダルが表示される前のiPhoneの設定画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/85700240-ecfc-d550-dc3b-fa3b4d2277e0.png)

### 確認モーダル表示後の設定画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

【Flutter】percent_indicator の使い方

## 初めに
percent_indicator とは、以下の画像のように何らかの達成状況を示すための Widget です。
家計簿のアプリや習慣化のアプリに多く使用される印象です。

## 準備
まずは、[percent_indicator パッケージ](https://pub.dev/packages/percent_indicator) を「 pubspeck.yaml 」に記述します。
パッケージのバージョンは、特に制約がなければ最新のバージョンで問題ありません。

“`yaml: pubspeck.yaml
dependencies:
flutter:
sdk: flutter

percent_indicator: ^4.2.2
“`
Pub get をして準備は完了です。

## 実装
まず

元記事を表示

【SwiftUI】Bindingの初期化方法

# 初期化方法
“`swift
struct SearchView: View {
@Binding private var searchText: String

init(searchText: Binding) {
self._searchText = searchText
}

var body: some View {
Text(searchText)
}
}
“`

:::note info
ポイント1
`init(searchText: Binding)`
Binding<型名>で定義する
:::

:::note info
ポイント2
`_searchText`
変数名の前に`_`を付けることでBindingを示す
:::

元記事を表示

iOS16 MapKitの新機能 : 地図から場所を選ぶ、通りを見回す、検索補完(MKLookAroundScene, MKMapFeatureAnnotation, MKLookAroundSceneRequest, selectableMapFeatures)

MapKitは、iOSアプリケーションが利用できる無料のサービスで、
地図の表示、場所の検索、見回し画像の提供などを行うことができます。
iOS 16 の MapKit では、ユーザーが地図から場所をクリックして選択することができ、
また、通りを見回す (Look Around) を提供することができます。

### 地図から場所を選ぶ

### アプリに通りを見回すビューを表示します。

### 通りを見回す画像のスナップショット

元記事を表示

[Swift] Task Groups の基礎

## 概要

Task Groups は複数のタスクを並列に実行するための仕組みです。この記事では Task Groups の基本的な使い方から、キャンセル周りも含めた細かい振る舞いまで理解していきます。

記事中の動作検証は Xcode 14 Beta 5 で行っています。

## TL;DR

– Task Groups は子タスクを並列に実行したいときに使う。とくに、同じ型を返す動的な数の子タスクの実行に適している
– Task Group は `withTaskGroup` か `withThrowingTaskGroup` で生成できる。子タスクがエラーを投げない場合は前者、投げる場合は後者を使う
– 基本的な流れとして `with(Throwing)TaskGroup` に渡すクロージャの中で子タスクを生成する処理とそれを受け取る処理を書く
– 子タスクの生成は `addTask(UnlessCancelled)` で行う。典型的には `for` 文で Collection の要素を回してそれをもとにタスクを生成することが多い
– 受け取り処理は `for

元記事を表示

SwiftUIのsearchableモディファイアを使ってみる

アプリで検索機能を実装するときによく使用するのがSearchBarですが、iOS15からSwiftUIに`.searchable`モディファイアが追加されたので使い方などを書いていこうと思います。

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

# 事前に
今回の記事で使用する検索フィールドを追加するViewです。
こちらのコードにsearchableモディファイアなどを追加していきます。

“`swift
struct ContentView: View {

let colors: [String] = [“Red”, “Blue”, “Yellow”, “Purple”, “Orange”, “Green”, “Pink”, “White”, “Gray”, “Black”]

var body: some View {
NavigationView {
List {

元記事を表示

【Swift】CocoaPodsに自作ライブラリを登録する時躓いた

ライセンスめんどくさいし自分でも作れるんじゃね?と思いQRReaderを作成。
配布にCocoaPods(遺産なんて言わないで)を採用。
結果出来たが、少し躓いたのでメモ

#### 今回作ったライブラリ
今後も更新します。

https://github.com/kirasoga/QRReader

#### 下記の記事を参考にさせていただきました。

https://qiita.com/taji-taji/items/e23373f9b8124de728a2

めちゃくちゃ参考にさせていただきました。ありがとうございます。

## はじめに
上記の投稿で、自分の理解の及ばなかった箇所を備忘録として作成。
上記の記事に沿って作成します。

## 1. ライブラリの作成
ここは順調

## 2. Githubに公開
ここは順調

## 3. podspecファイルの編集
### podspecの内容チェック

`pod lib lint SampleLib.podspec`
このコマンドでpodspecの内容をバリデーションチェックしてくれる
1. `s.description`はなく

元記事を表示

【Flutter】アプリアイコンを変更する

## 初めに
Apple Store や Google Play Store にアプリを表示させる場合、当然のことながら、自分独自のアイコンを作成して表示させる必要があります。
今回は作成したアイコンをアプリアイコンとしてホーム画面に表示させる方法を紹介します。

## flutter_launcher_icons
今回は [flutter_launcher_icons](https://pub.dev/packages/flutter_launcher_icons) というパッケージを使用します。
このパッケージはアプリのアイコンを変更する際に使用されるパッケージです。

## 準備
まずは、パッケージのバージョンを「 pubspeck.yaml 」に記述します。
このパッケージを使用するのは開発段階であるため、`dependencies` ではなく、 `dev_dependencies` に追加します。

パッケージのバージョンは、特に制約がなければ最新のバージョンで問題ありません。
“`yaml: pubspeck.yaml
dev_dependencies:
flutt

元記事を表示

【Swift】iOSバージョンを取得する方法

# はじめに
ユーザーエージェントを偽造する際にユーザーの端末のiOSバージョンの情報を使ったので取得方法を備忘録として載せておきます。

# 方法
“`swift
let iosVersion = UIDevice.current.systemVersion

print(iosVersion)
“`

# おわり
意外と使わない機能なので全然知りませんでした笑

元記事を表示

RealityKitをnonARモードで使ってみた

# RealityKitをnonARモードで使ってみた

* [RealityKit](https://developer.apple.com/documentation/realitykit)はAR表示を推しているFrameworkですが、CameraModeに[.nonAR](https://developer.apple.com/documentation/realitykit/arview/cameramode-swift.enum/nonar)があったので、これを試してみました
* リポジトリはコチラ↓です

https://github.com/fuziki/RealityKitPlus

* 作成したみたものがコチラ↓です

元記事を表示

Flutter 3.0.x 環境をmacOS上に構築する(XcodeとFlutterの複数バージョン対応版)

# なぜこの記事を書いているか

以前、[Flutter 2.5.x 環境をmacOS上に構築する(XcodeとFlutterの複数バージョン対応版)](https://qiita.com/uehatsu/items/bdd652464a81c9c71ff7)と題した記事を投稿したのですが、この記事では3.0.x環境でも同様の手順で構築できるのかを検証する意味も含めてトレースします。

# 環境(2022/08/17現在)

– MacBook Pro (Intel Mac)
– macOS Monterey (12.5)
– Flutter (3.0.5)
– Android Studio (Chipmunk | 2021.2.1 Patch 2)
– Xcode (13.4.1)

# インストール

## Homebrew

今回もHomebrew経由で色々なものをインストールします。

“`bash:terminal
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HE

元記事を表示

【Swift】Storyboardでバージョンに関する警告

# はじめに
以前あげた[こちら](https://qiita.com/SNQ-2001/items/7151fdcb8e9f8c2c42c2)の記事を見ながらネイティブ広告を実装してる際にStoryboardに警告が出ていたので修正方法を記載しておきます。

# 警告
“`
warning: Unsupported Configuration: This file is set to build for a version older than the deployment target. Functionality may be limited.
“`
![スクリーンショット 2022-08-15 22.15.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7fd2eb6d-07a1-97bb-c688-42668591e056.png)

# 原因

![スクリーンショット 2022-08-15 22.17.07.png](https://qiita-image-store

元記事を表示

[Swift] actor の isolated / nonisolated キーワードの使い方

## 概要
actor のメソッドやプロパティは actor に isolate されています。 [SE-0313 Improved control over actor isolation](https://github.com/apple/swift-evolution/blob/main/proposals/0313-actor-isolation-control.md) のプロポーザルで追加された `isolated` / `nonisolated` キーワードを使うことで、 actor のメンバーでない処理を actor に isolate したり、逆に actor のメンバーを actor に isolate しないことができます。この記事では、プロポーザルをもとにこれらのキーワードの使い方をまとめます。

記事中の動作検証は Xcode 14 Beta 5 で行っています。

## `isolated` キーワード

actor の例として、以下の `Counter` 考えます。

“`swift
actor Counter {
var count: Int =

元記事を表示

【SwiftUI】画面サイズに応じて広告数を変化させる

# はじめに
かなり限定的なお題ですが同じ事をする方がいると思うので記事にしておきます。

# やりたい事
|iPhone12|iPadPro11(縦)|iPadPro11(横)|
|:-:|:-:|:-:|
|![simulator_screenshot_2CBECF57-4401-4526-95D5-EC1044944B8B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b99a4fac-5008-c3c7-58e6-4c2bd704b269.png)|![simulator_screenshot_9C0BCD94-3C2C-4E1E-BE31-E7A0A9DAC4DF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/10d3f599-c38b-d92a-8245-044c89276827.png)|![simulator_screenshot_95EDA013-9111-40FF-AD

元記事を表示

OTHERカテゴリの最新記事