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

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

[swift5]iOSアプリでApp Groupsを実装

アプリ間でのデータ共有を実装する方法を紹介します!
本ページでは、App Groups を利用します。

## 動作環境

| 対象 | バージョン |
|—|—|
| iOS | 13.3 |
| macOS | Catalina 10.15.2 |
| Xcode | 11.3.1 |
| Swift | 5.1.3 |

## データ共有機能(App Groups)の実装

アプリ間でデータを共有するため、アプリは2つ作成します。

1. データを表示・変更するアプリ
2. データを表示のみするアプリ

1, 2 で同じデータを表示します。

## アプリの設定(2つのアプリ共通)

2つのアプリで設定してください。

1. 「Signing & Capabilities」から「App Groups」を追加する
2. グループ名を追加する

### ファイル作成(2つのアプリ共通)

– Storyboard
– ここでは、”AppGroups.storyboard” とします
– ViewController.swift
– ここでは、”AppGroup

元記事を表示

[swift5]iOSアプリでカメラ機能を実装

iPhoneに入っているカメラアプリのようなカメラを呼び出す機能を実装する方法を紹介します!
本ページでは、UIImagePickerController を利用します。

自分でカスタマイズしたカメラを実装したい場合は、UIImagePickerController ではなく AVFoundation を利用する必要があります。

## 動作環境

| 対象 | バージョン |
|—|—|
| iOS | 13.3 |
| macOS | Catalina 10.15.2 |
| Xcode | 11.3.1 |
| Swift | 5.1.3 |

## カメラ機能の実装

本ページでは、2画面用意します。

1. ボタンを用意します
2. ボタンを押下すると、カメラ画面に遷移します
3. 写真をとり、写真を利用を押下すると、写真が保存されはじめの画面に戻ります

### Info.plistの修正

Info.plist に2つ項目を追加します。

– Privacy – Camera Usage Description
– カメラを呼び出すために追加する
– P

元記事を表示

【swift】画像のデータサイズを取得し、バリデーション を実装する

#方法
“`swift

var image:UIImage? = … //画像を読み込む

//
let imageData:Int = NSData(data: image.jpegData(compressionQuality: 1)!).count

//※画像のデータサイズをKBで表示。
let dataToKB = Double(imageData) / 1000.0

//バリデーションを実装。(10MB以下のみ保存可能)
if dataToKB < 10000.0 { print("画像を保存できます") //画像をimageViewに描写させたりする self.imageView.image = image } else { print("画像データが過大です。10MB以下可能です") } ``` #詳しく ##`jpegData(compressionQuality: CGFloat)` ```swift func jpegData(compressi

元記事を表示

プロキシーパターンをSwift5で実装する

※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。

###The Proxy(プロクシ)

####0. プロクシの意義

ある特定のオブジェクトに直接アクセスさせず、間接的にアクセスするようにするパターンをプロクシパターンと言う(Proxyは代理というような意味)。

具体的には、
・ バーチャルプロクシ
・ リモートプロクシ
・ プロテクティブプロクシ
の三種がある。

注意点は、プロクシを経由せずに直接目的のオブジェクトにアクセスできるような抜け道を用意してはならないという事である。それではプロクシパターンの意味がなくなってしまう。

####1. Virtual Proxy(バーチャルプロクシ)

オブジェクト生成にコストがかかる場合、その生成のタイミングを本当にオブジェクトが必要になるまで遅らせるパターンの事を言う。

Swiftでは、変数の前に`lazy`修飾詞をつける事で比較的簡単に実現できる。

