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

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

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

元記事を表示

Unity(iOS)で ローカルネットワーク上のデバイスの検索および接続を求めています。 って出ても気にすんな

# tl; dr
– Development builds of the Player contain the PlayerConnection class that allows remote debugging and other things across the local network. **This is expected behaviour**, and PlayerConnection is not used on release builds.
– https://issuetracker.unity3d.com/issues/ios-pop-up-message-would-like-to-find-and-connect-to-devices-on-your-local-network-appears-when-app-is-launched-on-ios-14

# 要は
少なくとも `Development build` が有効だと出ます。無効にしても出る場合はサードパーティーのプラグインなどを疑ってみてください。

元記事を表示

[Swift]pod ‘Firebase/Firestore’インストール後のビルドが遅い場合の対処法

## ビルドが遅い
Podfileに`pod ‘FirebaseFirestore’`をインストールしてビルドするとビルド完了に時間がかかります。

## 対処法
結論

“`swift
pod ‘FirebaseFirestore’
“`
ではなく

“`swift
pod ‘FirebaseFirestore’, :git => ‘https://github.com/invertase/firestore-ios-sdk-frameworks.git’, :tag => ‘7.11.0’
“`
とか書けば解決します。

## 理由
理由は[ドキュメント](https://github.com/invertase/firestore-ios-sdk-frameworks.git)に書いてありました。

>Why
Currently the Firestore iOS SDK depends on some 500k lines of mostly C++, which when compiling as part of your Xcode build takes a l

元記事を表示

Core DataのcreateOrUpdateはマージポリシーによって変化する

# はじめに

タイトルを悩んだが適切なタイトルの表現が難しい。Core DataにはcreateOrUpdateは存在しないが、似たようなことをしようとした場合について。

まずConstraintsをidとして設定し、そのConstraintsに従ってcontext.saveを実行する場合を想定。その際にマージポリシーによって更新されたりされなかったりが決まる。

# createOrUpdate実例

## nameプロパティにセットしない場合

### マージポリシーがNSMergeByPropertyObjectTrumpMergePolicy

![スクリーンショット 2021-08-23 17.45.53のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16400/4df7e04d-98d2-866f-e32d-0294e87d14e9.png)

マージポリシーをNSMergeByPropertyObjectTrumpMergePolicyに切り替え、DBをクリアした結果は次の

元記事を表示

RealmのcreateOrUpdateはオンメモリ側のプロパティに値をセットしなければその項目はnilになる

# はじめに

タイトルを悩んだが適切なタイトルの表現が難しい。

RealmSwiftのcreateOrUpdateこと`create(_:value:update:)`メソッドにおいて、`update`パラメータに`.modified`もしくは`.all`を指定した場合かつプライマリキーを持つオブジェクトを更新する場合にその際の挙動について書いておく(後述するがCore Dataとほぼ同じ挙動だった)。

公式のリファレンスに従ってやや冗長に言い換えると、『主キーを持つオブジェクトによって既存を更新する場合は、新しいオブジェクト自体でプロパティが更新される』といったところかもしれない。

https://docs.mongodb.com/realm-sdks/swift/latest/Structs/Realm.html#/s:10RealmSwift0A0V6create_5value6updatexxm_ypAC12UpdatePolicyOtSo0aB6ObjectCRbzlF

> If an object already exists in the Realm with

元記事を表示

OTHERカテゴリの最新記事