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

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

iOSにFirebaseをpodで追加したが、クラッシュしてしまう問題の解決

# 概要

Fabricを利用したクラッシュレポートの送信が、2020年11月15日で使えなくなるようで、
新しいFirebaseへの置き換えを進めてました。

https://firebase.google.com/docs/crashlytics/get-started?hl=ja
![スクリーンショット 2020-09-13 8.42.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142886/8f8b87e8-f00e-7438-80ec-d06316a75864.png)

プロジェクトは `共有framework` を `アプリ側` で利用する形で、両方とも `firebase` を利用しています。
今までは、それぞれのプロジェクトで pod の追加をしていて、特に問題なく動いていました。

“`ruby
use_frameworks!

target ‘library’ do

pod ‘Firebase/Core’, `古いバージョン`
pod ‘Firebase/Fi

元記事を表示

[Xcode] 実務的Tips: チーム内でXcodeの設定項目を合わせて不要な修正差分が出ないようにする

今日からでもすぐに取り入れられて、

– コードをよりクリーンにできる、とか
– 工数を削減できる、とか

そんなTipsを紹介していく記事シリーズです。
「知らなかった」「気づかなかった」「忘れていた」そんな誰かの役に立てば幸いです。

# 前提環境

– Xcode 11.3.1
– Swift 5.1.3

# 課題

マージリクエスト(プルリクエスト)のレビュー時に、このような空白行の差分が出るとうっとおしくないですか?

![スクリーンショット 2020-09-09 11.14.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122917/d69acc44-a570-25d7-3c14-f3df1fbcc458.png)

# 解決策

Linterライブラリを入れるのも手ですが、そうも行かない場合は、この設定をONにすればだいぶ軽減されます。

Xcode > Preferences > Text Editingタブ > Editingタブ
![スクリーンショット 2020-09-09

元記事を表示

[Xcode] 実務的Tips: Storyboard IDの用途はコード上でUIViewControllerのインスタンスを作る「だけじゃない」

今日からでもすぐに取り入れられて、

– コードをよりクリーンにできる、とか
– 工数を削減できる、とか

そんなTipsを紹介していく記事シリーズです。
「知らなかった」「気づかなかった」「忘れていた」そんな誰かの役に立てば幸いです。

# 前提環境

– Xcode 11.3.1
– Swift 5.1.3

# 割とメジャーなStoryboard IDの用途

こちらの記事にあるように、
画面遷移をコードで行う場合に、StoryboardからUIViewControllerのインスタンスを取得するために使う、という用途です。
[【Swift】画面遷移の方法まとめ – Segueを使わない画面遷移](https://qiita.com/misakiagata/items/b7f6c2f6c9f988ec38c7#3-segue%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84%E7%94%BB%E9%9D%A2%E9%81%B7%E7%A7%BB)

# (たぶん)マイナーなStoryboard IDの用途

Storyboard Refer

元記事を表示

【Swift】String.SubSequenceとは何か?

# はじめに
文字列の日付を桁揃え(yyyy/mm/dd)しようとして、こんな感じで書いてみたところ・・・

“`Swift
let str2 = “2020/7/1”
let array = str2.split(separator: “/”)

if (array.count >= 3){
let str3 = array[0]+”/”+String(format: “%02d”, Int(array[1]))+”/”+String(format: “%02d”, Int(array[2]))
}
“`
Int(array[1])) のところで、以下のようなエラーが出ました。

“`Swift
Initializer ‘init(_:)’ requires that ‘String.SubSequence’ (aka ‘Substring’) conform to ‘BinaryInteger’
“`

# String.SubSequenceとは?
String.SubSequenceって何?ってことで[公式ページ](https://developer.apple

元記事を表示

本日学んだ、オプショナル型の基礎。【 ! の混同】

本日学んだ、オプショナル型の基礎をまとめます。
自分用の記録用の皮算用。

##  ! を混同していた。

> “!”はオプショナルではない、nilを許さないというのは間違いです。
このことも勘違いしている人が多いかもしれません。

勘違いしていました。

> **変数の宣言で型に `! `をつける場合、その変数は「オプショナル型」**

なので、**強制的アンラップの` ! `とは別物**らしい。

“`swift

