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

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

【Swift】Stubデータ作成に便利なお手軽protocol紹介

## 定義

“`swift
public protocol Stubbable {
static func stub(_ edit: (inout Self) -> Void) -> Self
static func stub() -> Self
}

public extension Stubbable {
static func stub(_ edit: (inout Self) -> Void) -> Self {
var stub = stub()
edit(&stub)

return stub
}
}
“`

## 使い方

“`swift
struct User {
var id: String
var name: String
var followers: Int
}

// 別ファイル(テストターゲット内)でextensionしてもOK
extension User: Stubbable {
// デフォルトのスタブを定義
static func

元記事を表示

React NativeでGoogle AdMobのバナー広告を出す

### 環境
– React Native:0.70.6
– pod: 1.11.3
– iOS:16.0

## 今回使うやつ

https://github.com/invertase/react-native-google-mobile-ads

## Google AdMobのアカウント作成

https://admob.google.com/intl/ja/home/get-started/

こんなもんに説明はいらねぇ
アカウント作ってアプリを追加。
広告ユニットも追加する。

## インストール

https://docs.page/invertase/react-native-google-mobile-ads

>_# Install the admob module
>yarn add react-native-google-mobile-ads

僕はnpmでやりたいんだい!!

https://www.npmjs.com/package/react-native-google-mobile-ads

npmに上がってたのでnpmでやる(いいのかなぁ)

“`

元記事を表示

flutter_webviewのWebViewをデバッグする