“`swift:ImagePro

元記事を表示

【小ネタ】環境ごとにアプリアイコンを変更する方法【iOS】

# モチベーション
「どれを確認すればよい?」
検証端末に複数の環境のアプリをいれて動作確認をするというのはよくある話だと思いますが、確認する役割の人や確認依頼者がわかりやすいようにする。

– 確認者がアプリ名は分けているけど時々間違う
– 依頼者がスキーマ分けているのに時々間違う

というようなことを防ぐ。

# 対象

– 開発フェーズがある程度進んでしまっている *1
– `Build Config`で環境分けはしている
– リソース管理ライブラリは使ってない
– `Assets.xcassets`ファイルでアイコン定義をしている

対象がちょっと限られていますが、同時に付け加えられるなら可能です。
新規開発の場合はリソース管理系のライブラリの導入を検討した方が良いかと思います。

*1 リソース管理ライブラリなどを適用するには総合的に現実的ではないという状況

# やりかた
1.`Assets.xcassets`に必要な環境のイメージセットを`New iOS APP icon`を選択し追加

*New iOS App icon*
![スクリーンショット 2020-01-21

元記事を表示

【swift】画像を指定した比率でトリミングする【TOCropViewController】

#使用するライブラリ

[TOCropViewController](https://github.com/TimOliver/TOCropViewController)
>ユーザーがUIImageオブジェクトの一部を切り取ることができるiOS用のView Controllerを提供します。

#目標
1.ボタンをタップすると、`UIImagePickerController`が起動する。
2.トリミングしたい画像をpickし、`UIImagePicker`を閉じる。
3.配置した`UIImageView`と同じ大きさにトリミングできる`CropViewController`が起動する。
4.トリミングを完了すると、`UIImageView`にトリミング編集した画像が反映する。

(実装例)
![20200121_214939.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376004/be1ec78e-1a6a-0489-444f-efef385feac5.gif)

#サンプルコード

“`sw

元記事を表示

【SwiftUI】@Environmentを支える機能

# 基本的な記法

“`swift:sample.swift
@Enviroment(.\accessibilityEnabled) var accessibilityEnabled
“`

# 関数定義

“`swift:definition.swift
@propertyWrapper public struct Environment : DynamicProperty {
@inlinable public init(_ keyPath: KeyPath(
@inlinable public var wrappedValue: Value { get }
}
“`

# なぜ `@Enviroment` のように書けるのか
Swift5.1で追加された@propertyWrapperというattributeを型に付けると、@Environmentのようにアノテーションぽい記述を行うことができます。このマークを付けると、値のget set する際にpropertyWrapperをつけた型を経

元記事を表示

iOSアプリ、Adhoc配信でもプッシュ通知は飛ばせます!飛ばないときのトラブルシューティング

## はじめに

今回、社内用にAdhocでプッシュ通知を伴うアプリをリリースしました。
結構証明書周りや署名、ビルド方法などが難しく、「Adhocではできない」と書かれたブログ記事も多くあったため、
ここに確認すると幸せになれる項目を書きます。
結論としては、Adhocでもプッシュ通知飛ばせます。
順不同に並べるので、不安なところを参考にしていただけたら幸いです。

## 前提

– サーバサイドからFCMへプッシュを投げて、iOSで通知を受け取る流れ
– すでにWebのプッシュ通知は実装済みで、サーバサイド→FCMへの連携はできている状態
– xcode Version 11.2.1
– enterprise apple developer program ではなく、apple developer program に登録しています

## ビルドする target の内容をチェック

– TARGETS の Signing & Capabilities タブで、Background Modes の Remote notifications にチェックがついていること
– Push

元記事を表示

UIAlertController の title と message のパターン

毎回 title と message のどっちを設定するとどうなるかを忘れるので表にしてみました

style = actionSheet のときに `title あり/message = nil` と `title = nil/message あり` のパターンで後者の方がフォントが太くなるあたりが見どころです

## UIAlertController.Style.alert

