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

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

APNS のペイロードデータを struct にマッピングする

## TL;DR

“`swift
struct APNSPayload: Decodable {
struct APS: Decodable {
struct Alert: Decodable {
let title: String
let body: String
}

let alert: Alert
let badge: Int?
}

struct CustomField: Decodable {
let hogeList: [String]
let fuga: String?
}

let aps: APS
let customField: CustomField?

init(decoding userInfo: [AnyHashable: Any]) throws {
let json = try JSONSerialization.data(withJS

元記事を表示

[iOS] URLSchemeで起動した時のAppDelegate/SceneDelegateの呼び出し順序

※本記事の前提環境:Xcode 12.5.1

AppDelegate/SceneDelegateを両方実装している場合に、URLSchemeのトリガーによって、URLパラメータ取得系のdelegateメソッドがどのように走るのかを調査しました。

結構メンドクサイなと思いました…

なお、アプリ未起動状態でURLSchemeによってアプリが起動された場合のデバッグについては、以下の記事を参考にさせていただきました。

https://qiita.com/AlecYawata/items/79f45e85ecc573860dcb

# iOS 13以降

注:URLパラメータ取得系のdelegateメソッド以外については省略しています。

## アプリ未起動状態

1. AppDelegate – application(_ :didFinishLaunchingWithOptions)
2. SceneDelegate – scene(_ :willConnectTo :options)

※注:scene(_ :openURLContexts)は呼ばれない

## アプリ起動状態

元記事を表示

【iOS】Metal Best Practicesの解説(6) ドローアブル

[Metal Best Practices](https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/index.html#//apple_ref/doc/uid/TP40016642-CH27-SW1)は、iOS/MacOS/tvOSのAPIであるMetalを用いた設計のベストプラクティスガイドです。

本稿では、何回かに分けてこのガイドを読み解き、コード上での実験を交えて解説していきます。
読んでそのまま理解できそうなところは飛ばしますので、原文を読みながら原文のガイドとしてご利用下さい。
また、iOSの記事なので他のOS(MacOS, tvOS)についての記載は割愛します。

他の記事の一覧は、初回記事よりご覧下さい。

https://qiita.com/TokyoYoshida/items/521619d6d8dd8d8ef9e4

### [Drawables (ドローアブル)](https://developer.apple.c

元記事を表示

unity ios書き出しのスプラッシュを任意の色にする

#環境
Unity 2019.4.15
Xcode 12.4

この環境でデフォルトで書き出すと、黒に近い灰色のスプラッシュになります
Unityで黒のpngを設定しても、思った効果になりませんでした
仕様が変わったようでXcodeのStoryBoardから読んでるらしいです。

#解決策
一応、ビルドが通りましたが
いいのか、悪いのか、、、

1、Unityのスプラッシュ設定は、デフォルトのまま(show Splash Screen OFF)書き出し
2、Xcodeで、StoryBoardを開きRootViewの下を削除する 
3、RootViewのBackgroundとTintを任意の色にする

![スクリーンショット 2021-08-27 15.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514937/e119cf5e-c660-332e-3a76-8921de926efd.png)

元記事を表示

flutter_flavorizr + flutter_flavorでFlutterの環境切り替えした後に、iOSでbuildした時の 「Unable to load contents of file list」の解決方法

# 概要
Flutterの開発環境/本番環境を「flutter_flavorizr + flutter_flavor」を使って、切り替えできるように対応しました。
下記の問題が発生しました。 こちらの記事のその解決を記載しています。

* iOSでbuildすると、「Unable to load contents of file list: ‘/Target Support Files/Pods-Runner/Pods-Runner-frameworks-Debug-development-input-files.xcfilelist’」のErrorが出て、buildが通らない

## 対応環境
(Errorが出ている。。。あとで直そう)

“`
[✓] Flutter (Channel master, 2.5.0-7.0.pre.15, on macOS 11.3.1 20E241 darwin-x64,
locale ja-JP)
[!] Android toolchain – develop for Android devices (Android SDK versio

元記事を表示

Google Firebase A/Bテストをiosで使ってみる

A/Bテストやってますか?Qiitaの“`ABテスト“`タグの量を見るかぎりあまり使われていないのかな?

GoogleのFirebaseにはA/Bテストを簡単に行える機能があります。これをiosアプリに実装する方法を書きたいと思います。以下の記事を参考にしました。

https://www.raywenderlich.com/17323848-firebase-remote-config-tutorial-for-ios

https://www.raywenderlich.com/20974552-firebase-tutorial-ios-a-b-testing

今回は画面に表示されたボタンのテキストをAとBで変えてクリックされる率をとるというものを作りたいと思います。
![21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33704/dea100fa-548b-f3eb-a316-6c2f4393512f.jpeg)

Firebaseにはいろいろな機能があるのですが、Remote Co

元記事を表示

【個人開発】地域の魅力を発信できるデジタルパンフレットサービス「Openパンフレット」を作った

# はじめに

* デジタルパンフレット作成公開サービス **[Openパンフレット](https://open-pamphlet.com)** をリリースしました。

* 個人開発です。

* バックエンドはだいたいAWSです。

* Android未対応?​

https://open-pamphlet.com

​バックエンドの技術者がフロントやらインフラやらアプリやら色んな所に手を出して作ったシステムになっています。

記事本文はZennで書いているので[こちら](https://zenn.dev/ymasutani/articles/42fb40f4e00f1d)です。

# 宣伝
Android版の開発のためクラウドファンディング募集しています。
よかったら見て下さい。励みになります。

https://camp-fire.jp/projects/view/467291

元記事を表示

Swift for ios app のTextFieldの移動方法

# Swift for iOS APP メモ
## キーボードをあげて表示を行う
チャットなどアプリでTextFieldに文字を打ち込みたいときに、TextFieldをキーボードの上にあげる方法

`AppDelegate.swift` に以下のコードを追加する。

“`swift:AppDelegate.swift
import IQKeyboardManagerSwift

func application()

IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.enableAutoToolbar = false
IQKeyboardManager.shared.shouldResignOnTouchOutside = true

“`

これのみで完了

元記事を表示

[Swift]推定されるジェネリック型の制約

※この記事は[Swift by Sundell](https://www.swiftbysundell.com/tips/inferred-generic-type-constraints/)の内容を日本語に翻訳したものです。

ジェネリック型制約を使用して、特定のAPIが使用される具象型に一連の要件を課すことができます。これにより、ジェネリックコード内でそれらの型について特定の仮定を行うことができます。

たとえば、私たちが取り組んでいるアプリが`NetworkRequest`プロトコルを使用して、さまざまなリクエストを、それぞれ`Response`が期待する種類を宣言するさまざまなタイプとして定義できるようにしているとします。

“`.swift
protocol NetworkRequest {
associatedtype Response: Codable

func makeURLRequest() -> URLRequest
}
“`

このようなリクエストを実行するためのAPIを定義すると、次のような結果になる可能性があります。ジェネリック型制約を使

元記事を表示

WWDC2021セッション等の要約(2)

(1)はこちら: https://qiita.com/satoru_pripara/items/92bb0a37bc42c0a8d610

### Ultimate application performance survival guide
https://developer.apple.com/videos/play/wwdc2021/10181/

アプリの起動時間・バッテリー消費・メモリー消費・ファイルアクセスの時間など、パフォーマンス系の問題を解決するための対策を総合的に解説しています。

道具としてはXcode Organizer, MetricKit, Instruments, XCTest, App Store Connect APIを利用しています。

#### バッテリー消費
バッテリーは位置情報取得、ネットワークとのデータの送受信、何らかの計算処理をした時のCPUの負荷、描画を行うときのGPUの負荷、音声の再生、ブルートゥースの使用などで消耗されます。 主に最初の3つで大量にデータが消費されます。

Xcodeからプログラムを実行時に、画面左側のスプレーボトルのよ

元記事を表示

【Swift】郵便番号が存在するか確認するコード

入力した郵便番号が存在するか確認するコード。

“`swift
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(“1000012”, completionHandler: {(placemarks, error) -> Void in
if((error) != nil){
print(“error”)
}
if let placemark = placemarks?.first {
print(“success!”)
}
})

“`
参考:

https://qiita.com/k-yamada-github/items/5ce29b3c30397104461e

元記事を表示

Cannot declare conformance to ‘NSObjectProtocol’ in Swiftへの対応

#はじめに
mapにピンを立てる際に、カスタムなアノテーションを用意してMKAnnotationを継承させたときに、`「Cannot declare conformance to ‘NSObjectProtocol’ in Swift」`とエラーが出ました。

“`swift
final class CustomAnnotation: MKAnnotation {}
“`

#環境
[Swift] Version 5.3.2
[iOS] Version 14.4

#エラーへの対応
`「Cannot declare conformance to ‘NSObjectProtocol’ in Swift」`
そのままですが、Swiftでは、私たちが`NSObjectProtocol`の継承を直接宣言できないらしいです。
`NSObjectProtocol`は、すべてのObjective-Cオブジェクトの基本となるメソッドのグループです。
>The group of methods that are fundamental to all Objective-C objects.
(htt

元記事を表示

ディープリンクの種類を調べてみた

モバイルアプリ開発をしているとディープリンクを利用する機会が多いですが、種類やそれぞれの違いをちゃんと認識していなかったのでまとめました。

# ディープリンク(Deep Link)

デフォルトディープリンクと呼ばれることもある。

アプリがインストール済み アプリのエンドポイントに遷移する。
アプリがインストールされていない エラーメッセージ

# ディファードディープリンク(Deferred Deep Link)

コンディショナルディープリンクとも呼ばれる。

アプリがインストール済み アプリのエンドポイントに遷移する。
アプリがインストールされていない App Store, Play Storeに遷移する。

#

元記事を表示

[WWDC 2021] Xcode 13 DocCを使ってフレームワークのドキュメントを自動作成およびwebに公開する

Xcode 13はコード内のコメントに基づいてドキュメントを自動生成できるようになりました。

独自のドキュメントページをカスタマイズして追加したり、ドキュメントファイルを他のユーザーと共有したり、ドキュメントファイルをウェブサーバーにホストしたりすることができます。

この記事では、Swift Package向けドキュメントの追加について説明します。

この記事に掲載されている画像は `developer.apple.com` から公開されています。

![スクリーンショット 2021-08-25 17.25.25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/79bf677b-65a9-636b-4706-afc21933a939.jpeg)

## ドキュメンテーションカタログを作成する

自前のドキュメンテーションのページをカスタマイズして作成するには、ドキュメンテーションカタログを作成する必要があります。自動生成されるドキュメンテーションでいいという場合には、カタログの作成は必要

元記事を表示

SwiftGenを使ってみた

# はじめに
アプリの画面作成において`Storyboard`をメインに使用しており、`Color`や`Image`をアセットフォルダで管理しています。
`Storyboard名`や`Color`、`Image`のタイポの可能性をなくしたいと考え、コード生成ライブラリの一つである[SwiftGen](https://github.com/SwiftGen/SwiftGen)を使用してみました。

# SwiftGenとは
説明不要かもしれませんが、`SwiftGen`は、プロジェクトのリソース(画像やローカライズされた文字列など)に対してSwiftコードを自動的に生成し、タイプセーフな状態で使用できるようにするツールです。
SwiftGenを使用することには、いくつもの利点があります。

>There are multiple benefits in using this:
– Avoid any risk of typo when using a String
– Free auto-completion
– Avoid the risk of using a non-existin

元記事を表示

Codemagic vs Bitrise: 詳細な比較

CodemagicとBitriseはどちらも、モバイルアプリを構築するためのクラウドベースの継続的インテグレーションおよび継続的デリバリーツールです。 Android、iOS、Flutter、React Native、Cordova、Ionicなどの一般的なモバイルフレームワークのほとんどをサポートします。
これら2つのプラットフォームのどちらかを選択するのは難しいかもしれませんが、ご心配なく。私たちは、個々のニーズまたはチームのニーズに最適なCI/CDサービスを決定するお手伝いをします。
この記事では、CodemagicとBitriseを直接比較し、各サービスの長所と短所について説明します。

## オンボーディング

### Codemagicのオンボーディング
GitHub、BitbucketまたはGitLabアカウントを使用して、CodemagicとBitriseの両方にログインできます。

![](https://blog.codemagic.io/uploads/2021/08/codemagic_login.png)

CodemagicはGitHubアプリ統合を使

元記事を表示

ARFoundationのImageTrackingにて画像検出時と外れる時 (Removed) のタイミングを取得する方法

こんにちは、ARエンジニアのイワケンです。
ARFoundationのImageTracking機能を使う際に詰まったところと解決方法を共有します。

# 環境

– Unity2020.2.1f1
– ARFoundation4.1.7
– macOS BigSur 11.5.2
– iPhone 11Pro
– iOS14.7.1

ARFoundationのサンプルとして、ブランチ4.1の
https://github.com/Unity-Technologies/arfoundation-samples/tree/4.1
を使用しました。

# やりたいこと

ImageTrackingの画像認識にて、画像検出時と画像認識が外れる時のタイミングを取得したい。

# サンプルシーンを動かして挫折

Githubのサンプルの
Assets/Scenes/ImageTracking/ImageTrackingWithMultiplePrefabs/ImageTrackingWithMultiplePrefabs.sceneを開く。
このシーンは、複数の画像マーカーに対して、対応するP

元記事を表示

Bitriseを利用してミニマルにiOSのCI / CD環境を構築する

この記事では、Bitriseを利用してiOSのCI/CDを構築します。
CI/CD環境の構築は日頃アプリを作るエンジニアにとっては慣れない作業であり、
利用するCIサービスによってやり方は異なるので、他のサービスを構築した知見が活きにくいものです。
また、チームの中でもCertificatesやProvisioning Profileといった、XcodeのCode Signingは経験がないとDeveloperであってもセットアップに苦慮するという状況にあります。

この記事で案内する方法は、BitriseのStepとApp Store Connect APIを利用します。
これによりCode Signingの管理を簡単にし、配布もTest Flightにすることで、できるだけミニマルにCI/CDを構築することができます。

## 基本的なセットアップ

Bitriseの管理画面にある `Add New App`の手順に従い進めます。
最初のビルドが終わった時点で次の手順に進みます。

特筆することは特にありません。

## 目指すもの
次の2つができれば、ひとまずやりたいことは満たせ

元記事を表示

【Apple Developer】App Store/TestFlightへのアプリ申請でできる限りレビューの回数を減らしたい時の前準備

# アプリのみで完結しないiOSアプリの新規申請はなかなか通らない件
ビジネスロジックが複雑なアプリは何かと審査にひっかかります。
審査員がまず機能を網羅的に確認できないから一つ一つの機能のレビューで1ヶ月審査に時間を使うなどあったりします。

なのでできる限り機能面の問い合わせでレビューのやりとりを減らしたい時は審査前のテスト情報として、下記質問に前もって答えておくとすんなりレビューを通してくれるのでおすすめです。

また、TestFlightで外部配信時にも審査が必要になったので、
ログインが必須なアプリはテスト用のログイン情報も必ずTestFlightのテスト情報欄に共有するようにしましょう。

“`
1. Is your app restricted to users who are part of a single company? This may include users of the company’s partners, employees, and contractors.

2. Is your app designed for use by a limite

元記事を表示

Flutterで個人アプリリリースをして、約1年間で得た知見をまとめる

# 目次
2020年10月に個人開発でFlutterを使ったスマホアプリをリリースしました。
そろそろリリースしてから1年経つので得た知見を簡単に纏めておきます。
誰かの役に立てば嬉しいです。

## リリースしたアプリ
![スクリーンショット 2021-08-23 22.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/8004d861-c243-612b-839a-5837e82aa05d.png)

アプリ名:**グルメマップ**
機能:**近くの飲食店をMap表示するアプリ**
利用技術:**Flutter**
リリース日:**2020年10月**
作ったきっかけ:**3秒くらいで近くのランチやディナー検索できるアプリが欲しかった**
利用API:
[Google Maps API](https://developers.google.com/maps/?hl=ja)
[Google Places API](https://developers.google.com/m

元記事を表示

OTHERカテゴリの最新記事