# はじめに
WebViewを組み込んだアプリを開発していると、WebViewのCookieや通信内容を見ながらデバッグをしたくなることがあります。
今回は、[webview_flutter](https://pub.dev/packages/webview_flutter)を使用しているwebviewのデバッグ方法を共有します。
※あまりフロントを触ってこなかったので、一部用語等が異なる可能性があります。ご了承ください。

## 対象
Flutterのアプリ内WebViewを[webview_flutter](https://pub.dev/packages/webview_flutter)で実装している人

## 用語
デベロッパーツール(Chrome)、Webインスペクタ(Safari)、などと呼ばれているアレを使用します。
どうやらChromeとSafariで呼び方が異なるようです。

## 環境
– Mac
– Android Studio
“`
Flutter 3.3.9
Dart 2.18.5
webview_flutter: 3.0.4
“`

# Flutter

元記事を表示

UnityIAPで課金を実装する (個人開発者向け)

# 概要

課金アイテムを実装してと言われてUnityIAPを触ることになった人に向けて備忘録として残しておきます。

# 目次
[1.前提](#1-前提)
[2.UnityIAPをプロジェクトに追加する](#2-unityiapをプロジェクトに追加する)
[3.実装](#3-実装)
[4.ストアの設定](#4-ストアの設定)
[5.おわりに](#5-おわりに)

# 1. 前提
CodelessIAPは使用しません。
レシート検証はこの記事では取り上げません。

# 2. UnityIAPをプロジェクトに追加する

Unityプロジェクトを開き、雲アイコンをクリックしてUnityGamingServicesを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308814/18e1c421-74ce-7d85-efc0-2fb33ef02401.png)
InAppPurchasingをクリック
![image.png](https://qiita-image-store.s3.a

元記事を表示

【SwiftUI】マルチタスク画面に切り替わったら情報を見れなくする

# はじめに
iPhoneに標準でついているパスワード管理機能?(Twitterで二要素認証しようとしたら表示された)がマルチタスク画面に行くとパスワードなどが全て非表示になりました。
今回はそれを再現してみたいと思います。

# マルチタスク画面ってなに?
マルチタスク画面で合ってるの分からないので説明しておきます笑
![simulator_screenshot_DA3438A9-4838-48BE-AF01-560F80E4EE9F.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6bc53154-fd72-9f8a-876c-df5c9a5cb871.png)

これのことです

# サンプルアプリ
![Simulator Screen Recording – iPhone 14 – 2022-12-13 at 20.38.22.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/93d7b

元記事を表示

はじめてのAppsFlyer: (1)アプリを管理画面に追加する

AppsFlyerを試用してみる手順をまとめます。
エンジニアの方が手元でテストするための「デバッグアプリ」としてアプリを登録する手順でまとめますが、基本的な手順は、本番リリース済みのアプリでも同様です。
(スクリーンショットは2022年12月現在のものになります。)

# サインアップ

まず、こちらのページからアカウントを作成するためサインアップします。

https://www.appsflyer.com/ja/start/

クレジットカードの情報などを入れなくても、アカウントを作れば下記の利用は無料でできます。試しにAppsFlyerを使ってみるのには十分かと思います。
– 12,000コンバージョン分(=計測リンク経由のアプリインストールもしくはアプリ再起動の数)の計測
– 各種有償のオプション機能の利用(30日間)
– ディープリンクを含むOneLinkの利用

![Monosnap 無料でアカウント登録!クレジットカードは不要です 2022-12-09 17-28-04.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

UIViewを砕く(Swift)

![Xcode-14.1](https://img.shields.io/badge/Xcode-14.1-brightgreen) ![iOS-16.0](https://img.shields.io/badge/iOS-16.0-brightgreen)

## はじめに
`SpriteKit` をさわっているときに天啓が降りました:bulb:

Confetti のパーティクルをちょっといじれば `UIView` を砕けるのでは?

ということでやってみました。完成形はこんな感じです。

![break](https://user-images.githubusercontent.com/34936885/207287914-a49c0156-6cbb-4985-b204-60306793747e.gif)

## SKSファイル作成
昔は SpriteKit Particle File にデフォルトであった Confetti を少し修正して使います。設定はこんな感じです。

particle2列のピッカーの作成方法と左のピッカーに連動して右のピッカーの内容を変える方法

概要

2列のピッカーを作成して、左のピッカーに連動して右のピッカーの内容を変える方法について書いていきます。

今回使うクラス
UIPickerView

今回使うメソッド
component
UIPickerViewDataSource
UIPickerViewDelegate
列挙型のenumとswitchを使った切り替え

動画

![twinPicker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2963152/13e62d95-ea94-3c65-1ea0-b5eb704b4e31.gif)

pickerViewの作成

まずはピッカーを作成します。

storyboardにPickerViewを設置し、IBOutlet接続したら
ViewControllerにUIPickerViewDataSourceUIPickerViewDelegateを追加します。

`cla

元記事を表示

【Swift】シングルトンは悪くない、sharedを直接触るのが悪いんだ

## シングルトン

古来からあるデザインパターンの一種で

– **A: クラスのインスタンスをアプリ内で1つのみ存在させる**
– **B: static変数のsharedでどこからでもアクセスできる**

という効果があります。
「単一のリソースに対してアクセスするクラスは、複数生成すると並列アクセス等でバグが出るからシングルトンにしようね」なんて言われてたりします。例としては以下のようなクラスです。

– ログイン状態を管理するクラス
– DBを操作するクラス
– デバイスの機能 (Location, Bluetooth) を使うクラス

“`swift
final class Auth {

// static変数で自分自身を保持
static let shared: Auth = .init()

var isSignedIn: Bool { … }
func signIn() async throws { … }

// initをprivateにすることで、クラス外でインスタンスを生成できなくする
//

元記事を表示

HealthKitを使って睡眠分析アプリを作ってみる

# はじめに
本記事はARISE analytics Advent Calendar 2022の13日目です。
昨日は@hktechさんの[AWS App Runnerでアプリケーションを動かす](https://qiita.com/hktech/items/c37dfcae8b17e5907264)
明日は@SaitomTechさんのServerless Framework を用いて Step Functions Distributed Map による Lambda の大規模並列処理を実現する
# HealthKitとは
HealthKitとは、iPhoneやApple Watch、他のヘルスケアアプリから集めた健康データを、iPhoneのヘルスケアアプリに連携する開発者向けツールです。例えば、Apple Watchで計測された心拍数や、体重計と連動しているアプリから連携される体重や体脂肪率をHealthKitが統合管理することで、我々開発者はさまざまなヘルスデータを利用することができます。
![HealthKit.png](https://qiita-image-store.s3.

元記事を表示

R.Swiftのプラグインの導入方法(Xcode project編)

2022/11/29に R.Swift 7.0.0 がリリースされ、Swift Package Manager ビルドツールプラグインの機能が追加されました。この R.Swift プラグインの導入方法についてREADMEに沿って説明します。

– R.Swift 7.0.0 リリースノート
– https://github.com/mac-cain13/R.swift/releases/tag/7.0.0
– リリース一覧
– https://github.com/mac-cain13/R.swift/releases

:::note info
インフォメーション
記事執筆現在、既に 7.2.4 がリリースされており、引き続き頻繁なリリースが続きそうな勢いです。
導入される方は最新のリリースを導入すると良いと思います :ok_woman:
:::

# R.Swiftのプラグインとは

R.Swiftにはこれまでプラグインの機能はありませんでした。今回の7.0.0で新規に追加されたものです。
この機能により、R.generated.swiftが自動生成されます。

元記事を表示

【SwiftUI】Combineでキーボードを監視する

# はじめに
私は現在カスタムキーボードを作成していて、キーボードの状態を知る方法を色々試しています。
この方法はCustomKeyboardExtensionでは使用できませんでしたが、メインターゲットでは使用できました。
せっかく試したので記事にしておきます。

# サンプルアプリ
ちょっと見にくいですが、以下の2項目を表示しています。
– キーボード状態(開いている or 閉じている)
– キーボードサイズ(width, height)
![RPReplay_Final1670849788_MP4_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b335fb1b-9182-a355-9d53-a64fab4642d1.gif)

# 実装
### View
“`swift:ContentView
import SwiftUI

struct ContentView: View {
@StateObject private var viewMode

元記事を表示

SwiftのCollectionViewCellの型崩れについて

## 概要
SwiftのCollectionViewCellの実装中に、Cell内に配置しているUIButtonの形を円形にしようと実装していたところ、なぜかひし形のような形になって型崩れしてしまっていました。
## 条件
サーバーから取得してきたユーザー情報をCollectionViewCellに入れるというごく単純なものになります。
Swiftファイルとは別に切り出した、『CollectionViewCell.Swift』を作成し、ViewController.SwiftファイルのcellForAtでセル一つずつに情報を入れるという形で実装していました。

## 実装
コードの状況としては、以下のような感じでした。

“`CollectionViewCell.Swift
final class CollectionViewCell: UICollectionViewCell {

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

override func layoutSubviews() {
super.layo

元記事を表示

openapi-generator で自作テンプレートを用いて iOS API クライアントを自動生成した話

この記事は [ドワンゴ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/dwango) 11 日目の記事です。1日遅刻してしまいました :bow:

こんにちは、@tasuwo です。普段はニコニコ動画 iOS アプリの開発に携わっています。ニコニコ動画iOSアプリ (以下、動画iOSアプリ) では3年程前から OpenAPI 仕様を元に APIクライアントを自動生成し、動画iOSアプリとボカコレアプリで利用しています。その中で得られた知見について紹介しようと思います。(そもそも OpenAPI とは?という話は、今回は割愛します :pray: )

## コード自動生成導入の経緯

主なモチベーションはやはり省力化でした。導入以前は仕様書を元に実装を行い、同じ仕様書を元にレビューするといった工程が必要でしたが、仕様書からコードが自動生成できれば多くの手間を省くことができます。
また、動画iOSアプリから主に利用するAPIでは既にOpenAPI仕様が提供されていました[^1]。この仕様を提供するチームは動画i

元記事を表示

SwiftUIで作る「Drag処理を利用したCarousel型UI」と「Pinterest風GridレイアウトUI」の実装例とポイントまとめ

## 1. はじめに

皆様お疲れ様です。Swift AdventCalendarの12日目を担当させて頂きます、fumiyasac(Fumiya Sakai)と申します。何卒よろしくお願い致します。

最近になって、業務や個人開発の中でも徐々にSwiftUIやそれを取り巻くアーキテクチャ等にも触れる機会が徐々に増えてきました。

UIKitが主流だった時代から今日までiOSアプリにおけるUI実装に関する部分は、自分にとっては一番関心が高いトピックではあるので、今後はある程度まとまった記事の形でも継続的な投稿ができる様にして参ります。
(もちろん不定期で公開しているTwitter等での手書きノートによるアウトプットも継続していく所存ではあります?)

私自身もそれほどSwiftUIに慣れているわけでは決してありませんが、これまでUIKitを活用して実装経験があるものや、サンプル実装検証をすすめた経験があるものの中で、

– UIKitを利用した際でも想像以上に工夫が必要だったUI実装を、SwiftUIに置き換えて考える事は可能か?
– 更にSwiftUI製の実装する場合は、従来のUIK

元記事を表示

SwiftUI でサイズクラスに対応する

# はじめに
Storyboard を利用していると、サイズクラスを利用して以下のように柔軟にビューのレイアウトを変更することが、比較的簡単に実現できていました。

– iPad で画面を分割していないので、幅が十分にあるからビューを横に並べよう
– iPad をマルチタスキングで画面分割して幅が狭くなったので、ビューを縦に並べよう

`UIStackView` で、幅と高さが Regular のデバイス(iPad で画面非分割時など)の場合のみサブビューを横に並べるのであれば、以下のような設定を行いました。

sizeclass_in_storyboard.png

サイズクラスは SwiftUI でも利用できるので、その使い方を記載します。

# 今回のゴール
以下のように、画面幅の広い状態ではビューを横に、狭

元記事を表示

SpriteKitで2D横スクロールゲームをつくろう(番外編)

![Xcode-14.1](https://img.shields.io/badge/Xcode-14.1-brightgreen) ![iOS-16.0](https://img.shields.io/badge/iOS-16.0-brightgreen)

## はじめに
その1〜その5の番外編です。

* [その1](https://qiita.com/am10/items/df42c1f0091e6c4705e2)
* [その2](https://qiita.com/am10/items/d53d1cdf1b973a9f56cc)
* [その3](https://qiita.com/am10/items/8729f77f3ee512a86052)
* [その4](https://qiita.com/am10/items/90e3a2f58ae88e4ad6c4)
* [その5](https://qiita.com/am10/items/deacceda00c034ac29bb)

今回はこんな感じでコントローラーで操作できるようにします:wink:

子育て中のママが5日間でiOSアプリを開発→リリースした話

これはWEBCAMP ENGINEER COMMUNITY Advent Calendar 2022の12日目の記事です!
(私事ながら結婚記念日なので今日を選びました!祝って〜!)

## はじめに

おがまりと申します。
現在IT愛好家という肩書きを勝手に名乗り、Web制作代行やIT関連講師などを行っています。
今年の5月に娘を出産しました!

## 作ったアプリ
[託児サービス付店舗検索アプリ meimei](https://meimei-app.studio.site/)というアプリを作りました。
現在iOS版のみですが、[こちら](https://apps.apple.com/jp/app/meimei-%E8%A8%97%E5%85%90%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E4%BB%98%E3%81%8D%E5%BA%97%E8%88%97%E6%A4%9C%E7%B4%A2-%E3%82%81%E3%81%84%E3%82%81%E3%81%84/id6444382754)からダウンロードできます!

「The Ultimate Guide to WKWebView」をSwiftUIで実装する #13 – Showing custom UI –

「[The Ultimate Guide to WKWebView](https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebvie)」をSwiftUIで実装してみるの、
13個目になります。12個目を投稿以降、しばらくサボっていてごめんなさい。 :bow:

今回はWebViewで新しいウィンドウを開く方法についてです。
SwiftUIだと色々ハマりまりました。正直SwiftUIが悪いのか私が悪いのか不明なところも残っています。(いつもか、、)
色々な方法を試してみたつもりではあるのですが、他にもっと良い方法があるんじゃないかとも思うので、もしあればコメントで優しく教えてくださるととてもありがたいです。 :pray:

## 目次

シリーズ化していこうと思うので、全体の目次を置いておきます。
リンクが貼られていないタイトルは、記事作成中または未作成のものになります。

|#|タイトル|
|——|—————–|
|01|[Making a web view fil

【SwiftUI】Combineでバッテリーを監視する

# はじめに
ゼンリーのアプリを見てたらバッテリー残量が表示されていたのでどうやるのかなと思い、試してみました。
せっかく試したので記事にしておきます。

https://qiita.com/SNQ-2001/items/7ebfadb553c2682ea69b

これをちょっと変えてサンプルアプリを作成します。

# サンプルアプリ
充電中 → 緑
それ以外 → 黒
![RPReplay_Final1670752390_MP4_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d7e229da-d994-d0b3-1e51-6ae5c621014e.gif)

# 実装
### View
“`swift
import SwiftUI

struct ContentView: View {
@StateObject private var viewModel = ViewModel()
var body: some View {

元記事を表示

OTHERカテゴリの最新記事