| | not empty message | empty message | nil message |
|:-:|:-:|:-:|:-:|
| not empty title |![alertTextText](https://raw.githubusercontent.com/funnything/AlertPattern/master/outputs/alertTextText.png)|![alertTextEmpty](https://raw.githubusercontent.com/funnything/AlertPattern/master/outputs/alertTextEmpty.p

元記事を表示

UITableViewでセルを選択不可にする方法

## 環境

swift 5
xcode 11.3

2020年1月20日現在

## 動機

簡単なのですが、すぐに忘れてしまうので。

メモメモ

## 方法

selectionがNoneになっていれば選択することができなくなります。

![スクリーンショット 2020-01-20 21.35.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270808/f03b0929-a6fc-48bf-f0b8-5bb4a9ddaf73.png)

![スクリーンショット 2020-01-20 21.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270808/0ad2fec8-8581-53b7-516d-9ad5a3c5edbe.png)

## コードだと

コードだと以下のように書くようです。

“`swift
self.tableView.allowsSelection = false
“`

元記事を表示

signin with apple 実装するときの注意点まとめ

# 対応バージョン

iOS13以上、iOS13以下は対応しないため、別々のデザイン準備する必要があります。

# 取得できるユーザーデータ

– email
– ユーザーの選択でランダム生成されたメール渡せる可能性があります
– full name
– ユーザーの編集可能で、apple id登録された名前とは限らない

https://developer.apple.com/documentation/authenticationservices/asauthorizationappleidcredential?language=objc

# sign in 初回と2回目の違い

sign in 初回はメールと名前のユーザーデータ取れますが、その以後sign inする場合は取得できなくなります。
初回取得成功後key chainなどに保存し、登録成功後削除したほうが一番無難。

“` swift
let request = ASAuthorizationAppleIDProvider().createRequest()
request.reques

元記事を表示

ダークモードとは何か?各OSの設定方法からiOS/Androidアプリの対応方法まで

# ダークモードとは?

OSシステムレベルで設定可能な、画面表示色の設定です。
![light_and_dark.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277107/f057c91a-a01a-d235-7987-c1ff39a6d9f4.png)
Light Modeが従来通りの白基調な画面、**Dark Modeは黒基調な画面**です。

# 何が明るく/暗くなるの?

特定の何に適用すべきという法則は無いようですが、**閲覧者に見せたいコンテンツ以外のウィンドウ枠、背景など**に対して適用されることが多いようです。

もちろん、メインコンテンツ(テキスト色など)も背景色に応じて調整する必要があります。

# ダークモードにすると何がいいの?

* 目へのダメージを抑える
* 眩しい画面を見ることによる**ドライアイ**、**頭痛**、メラトニン抑制による**不眠**など
* バッテリーの持ちが長くなる
* OLEDスクリーンで輝度が100%の場合、DarkはL

元記事を表示

Googleで検索結果に戻ったときの「他の人はこちらも検索」を非表示にする方法

Google の検索結果に戻ってきたとき、リンクの下に “他の人はこちらも検索” と表示されてリンクが動いてしまうのを防ぐ方法です。Chrome, Brave, Firefox, Safari に対応しています。ただしモバイル版では制約上不可能なようです。
ちなみに英語版では “People also search for” と表示されるようです。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155587/3a764b58-6f9f-f69e-6aa5-9f65175b397d.png)

# Chrome / Brave
以下の拡張機能を追加するだけです。
[No Search For – Chrome ウェブストア
https://chrome.google.com/webstore/detail/no-search-for/gfilnngoaebchcnkmppbnijaakeccdjc](https://chrome.google.com/webstore/detail/no-search-fo

元記事を表示

Swift で 画像 (UIImage ) の リサイズ と トリミング (切り抜き) を一度の処理で行う。

# 0.はじめに

Swift で画像の切り抜きとリサイズを一度の処理で行いたかったので、やってみました。

以下の記事を参考にさせて頂きました。

* [UIImageのリサイズ方法と注意点 \- Qiita](https://qiita.com/ruwatana/items/473c1fb6fc889215fca3)
* [【Swift4】UIImageで画像のサイズ変更、指定した倍率で拡大/縮小 \- Qiita](https://qiita.com/zlq4863947/items/4b016824cf152bc2a769)
* [Swift3\.0で画像の切り抜き \- Qiita](https://qiita.com/takabosoft/items/391b7593f0b9ef7d77a5)
* [\[Swift\] 画像のサムネイル生成(縮小&切り抜き) \- Qiita](https://qiita.com/taku/items/fb44d0bf10509d977bc0)

感謝 ♪♪♪

?‍♂️?‍♂️?‍♂️

# 1.コード

今回は、画像を 0.5 倍にリサ

元記事を表示

CustomCellに置いたButtonの選択状態によってTableViewの処理を変える

タップしたButtonが乗ってるCellの情報をFirestoreに保存したい。
その想いから、こんなややこしい(?)記述方法になってしまいました。ご了承下さい。
Firestoreの部分は他記事にDelegate!
#開発環境
・Xcode 11.3
・Swift 5.0
#UIButtonのextensionを作る
“`swift:CustomCell.swift
extension FaveButton {
func switchAction(onAction: @escaping ()->Void, offAction: @escaping ()->Void) {
switch self.isSelected {
case true:
//ONにする時に走らせたい処理
onAction()
case false:
//OFFにする時に走らせたい処理
offAction()
}
}
}
“`

#But

元記事を表示

[Swift] IntやDoubleなどの数字オブジェクトを2倍にする関数でジェネリクスを使ってみた

# 概要

業務でInt型やDouble型を単純に2倍する関数を作りたい時に戸惑いましたのでググってみました。

“`swift

/// これを型ごとに作ると、関数が増えてしまって冗長なので書きたくない
func multipleValue(_ value: Int) -> Int {
return value * 2
}

func multipleValue(_ value: Double) -> Double {
return value * 2
}

func multipleValue(_ value: CGFloat) -> CGFloat {
return value * 2
}

multipleValue(2) // 4
multipleValue(3.14) // 6.28
}
“`

これをクールに一つの関数にまとめたいと思いました。
さてどうすればいいのかを考えるのが今回のテーマです。

## ジェネリクスを使う

すぐに

元記事を表示

React Native体験入学【環境構築】【標準コンポーネントの使い方】【リリースまで】

最近までNext.jsの入門してブログシステム作ってたけど、どうもwebpack周りで詰んでしまったのでもう少し実戦練習できることをやってみようと思ってReact Nativeを始めることに。あまりNext.jsに向いてないブログシステム作るより、ガッツリReact使いまくるアプリ制作でコーディングしまくりたい。

とりあえずReact Nativeの基本情報と、環境構築、ドキュメントやリファレンスの流し読み、そして簡単なアプリを作ってみようと思う。予定は簡単な「ダイス」アプリ。できればリリースするところまで経験しておきたい。

##目次(暫定)

1. **環境構築**
1. React Nativeとは(クロスプラットフォーム開発環境)
1. Reactとは(UI構築のためのJSライブラリ)
1. Expoとは(OSに依存しないビルド環境)
1. 統合開発環境
2. Xcode
3. Android Studio
1. 開発ツールのインストール
2. Homebrew
3. No

元記事を表示

【Swift】UICollectionViewCompositionalLayoutを使って数種類のカスタムレイアウトを実装してみる

# はじめに
WWDC2019で新たに発表された、UICollectionViewのレイアウト手法である**UICollectionViewCompositionalLayout**を使っていくつかカスタムレイアウトを作ってみました。
※ iOS13以降の環境にて、今回作成したサンプルを動かせます

# UICollectionViewCompositionalLayoutとは
詳細については、WWDCのセッションを参考にして頂ければと思いますが、ざっくり言うと、

– iOS13から**UICollectionViewCompositionalLayout**が登場したことで、**UICollectionViewFlowLayout**や**UICollectionViewDelegateFlowLayout**に加えて、UICollectionViewのレイアウトを定義する方法が1つ増えた。
– iOS13から**UICollectionViewDiffableDataSource**が登場したことで、**UICollectionViewDataSource**を準拠して行なってい

元記事を表示

FirebaseのRemoteConfigを使ってキャンペーンのようなモーダルを表示させたい[RemoteConfig応用編]

##最初に
このQiita記事は、RemoteConfig初級編の応用編として書かれているため、[RemoteConfig初級編](https://qiita.com/mototaji/items/3e293f31f9bbf388e216)がまだの方はこちらからお読みください。

##やりたいこと
応用編では、初級編でやったことを用いてLabelと画像の値を変更してモーダルで表示することをします。
完成形の画面はこんな感じだよ!

##RemoteConfigの設定
画像を参考にしながら、FirebaseのRemoteConfigの画面から、任意のパラメータキー(card_key)デフォルト値に以下のjsonを入力します。

“`json:RemoteConfig
{
“title”: “企画のタイトル!!!”,

元記事を表示

FirebaseのRemoteConfigを使ってLabelの値を変更しよう![RemoteConfig初級編]

##開発環境
Xcode: Version 11.3
実機iPhone: iOS 13.1
Firebase: Version 6.14.0
FirebaseRemoteConfig: Version 4.4.6

##やりたいこと
FirebaseのRemoteConfigを使ってLabelの値を変更したい。
初級編では、RemoteConfigを利用してViewControllerのLabelを変更してみようということで以下の画像のように、「Firebase 勉強中!!!」の文字を実際にRemoteConfigを利用して表示させていきます。

**RemoteConfig応用編**
応用編では、RemoteConfigを利用してモーダルの値を変更してモーダルで表示することをやります。
[応用編はこちらをクリック!](h

元記事を表示

OTHERカテゴリの最新記事