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

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

画像ファイルの種類を判別するDataのExtension

Swiftでファイルを取扱う際、`URL`であれば`pathExtension`で拡張子を取得することができます。しかし`Data`からファイルの種類を特定する場合、基本機能だけでは不可能です。[NSDataから判別する記事](https://qiita.com/dondoko-susumu/items/3421926f68d1c3a80909)を書いている方がいたので、これを元に`Data`から画像の種別を特定するExtensionを作成しました。

## コード全貌 (+解説)

“`Swift
extension Data {
enum ImageType: String, CaseIterable {
case jpg
case png
case gif
case bmp

var header: UInt8 {
switch self {
case .jpg:
return 0xff

元記事を表示

AVFoundationでカメラモジュールを作る

# 概要
iOSのAVFoundationを用いて汎用カメラモジュールを作ります。
Vision.frameworkと組み合わせて画像認識したり,リアルタイムビデオエフェクトアプリを作る際にも利用できるように,汎用のモジュールとして作りましょう。いろいろと使いまわせて便利です。

まずはシングルトンのカメラコントローラクラスを作り,そこにAVCaptureSessionのインスタンスを持たせます。これがカメラのセッションを管理するクラスですね。
このAVCaptureSessionに,インプットとアフトプットを接続し,さらにカメラプレビューとなるAVCaptureVideoPreviewLayerを接続すれば準備完了。
AVCaptureSessionをrunしてやればカメラが起動し,AVCaptureVideoPreviewLayerにカメラの映像が表示されます。

# CameraControllerの実装
汎用カメラオブジェクトとして,私はいつもCameraControllerというクラスを作っています。

“`swift:CameraController.swift

cl

元記事を表示

貴方に向いた端末は

#じゃあまず使用方法を教えてくれるかな

|使用方法|Windows|MacOSX(MacBookシリーズ)|iPhone|Android(スマホ)|Android(タブレット)|iPad|ChromeBook|     感想    |
|—|—|—|—|—|—|—|—|—|
|ブラウジング|〇|◎|△|△|◎|◎|◎|広い画面でUIが使いやすいとブラウジングしやすい。性能とかより機動性が大事|
|動画編集|×~◎|◎|△|×~△|×~〇|△~◎|×~△|性能が低かったり画面が小さいと厳しい。|
|電子書籍|△|〇|△|△|◎|◎|〇|ChromeBookを買うときはAndroidアプリ対応機種を買うこと。|
|絵を描く|△|〇|△|×~△|△~◎|〇~◎|×~△|動画編集ほどではないが性能が必要|
|ゲームをする|△~〇|×~△|〇|△~◎|△~◎|〇~◎|×|もしあなたがゲームを楽しみたいのなら機動性や可用性が優れたハイエンドタブレットorハイエンドスマホのどちらかが必要。Windowsはエロゲは揃いが良いらしいがそれ以外(特にゲーム性の良いゲー

元記事を表示

[WKwebview]Monaca+Iosでデバッグビルドしたアプリがスプラッシュ後、画面が真っ白になる

## MonacaでWkwebviewを利用してデバッグビルドしたアプリをiphoneで実行したときに画面が真っ白になってしまう
上記の現象に遭遇したので、そのときの解決策を記載します。

前提条件
・AndroidやcloudIDEでは動作している
・iphoneで動作しない
・WKWebViewを利用している

最初に結論から言うと、HTMLを取得する際のXHRでエラーとなっていました。
iphoneのログを見ても特にエラーは出てませんでした。

3/31に公開されたプラグイン、”Custom Scheme”を追加すると起動するようになりました。

追加方法
CloudIDEの[設定]→[cordovaプラグインの管理]を開き
検索窓に[Custom Scheme]と入れて有効にします。

これだけで起動するようになりました

元記事を表示

CAMetalLayerを実機でもシミュレータでも良い感じにビルドする

時々、とても奇妙なクラスに出会うことがある。
CAMetalLayerはまさにそれで、実機ではiOS8+、シミュレータではiOS13+が必要になる。
これはシミュレータでMetalが使えるようになったのがiOS13~だったからという歴史的経緯によるものだ。
ちなみに内部的には実機とシミュレータでSDKが別れているため、それぞれのSDKごとにavailableが定義されて実現している。

“`objc:実機SDK
API_AVAILABLE(macos(10.11), ios(8.0), watchos(2.0), tvos(9.0))
@interface CAMetalLayer : CALayer
“`

“`swift:シミュレータSDK
@available(iOS 13.0, *)
open class CAMetalLayer : CALayer {
“`

さて、問題はアプリで`CAMetalLayer`を利用するときで、iOS12未満もサポートしているアプリだと次のような挙動になる。

||実機|シミュレータ|
|—|—|—|
|iOS12|○|コ

元記事を表示

SwiftUIでiPhoneのバッテリー残量を表示してみる

# はじめに
たまたまTwitterで#swiftuiを検索していたら見つけたので、ちょっと作ってみました。

Flutter環境構築 – 1(Flutter SDKインストール編)

#はじめに
Flutterの開発環境構築の手順について解説していきます。
今回は「Flutter SDKインストール編」です!
今後「Xcodeインストール編」「Android Studioインストール編」「VS codeインストール編」も随時執筆していく予定です。
さらにその後には「シミュレーターでの動作確認編」「アプリ実行編」なども執筆予定ですのでしばらくお待ちいただけると幸いです。
また今回の解説では、私自身がmacOSを使用しているということもあり、**macOS**での手順解説となります。
Windows・Linuxを使用されている方は別途、Flutter公式サイトの[Windows版](https://flutter.dev/docs/get-started/install/windows)・[Linux版](https://flutter.dev/docs/get-started/install/linux) などをご参照下さい。

#「Flutter SDKインストール編」でやること
本記事では、以下の項目を行います。

– Flutter SDKをインストールする

元記事を表示

MonacaからCustom Schemeプラグインがリリースされてた

Monacaより「Custom Schemeプラグイン」がリリースされていました。
https://ja.monaca.io/headline/#entry_5e835238e78885e357efb480

## これは何?
以下記事の通り、WKWebViewでは、file://スキームのローカルリソース(wwwディレクトリ配下のファイル)にXHRでアクセスすることができません。それを解決するためのプラグインの様です。
https://qiita.com/kishisuke/items/d201790aeae2129ff2e3#file%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%A0%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B920200323%E8%BF%BD%E8%A8%98

「このプラグインを利用することで、WKWebView上においても、ローカルに配置されているリソースへのAjaxアクセスが可能となります。」とあります。実際にインストールしてみると、確かにローカルリソース(wwwディレクト

元記事を表示

1つ以上のProvisioning Profileがインストールできないとは

Provisioning Profileをインストールして、ダブルクリックしたら、

> Failed to install one or more provisioning profiles on the device.
> Please ensure the provisioning profile is configured for this device. If not, please try to generate a new profile.

というエラーが出たときの対処法について。

## 原因

最近Apple Developer上で登録Deviceの整理をしたりしませんでしたか。
あるいはProvisioning Profileの整理など。

登録情報がなにかしら変更されて、
Provisioning Profileの上書きができなくなってしまっている状態です。

## 対処法

すでにMacに保存しているProvisioning Profileを削除して、
再読み込みをしてあげれば良いです。

### 削除すべきProvisioning Profileを知る

元記事を表示

stripe-iosでクレジットカード情報のZIPを非表示にしたい

stripe-iosとは、クレジットカードで決済を行うiOSアプリを作成する上で、
必須と言っても過言ではない素晴らしいSDKです。

![](https://i.imgur.com/LUSf97S.png)

※stripe-ios githubページより。
https://github.com/stripe/stripe-ios

ただ現在、クレジットカードの情報として入力する項目が、

– 番号
– 有効期限
– セキュリティコード(CVC)
– ZIP

の4種類がデフォルトになっています。
ちょっと前までデフォルトはZIP以外の3つだったはずなのに。

**てかZIPってなに!!!!!?????**

と無能な自分は思ってしまったので、これはそんな悩みを解決する記事です。

## ZIPとは

参考: https://www.shineray-ryokou.com/post/zip-code
参考記事をまとめると、以下です。

– ZIP Codeとは、「郵便番号」です。
– 別名、Postal Code。
– ZIP Codeの目的: セキュリティ強化のため。
– 日本の

元記事を表示

Flutterで環境構築からHelloWorld & スプラッシュまでやってみた。【HelloWorld&スプラッシュ編】

お久しぶりです。
多忙な日々を送っていたらもう4月になってました。

今更感がすごいのですが前回の[環境構築編](https://qiita.com/amita/items/2b19bbbecfb48f68673f)からそのまま放置状態だったので
今回は簡単なスプラッシュ〜Helloworldを作成していきましょう。

## 画像を呼び出せるように設定する。
スプラッシュスクリーンで画像を表示しようと思うのでpubspec.yamlにて下記の設定を追加します。

“`pubspec.yaml
flutter:

# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true

# To add assets to your application, add an as

元記事を表示

独自プロパティリスト(plist)を利用する

iOSアプリで独自plist(プロパティリスト)を作って使いたい時のメモ。
※よくある、APIのURLとかその他アプリに特化した設定などに使用
※他の方がわかりやすく書いてくれているのもあるのでメモ程度

## plistの作成
まずはお目当てのplistを作成します。

* File→New→File(cmd+N)で新規作成画面を表示
* Property Listを選択、名前(今回はApp.plist)を決めて作成

作成できたら、適当に値を設定しましょう。
今回はよくあるURLを記載します

## 作ったplistの読み込み
先程作ったApp.plistを読み込むコードが以下になります。

“`swift
var property: Dictionary = [:]
// App.plistのパス取得
let path = Bundle.main.path(forResource: “App”, ofType: “plist”)
// App.plistをDictionary形式で読み込み
let configurations = NSDictiona

元記事を表示

今更ながらReact Nativeに入門してみた①

# はじめに

実は最近、**React Native**なるものに入門してしまいました…。

React Nativeとはなんなのか?といったところの説明から、実際に簡易的なTODOアプリを作成するところまでご紹介できればと思います。

では、早速行ってみましょう〜!

# React Nativeとは何か

React Nativeとは、

**Reactを使って、iOSやAndroidなどのネイティブアプリを開発することができるクロスプラットフォームな開発ができるフレームワーク**です。

公式サイトは[こちら](https://reactnative.dev/)

# なぜReact Nativeで作るか

個人的にメリットだと感じる点はいくつかあります。

1. React(JavaScript)で書ける
2. プラットフォームを意識せず開発できる

普段JavaScriptでバックエンドやフロントエンドを書いている自分にとって、同じような感覚でネイティブアプリも作れてしまうのは非常に魅力的です!

また、本来であればiOSならSwift、AndroidならKotlinな

元記事を表示

Swift4以降のKVOについて

## はじめに
KVOとは`Key-Value Observing`の略で、対象のObjectの値を監視し、変更のタイミングで通知を行ってくれるものです。
とても簡単に特定の値の監視を行うことができますので、今回はその使い方についてまとめてみました。

## KVOの使い方
### 監視の登録方法について
Objectの値の監視を登録するには`observe(_:options:changeHandler:)`を使用します。
各引数の説明を簡単に行います。

“`
func observe(_ keyPath: KeyPath, options: NSKeyValueObservingOptions = [], changeHandler: @escaping (T, NSKeyValueObservedChange) -> Void) -> NSKeyValueObservation
“`

– `keyPath` : `KeyPath`形式で監視したいObjectの値を指定
– `options` : 変更前後、どの値を通知しても

元記事を表示

Xcodeで古いOSバージョンのSimulatorを起動する

XcodeはそのXcodeがリリースされたときの最新のOSバージョンのSimulatorが用意されているが、そのXcodeを使いつつ古いOSバージョンのSimulatorを起動するためには一手間必要なので、その手順をメモしておく

# 環境
Xcode 11.4

# 手順
Xcodeのメニューから Window > Devices and Simulators を選択する

「Simulators」タブを選択することでシミュレータ一覧画面が表示されるので、左下の「+」ボタンをクリックする
![01_デバイスとシミュレータ画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125334/4f023b3f-1793-adf1-389f-3ab3cd71faf8.png)

以下のようなシミュレータ追加画面が表示されるので、「OS Version」をクリックして選択肢を表示する
02_シミュレータ追加画面.png【Swift】CAGradientLayer の透過が濁る

下記ブログの転載です!

【Swift】CAGradientLayer の透過が濁る

iOSにて、**`CAGradientLayer`** を使って透過を含むグラデーションを行った際、濁る現象があったので対応の備忘録。
 

## CAGradientLayer の使い方

*CAGradientLayer* の基本的な使い方については、[こちら](https://developer.apple.com/documentation/quartzcore/cagradientlayer) を参照のこと。
 

## CAGradientLayer に透過を利用すると色が濁る

当然のことながら `CAGradientLayer` はグラデーションを作成するレイヤーです。
「そこで、透過から赤へのグラデーションを作ろう!」と思った時、グラデーションが濁る(中間色がグレーになる)ことに気がつきました。
下記がその時の画像です。

![汚い透過グラデーション](https://rc-code.info/wp-content/uploads/2019/06/alphaGr

元記事を表示

【SceneKit】3Dモデル(アニメーションつき)の再生速度を変更する

# はじめに
アニメーションつき3Dモデルの再生速度をを可変にしたかったので、そのメモ。

# 実行環境
– Xcode 11.2.1
– [MagicaVoxel](https://ephtracy.github.io) 0.99.4
– [Mixamo](https://www.mixamo.com)
– iPhoneXR(iOS 12.1.4)

# やりたいこと
[Mixamo](https://www.mixamo.com)でアニメーションをつけた3Dモデルの、再生速度(テンポ)をゆっくりにしたり、速くしたり、任意に変更してみたかった。

# 再生速度をどこで変更できるか?
読み込んだ3Dモデル(Salsa Dancing.dae)から変換したSCNファイル(salsa.scn)を開いて、ボーンの設定(mixamorig_Hips)を選択すると、右下の「Animation Settings」に「speed」という項目があって、この数値を変更して画面下の再生ボタンを押すと再生速度が変わります(speed:1 が定速)。
![cap01.png](https://qiita-im

元記事を表示

日本で買ったApple Watchで、ECGを使って心電図を撮る夢を見た

タイトルの通り、日本で買ったApple Watch(series4)のECGを有効にしてみました。

“`
この方法は正規の手段ではありません。
2020年3月現在、日本では依然として医療機器認可は下りていません。
“`

**あくまで夢の話です。悪しからず**

※ちなみに脱獄とかそういう類ではありません。

# 結論
できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/80ab4c8e-2643-2136-283f-c9ddc9979f7c.png)
↑販売国コードはJ(Japan:日本)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/1ceca5aa-cbd3-22c0-b50e-99c56f989e47.png)

# アクティベートする方法

アクティベートの手順です。が、**注意点**。

### 注意点
詳しくは後述しますが、ECG

元記事を表示

MVVMについて簡単なまとめ

## Model
アプリケーションで使うデータの基本的な振る舞いやそれに関するロジックを保持
### 具体的には、
– データ構造の表現
– Web APIとのやりとり
– ローカルデータベースなどへの保存

## ViewModel
– ModelとView、ViewController層の仲介役
– Modelからデータを受け取り、それらをUIに反映できるような形で出力
– View、ViewControllerからユーザーのアクション情報を受け取り、Modelに伝え、Modelからデータを受け取りUIに反映できるような形で出力

## View、ViewController

### View
– UIの表示
– データを表示するようなUIの場合、Controllerからデータを受け取り、UIに反映
– ユーザーインタラクションの認知し、必要に応じてUIを更新する。
– もしくは、そのユーザーインタラクションをした結果、何かアクションをしたいとき、ユーザーインタラクションの情報をControllerに伝達する。
– View層はデータ構造に関する一切のロジックを保持しない。

#

元記事を表示

OTHERカテゴリの最新記事