// 変数の宣言で型に ! をつける場合、その変数は「オプショナル型」
// (= 強制的アンラップの ! とは別物)
var hoge: String! // nil
“`

## 暗黙的アンラップ型 (= IUO)

**I**mplicitly **U**nwrapped **O**ptional

– `オプショナル型`の1つ (= nliを許容)
– **使用するとき、必ず強制的アンラップ**`!`をする。
– つまり、**自動でアンラップ**をしてくれる

但し、**nilでアンラップすると、アプリが落ちる**?ため、
100%絶

元記事を表示

CartoonGANをiOS用に変換して、アニメ風自動変換してみました

2018年に発表されたモデルのTensorFlow2実装から変換します。
**写真をアニメ風に変換できる機械学習モデルです。**
なんとiOS上で使うことができます。
機械学習がモバイルで使えるとは、便利な時代になりましたね。

[論文](https://openaccess.thecvf.com/content_cvpr_2018/papers/Chen_CartoonGAN_Generative_Adversarial_CVPR_2018_paper.pdf)
[変換済みCoreMLモデル:GitHub](https://github.com/john-rocky/CoreML-Models)
![Aug-29-2020 23-31-13.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/6f09bc27-bd6a-ddd7-4e01-8640280b0c6e.gif)
iOSでの実行結果
![cover.gif](https://qiita-image-store.s3.ap-north

元記事を表示

[SwiftUI サンプルコードあり] 入れ子構造になったJSONをMVVMモデルを使って表示する方法

this article shows **How to parse nested JSON on SwiftUI MVVM model.**
if you can not read Japanese, you should use a translater. I’ve published Code on GitHub. check this out.
if you have any question, you can keep in touch with me from my [Twitter (tkgshn)](https://twitter.com/tkgshn)

## はじめに

SwiftUIを使って、入れ子構造になっているJSONファイルをパ

元記事を表示

iPad画面サイズ、ピクセル数早見表

| 機種名 | ハードウェア名 | 画面サイズ | CSSピクセル | デバイスピクセル | デバイスピクセル比 | アスペクト比 | 発売初期搭載iOS | 最終対応iOS | 発売年 | メモ |
| :—————————— | :——————————— | :——— | :———- | :————— | :—————– | :———– | :————– | :———- | :—– | :— |
| iPad | iPad1,1 | 9.7 | 768×1024 | 768×1024 | 1 | 3:4

元記事を表示

Inside Flutter Hooks

## 概要
Flutter Hooksを使う機会があり、すごい便利だなと思っていたのですが、
内部的にどんな風に実装されているのか掘り下げてみようかと思い、今回色々調べてみました。
(何か間違っていたりしたらコメントいただけると嬉しいです :bow: )

## Flutter Hooks とは?

[React hooks](https://ja.reactjs.org/docs/hooks-intro.html)をFlutterで実装したものになります。

作者は[Provider](https://github.com/rrousselGit/provider)等でおなじみのRemiさんです。

##

元記事を表示

iOSのdidBecomeActive/willResignActiveを視覚的に把握する

# モチベーション
ライフサイクルメソッドの説明は、解説付きでケースを列挙されることが多いですが、いまいちイメージがしにくいと感じることが多く感じます。特に、ActiveとInactiveのタイミングは分かりにくいことが多いのではないでしょうか。

この記事では、Sceneベースの各種ライフサイクルメソッドにprintを貼って、active/inactiveとはどのようなステートなのかを視覚的に把握します。(※タイミングの列挙はしません。1つ2つ取り上げるだけです)

# 解説
## 1. アプリの起動
![スクリーンショット 2020-09-12 15.00.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114709/bbc2d28b-f733-71b9-9629-53ddc0383697.png)

## ライフサイクル
シーンベースのライフサイクルでも、共通系は呼ばれます。なので`didFinishLauching`がまず始めに呼ばれます。
次に、`SceneDelegate`の`willC

