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

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

【Flutter】iOS課金処理の、PurchaseStatus.pendingの挙動について

この記事は、[and factory.inc Advent Calendar 2021](https://qiita.com/advent-calendar/2021/andfactory)の **9日目** の記事です。
昨日は、@rd0501さんの「[iOSチームレビュー体制(ルール/目的/観点/よくある質問) まとめ (2021/12)](https://zenn.dev/domonr/articles/b926de7960f2fc)」でした。

# はじめに

Flutterの課金処理を、[公式のプラグイン](https://pub.dev/packages/in_app_purchase)を使って実装している方に向けた記事となります。
iOSのトランザクションステータスは、Flutterの課金ステータス `PurchaseStatus` と若干異なる為、注意するべきポイントを紹介します。
課金タイプは `消耗型` を想定しています。

※最近Ver.2.0.0がリリースされましたが、本記事ではVer.1.0.9をもとにした内容となっております。

# 課金ステータスの種類

元記事を表示

iOSのコンピュータビジョンで人物の全身ボックスを検出する

これまでVisionの人物ボックス検出(DetectHumanRectanglesRequest)では、上半身のボックスしか取得できなかった。
2021年のアップデートから、全身のボックスも検出できるようになった。

新しいVNDetectHumanRectanglesRequestRevision2を使う。

“`swift
let request = VNDetectHumanRectanglesRequest()
request.revision = VNDetectHumanRectanglesRequestRevision2
request.upperBodyOnly = false // trueにすれば上半身のみのBoundingBoxを取得する
“`

|upperBodyOnly|結果|
|—|—|
|true||
|false|

元記事を表示

watchOS 8 から表示されるようになった NavigationBar の Large title 表示をやめたい

## はじめに

ご存知の通り watchOS 8 から NavigationBar のタイトル部分が
デフォルトで Large title 表示されるようになりました。

|watchOS 7|watchOS 8|
|:–:|:–:|
|![スクリーンショット 2021-12-09 7.39.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88266/6b1e604d-95b1-46b7-43e0-3064de614405.png)|![スクリーンショット 2021-12-09 7.37.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88266/617ab349-8247-ae12-7846-719a688b2e42.png)|

今夏 Watch App 開発していたのですが,watchOS 8 での動作確認は
後回しにしていてリリース前に確認して,あぁ〜変わったんだという感じでした。
Apple Wa

元記事を表示

SwiftUIでかんたんにパーティクルを表示する

# 概要

SwiftUIで、以下のような、ボタンを押すとスパークする画面効果を使ってみたいと思います。

![Simulator Screen Recording – iPod touch (7th generation) – 2021-12-06 at 15.18.02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687960/4a127334-e4ee-8ba3-d735-bb81b20a0103.gif)

# 手順

今回のパーティクルは`SpriteKit`を使って実現します。

## パーティクルファイルの用意

New Fileより、 `SpriteKit Particle File`を選択し、新しいパーティクルファイルを作成します。
パーティクルファイルには、`Fire`や `Snow` など様々なテンプレートが用意されているので、これだけでもいい感じのアニメーションが実現できます。

![スクリーンショット 2021-12-06 15.20.23.png](https://qiit

元記事を表示

Unity Asset Storeでアセットを販売してみました

## 概要
[KLab Engineer Advent Calendar 2021](https://qiita.com/advent-calendar/2021/klab) 12月9日の記事です。
開発推進部の庄司です。お仕事では、スマートフォンゲーム開発案件のサポートをしています。

「MIDI Plugin for Mobile Devices」というUnityアセットを作成して、アセットストアにリリースしてみましたので、その経緯や手順を共有します。

https://assetstore.unity.com/packages/tools/audio/midi-plugin-for-mobile-devices-198917

### MIDIについて
いきなりの余談ですが、「MIDI」ってご存知でしょうか? とってもレガシーな規格(1983年)です。Music Instruments Digital Interfaceの略で、要は楽器同士や、楽器とコンピュータとを接続するための規格です。時代がかった規格ではありますが、現在でもいろんなところで使われています。ゲームサウンドの制作

元記事を表示

【SwiftUI × Combine】さくっと無限スクロールを実装する

## やること
SwiftUIとCombineを用いて無限スクロールを実装します。

このような仕様のアプリを作ってみました。
1. TextFieldで何かしら検索を行なって、結果をリストに格納し、表示する
2. スクロールが終わりそうなときに追加のコンテンツを読み込み、リストに追加し、表示する

2の部分について書いていきます。
実際にはAPIを呼ぶことを想定していますが
今回は無限スクロールをどうやって実現するのかという点に絞ります。

## 環境
macOS 11.4
xcode13.1
swift5

## できたもの

元記事を表示

プロジェクトにWidgetExtensionを追加して’WidgetFamily’ごとに表示してみる

## はじめに
ウィジェットの技術検証とキャッチアップを兼ねて社内で勉強会を開催しました。
今回は、WidgetExtensionを追加してWidgetFamilyごとに表示するところまでを記事にします。

## 環境
Swift 5.5
Xcode 13.1

## サンプルプロジェクト
GitHubにPushしました。気になる方はご覧ください。
https://github.com/ken-sasaki-222/WidgetTraining
![QR_961482.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/fb53454c-1f96-c7eb-4dbc-a98dc8cd61b9.png)

## ウィジェットをローカルでビルドする
#### ウィジェット機能を利用したいアプリの作成
`Xcode起動 → Create a new Xcode project → iOS → App`を選択して諸々設定
今回アプリ名は`WidgetTraining`とします。

#### Widget

元記事を表示

【Swift】PDFThumbnailViewの実装

SwiftでPDFKitを使ってPDFThumbnailViewを実装する方法。

## 実装コード
SwiftでPDFKitを使ってPDFThumbnailViewを実装する方法。

“`swift
import UIKit
import PDFKit

let pdfView = PDFView()//細かい設定は省略します
let pdfThumbnail = PDFThumbnailView()

pdfThumbnail.frame = CGRect(x: 0, y: view.frame.maxY – 100, width: view.frame.width, height: 100)//縦幅100、横幅全部のサイズ
pdfThumbnail.layoutMode = .horizontal//横向き
pdfThumbnail.pdfView = pdfView //PDFViewを紐付け
self.view.addSubview(pdfThumbnail)
“`

## 参考

https://developer.apple.com/documentation/pd

元記事を表示

IoTデバイスの脆弱性とAWS IoT Core が VPC エンドポイントのサポート

2021年7月に発表された「AWS IoT Core が VPC エンドポイントのサポート」の意味を考えるために書いています。

AWS公式の発表記事は以下です。

[AWS IoT Core が VPC エンドポイントのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2021/07/aws-iot-core-supports-vpc-endpoints/)

#1.VPCエンドポイント とはなんのことか?
AWS上のVPC内のサービスと、VPC外のサービスをプライベート接続で通信できるようにするための仮想デバイスです。
・PrivateLink と呼ばれるサービスを使って、各サービスを接続させることが出来ます
・PrivateLink の実体はVPC内のENI(Elastic Network Interface) になります
・PrivateLink自体がIPアドレスを持ってVPCの中にエンドポイントが出来ます

[公式ドキュメン](https://docs.aws.amazon.com/iot/latest/develo

元記事を表示

iOSで人物きりぬきPersonSegmentation(バーチャル背景、背景ぼかし、合成)

AppleのVisionで**PersonSegmentation**ができるようになった。
iOSで人物切り抜きができる。

**【セグメンテーション・マット】**

**GitHubサンプルコード: 
[
PersonSegmentatio

元記事を表示

Abstract Factory パターンについてまとめてみた【Swiftでデザインパターン攻略 #3】

## Abstract Factory パターン とは
#### 概要
Wikipediaによると、
「関連するインスタンス群を生成するための API を集約することによって、複数のモジュール群の再利用を効率化することを目的とする。」デザインパターンのことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580445/a8b82b81-fc31-466b-a099-a4c9a6218069.png)
[Wikipediaより](https://ja.wikipedia.org/wiki/Abstract_Factory_パターン)

#### SwiftにおけるAbstract Factory パターン
iOSアプリ開発で活用する場合、VCやViewなどが生成したい「モノ」の具象クラスを意識せずに、共通のプロトコルに準拠したインスタンスを取得するために使えます。

オブジェクト生成の責務をView側から切り離すとともに、インスタンス化をカプセル化(秘匿化)することが可能です。

元記事を表示

[Firebase][iOS] メールアドレス更新前に確認メールを送る

Firebase Authentication のユーザーのメールアドレスを更新する方法として、
[「新しいメールアドレスに認証メールが送られ、リンクがクリックされると更新される」関数](https://firebase.google.com/docs/reference/swift/firebaseauth/api/reference/Classes/User#sendemailverificationbeforeupdatingemail:completion:)があります。

“`swift:
// newEmail に確認メールが送信されます。メールのリンクをクリックすると newEmail に変更されます。
Auth.auth().currentUser?.sendEmailVerification(beforeUpdatingEmail: newEmail) { error in
// …
}
“`

ちなみに、以下のコードだとメール認証なしで変更されます。

“`swift:
Auth.auth().currentUser?.updateEmail(to

元記事を表示

flutterでOAuthのログイン機能を実装

flutterでOAuthなログイン機能を実装しました。

実装内容とシーケンスは下記の記事を参考にさせていただきました。
https://dev.classmethod.jp/articles/persistent-login-for-mobileapp/

また、バックエンド側は下記の記事を参考にしてください。
https://qiita.com/yufuku/items/b2b2b4d2eb46dba0476c

完成イメージは次になります。
![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680074/3c9714c9-047b-dcb8-2fb4-aaa08fe1666c.gif)

コード全体は下記になります。
https://github.com/fu-yuta/authentication_frontend/tree/ce529eb931e8892fc003672540e792577abf13b7

#環境
“`shell
$ flutter

元記事を表示

AirDropでポケモンカードをシェアしてみた

# はじめに
この記事は[and factory.inc Advent Calendar 2021](https://qiita.com/advent-calendar/2021/andfactory) 7日目の記事です。
昨日は @nabetaro_jpさんの「[Flutterエンジニア採用面談で聞きそうなこと](https://qiita.com/nabetaro_jp/items/ab8d4d69f170ec9e4ed1)」でした。

and factory iOSエンジニアのy-okuderaです!
今回は、AirDropでiOSアプリのデータを共有してみようと思います。

# AirDrop
Apple製品のユーザーであれば説明するまでも無いかもしれませんが、念のためm(_ _)m

https://support.apple.com/ja-jp/HT204144

> AirDrop を使うと、近くにあるほかの Apple 製デバイスと写真や書類などのコンテンツを共有し、相手からも受け取ることができます。

写真やメモなどを共有するのに便利です!
アプリ開発をするときにも、

元記事を表示

WebブラウザからARコンテンツを表示する

SafariなどのWebブラウザからARコンテンツを表示できます。
アプリをダウンロードする必要はありません。
**以下のサムネイルは、実際にARタグがついているので、iOSデバイスでタップするとARプレビューが表示されます。**
よかったら試してみてください。
(注)PCなどiOS以外のデバイスでクリックすると、realityファイルがリンクからダウンロードされます。


【球体と魚】
Fastlane で AppStoreConnect にアップロードするまで

この記事は、フラー株式会社 [Advent Calendar 2021](https://qiita.com/advent-calendar/2021/fuller-inc) の7日目の記事です。

6日目の記事は @zzzaaawwwaaa さんによる [Rubyやってた人間がGo始めて思ったこと](https://qiita.com/zzzaaawwwaaa/items/9bc95826556beb4bb9c8) でした。

# 概要

[Fastlane 2.197.0](https://github.com/fastlane/fastlane/releases/tag/2.197.0) で dSYM のダウンロードが App Store Connect API 対応しました。
これで証明書のダウンロードからストアへのアップロード、dSYM ダウンロードなど一通り CI で利用する処理が API 経由で利用可能になったので、おさらいしようと思い、記事にしました。

## 準備

Xcode プロジェクトを作成して、[Apple Developer Portal](https:/

元記事を表示

Android/iOSで他アプリに簡単な値を送る方法

# はじめに
AndroidやiOSアプリを開発していて、自分のアプリから他のアプリを開きたい、簡単なコードを送って連携したい、そういうことはないでしょうか?実装していてちょっと苦労したのでメモがわりに残しておこうと思いました

# Android
![Android-App-Transition.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924658/429ba76f-4a72-e91f-4391-91a27d361e1c.gif)

## 実装
### 送信側でやること

“`MainActivity.kt
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
// 送信先アプリに送りたい文字列
putExtra(Intent.EXTRA_TEXT, “C9C7BFC1-6397-4681-96CE-9C1BC1B

元記事を表示

【Flutter】FirebaseDynamicLinksで招待機能を実装する

# Firebase Dynamic Linksとは
Firebaseが提供するディープリンクの機能です。ディープリンクとは1つのURLでAndroid/iOS/WEBでの遷移先を振り分けたり、そのあとアプリにパラメータを渡すことも出来ます。
[Flutter大学](https://kboyflutteruniv.com/)の共同開発で作成したCOUPLE TODOはこのDynamic Linksを使って、夫婦同士の紐づけを行っていますので、そのやり方を紹介します。

https://couple-todo-product.web.app/

:::note warn
このコードの例は多少古い書き方も含んでいますのでご承知おきください。(RaisedButtonなど)
:::

# Flutterでの実装
Flutterあるあるですが、公式のドキュメントには実装例が載っていないです。

https://firebase.google.com/docs/dynamic-links/

そしてFlutterFireというFlutterでFirebase使う時の実装例などが書いてあるドキ

元記事を表示

[iOS] Bluetooth許可アラートを任意のタイミングで出したい

# はじめに

## Bluetooth許可アラートとは
これです。
これを任意のタイミングで表示できるようにしたい。

## 背景
特定の画面のみでBluetoothを利用するアプリでは、「利用する画面に遷移した時」や「使用するボタンを押した時」等のタイミングでBluetooth許可アラートを出すのが何にBluetoothを利用するのかわかりやすくてユーザー体験的に良いと思います。
そういった場面に対応するためには、**任意のタイミングでBluetooth許可アラートを出すことができるようにする必要があります。**

# 基礎知識
## CBCentralManager

Bluetooth周りを扱うためには`CBCentralManager`を使います。

公式ドキュメント

https://developer.apple.

元記事を表示

今更だけど、Objective-CアプリにSwiftライブラリLottieを導入してみた

##はじめに
10年以上メンテしてるアプリがあるので、いまだにObjective-Cも使っている今日この頃。
マルチプラットフォームの方がいいので、AppleのSwiftには手を出さずにきたんですが、Lottieを導入してみたら手を出さざるを得なかったので、出しちゃいました。

もう12周年だった。 [「PRO.APP」12周年記念!](https://www.atpress.ne.jp/news/285839)

Lottieとはアプリ/webにアニメを追加できるありがたいモジュールです。After Effectsから変換できます。
[WebアニメーションはLottieがオススメ!基本の使い方完全ガイド【2020年版】](https://photoshopvip.net/121220)

##なぜに?
Swift、今ままで深く調べたこともなかったんですが、iOSのLottie、Swiftで書かれてて、あ、じゃあ確かObjective-CからSwiftは簡単に呼べるはずなので、呼んでみよー・・・

呼べねー

・・・

なんでもSwiftのライブラリを出すときに、Objective-C

元記事を表示

OTHERカテゴリの最新記事