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

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

【香川県】App Storeのガイドラインに抵触しない「ゲーム依存症対策条例案」対応を実装してみた【Unity】

![タイトルなし3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55365/3f8fe2e6-9d10-511e-d1eb-9cdc8b5ac610.gif)

## はじめに

香川県議会による「**ネット・ゲーム依存症対策条例案**」が話題になっています。

これは18歳以下の子どもがネット・ゲーム依存状態になることを防ぐ目的で、ゲームのプレイ時間を平日は60分(休日は90分)までに制限する項目が盛り込まれています。

問題は、ゲームソフトを提供する事業者等に対しても上記の条例に対して協力する義務を課せられる可能性があります。可決されたら**令和2年4月1日より施行**されるため、開発者としては早急に今後必要な対策が気になるところです。

スクリーンショット 2020-01-24 1.02.50.pngiOS, Androidアプリの強制アップデート(サーバーレス)

# はじめに
[文字列→塩基配列の相互変換ツールをつくってみた(アプリ版)](https://qiita.com/am10/items/3ecac20451c82133e900)でつくったアプリ

* [Mac](https://apps.apple.com/jp/app/dna%E5%A4%89%E6%8F%9B/id1494127578?mt=12)
* [iOS](https://apps.apple.com/jp/app/id1493994947)
* [Android](https://play.google.com/store/apps/details?id=am10.dnaconverter)

これに強制アップデート機能(半強制で抜け道あり)をつけてみました。

特に必要なわけではないですがこの記事([[iOS]アプリに強制アップデート機能を導入すべき理由と、簡単に実装する方法](https://qiita.com/kazu0620/items/f2f6c711c8800d127eb2))をみてやりたいと思い実装してみました。

が!!サーバーを用意するのはめんどくさい

元記事を表示

iosのgoodreaderでsftpのprivate-keyが読み込めない問題

これはmacのssh-keygenで作成されるコマンドの出力が変更されているので、昔作ったキーでは読み込めますが、新しく作ったキーは読み込めません。よって、キーを作り直すか、キー自体を編集しましょう。

“`shell
# 公開鍵、秘密鍵の作成
$ ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/goodreader

# serverにpublic-keyを登録
$ ssh-copy-id -i ~/.ssh/goodreader.pub user@192.168.1.11 -p 22

# ~/.ssh/goodreader
# (private-key)をiosのgoodreaderに持っていく
““

元記事を表示

【Swift】Lazyプロパティの使い方に気をつける(ドキュメントの確認は大事)

普段使っているものの
実は注意しないと予期せぬ動作を起こしてしまう可能性があるものは
意外とたくさんあると感じています。

そういう時
Swiftのドキュメントを見てみると
注意書(NOTE)があったりして役に立ちます。

今回は一つの例として
`lazy`のついたプロパティについて見てみたいと思います。

# Lazy Stored Property(遅延格納プロパティ)とは?

Swiftでは
`lazy`という修飾子を使うことで
最初に利用されるまで
初期化処理を走らなくさせることができます。

これを
Lazy Stored Property(遅延格納プロパティ)
と呼びます。

# どういうときに使う?

下記のような場合に役に立ちます。

– 初期値がインスタンス生成後の状態(他のプロパティなど)に依存している
– セットアップが複雑で重く、使われるまでは生成する必要がない

例えば
下記のようなCalendarクラスを考えてみます。

“`swift

class Calendar {
private lazy var formatter: DateFormat

元記事を表示

UIKitでNeumorphismのデザインを構築するライブラリ

Neumorphism(ニューモーフィズム)は、UIデザインの次のトレンドになるかもしれないと昨年末あたりから言われ出している表現手法です。本当にそうなるかどうかは分かりませんが、実験としてiOS用のライブラリ [EMTNeumorphicView](https://github.com/hirokimu/EMTNeumorphicView) を作ってみました。ここではその実装アプローチについて書きます。

#Neumorphismとは
フラットデザインやMaterial Designから、かつて流行したスキューモーフィックデザインに少し回帰したようなデザインといえばわかりやすいと思います。
EMTNeumorphicView screenshot

詳細は下記にあります。

– [Neumorphism in u

元記事を表示

意外と簡単、iOSアプリへAppleWatchアプリを繋ぎこみ!!

# はじめに
AppleWatchは発売からすでに5年が経過しようとしていますが、
アプリの作成に関する記事、事柄というのはまだあまり世の中に出回っていない認識です。
「今iOS向けに作成しているアプリに、AppleWatchのアプリを紐づけて配信したいけど、どんな手順が必要なんだろう?」
といったことでお困りの方も多いのではないかと多います。

本記事はそんな方向けに、**既存のiOSアプリへAppleWatchプロジェクトを紐づける際の手順・注意点を記載します。**

# 手順
※以下はすでにiOSアプリが存在する前提で話を進めていきますが、
仮にAppleWatch単体で動くアプリを作りたい!という場合にも、概ね参考にはなるかと思います。

## AppleWatchプロジェクトの作成
– なにはともあれ、まずはXCodeを開きます。
– 次に、Xcode上部の `File → New → Target…` を選択します。
下記のようなウィンドウが開くので、[Watch App for iOS App] を選択し、[Next]を押下します。
※ち

元記事を表示

[Swift]アクセスレベル

今回はアクセスレベルについて書いていきたいと思います?
よく変数や関数の前にPrivateといったのを見たことはありませんか?それの事です?

対象はSwift5です。
公式ドキュメントは[こちら](https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html)

##アクセスレベルとは
簡単に言うと宣言した変数やメソッドなどを何処でも使えるようにするか、又は制限した範囲でのみ使用可能にするか設定することです。

全部で5つあり、それぞれ特徴があります。

| アクセスレベル | 説明 |
|:——————–|:——————|
| Private |宣言したコードブロック内でのみアクセス可能(これの中→{}) |
| FilePrivate |宣言されたファイル内でのみアクセス可能 |
| Internal |アプリのモジュール

元記事を表示

【Swift】touchesMovedが実行される最小移動量について【Tips】

連続的なジェスチャーの検知に使われる `touchesMoved` が実行されるタイミングに関して調査してみたので簡単にまとめる。

# 検証環境
– Swift5.0
– iPhone6s(iOS13.3)

# 検証方法
以下の様なコードでコンソールに測定した位置を出力することで検証した。

“`
override func touchesMoved(_ touches: Set, with event: UIEvent) {
let latestTouch = touches.first
let newPoint: CGPoint = (newTouch?.location(in: view))!
// previousPointはクラスのプロパティとして保持
let translation = CGPoint(x: previousPoint.x – newPoint.x, y: previousPoint.y – newPoint.y)
previousPoint = newPoint
print(translati

元記事を表示

mediapipeをiOSアプリに組み込む

# mediapipeとは

Googleの開発しているML推定のパイプラインを簡単に設定できるライブラリ。Windowsを初めiOSやAndroidなどマルチプラットフォームに対応している。

https://github.com/google/mediapipe

mediapipeにはプリセットで手や関節の位置推定や顔の位置推定のモデルがバンドルされていてexampleで確認することができます。
https://github.com/google/mediapipe/tree/master/mediapipe/models

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/91e9bd2a-8d3f-0e6f-f59d-c370e91b6eed.gif)

# iOSアプリにmediapipeを組み込む

iOSアプリにmediapipeで作ったパイプラインを組み込むには、一度フレームワークとしてビルドするかiOSアプリをbazelで管理する必要があります。
ここでは

元記事を表示

チェインオブレスポンシビリティをSwift5で実装する

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

###The Chain Of Responsibility(チェインオブレスポンシビリティ)

####0. チェインオブレスポンシビリティの意義

あるリクエストを処理する複数のオブジェクト(レシーバーまたはレスポンダーという)がある場合、レシーバーを線形リストで繋げてリクエストを処理させるパターンをChain of Responsibilityという。

各レシーバーは次のレシーバーへの参照を持っており、あるリクエストを処理するのに適切なレシーバーが見つかるまで(あるいはレシーバーがなくなるまで)リクエストを次のレシーバーへ渡していく。

このレシーバーを組み合わせた「鎖」をプログラム実行時に動的に作ることもでき、柔軟な処理が可能となる。

例えばiOSにおいては、画面をタップした時の処理がこのパターンによって処理されている。

リクエストを処理するレシーバが1, 2個しかない場合などは、

元記事を表示

appiumをiOSの実機で使うまでの手順・方法

appiumをiOSの実機で動かすまでの手順です。

### 使用環境

使用環境は以下の通りです。
Xcode, command line toolsはインストール済とします。

Mac OS Catalina(10.15.2)
Xcode 11.2.1
appium v1.15.1

### Appiumのダウンロード

公式サイトより環境にあった物をDLする。
http://appium.io/

### Appium側の設定

ダウンロードしたら起動をし、Start Serverをクリック

スクリーンショット 2020-01-23 13.04.00.png

Start Serverをクリックするとログが出る画面になるので虫眼鏡ボタンをクリック

スクリーンシ</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>test</div>
<div class='tag-cloud-link'>WebDriver</div>
<div class='tag-cloud-link'>iOS</div>
<div class='tag-cloud-link'>appium</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/tatetate55/items/dcdc2633cf8ab5ced113'>元記事を表示</a></div>
<h3 id=UISearchBarのキャンセルボタンをアニメーション付きで表示したい話

UISearchBarをタップして編集状態中だけキャンセルボタンを表示したいと、
ちょびっと悩んだので備忘録として書いときます。

↓こんな感じのやつ
![qqytl-ojzlm.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542129/ad6d45db-b35f-7f6e-dc42-8b66beb6c2c0.gif)

# アニメーション無しの場合

showsCancelButtonを使うことで表示の制御はできますが、アニメーションはありません。

“`swift
searchBar.showsCancelButton = true
“`

# アニメーション有りの場合

setShowsCancelButtonを使いましょう

“`swift
searchBar.setShowsCancelButton(true, animated: true)
“`

# 実装例

コピペをこよなく愛する者たちへの贈り物です?

“`swift
import UIKit

class ViewCo

元記事を表示

UITextFieldで文字を入力した後にキーボードをしまう方法

## 今回の記事を書く理由

初学者に多い気がしますが、UITextFieldで文字を入力した後、キーボードが勝手に閉じてくれないのでそのためのコードを書く必要があります。

意外と何回も調べていたりしていたためメモの代わりに書きます。

今回は説明を交えながら書いてきます。

## xcodeでreturnの文字を変更

まずxcodeでreturnの文字を変更することができます。

スクリーンショット 2020-01-22 14.11.32.png

## ソースを追加

### 全体像

この後説明していきます。

“`swift
class ViewController : UIViewController, UITextFieldDelegate {
@IBOutlet var textFiel

元記事を表示

FirebaseのRemoteConfig使ってみた

#はじめに
最近になってFirebaseのRemoteConfigを使う機会があったので、
このサイトに残しておこうかと思います。
ほぼ、ドキュメントに通りなので、
気になる方だけ読んでいただければと思います。
#RemoteConfigとは
アプリをアップデートすることなく、アプリの動作や外観を変更できる機能になります。
行なっている事としてはRemote Config Serverから設定されているパラメーターを取得して、
その値によって動作や外観を変更します。
[RemoteConfigとは](https://firebase.google.com/docs/remote-config?hl=ja)

#環境
Xcode 11.3
swift 5
Firebase 6.15.0
#FireBaseのインストール
インストール手順は省きます。
以下、公式ドキュメント
[Firebase を iOS プロジェクトに追加する](https://firebase.google.com/docs/ios/setup?hl=ja)
#RemoteConfig設定
[Remote Config

元記事を表示

SceneKitで環境マップ

“`objc

SCNScene *scene = [SCNScene sceneNamed:@”art.scnassets/my_scene.scn”];

// 背景に表示用
scene.background.contents = @[@”art.scnassets/px.png”, @”art.scnassets/nx.png”, @”art.scnassets/py.png”, @”art.scnassets/ny.png”, @”art.scnassets/pz.png”, @”art.scnassets/nz.png”];

// ライティング用
scene.lightingEnvironment.contents = @[@”art.scnassets/px.png”, @”art.scnassets/nx.png”, @”art.scnassets/py.png”, @”art.scnassets/ny.png”, @”art.scnassets/pz.png”, @”art.scnassets/nz.png”];

// モデル
SCNNode *m

元記事を表示

houstonを使ってrailsサーバーからプッシュ通知を送る時に設定できる値のメモ、あと多言語対応

#1. 概要
“houston”というgemを使って、ruby on railsのサーバーからiOSアプリにプッシュ通知を送るようにしました。

今回は本文・SE・バッジ数だけの一番シンプルな通知を実装しましたが、[GitHubのUsage](https://github.com/nomad/houston)を参照すると、通知データに対して他にも設定できる項目があるようです

将来細かい設定が必要になった時に忘れないように、調べたことを書いておきます。

#2. メモ

“`ruby:Usage.rb

require ‘houston’

# 定数の宣言はメソッド外でする
APN = Houston::Client.development
APN.certificate = File.read(‘/path/to/apple_push_notification.pem’)

# 通知を送りたいデバイスのdevice tokenを代入
token = ‘

元記事を表示

【Swift】[weak self]付のクロージャに親スコープの変数を渡したい!!!

小ネタです。

UI更新処理ってメインスレッドでやらないといけないので、
DispatchQueue.main.async {[weak self] in …… }の中に書くじゃないですか?
このときに、関数内のスコープを持った変数をクロージャに渡したい、ということがありました。

“`swift
class ViewController {
func soramissionLoaded() {
var word = “これを渡したい”
DispatchQueue.main.async {[weak self] in
//どうしたらいい?
}
}
}
“`

# 正解
先に正解を書くと、

“`swift
class ViewController {
func soramissionLoaded() {
var word = “これを渡したい”
DispatchQueue.main.async {[weak self, word] in

元記事を表示

[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

元記事を表示

OTHERカテゴリの最新記事