元記事を表示

コードでSwiftのautolayoutを書く

Storyboardで画面のレイアウトやUI部品をグラフィカルに配置できますが、チームで協同作業する時や細かいレイアウトの調整が発生する場合はStoryboardだとどうしても支障が出ます。

autolayoutの標準APIについて、Appleが`NSLayoutConstraint`と`NSLayoutAnchor`(ios9~)、`Visual Format Language(VFL)`を提供しています。`NSLayoutAnchor`は`NSLayoutConstraint`よりコード量が少なくなり、制約・声明もはっきりするようになっています。`VFL`はアスキーアートのように制約を定義することができる記法ですが、学習コストが高くかつリテラルな箇所が多いため、実行時にエラーが起こる恐れがあります(本文では`VFL`パターンを紹介しません)。

##1、NSLayoutConstraint
>NSLayoutConstraintを使用するには、各々初期化する必要があります。
制約する属性ごとに`NSLayoutConstraint`を作る必要があるため、コード量が増えます。
初期

元記事を表示

Core Imageによるぼかしのクオリティを高める

Core Imageを使うと、簡単かつ高速に画像ぼかすことができます。


(↑はgif化しているので見た目がいまひとつですが…)

ぼかし自体は `CIGaussianBlur` ひとつでできるのですが、以下の点に注意しておくことでより高いクオリティの結果を得ることができます。

* ぼかし後の画像サイズは、入力画像サイズと異なる
* なにもしないと、画像のエッジ付近がやや暗くなってしまう

## `CIImage#extent` について

`CIImage#extent` は簡単に言うと、その画像のサイズを持つ出力矩形領域です。
例えば解像度480×640の画像から作られた `CIImage` の `extent` は `(x: 0, y: 0, w: 480, h: 640)` となります。
しかしこれに、半径 `20

元記事を表示

Core Dataのtransformableな属性をセキュアに実装する

Core Dataのエンティティが持つ属性 (attribute) の型は整数、文字列、日付などいくつかの決まったものしかとることができませんが、Transformableを指定することで任意の型を `NSData` に変換して保存することができるようになっています。このとき保存したい型と `NSData` の変換を担うのがvalue transformerです。

Core Dataのtransformableを利用しているプロジェクトをXcode 12でビルドしたときに、以下のような警告が出るようになりました。

“`
warning: Misconfigured Property: .<プロパティ> is using a nil or insecure value transformer. Please switch to NSSecureUnarchiveFromDataTransformerName or a custom NSValueTransformer subclass of NSSecureUnarchiveFromD

元記事を表示

SwiftUI用のジョイスティックUIライブラリ OMJoystickの使い方

OMJoystickはSwiftUI用のジョイスティックUIライブラリです。CocoaPodsとSwift Package Managerからダウンロードできます。

### 動作イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4019/08f6f1e3-439b-a813-9cdd-d5e87930e9b0.png)

### インストール方法
CocoaPodsでPodfileに下記のように記述します。

`pod ‘OMJoystick’`

### 動かし方

以下のコードで、デフォルト設定のまま動かすことができます。

