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

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

ARKit 4のLiDAR Depth API

iOSデバイスで初めてLiDARスキャナを搭載したiPad Proの発売と同時にリリースされたARKit 3.5では、LiDARを利用してreconstractionした3Dメッシュは得られたが、その計算に用いられているはずの**デプス(深度)データにはアクセスできなかった**。

![rectangle_large_type_2_8e10a807ae6bf848e5d9f98228be7602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3180/db1dff55-a184-98b2-085f-7fe73ca535e8.png)

その後発表された**ARKit 4 / iOS 14(/ iPadOS 14)でようやく、LiDARで計測したデプスを取得できるように**なった。従来のデプスと区別するため、「シーンデプス(Scene Depth)」とも呼ばれているようだ。

## LiDARデプスの取得方法

LiDAR由来のデプスデータは、`ARWorldTrackingConfiguration`利

元記事を表示

アイディアのタネになる面白い技術の活用法【iOS】【ハッカソン】

# はじめに
はじめまして、じんむです。DeNAでiOSエンジニアをしております。
プライベートでは**個人開発**や**ハッカソン**が好きで、楽しいを届ける系ものづくりをしています。

プロダクトのアイディアを出す時、需要のあることや実現したいことから考える人間ですが、**技術の引き出し**があると、**技術の意外な組み合わせ・使い道**でアイディアがドンドンふくらんだり、**実現できるかの判断**が即座にできたりします。

