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

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

Cloud Firestore でセキュリティールールを作ってテストするまで

## セキュリティルールとは?

Cloud Firestore のドキュメント DB に関してかけられる制約のことです。これによってサーバ側の認証・承認などのコードを作成する必要がなくなります。また、認証という役割だけではなく DB に対するデータの制約なんかもこのセキュリティルールで決めることができるので、Cloud Firestore の設計においては最も重要な部分と行っても過言ではないでしょう。

## ルールの基本記述

セキュリティールールはデータベース内のドキュメントを識別する `match` ステートメントと、アクセスを許可する `allow` 式で構成されます。また、モバイル・Web の Firestore SDK から送信される全てのリクエストはデータの読み取り・書き込み前にセキュリティルールの確認がされ、ドキュメントパスへのアクセスがルールによって拒否されるとリクエスト全体が失敗します。

“`typescript
service cloud.firestore {
match /databases/{database}/documents {
ma

元記事を表示

CocoaPodsで提供しているLibraryのDeployment TargetはXcode12からは9.0以上に設定しよう

# TL; DR
CocoaPodsで提供しているLibraryのDeployment TargetはXcode12からは9.0以上に設定しよう(タイトルママ)

“`ruby:ライブラリ.podspec
Pod::Spec.new do |s|

s.platform = :ios, ‘9.0’

end
“`

# なぜ?
Xcode12から、**iOS 8を `IPHONEOS_DEPLOYMENT_TARGET` にすることができなくなりました。**

[CocoaPodsでインストールしたライブラリをXcode12でビルドするとDeployment Targetに関する警告が出る
](https://qiita.com/temoki/items/46ad22940e819a132435) に詳しく書いていますが、以下のようなWarningがビルド時に出るようになります。

“`
The iOS Simulator deployment target ‘IPHONEOS_DEPLOYMENT_TARGET’ is set t

元記事を表示

iPadのWebアプリの関門、加速度センサ、audio、videoの制限をJavascriptで突破するまで

# これはなに
* 藝大との合同プログラムで以下のような作品を作った。

* iP

元記事を表示

ios-snapshot-test-caseを快適に運用する5つのtips