“`swift
import SwiftUI
import OMJoystick

struct ContentView: View {
var body: some View {
OMJoystick(colorSetting: ColorSetting()) { (joyStickState, stickPosition)

元記事を表示

RxSwift における subscribeOn と observeOn の違い

RxSwift などで処理をつなげて書いていると、ここはメインスレッドで、ここはバックグランドスレッドでなどと、処理によってスレッドを切り替えたい場合があるかと思います。そんな時は、`Observable` のプロパティとして提供されている `subscribeOn` または、`observeOn` を使用することでスレッドを切り替えて処理を実行することができます。今回はそんな `subscribeOn` と `observeOn` の違いについて簡単にまとめていこうかと思います。

### その前に Scheduler

RxSwift では Observable や subscribe の処理をどのスレッドでどのよう(直列・並列)に処理をさばくかを決定する役割を `Scheduler` と呼びます。これについては後で触れますが、RxSwift を使用し、マルチスレッドで処理

元記事を表示

テストについて学習してみた

#自動テストについて学んだこと
現在、自動テストについて学習しているので学習したことをまとめていきます。

#これから
“`swift:
“`

元記事を表示

【iOS】Fastlaneのincrement_build_numberがビルドナンバーを取れずにエラーになる際の対処法

結論から言うと、**プロジェクトディレクトリの中に複数のプロジェクトファイルが存在しているとエラーになります。余計なプロジェクトファイルを消せば解決します。**

以下は経緯。

—————————————

プロジェクトのビルドナンバーをインクリメントしたいときに便利なのが、Fastlane Actionの[increment_build_number](https://docs.fastlane.tools/actions/increment_build_number/)ですが、なぜか自分の環境だけ、以下の様なエラーが出ました。

“`
-> % bundle exec fastlane run increment_build_number
[✔] ?
[16:22:33]: ————————————
[16:22:33]: — Step: increment_build_number —
[16:22:33]: —————————–

元記事を表示

tableView画面クラッシュ

tableViewの画面がクラッシュする

【エラー】
Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.

【対応】
テーブルビューのリロード部分
self.rankingTableView.reloadData()

DispatchQueue.main.async {
self.rankingTableView.reloadData()
}

と囲むとクラッシュしなくなりました。

【参考】
swift初心者がiOS13対応でメインスレッド以外でUI更新をしてクラッシュさせてしまった話
https://qiita.com/rymiyamoto/items/7ace750172b84a2ff809

https://www.it-swarm.dev/ja/ios/gtレイアウトエンジンへの変更は、メインスレッドからアクセスした後、バックグラウンドスレッドから実

元記事を表示

iPhone画面サイズ、ピクセル数早見表

|機種名|ハードウェア名|有機ELディスプレイ対応|画面サイズ|CSSピクセル|デバイスピクセル|デバイスピクセル比|アスペクト比|発売初期搭載iOS|最終対応iOS|発売年|メモ|
|:–|:–|:–|:–|:–|:–|:–|:–|:–|:–|:–|:–|
|iPhone3G|iPhone1,2||3.5|320×480|320×480|1|2:3|iPhoneOS2.0|iOS4.2.1|2008/7/11|
|iPhone3GS|iPhone2,1||3.5|320×480|320×480|1|2:3|iPhoneOS3.0|iOS6.1.6|2009/6/26|
|iPhone4|iPhone3,1、iPhone3,2、iPhone3,3||3.5|320×480|640×960|2|2:3|iOS4.0|iOS7.1.2|2010/6/24|
|iPhone4s|iPhone4,1||3.5|320×480|640×960|2|2:3|iOS5.0|iOS9.3.5|2011/10/14|
|iPhone5|iPhone5,1、iPhone5,2||4

元記事を表示

[iOS]XcodeのUIButtonを接続した時に、IBOutletになるか、IBActionになるかの条件

超小ネタ
前から疑問だったんですが、UIStoryboardからUIButtonをUIViewControllerなどに接続した時

viewDidLoadより上に持ってきたらIBOutlet
![スクリーンショット 2020-09-11 12.11.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20784/30bf5f57-7984-2e90-33d4-6efee24495e5.png)

viewDidLoadより下に持ってきたらIBAction
![スクリーンショット 2020-09-11 12.11.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20784/d0eeb12b-027b-e75a-2a99-3ebc4193007e.png)

がデフォルトで表示される模様。
viewDidLoadがない場合はIBOutletになりました

UIViewの場合
awakeFromNibより上に持ってきたら

元記事を表示

OTHERカテゴリの最新記事