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

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

[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン

# 前書き

GoFのデザインパターンが提供された『オブジェクト指向における再利用のためのデザインパターン』は1995年の発行だそうで、もはや古典の域ですね。

Swiftなどのモダンな言語では「もう使わないパターン」とか「もっとシンプルに解決できるパターン」などもあり、具体的な解決方法として崇め奉るモノではないかなと思います。

しかし、GoFのデザインパターンを、「解決方法」ではなくて、開発で良く陥る「状況」と解決に至る「発想」、そしてそれに対する「名前付け」に着目すると、改めて研究してみる価値はあると考えます。

この記事シリーズは、iOS/Swiftエンジニアである執筆者個人が、
**ごく普通のiOSアプリ開発でよくある状況**や
**Swiftのコアライブラリやフレームワークで使われているパターン**に
着目してデザインパターンを学び直してみた記録です。

# 記事の一覧

| 生成に関するパターン | 概要 |
|:–|:–|
| [Factory Method](https://qiita.com/y-some/items/308966bdea99ceb27db9)

元記事を表示

[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン ~Factory Method~

この記事シリーズは、iOS/Swiftエンジニアである執筆者個人が、
**ごく普通のiOSアプリ開発でよくある状況**や
**Swiftのコアライブラリやフレームワークで使われているパターン**に
着目してデザインパターンを学び直してみた記録です。

**関連記事一覧**
[[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン](https://qiita.com/y-some/items/96db5f24ded4a1fab48f)

# Factory Methodパターン概要

– **生成するインスタンスを条件に応じて柔軟に切り替える**ためのパターンです。
– Javaなどの場合は抽象クラスで振る舞いとインスタンス生成の雛形を定義し、サブクラスでそれらをオーバーライドします。(参照:[Wikipedia](https://ja.wikipedia.org/wiki/Factory_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3))
– Swiftの場合は抽象クラスという概念がありませんし、enumの表現力が強力なので

元記事を表示

[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン ~Abstract Factory~

この記事シリーズは、iOS/Swiftエンジニアである執筆者個人が、
**ごく普通のiOSアプリ開発でよくある状況**や
**Swiftのコアライブラリやフレームワークで使われているパターン**に
着目してデザインパターンを学び直してみた記録です。

**関連記事一覧**
[[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン](https://qiita.com/y-some/items/96db5f24ded4a1fab48f)

# Abstract Factoryパターン概要

– **オブジェクトの生成を抽象化**することにより、**関連/依存する複数のオブジェクト生成を一括して提供**するためのパターンです。
– Factory Methodと類似していますが、主な相違点は上記の太字部分です。
– オブジェクト生成の責務を担う側を「抽象的な工場」に見立てて、Abstract Factoryと呼びます。
– 利用側は「工場」に対して生成条件を提示するわけですが、Swiftの場合はenumを上手く使うと良さそうです。
– GoFのデザインパターンでは**生

元記事を表示

[Unity] ビルド関連処理を自分なりに基盤化し始めました

## 目的
– アプリビルドのCIなどで要求される機能を実装

## 現在の機能
– 設定ファイルおよびSchemeに応じたビルド設定の反映
– ライブラリの追加を避けつつデシリアライズ出来るようXMLに記述
– が、今後やりたい事を踏まえるとスクリプトでも扱いやすい形式にすべきか悩み中
– KeystoreやAppleDeveloperTeamIdなども設定ファイルから切り替え
– ログを詳細と簡易で出し分け
– AndroidでExport Projectしつつapk出力まで対応

## 実行
– macOSでもWindowsでもbashから以下のコマンドで実行可

“`
sh Batch/AppBuild.sh -p [プラットホーム] -c [設定名] -s [scheme] -e [実行メソッド名]
“`

## 成果物
– https://github.com/cyber1496/UnityBuilder

## 追加でやりたい事
– アプリアイコンの差し替え
– バージョン変更(BuildNumberのインクリメント)
– テスト公開用の各ストアへのアップロー

元記事を表示

【swift5】漢字をひらがなにするAPIを使ってアプリ作ってみた

今回はAPIを使用してテキストフィールドに入力した漢字を平仮名にするといったものです。

OpenWeatherのAPIを使って天気予報のアプリを作ることはできたのですが、あれは位置情報を取得して自動的に天気をGETするというシンプルなものだったので今回はPOSTしたものをAPIを使って編集するといったものを作成しようと思いました。

文字にするとすごく簡単に見えるのですがとても大変でした。。。

Githubにソースをアップしているので全体像を知りたい方はこちらから

https://github.com/sventouz/kanji_to_hiragana_app

## 説明

### ひらがなAPIキーの取得

gooさんのひらがなAPIというのを使用しました。

APIキーを以下から取得してください。

https://labs.goo.ne.jp/apiusage/

### ソース

“`swift
import UIKit

class ViewController: UIViewController {

@IBOutlet weak var con

元記事を表示

文字列→塩基配列の相互変換ツールをつくってみた(アプリ版)

# はじめに
[この記事](https://qiita.com/am10/items/41d94d5175dbf63fc706)で公開したアプリの中身についてです。

[この記事(どこまでショボいアプリがAppleの審査に通るのか試してみた)](https://qiita.com/megumu-u/items/600b9187aa3fec6539af)をみてわりと機能が少なくてもアプリ公開できるのか!と思い正月休みにアプリをつくってみました。

[以前作ったこれ(文字列→塩基配列の相互変換ツールをつくってみた(PHP))](https://qiita.com/am10/items/63b1f747a630a2913841)をアプリにしてリリースしました。

# リリースしたアプリ
つくったアプリは有料です。(目指せ!!トータルダウンロード数25!!!)

* Mac, iOS: ¥120
* Android : ¥100

## Macアプリ
ターゲット:MacOS Catalina以降

[DNA変換](https://apps.apple.com/jp/app/dna%E5

元記事を表示

FlutterのNavigatorの使い方と仕組み

##はじめに

この記事では、[Navigator Widget](https://docs.flutter.io/flutter/widgets/Navigator-class.html)について解説します。(以下、Navigatorとします)
以下の2部構成です。

1. Navigatorの使い方
2. Navigatorの仕組み

ただし、この記事では、遷移時のアニメーションの作り方については触れていません。ご注意ください。

この記事のサンプルコードは以下のページに置いています。
https://github.com/HeavenOSK/basic_navigator

##Navigatorとは
[Navigator](https://docs.flutter.io/flutter/widgets/Navigator-class.html)はFlutterでページ遷移を実装する際に使用するWidgetです。

##Navigatorの使い方
Navigatorの使い方について解説します。

解説する内容は、以下の通りです。

1. 進む遷移をして、戻る遷移を行う
2. 戻

元記事を表示

iOS, Mac, Androidのアプリをリリースしてみた

# はじめに
アプリのリリース方法の備忘録です。

**今からアプリをリリースしたい人はとりあえずデベロッパー登録してください**

登録まで2日くらいかかります。休日はさむともっとかかるのでアプリ作る前にデベロッパー登録しておく方がスムーズに進みます。

* Apple: 年会費 ¥12,980(2020/1時点)
* Google: 登録費 $25.00(2020/1時点)

全部 Macbook Pro macOS Catalina(10.15.2)で作業しました。

# リリースしたアプリ
## Macアプリ
ターゲット:MacOS Catalina以降

[DNA変換](https://apps.apple.com/jp/app/dna%E5%A4%89%E6%8F%9B/id1494127578?mt=12)

## iOSアプリ
ターゲット:iOS13以降

[DNA変換](https://apps.apple.com/app/id1493994947)

## Androidアプリ
ターゲット:Android6.0以降

[DNA変換](https://play.

元記事を表示

[Swift]ドラムロールボタン(くるくる回転して選択するボタン)をUIPickerViewで作る〜GAFAのサイトにジャンプするアプリを例に〜

EF0DBB08-CC7D-4ECF-9C09-4C1DB01CE7BD.jpeg
↑みたいにくるくる回転させて選択するボタンを作ろうとしたら、一筋縄ではいかなかった(ライブラリみたいなものがなかった)ので作り方をシェアします。

#完成イメージ(GIF)
GIFをクリックで拡大して見れます。
ezgif.com-video-to-gif.gif

#動作環境
Xcode 11.3
iOS 13.3
iPhone 1

元記事を表示

FlutterのListViewでリストを削除した際のA dismissed Dismissible widget is still part of the tree

## はじめに
最近Flutterの勉強を開始しました。
初めてのアプリということで、[ToDoアプリ](https://github.com/kazumaz/flutter-study/tree/master/todo_app)の開発を行っていました。
 
ListViewというwidgetを使っているのですが、途中エラーが発生し困ったので解消法の共有です。
超初心者向けなのであしからず。
 
## 現象
スクリーンショット 2020-01-10 0.03.41.png

上記のようなTodoリストを作成し、各 TodoはFlipすることで削除できるようにしました。
しかし、test3→test2→test1の順で削除すると、問題なく削除されるのですが、test3を削除する前にtest2を削除するとエラーが発生す

元記事を表示

iPad のマルチタスク対応方法

## SceneDelegate の実装が必須

Xcode 11 でプロジェクトを作成すると、デフォルトで入っている `SceneDelegate` ですが、マルチタスク対応を行う場合はこのクラスが必須になります。
Xcode 10 以前のプロジェクトで作成した場合には、 `SceneDelegate` を追加してください。

※ このファイルがない場合画面がUIが読み込まれないため、画面が真っ黒になりました。

## Device Orientation を全て選択する
Device Orientation には Portrait, Upside Down, Landscape Left, Landscape Right の4種類存在していますが、こちら全て選択しなければマルチタスクを行うことができませんでした。

スクリーンショット 2020-01-11 19.13.10.png[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン ~Flyweight~

この記事シリーズは、iOS/Swiftエンジニアである執筆者個人が、
**ごく普通のiOSアプリ開発でよくある状況**や
**Swiftのコアライブラリやフレームワークで使われているパターン**に
着目してデザインパターンを学び直してみた記録です。

**関連記事一覧**
[[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン](https://qiita.com/y-some/items/96db5f24ded4a1fab48f)

# Flyweightパターン概要

– **一度生成したインスタンスを使いまわしてメモリ消費や処理時間を抑える手法**、すなわちキャッシュのことです。
– キャッシュはstatic変数またはSingletonで宣言します(単一インスタンスでないとキャッシュとして意味をなさないので)。
– GoFのでデザインパターンでは**構造に関するパターン**に分類されます。

# 使い所

– サーバー上の画像をアプリ上で表示する時、一度取得した画像はアプリ内にキャッシュしておき、毎回サーバーにアクセスすることを避ける、とか。

# サンプル

元記事を表示

お年寄りの暮らしをサポートする方のためのアプリをリリースした。

## はじめに

こんにちは!
iOSエンジニアインターンをしています、[@yuto_nakano](https://twitter.com/yuto_nakano44)です!
私事ですが、
現在大学3年生ですが、春から休学を決め、22卒となります!

「#STOP電話de詐欺」をリリースしてから、約1年が経ちました。
[初めてリリースしたアプリが日経新聞に取材された話](https://qiita.com/kageroupro44/items/ec3437246686611d65ef)

リリースから半年後、新たにデザイナー([のぶ](https://twitter.com/Nob_design))さんと2人で高齢者の暮らしをサポートする方に向けたアプリの開発に取り組み、ついにリリースすることができました!

今回の記事では、アプリを作ろうと思った背景、使っている技術や開発フローをまとめようと思います!
自分の経験がほんの少しでも誰かのお役にたてれば幸いです。

# 1.開発したサービスと主な機能
## 「ケアトモ」 – 高齢者の暮らしをサポートする方へ

ダークモードに切り替えたときに画像がダークモード用に切り替わらない問題の対応

iOS13以降でダークモードを対応しようとしたときにlightモードからdarkモードへ、またその逆に切り替えたときにColorAssetsはちゃんと切り替わるのに画像は切り替わらなかった問題に遭遇したのですが、解決したのでその方法を残しておきます。

1. Appearancesを**Any, Light, Dark**を選択する
2. Render AsでDefaultになっているのを**Original Image**に変更する
スクリーンショット 2020-01-11 11.32.13.png

僕自身もcode上では`image.renderingMode(.alwaysOriginal)`みたいな記述をしていたのですが、それでは解決されず、この設定で解決しました。誰かの参考になれば幸いです。

元記事を表示

YUVのCVPixelBufferをBGRAに変換する

一般的にはiOSのカメラやビデオアウトプットはvideoSettingsなどで出力するPixelBufferのフォーマットをARGBなどに指定可能です。
しかし、ARKitや一部のカメラリソースはYUV形式でしかPixelBufferを得ることが出来ません。
ARKitを利用しながらその映像をCoreMLなどで解析する場合、ARGBフォーマットになっていないといけない事があります。
MetalやOpenGLを利用する方法もありますが、ここではAccelerateフレームワークのvImageを使ってyuv→argb→bgraと変換してみましょう。

“`swift
import Accelerate

extension CVPixelBuffer {
public func toBGRA() throws -> CVPixelBuffer? {
let pixelBuffer = self

/// Check format
let pixelFormat = CVPixelBufferGetPixelForma

元記事を表示

UIWindowが上手く動いてくれない時に

#結論

エラーも出ないのに、UIWindowがらみのプログラムが動かない時には、
`Info.plist`の中に`Application Scene Manifest`という項目を削除してみてください。

この項目は、Xcode11でプロジェクトを新規作成すると自動的に作成される項目のようです。
私の場合、特にSceneの設定はしてないつもりでしたので、おそらく`プロジェクトを新規作成した段階でScene対応が有効になっていた`ということになります。

>SceneとはアプリのUIを表示するための窓の事です。iPadでは以前から複数のアプリを同時に分割表示する事ができましたが、同一のアプリを同時に複数表示する事はできませんでした。iOS13からはこれが可能になります。この時、分割されている画面1つがSceneに対応します。同一のアプリが複数表示されているときは、内部的にアプリケーションとしては1つのプロセスだけが起動していますが、Sceneオブジェクトは複数生成されており、ユーザはそれぞれの画面ごとに独立した画面遷移を利用できるというしくみです。
(引用: https://qiita

元記事を表示

【Swift5】tableViewCellのsubtitleのテキストの書き方

tableViewCellのsubtitleの記述の仕方がわからなかったのでメモとしてここに書きます。

上がタイトルで下がサブタイトルです。

![スクリーンショット 2020-01-10 15.15.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270808/5b55afaf-df00-dc6a-2eff-1c76f3601c04.png)

“`swift
//こっちがタイトル
cell.textLabel?.text = object.title
//こっちがサブタイトル
cell.detailTextLabel?.text = object.meaning
“`

ちなみにセルの中のレイアウトの設定の仕方は

ここです。

![スクリーンショット 2020-01-10 15.19.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270808/1da9f843-2c86-462e-dcee-cc57

元記事を表示

Voidを返す関数内でのreturnは気をつけた方がいい

# 追記

– Warningは正しかったです。

# 問題

– 以下はどういう出力になるでしょうか。

“`swift
func foo() {
print(#function)
return // ← この後の処理は一旦無視したいからreturnしておこう

bar()
}

func bar() {
print(#function)
}
“`

**答え**

– `bar()` も実行され出力されます。

“`
foo()
bar()
“`

# 理由

– 構文上、returnの後の改行は無視されて解釈されるので `return bar()` となり、 `bar()` が実行されるため。

“`swift
func foo() { // 暗黙的に戻り値はVoidを返す関数
print(#function)
return

bar() // return bar() と解釈されるのでbar()は実行される
}

func bar() { // 暗黙的に戻り値はVoidを返す関数
print(#function)
}
“`

元記事を表示

Xcode 11 からWKWebView がstoryboard から使えるようになっていた

## WKWebViewがstoryboardで置いてもビルドエラーにならない!
多分、これまでUIWebViewを使っていたデベロッパーであればUIWebViewからWKWebViewに移行する時に、
storyboardから参照しようとするとビルドエラーになるから渋々コードで生成していただろうと想像できます。

現に私もこれまでUIWebViewが使われていたアプリのWKWebViewへの移行タスクを多数取り組んできて
みなさんと同じようにWKWebViewの様々な地雷を踏んできました。

UIWebViewからWKWebViewへのコード上での移行についてはこちらの記事を参考にすればできるようになると思います。
[WKWebviewで簡単なwebViewを作成する](https://qiita.com/hirothings/items/fa487ac31ff4283893ca)

移行タスクでは大変お世話になりました。

# iOS10のサポートを切る場合、、、

Xcode 11 からWKWebView がstoryboard から使えるようになっていました。
Xcode 1

元記事を表示

Bonfire iOS #7 参加報告(簡単な内容のまとめや感想など)

2020年1月7日に開催されたBonfire iOS #7へ参加させていただき
その際の内容の簡単なまとめと感想を書かせていただきます。

後から資料を見直して補足したり
私見も混ざっているので
間違っている箇所や誤解している箇所があるかもしれません。
もし何かございましたらご指摘いただけますとうれしいです??‍♂️

# ヤフーアプリの品質向上戦略

## 発表者

西 麻扇さん
[@mao_nishi](https://twitter.com/mao_nishi)

## 資料

## 内容

ヤフーアプリが実施している品質向上戦略の中で
実際に実施した中で品質が改善した例を2つのテーマで紹介

– まずは現状把握から
– コーディング時間を増やすには

### まずは現状把握から

#### なぜ大事なのか?

まずは現状どうなっていて
それがどのように変化していくのかを計測していくことが大事だと
おっしゃっていました。

元記事を表示

OTHERカテゴリの最新記事