iOSアプリ開発においてViewのスナップショット画像を撮影比較する便利なツールがあります。
[ios-snapshot-test-case](https://github.com/uber/ios-snapshot-test-case)

この記事では、[ios-snapshot-test-case](https://github.com/uber/ios-snapshot-test-case)を快適に運用する5つのtipsを紹介します。
またこの記事で紹介するサンプルプロジェクトは[こちら](https://github.com/watanavex/SnapshotSample)にあります。

尚、このツールの概要・導入・活用術については@imaizume さんのこちらのスライドが大変学びが多くお勧めです。

## アニメーションを無効にする

アニメーションがあるとスナップショット画像が安定せず、画像に差分が発生 (XCTest失敗) してしまいます。
そこで、

元記事を表示

iOSアプリのビルドからTestFlightアップロードまでの作業を自動で行う

どうも、現在子供が夏休みのため義実家の神戸に帰省して子供を義母と義祖母とに見てもらいながらぬくぬくリモート勤務を行なっているiOSエンジニアのkaです。
テスト用アプリを配布するためにTestFlightを利用しているのでいっつもポチポチクリックしている作業を自動化します。
現在配属されているプロジェクトはiOSエンジニアは一人なのでまだCIは利用していませんが、少し変更すればすぐに対応できると思います。

#結論
このシェルスクリプトでOKです

“` shell.sh
#!/bin/bash
readonly PROJECT_DIR=”プロジェクトディレクトリ”
readonly WORKSPASE=”ワークスペース名”
readonly SCHEME=”スキーム名”
readonly ARCHIVE_DIR=”アーカイブ作成ディレクトリ”
readonly EXPORT_PATH=”ExportOptions.plistを指定(後述)”
readonly USER=”AppStoreConnectで利用するAppleID”
readonly PASS=”App用パス

元記事を表示

cocos2d-x v4でのプロジェクト作成方法(mac)

#環境
macOS Catalina
cocos2d-x 4.0

#ダウンロード
cocos2d-xをダウンロードする。
https://www.cocos.com/en/cocos2dx/download
ダウンロードしたzipファイルを展開する。

#セットアップ
cocos2d-x-4-1.0というような名前のフォルダができるので、それを任意の場所に移動する。
ターミナルを開き、cdコマンドでフォルダに移動する。
setup.pyを実行する。

“`
$ cd cocos2d-x-4-1.0
$ ./setup.py
“`

setup.pyを実行するとNDK_ROOT等の入力を求められるがとりあえず無視する。
最後に下記のようなメッセージが表示される。

“`
Please execute command: “source /Users/username/.zshrc” to make added system variables take effect
“`

書いてあるコマンドをコピペして実行する。パスは環境によって異なる。

“`
source /Users/

元記事を表示

iOS連写カメラをつくる【最小実装】

指定した間隔で連写するカメラをつくります。

AVCaptureSessionの構成。
PhotoOutputではなく、VideoOutputのフレームを取得します。

“`swift
var captureSession = AVCaptureSession()
var previewView = UIView()
var previewLayer:AVCaptureVideoPreviewLayer?
let videoDataOutput = AVCaptureVideoDataOutput()

let videoDevice = AVCaptureDevice.default(for: AVMediaType.video)
let videoInput = try! AVCaptureDeviceInput.init(device: videoDevice!)

captureSession.beginConfiguration()
captureSession.addInput(videoInput)
videoDataOutput.setSampleBu

元記事を表示

AVCaptureVideoDataOutputSampleBufferDelegateのcaptureOutputでフレームを配列で保持するとサンプルを取得できなくなる問題【対処法】

#13フレームで止まる問題
ビデオフレームを取得して処理できるデリゲートメソッド “captureOutput” の **CMSampleBuffer を配列として保持すると、新しいフレームを取得できなくなります。**
13フレーム取得すると、それより後のフレームは取れなくなります。
**CVPixelBufferやUIImageに変換して配列に保持しても、同様に取得できなくなります。**

“`swift
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
buffers.append(sampleBuffer)
//このように配列(buffers)に保持してしまうと、新しいフレームが取れなくなる
}
“`

ドキュメントによると、
>最適なパフォーマンスを維持するために、一部のサンプルバッファーは、デバイスシステムや他のキャプチャ入力で再

元記事を表示

[Swift] imagePickerControllerとimagePickerControllerDidCancel

UIKitでカメラを実装する際に用いるであろう`imagePickerController`と`imagePickerControllerDidCancel`について

## カメラの実装

“`swift
let picker = UIImagePickerController()
picker.sourceType = .camera
picker.delegate = self

present(picker, animated: true)
“`

記事のメインテーマではないので最低限の実装です。このままだとエミュレータなどカメラがない環境で実行するとクラッシュします。アプリに組み込むならば`isSourceTypeAvailable`でカメラが利用できるか確認すると良いでしょう。

参考
[Apple公式ドキュメント](https://developer.apple.com/documentation/uikit/uiimagepickercontroller/1619144-issourcetypeavailable)

## imagePicker

元記事を表示

ノンエンジニア向けにiOS14のAppClipsでのユーザー体験と機能を伝えるために考慮したい事まとめ

![スクリーンショット 2020-08-18 18.58.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6691/91a3a8c0-ab91-b841-3a41-416b9b151a8e.png)

## はじめに
※ 本記事はWWDC2020で発表された内容を元に作成しております
※ 記事中の画像はWWDC2020で発表された内容を引用させて頂きました
※ 記事中の内容は変更される可能性があります

社内向けにAppClipsの概要・ユースケースや
注意点を説明するためにまとめました。

個人的には罠が多いな…という印象でしたので
ネガティブっぽい要素を理解した上でどんなユーザー体験が提供できそうか
あーでもないこーでもない、をする際などにお役に立てれば幸いです。

## AppClipsで何ができるのか?
アプリが提供している機能の一部を
**本体アプリのインストール不要で**利用できます。

WWDC20ではAppClipsを起動してスムージーを注文したり
[「Spin」](https:/

元記事を表示

APIKitなどのライブラリを使わずに標準のURLSessionで通信処理を実装をする

# ✔️実装パターン①

**RequestとResponseの関係を一対一にする。**

## Protocolでリクエストを作成

“`swift
import Foundation

protocol APIRequest {
associatedtype Responses: Decodable
associatedtype Parameters: Encodable

var path: String { get }
var method: String { get }
var headers: String? { get }
var queries: [URLQueryItem]? { get set }
var body: Parameters? { get set }
}

struct Request {
struct Login: APIRequest {
typealias Responses = UserResponse
typealias Parameters =

元記事を表示

【Flutter】画面サイズに応じて文字サイズを自動で適用する方法

#この記事を読んで習得できること
画面サイズに応じて文字サイズを自動で変えることができるようになる。
結構使うことになるので備忘録として。

#結論
`Text`を`FittedBox`配下に置く。

“`sample.dart
FittedBox(
fit: BoxFit.fitWidth,
child: Text(
“あああああああああああああああああああああああテトラポット”,
style: TextStyle(fontSize: 32),
),
),
“`

![スクリーンショット 2020-08-18 23.42.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389553/51168828-0ce2-6c2d-63e2-9c3da2b14e74.png)

#FittedBoxがなかったら
折り返したり、画面からはみ出たりして、画面がぶっ壊れてしまう。

“`sample.dart
Text(
“あああああああああああああああああああああああテトラ

元記事を表示

Xcode11でObjective-CをMRCで動かす

# 環境

– macOS Big Sur 11.0 Beta
– Xcode 11.6

# Objective-C言語でMRC有効方法

– Xcode11ではARCがデフォルト有効なため、`PROJECT` -> `Build Settings` から `Objective-C Automatic Reference Counting` の値を `NO` に変更する
![スクリーンショット 2020-08-18 23.02.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237942/52fa4f11-e3ca-e19b-6617-14b7552a7e96.png)

– 上記だけだとXcode11では、main.mのmain()でEXC_BAD_ACCESSが発生してしまう。
![スクリーンショット 2020-08-18 23.03.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237942/2611

元記事を表示

Unable to process Runner.app.dSYM at path /Users/…省略…/Runner.app.dSYMが発生した場合の対処

Firebase Crashlyticsを導入してみたけど、うまく取得できないなーと思っていたら、エラーはいていた。

対応
[この手順](https://firebase.google.com/docs/crashlytics/find-missing-dsym?hl=ja)を実施したらエラー無くなりました。

>
1. Xcode でプロジェクトを開きます。
2. Xcode ナビゲータでプロジェクトを選択します。
3. [Build Settings] タブを開きます。
4. タブの上部にある [All] をクリックします。
5. 「debug information format」を検索します。
6. [Debug Information Format] を [DWARF with dSYM File] に設定します。

>
上記の手順が完了したら、アプリを再度ビルドして、Crashlytics が dSYM を検出できることを Firebase コンソールで確認します。

以上

元記事を表示

Swift Package Manager とは

### 概要

Swift Package Manager(以降: SwiftPM) は、Swift コードの配布を管理するためのツールです。また、Swift のビルドシステムと統合されていることにより、依存関係のダウンロード・コンパイルなどが最適化されバイナリ、リソースがプロジェクトで使いやすい形になります。 SwiftPM は既存で存在する依存管理ツールの CocoaPods や Carthage とは違い Apple が OSS とし提供しているツールで、Xcode 9以降(Swift 3.0以降)に含まれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/9b7756ad-eaa0-b5ec-afaf-4847e097815a.png)

### ライブラリを導入してみる

SwiftPM はXcode10 以前は `Package.swift` などに依存先を記述して、コマンドラインからのみビルド・実行しかできませんでした。そのため、サーバサイドや CU

元記事を表示

web側がユニバーサルリンクの対応するときの備忘録

# ユニバーサルリンクの対応【web】

## ユニバーサルリンクの設定についての備忘録

とあるプロジェクトで苦労したユニバーサルリンクについての備忘録を書いていきます。順を追って困った時何をしたか、仕様について書いていこうと思います。

### ユニバーサルリンク(Universal Links)とは
ios9からこの仕組みが利用できるようになりました。
webサイトをクリックしたときにiOSアプリを起動するための手法のことです。ディープリンクの一種です。

### もともとのお客様の求めている仕様はというと
**「アプリを持っているときはアプリへ、持ってないときはAppStoreに飛んでほしい」** というものでした。
URLスキームであれば昔対応したことがあったのですが、ユニバーサルリンクは初めてでした。URLスキームと大して仕様かわらないっしょ!なんて軽い気持ちでいたがそんなことはなく、かなり大変でした。

### 実装するにあたって必要な作業
ここからはios、web、サーバーで協力が必要だった必要作業です

#### apple-app-site-association

元記事を表示

MarketingCloudSDK In-App Messaging概要

# In-App Messagingとは
ユーザがアプリのプッシュ通知を許可していなくてもユーザにメッセージを配信できるアプリ内メッセージのことです。
アプリがフォアグラウンドの状態になる度にアプリ内メッセージが読み込まれ、SMCで作成したメッセージが、アプリのビュースタックの最上部に表示されます。(閉じたメッセージは再度表示されません)

メッセージのテンプレートは以下3つがあります

・***フルページ***
 レイアウトが画面全体に表示される
・***バナー***
 画面最下部または最上部に表示される
・***モーダル***
 画面の一部に全面表示される

上記3つともSMCのContent Builderで設定可能です。
また色や、画像の配置、フォントサイズなどカスタマイズ可能になっています。
※文字のフォントに関してはデバイスのシステムフォントを使用しているため、アプリ側のフォント上書きの実装が必要です。

通知するには***JourneyBuilder***からアプリ内メッセージの送信が必要です。

#実装
以下、公式ドキュメントから参照となります。

1.アプリ内メッセ

元記事を表示

UITableView.tableHeaderViewにNibファイルから設定する場合

UITableView.tableHeaderViewにNibから生成されたViewを設定した時に、高さが0になってしまう現象に遭遇しました。
(何度かはまっている)

## 探してみた

`UITableView tableHeaderView auto layout`でググってみても解決策が出てきませんでした。

以下は試してみましたができなかったものです。
– https://qiita.com/AkkeyLab/items/9864c741b9adb633b321
– https://bugsdb.com/_en/debug/094735585326ee5e720638561d7e4ea6

## 解決方法

– Nib側のautoresizingで上下矢印の`Flexible Height`に印がついているので、外します。(上下矢印が消える)
– 中身について上下左右にAutoLayoutで制限をつけます
– UITableView.tableHeaderViewにNibから生成したViewを入れます
– AutoLayoutエラーが起きていないことを確認します

![スク

元記事を表示

[iOS]Push通知を実装するにあたり、つまずいた点

##前書き
iOSでPush通知を実装しようと奮闘していましたが、
プログラミング初心者の私がつまずいた点をいくつか紹介します

サーバーはニフクラを使用しました

以下の記事を参考に作成しました
[Swiftでプッシュ通知を送ろう!](https://qiita.com/natsumo/items/8ffafee05cb7eb69d815)
[NIFCLOUDのgithub](https://github.com/NIFCLOUD-mbaas/SwiftPushApp)

##つまずいた点
###1,証明書を何度も作り直してしまった
証明書を何度も作り直すことにより、PCが混乱してしまうことがあるので
キーチェーンアクセスから必要のない証明書を削除しましょう

###2,APNs用証明書(.p12)の作り方がわからなかった
以下参照
[iosでプッシュ通知の証明書を.p12形式でexportしようとしたら.p12形式が選択できない問題について](https://qiita.com/akidon0000/items/a2fe1c8880980058b4f8)

###3,AppleDe

元記事を表示

iOS ReplayKitを調べてみた

iOS ReplayKitを調べた内容を纏めてみました。

# 環境

– macOS Big Sur 11.0 Beta
– Xcode 11.6
– 実機 iOS 13.6

# 機能概要

ReplayKitの主な流れ

– ReplayKitはiOS9から追加
– iOS11からアーキテクチャが変更され、RepalyKit2に
– iOS11からコントロールセンターの画面収録機能が追加

ReplayKitには、主に2つの機能がある

## 1. 画面録画

### 1.1. Screen Recording(iOS9〜)
– 実行中のアプリを録画し、プレビューコントローラーから写真や共有で保存
![スクリーンショット 2020-08-17 22.45.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237942/15807d06-96f2-d84e-0e44-0844998cdb28.png)

### 1.2. In-App Screen Capture(iOS11〜)
– 実

元記事を表示

OTHERカテゴリの最新記事