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

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

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

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

# ディープリンク(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を設定しその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をクリアした結果は次の通り。

“`swift
@objc(Person

元記事を表示

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

元記事を表示

flutterで端末の気圧センサーを用いたpluginを自作して公開してみた

#

# 下準備

まずこれを呼び出します。

`flutter create –template=plugin –platforms=android,ios -a java flutter_barometer`

テンプレート作成時に追加されている、 `example` ディレクトリで

`flutter build apk`

`flutter build ios –no-codesign`

を実行し、事前にアプリをビルドします。

# 作成

### Android
Android Studioで `[プラグイン名]/example/android/build.gradle` を選択してプロジェクトを開きます。

サイドバーにある`[プラグイン名]/java/[パッケージ名]/[プラグイン名]Plugin` というファイルに実装していきます。

### iOS

Xcodeで `[プラグイン名]/example/ios/Runner.xcworkspace` を選択してプロジェクトを開きます。

サイドバーにある

`Pods/Development Pods/hel

元記事を表示

[SwiftUI]UIActivityIndicatorViewを作成する

## 投稿の経緯
個人開発中のアプリでインディケーターを作成したので備忘録。

## 環境
Swift version 5.4.2
Xcode version 12.5.1

## 完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/c35b9b9b-05e5-0240-1b17-e5440be21d0c.png)

表示されているViewの上に`opacity`をつけた背景と画面中央にインディケーターを表示させます。

## インディケーターの作成
“`swift
import Foundation
import SwiftUI

struct ActivityIndicator: UIViewRepresentable {
func makeUIView(context: UIViewRepresentableContext) -> UIActivityIndicatorView {
UIActiv

元記事を表示

UICollectionViewを簡単に使うためのテンプレート

## 環境
swift version5.4

## コード
### 下準備

“`swift
import UIKit

extension UIView {

/// クラス名を文字列で返す
static var className: String { String(describing: Self.self) }
}
“`

“`swift
import UIKit

extension UICollectionView {

func register(type: T.Type) {
let nib = UINib(nibName: T.className, bundle: nil)
register(nib, forCellWithReuseIdentifier: T.className)
}

func dequeueReusableCell(withReuseCell type: T.Type,

元記事を表示

悪い継承はどんな継承か(未完成)

※ずっと下書きに入っててもったいないのでとりあえず公開

「継承ってあまりよくないよねー」と言ったような言説をここ数年で見かけるようになりました。
私も大体5年前くらいに継承という仕組みに対して失望しました。
とはいえ現状多くのプログラミングでは継承を多用しているはずで、継承=悪というのは乱暴だとも言えます。
ではどういう継承が悪いのか、継承のどういうところが悪いのかという話になると思いますが、これをスッと答えられる人は多くないのではないでしょうか?

私も言語化しづらいなーと思っていたのですが、普通にググってたら書いてたいたし、なんなら大昔からそんな事言われていたようなので、ざっくり調べました。
参考程度にどうぞ。
細かい話はしません、私には荷が重い。

## 前提として押さえておきたい文脈

これはあくまで「自分たちで作ったクラスを継承する」みたいな文脈です。
SDKやLibraryなどで慎重に設計されたクラスを継承することに対して「良くない」という声は上がっていない認識です。
そもそもそれ無いとなんもできません。

私が得意なiOSだと例えばBaseViewControllerみ

元記事を表示

[iOS] [Swift] クエリ文字列(URLパラメーター)の作成

## 辞書 → クエリ文字列(URLパラメーター)にコンバート

“`swift
extension Dictionary where Key : StringProtocol, Value : StringProtocol {
var queryString: String {
var components = URLComponents()
components.queryItems = self.map {
URLQueryItem(name: $0 as! String, value: String(describing: $1))
}
return (components.url?.absoluteString)!
}
}
“`

## 使用法

“`swift
let queryDic = [“key1”: “value1”, “key2”: “value2”]
print(queryDic.queryString)
“`

元記事を表示

iOSの実機でビルド実行するとProvisioning profileが証明書に含まれていないとのエラーが出る場合の解決方法

こんにちは。[もぐめっと](https://mogmet.com)です。

本日の投稿は問題解決tips系の投稿です。

## 結論

iOS実機をビルドしてデバッグしようとするとprovisioning profileがうまくあたらなくてビルドできないので、端末の証明書を再発行するとうまくいく

## エラー内容

最近Flutterをやっているのですが、別端末でiosを実行しようとすると下記のようなエラーがでました。

“`
error: Provisioning profile “iOS Team Provisioning Profile: com.mogmet” doesn’t include signing certificate “Apple Development: Mog Met (XXXXXXXX)”. (in target ‘Runner’ from project ‘Runner’)
“`

ちゃんとAutomatically manage signingにチェックが入って組織も問題なさそうなのにこのエラーが出ました。

![image.png](http

元記事を表示

[iOS]UICollectionViewCompositionalLayoutを使うと横スクロールのUIScrollViewDelegateが取れない問題

間違ってたらすいません
UICollectionViewCompositionalLayoutってそもそも「縦スクロール内に横スクロール」は可能だけど、「横スクロール内に縦スクロール」みたいな構成はできないんですね。
できないんですよね?
たぶんできない。

それで、UICollectionViewCompositionalLayoutを適用したUICollectionViewのdelegateを設定してUIScrollViewDelegateを取ろうとすると、縦は取れるけど横が取れない。
まあ何となく取れない気がしますよね。

問題なのは横スクロールのUICollectionViewを作りたかった場合で、UICollectionViewCompositionalLayoutを使いたい場合。

そもそもそんなシーンどれだけある?と思いますが結構あります。
1つはpagingをしたい場合です。
UICollectionViewのpagingはマジで複雑だし微調整で数日掛かります。できればUICollectionViewCompositionalLayoutでpagingしてしまいたい。

元記事を表示

BitriseでGoogleService-info.plistをDLし、slackに通知を送る

#やること
1.GoogleService-info.plistをダウンロードする
2.Bitriseからslackに通知を送る

#環境
Swift 5.4
Xcode 12.5

#アプリ作成
今回はGoogleService-info.plistを使用するので、LifeCycleは「UIKit App Delegate」を選択してください。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409860/bcf67dcf-f190-de98-d9bc-77a4be20fcbb.jpeg)
作成後GoogleService-info.plistでBundle IDが必要になります。

##GoogleService-info.plistをアプリに追加
[firebase](https://firebase.google.com/)にアクセスし、プロジェクトを作成します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4098

元記事を表示

OTHERカテゴリの最新記事