- 1. CoreNFCのFelica(NFC Type F)
- 2. Swift(iOS)でイケてるトースト・バナー・ポップアップを導入する (SwiftEntryKit)
- 3. 【香川県】App Storeのガイドラインに抵触しない「ゲーム依存症対策条例案」対応を実装してみた【Unity】
- 4. iOS, Androidアプリの強制アップデート(サーバーレス)
- 5. iosのgoodreaderでsftpのprivate-keyが読み込めない問題
- 6. 【Swift】Lazyプロパティの使い方に気をつける(ドキュメントの確認は大事)
- 7. UIKitでNeumorphismのデザインを構築するライブラリ
- 8. 意外と簡単、iOSアプリへAppleWatchアプリを繋ぎこみ!!
- 9. [Swift]アクセスレベル
- 10. 【Swift】touchesMovedが実行される最小移動量について【Tips】
- 11. mediapipeをiOSアプリに組み込む
- 12. チェインオブレスポンシビリティをSwift5で実装する
- 13. appiumをiOSの実機で使うまでの手順・方法
- 14. UISearchBarのキャンセルボタンをアニメーション付きで表示したい話
- 15. UITextFieldで文字を入力した後にキーボードをしまう方法
- 16. FirebaseのRemoteConfig使ってみた
- 17. SceneKitで環境マップ
- 18. houstonを使ってrailsサーバーからプッシュ通知を送る時に設定できる値のメモ、あと多言語対応
- 19. 【Swift】[weak self]付のクロージャに親スコープの変数を渡したい!!!
- 20. [swift5]iOSアプリでApp Groupsを実装
CoreNFCのFelica(NFC Type F)
#はじめに
[前回](https://qiita.com/HAL27241/items/a2e04cf1a6ade2f7d2af)までで一応、NFC Type F のリードまではできるようになっていました。
今回はちょっとだけ補足とまとめをしますね。#処理の流れ
##Session
まずは CoreNFC のセッションを作成します。“`swift
let session = NFCTagReaderSession(pollingOption: [.iso14443, .iso18092],
delegate: self)
session?.begin()
“`このとき、Type F 以外にも Type A/B も同時にスキャンしたい時はこんな感じになります。
もちろん、Type F だけで良い場合は `.iso18092` を指定すれば OK です。スキャンして NFC タグが見つかったら、デリゲートが呼び出されます。
Type A/B/F でスキャンしている場合は、TypeA/B と Type F
Swift(iOS)でイケてるトースト・バナー・ポップアップを導入する (SwiftEntryKit)
# SwiftEntryKit
トーストやポップアップ、プッシュ通知のようなビューを簡単に導入できるすごいライブラリ [SwiftEntryKit](https://github.com/huri000/SwiftEntryKit) をこの記事で紹介する。いくつか同様のライブラリ([Toast-Swift](https://github.com/scalessec/Toast-Swift)など)を試したが、SwiftEntryKitが圧倒的にイケてるUIUXを作れると感じた。イメージは以下の通り。
| Toasts | Notes | Floats | Popups |
| — | — | — | — |
| ![toasts_example](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122365/41fbd3bf-5e71-1eb4-982c-d52896800712.gif) | ![notes_example](https://qiita-image-store.s3.ap-nor
【香川県】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日より施行**されるため、開発者としては早急に今後必要な対策が気になるところです。
iOS, 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から、かつて流行したスキューモーフィックデザインに少し回帰したようなデザインといえばわかりやすいと思います。
詳細は下記にあります。
– [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をクリック
Start Serverをクリックするとログが出る画面になるので虫眼鏡ボタンをクリック
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 UIKitclass ViewCo
UITextFieldで文字を入力した後にキーボードをしまう方法
## 今回の記事を書く理由
初学者に多い気がしますが、UITextFieldで文字を入力した後、キーボードが勝手に閉じてくれないのでそのためのコードを書く必要があります。
意外と何回も調べていたりしていたためメモの代わりに書きます。
今回は説明を交えながら書いてきます。
## xcodeでreturnの文字を変更
まずxcodeでreturnの文字を変更することができます。
## ソースを追加
### 全体像
この後説明していきます。
“`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