私事ですが、4年連続、通算8回出場しているアイディア当日型のハッカソン[SPAJAM](https://spajam.jp/final-result)の本戦で優勝しました、わあい。そこで、これまで触れてきた**面白い技術**を、約24時間ノーアイディアからチームメンバーと共に実装した**プロダクトでの活用例と共に紹介**し、技術の引き出しをざざざッと整理して共有したいと思います?

*この記事は技術の楽しい活用例メインで紹介するため、プロダクトの目的や内容の説明はあまりしません。気になる方はリンク先の動画や[じんむのLP](https://koooootake

元記事を表示

CAGradientLayerでグラデーションを描画する

CAGradientLayerを使用してUIViewにグラデーションを描画する機会があったので
実装方法を軽くまとめてみました。

# 前提知識
startPoint・・・グラデーションの開始地点
endPoint・・・グラデーションの終了地点

# startPoint, endPointを指定しない場合
“`
import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.

setGradation()
}

private func setGradation() {
let gradientLayer = CAGradientLayer()
     // グラデーションさせる範囲をUIViewControllerのviewのサ

元記事を表示

iOSアプリのCI(CircleCI)を改善してみた話

この記事は、Classi Advent Calendar 2020 12/21担当の記事です。

Classi プロダクト開発部 iOSエンジニアの@yokoyanです。

モバイルアプリチームでは、CIの運用が、初期に構築したメンバーが退職していることもあり、ブラックボックスになりかけていたので、整備を起こったところ、あまり事例がなさそうな方法で改善したので、iOSエンジニアにも役に立ちそうなネタが出来たかなと思ったので、それを紹介したいと思います。

# なぜ、改善することになったか
きっかけは、Carthageのセグメンタルエラーが発生する事象への対応です。
[Carthage crashes with Segmentation Fault: 11 · Issue #2760 · Carthage/Carthage](https://github.com/Carthage/Carthage/issues/2760)

このエラーは、Carthageのバージョンを0.35.0以上にあげれば、解消されます。

CircleCIは、Carthageがデフォルトでインストールされている

元記事を表示

iOSで効果音を鳴らす

現在公開中のシューティングゲーム制作にあたり、効果音で苦労したのでここに記録を残します。

# 評価の流れ

– AVAudioPlayer(BGMで採用、効果音では却下)
– 動作が重い
– シューティングゲームのような短時間で様々な効果音を鳴らすような用途には向いていない
– SystemSoundID(却下)
– 動作は軽い
– 再生するとBGM(AvAudioPlayer)がフェードアウトするケースがある
– OpenAL(採用)
– 純正Musicアプリと交互に利用すると効果音が再生されなくなるケースがあった
– 再現性は不明

# BGM再生

AVAudioPlayerの利用方法は色々な方が分かりやすい記事を残しているので本記事では割愛します。

# 効果音再生

以下の流れで素材の準備と実装を行いました。

## mp3をcafに変換

mp3のままでは利用できないので下記コマンドでファイル変換します。


afconvert -f caff -d ima4 input.mp3 output.caf
元記事を表示

3年以上放置していた個人で公開中のiOSアプリを再度申請した話

ある日のこと、Appleから1通の通知が・・・
![スクリーンショット 2020-12-22 20.47.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29418/87277e4e-9785-77e9-970c-d2418b42de67.png)

DeepL翻訳
>2016年9月1日、意図した通りに機能しなくなったアプリ、現在のレビューガイドラインに従っていないアプリ、または時代遅れのアプリを評価して削除する継続的なプロセスを実施することを発表しました。
お使いのアプリがかなりの期間更新されていないことに気付きました。

[ハッシュタグの管理アプリ](https://apps.apple.com/jp/app/ハッシュタグ-メモ-lite/id1153380973)を公開中なのですが、気がついたら前回リリースから3年経過・・・
このまま削除されるのは悲しいので対応を行いました。

# ダークモード対応
ストーリーボードで各種パーツのプロパティを確認したところ、WhiteとかBlackとか固定のカ

元記事を表示

CocoaPodsでiOSのライブラリーを作ってみる

## はじめに
僕は本業ではWebアプリ開発を中心として、主にバックエンド側やインフラ(少し)をやっています。フロントエンド側はjs(Vue.js)やCSS(少し)にちょっと触ったことがありますが、ネイティブアプリの開発は全く経験がありませんでした。

最近、会社のサービスの共有認証システムという担当しているシステムはFacebookといったソーシャルログインを導入しようとした時に、Facebookの規約によると、ネイティブでFacebookの専用SDKを利用しなければならないので、ネイティブ側の実装が必要になります。また、共有のシステムで現在複数のサービスに提供していて、それぞれのサービスに対するネイティブアプリがあり、別々に実装したら、効率が悪くて、メンテナンスの面も大変だと思うので、共有のライブラリー(SDK)を作ることにしました。

iOSネイティブアプリの開発は全く経験がなかったけど、学びながらチャンレンジしてみました。(もちろん、ネイティブアプリの経験者の方にサポート、フローしていただきました。)

今回はその経験について書きたいと思います。

## 準備

### 使って

元記事を表示

UICollectionViewにLongPressGestureRecognizerで長押しをつける

長押ししたセルに任意の操作ができます。

こちらの記事を元にしています。

```swift

let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(onLongPressAction))
longPressRecognizer.allowableMovement = 10
longPressRecognizer.minimumPressDuration = 1
self.collectionView.addGestureRecognizer(longPressRecognizer)
```

```swift
@objc func onLongPressAction(sender: UILongPressGestureRecognizer) {
let point: CGPoint = send

元記事を表示

時をかけるタコライス ~ アプリ作りで駆け抜けた、3つの技術 ~

この記事は[「Develop fun!」を体現する Works Human Intelligence #2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/whi-2) 23日目の記事になります。
他の記事と合わせて楽しんでいただければと思います。

# タイトルと内容について
**「時をかけるタコライス ~ アプリ作りで駆け抜けた、3つの技術 ~」**

自作スマホアプリを3年間作り続ける中で、
**「3層構造」**という古典的な構造から**「Cloud Firestore」**を利用した今風の構造までを経験しました。

歴史的には何十年もの時間をかけて進化してきた3つの技術を短期間で経験したことを表現するために、
好きな本と、私のエンジニア名を組み合わせてこのタイトルにしました。

この記事ではそんな**3年間を物語風**に振り返っていきます。

# 目次
- [はじめに](https://qiita.com/taco-rice/items/4cd7bdbd5997676d114c#%E3%81%AF%E3%

元記事を表示

Vision framework + AudioKit でiPhoneテルミン作ってみた

#作ったもの
**”iPhone擬似テルミン”**
iPhoneに向かって手をかざすと、手の位置(正確には人差し指の位置)によって
鳴る音の高低/大小が変わる。
クリスマスということで、「きよしこの夜」っぽいものを演奏してみている。。。
難しい。。。

#なんでこれ作ったの
家に楽器がなくて**寂しい**(実家にはピアノ/ギター/ドラム等

元記事を表示

[iOS] iPhone12 miniでStatusBarの高さ取得が期待した動作をしないのと対策

## 発生した事象
- iPhone12 miniで`statusBar height`をレイアウトの計算に使っていたら期待した結果にならず、レイアウトがずれてしまった。

## 環境
```
Xcode 12.3
Build version 12C33
Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)
Target: x86_64-apple-darwin19.6.0
```

## 検証
- 実際にsampleアプリを作り、シミュレータで取得した値を表示してみた

#### iPhone12

#### iPhone12 mini
ネイティブ開発・Flutter開発を通じて感じた事。

## はじめに。
筆者は最近異業種からエンジニアに転職したばかりで業務歴は三ヶ月程初学者です。
初学者なりにネイティブ開発とFlutter開発を通して感じたことを書いてみました。
コードベースの解説と言うよりは感想が主になりますので、
Fluttrのコード解説がみたい方は
[KBOYのFlutter大学 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/kboyflutteruniv)
こちらの他の記事の方が参考になるかと思われます。

## Flutterのメリット・ネイティブ開発のメリット

### Flutterのメリット

* 一度の開発でandroid,ios2つのアプリをリリースする事ができる。
* android,iosで共通の見た目のアプリを開発することができる。
* ViewをDartコードで完結して開発できる(storyboardやxmlを使わずに済む)
* 宣言的UIフレームワークで直感的にViewを書くことができる。
* ホットリロードと呼ばれる機能を使う事で、コードを更新しても再ビルド

元記事を表示

coremltools 4.0でPyTorchモデルを変換する

Core ML 4(iOS 14)に合わせて、coremltools 4.0がリリースされた。coremltools 4.0の目玉となるアップデートが、**PyTorchモデルがONNXを経由することなく直接Core MLモデルに変換できるようになった**点。

> New converter path to directly convert PyTorch models without going through ONNX.

(coremltools 4.0b1のWhat's Newより)

ドキュメントも一新され、Examplesのページに"Converting a PyTorch Segmentation Model to Core ML"というセグメンテーションモデルを変換するチュートリアルがあったので、そちらで変換を試してみた。

https://coremltools.readme.io/docs/pytorch-conversion-examples#converting-a-pytorch-segmentation-model-to-core-ml

このモデルを利

元記事を表示

Cocoa MVCがおFatになりやすいワケ

## はじめに
iOSアプリ開発をする上で切っても切り離せない問題として`FatViewController`が挙げられます。
そんな中でも、`Cocoa MVC`は`FatViewController`になりやすいという印象を皆さんもお持ちではないでしょうか?
`MVC`とは`Model` `View` `Controller`の略ですが、`ViewController`が肥大化しやすいことから、`MassiveViewController`と呼称されてしまうことがある程です。
では、なぜ`Cocoa MVC`はおFatになりやすいのでしょうか?
それを今回私なりに調べてみました。

## そもそもCocoa MVCとは
`Cocoa MVC`とは、`Model` `View` `Controller`の3つに役割を分割するアーキテクチャです。

|名称|役割|
|:--|:--|
|Model|データの保持、及び処理を行い、状態の更新を通知します。|
|View|画面の描画処理を行います。|
|Controller|ユーザからの処理を受け付け、それを元にModelへに処理を依頼、M

元記事を表示

WEBアプリとネイティブアプリの違い

この記事はGlobal Mobility Serviceの社員による、[Global Mobility Service Advent Calendar 2020](https://qiita.com/advent-calendar/2020/global-mobility-service) 21日目の記事です。

#はじめに
未経験のAndroid向けアプリ開発を携わる事になった中で、Android専用のネイティブアプリが良いのか
WEBアプリでも良いのか気になった為、双方のメリット・デメリットを調査しました。

#なぜAndroid?
弊社はフィリピン・カンボジア・インドネシアの各国で、貧困層を救うといったビジネスを展開していますが
今回、韓国現地法人向けと言う事で使用割合を調べてみました。
![スクリーンショット 2020-12-20 11.19.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/418460/ffc76d68-b225-075c-cfd8-4a64f1cc9d67.png)
20

元記事を表示

UINavgationControllerの NavigationBar の色が変わらない時の処方箋

NavgationController の NavigationBar の色を変えるのは以下の通りですが、
**ViewDidLoad で呼ぶと変わらないことがあるので、 ViewWillAppear で呼ぶと変わります**。

```swift
navigationController?.navigationBar.barTintColor = .black // 背景色
navigationController?.navigationBar.tintColor = .white // 戻るボタンなど
navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white] // タイトル

// ViewWillAppear で呼びましょう?
```
?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

[Twitter](

元記事を表示

機械学習モデルとモバイルDBを統合するCouchbase Lite 予測クエリ 紹介

# はじめに

この記事では、モバイル端末用の組込NoSQLデータベースである、Couchbase Lite 2.7にてGAとなった「予測クエリ Predictive Query」について、概要を記します。

様々なサービスやソフトウェアが、その新機能として「AI」との関連性を喧伝する中、機能の名称のみからその実体を推し量ることは時に難しく、そんな場合人は多大な期待を抱いてしまうものです。

ここで紹介する機能が具体的にどういうものであるのかを、登場した背景などとの関係を踏まえて、整理していきたいと思います。

## エッジAI

機械学習、深層学習の成果が実用化される時、多くの場合、そのサービスは、クラウドとのやりとりで実現されてきたといって良いでしょう。例えば、スマートスピーカは、音声データがクラウドに送られることで成り立っています。一方、iPhoneのFace IDでの顔認識モデルは、端末上で実現されています。このような端末上での「AI」機能は、エッジAI(※)と言われています(対する前者は、クラウドAIと言われます)。

※「エッジ」という単語についても、前提抜きに(一般用語と

元記事を表示

Swift CombineにてhandleEventsのクロージャがコールされない

Combineを使用する際に勉強不足が故にハマってしまったので、備忘録として残します。

# 問題

関数から返されるFuture型の変数にて

```swift
func handleEvents(
receiveSubscription: ((Subscription) -> Void)? = nil,
receiveOutput: ((Output) -> Void)? = nil,
receiveCompletion: ((Subscribers.Completion) -> Void)? = nil,
receiveCancel: (() -> Void)? = nil,
receiveRequest: ((Subscribers.Demand) -> Void)? = nil
) -> Publishers.HandleEvents>
```

をコールしてクロージャ内で処理を行いたいが、クロージャが実行されない。

# 解決方法

```swift
func

元記事を表示

iOS14から登場したNew Logger API vs OSLog

こんにちは、 21日目はiOSエンジニアの paper_and_paper です。

アプリを開発されている皆さんは、自分のデバイスでは再現しないようなエラーや不具合ってどれくらいございますか?

おそらくユーザが数100万人規模になると、ユーザからのお問い合わせや不具合報告だけでもかなり頻度と数が上がってくるかと思います。しかし、実際にフタを空けてみたとしても、最初から手順や条件が確立していたり、高頻度で再現できるものは多くはなく、大半の不具合やエラーは開発端末でも再現しにくいため、何かともどかしい思いをします。

今年のWWDC2020では、そんな再現性が低いときの心強い見方、**ロギング** のAPIが新たに発表されました。今回は、それについて少し触れたいと思います。

## ロギングの役割
ユーザはバグが生じない高品質なアプリケーションを期待します。しかし、ソフトウェアにはどうしてもバグは付き物で、日々開発を進めていると大小様々な不具合と対峙しなければなりません。その中でも一番厄介なのは、すぐに**再現できないバグ**です。

再現が難しいバグを検出し、修正するのにログは有用な

元記事を表示

[Swift5]UIImageをString型のURLで指定できるようにするextension

## String型のURLで指定とは?
UIImageで画像を指定する場合、webからURLを取得してそのURLの画像をUIImageとして定義したい時があると思います。(デフォルトでのURL指定はできない)

そんな時に役立つのがextension(拡張機能)です。今回はそんなextensionを紹介します。

## コード紹介
```swift
extension UIImage {
public convenience init(url: String) {
let url = URL(string: url)
do {
let data = try Data(contentsOf: url!)
self.init(data: data)!
return
} catch let err {
print("Error : \(err.localizedDescription)")
}
self.in

元記事を表示

OTHERカテゴリの最新記事