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

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

unrecognized selector sent to instanceエラーはこんな時にも出る。

## はじめに
ボタンを作成し、押したらある処理をするといったコードを書いていました。buildはうまくいっているのにボタンを押したとたんその処理をせずに“unrecognized selector sent to instance“のエラーが出ました。これを解決するのに苦労したのでメモを残します。
![button_error.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662345/cf9fdec8-f964-cdb6-1835-c02275aa0214.gif)

この方とは違う原因でした。
https://qiita.com/yoshiki-0428/items/80ea88f65f5a62ffcc11

## 原因
画面右の黄色い三角(危険マーク)のところをご覧ください。一つのボタンに2つ@IBActionが紐付けられています。これが原因です。![スクリーンショット 2020-12-27 10.32.36(2).png](https://qiita-image-store.s3.ap-

元記事を表示

【Dart】Mapのvalueを使ってソートする

Mapのvalueでソートしたい事があったので調査しました。

[SplayTreeMap class](
https://api.dart.dev/stable/2.10.0/dart-collection/SplayTreeMap-class.html)
SplayTreeMapのfromにソートしたいmapとcompareを渡せばソートできるみたいです。

下記のようなオブジェクトを作成しました。属性idでソートする予定。

“`Dart:Object
class Employee{
int id;
String name;
Employee(this.id,this.name);
}
“`
最初の並び順は下記の様な感じです。

“`Dart:unSort
Map map = Map();
map[‘hoge’] = new Employee(1, “sato”);
map[‘huga’] = new Employee(3, “tanaka”);
map[‘piy

元記事を表示

iOSのUNLocalNotificationを3分で理解

iOSのプッシュ通知関連は鬼門だ。
プログラミングというよりOSの挙動をある程度理解していないとキツイ。

基本的なUNLocalNotificationの使い方をここにメモしておく。

## 通知のリクエストダイアログを表示
まずは、通知の許可をユーザーから得るダイアログを表示する。
このダイアログにユーザーが同意しないと、ローカル通知を表示させる事が出来ない。

“`swift

func requestNotificationPermission() -> Void {
let options: UNAuthorizationOptions = [.alert, .sound, .badge]
UNUserNotificationCenter.current().requestAuthorization(options: options) { granted, error in
if let error = error {
print(“Error: \(error.localizedDesc

元記事を表示

[Swift5]アプリからiPhoneの設定画面へ遷移する方法

## 投稿内容
今回は通知設定などをおこなう際にボタンをタップするとユーザーのiPhoneの設定画面に遷移する実装方法を紹介します。

![simulator_screenshot_CDA1257B-6C8A-4499-9E4C-DFC70FA25F56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/e64394e2-771b-112e-5474-d434a8873841.png)

アプリからこちらの画面に遷移し、ユーザーが通知設定の変更などをおこないやすいようにする為です。

## 実装方法
“`
let url = URL(string: “app-settings:root=General&path={ここにBundle Identifierを記述}”)
UIApplication.shared.open(url!, options: [:], completionHandler: nil)
“`

以上です。
セルやボタンをタップすると遷移させたりするといいかもしれませんね!

元記事を表示

【Swift】Realtime database で value だけでなく key も取得する

db

“`
{
“people”: {
“-MPRm-8iCWsKK6B_nuHA”: {
“age”: 30,
“mail”: “taro@example.com”,
“name”: “taro”
},
}
}
“`

swift

“`
let ref = Database.database().reference().child(“people”)

ref.observe(DataEventType.value) { (snapshot) in
for child in snapshot.children {
let snap = child as! DataSnapshot
let key = snap.key
let value = snap.value

// key : -MPRm-8iCWsKK6B_nuHA
// value : Optional({ age = 30; mail = “taro@exam

元記事を表示

【Flutter】遭遇したエラー&&解決策まとめ②

## 前回
– [【Flutter】遭遇したエラー&&解決策まとめ](https://qiita.com/umaibou1126/items/050ee66f94f10ec114df)

## 参考文献
– [【flutter初心者】ListViewやGridViewを入れ子にするには(Vertical viewport was given unbounded height エラー)](https://qiita.com/code-cutlass/items/3a8b759056db1e8f7639)
– [[Flutter]TextFieldタップでA RenderFlex overflowed by pixels on the bottom. が出るときの対処法](https://qiita.com/welchi/items/e9c907828e553d448269)
– [【Flutter】キーボード表示時の RenderFlex overflowed エラーを解消](https://yaba-blog.com/flutter-renderflex-overf

元記事を表示

Could not load NIB in bundle の対処法

ほにゃららという NIB ファイルはあるんだけど、ロードされていないみたい、という現象があった。
なにかの拍子に、Build/PhasesのCopy Bundle Resourcesから該当ファイルが消えていたのが原因だった。
Build/PhasesのCopy Bundle Resourcesの+ボタンをクリックして該当ファイルを追加したら治りました。

![スクリーンショット 2020-12-25 9.44.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/4cda2d7f-255a-9ce0-758f-e3407754926a.png)
?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

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

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@roc

元記事を表示

[AutoLayout] Intrinsic Content Sizeを活用しよう〜その2 Self Sizing編〜

## はじめに

こんにちは![Life is Tech ! #2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/life-is-tech-2)の22日目を担当しますふみっちです。

この記事は[〜その1 概要編〜](https://qiita.com/fummicc1_dev/private/64ee8dfef8a54df0f4dd)の続きとなっていて、`Intrinsic Content Size`に関する具体的な実装を解説を行います!
プロジェクト全体は[こちら](https://github.com/fummicc1-lit/AdventCalendar2020)からダウンロードできるので是非手元で動かしてみてください?

`Intrinsic Content Size`を用いると動的なコンテンツの変化によるサイズ調整を自動で実装できるようになるという話を[〜その1 概要編〜](https://qiita.com/fummicc1_dev/private/64ee8dfef8a54df0f4d

元記事を表示

[AutoLayout] Intrinsic Content Sizeを活用しよう〜その1 概要編〜

## 始めに

こんにちは、[Life is Tech ! #1 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/life-is-tech)の22日目を担当しますふみっちです。

今回はiOSアプリ開発における`Intrinsic Content Size`に関する知見が最近深まってきたのでそれに関して話していけたらいいなと思います。どうぞお付き合いください。

また、この記事は〜その1 概要編〜となっていて、`Intrinsic Content Size`に関する説明を行います。実装とそれに関する解説は[Life is Tech ! #2 Advent Calendar 2020 22日目](https://qiita.com/fummicc1_dev/private/b0078216c9d8fb9281a2)に書かせてもらったので合わせて確認してもらえると嬉しいです☺️

## 主題

AutoLayoutは制約を用いてUIView同士の相対的な距離を決定します。その制約は一度に有効となる個数に限りがあります

元記事を表示

API呼び出し元(呼び出し契機)によって、呼び出し結果のハンドリングを分けたい

### やり方

API呼び出しを担当するメソッドをラップするとできます。
以下では、API呼び出しを担当するメソッドを`APIClient.fetch`とします。

“`swift:
func fetchData(from caller: ) {
APIClient.fetch { result in
// 呼び出し元情報 caller と呼び出し結果 result を使って、ハンドリングを行う
}
}
“`

RxSwiftを使っている場合でも、同じようにできます。

“`swift:
func fetchData(from caller: ) {
APIClient.fetch
.subscribe(onNext: { result in
// 呼び出し元情報 caller と呼び出し結果 result を使って、ハンドリングを行う
})
}
“`

元記事を表示

【ReactNative】実機ビルド、テストアプリビルド(Archive)で起きたトラブルシューティング~IOS編~

こんにちは。ブリューアスwebフロントエンジニアのsuginokoです。
前回、[実機ビルド、APK生成で起きたトラブルシューティング~Android編~](https://qiita.com/suginoko/items/cdae27d68a08decddc8c)
書かせていただきましたがこちらのIOS編です。

今回も初めてのReactNativeで出くわしたトラブルシューティングを書いていこうと思います。
前回と同じことを書きますが、アプリ開発に携わったことのない同じようなフロントエンジニアさんに届きますように~
(ios色々苦戦して弊社のエンジニアに聞きまくりました。ありがとうございます。優しい世界。)

## 環境
* react: 16.9.0
* react-native: 0.61.5
* react-native-agora: 2.9.1-alpha.2
* react-native-firebase: 5.6.0

※XCode12
※パッケージはおおまかに使用したものだけ記載
基本的にはwindowsで実装してますが、expoは使用しておらず、ios開発は別途M

元記事を表示

Flutter – AppBarのTitleを左寄せ、中央寄せにする

#AppBarの作成
まず、シンプルなAppBarを作成します。
コードは以下のとおりです。

“`dart
appBar: AppBar(
title: Text(
“AppBar Sample”,
),
),
“`
次にその挙動を確認してみましょう。
機種は以下のとおりです。
iOS:iPhone12ProMax
Android:sdk gphone x86 arm
#iOS
![iOS – 初期状態](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/980010/5c7f8a83-43fd-9caa-c919-5f36eddacc67.png)
#Android
![Android – 初期状態](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/980010/6b3fa921-e015-488d-4030-f365548ef371.png)
#挙動の共通化
おわかり頂けましたか?
iOSではタイトルが中央揃いになってい

元記事を表示

iOS学習初期に作成したアプリをユニバーサルアプリになるように作り直してみた

この記事は株式会社アクシス [Advent Calendar](https://qiita.com/advent-calendar/2020/mediaxis) 25日目の記事です。

半年ほど前にiOSのキャッチアップで最初に電卓を作成したのですが、
出来心でビルドしてみたらiPhone11を持っている選ばれし者にしかまともに使えない(UIが崩壊する)電卓になっていたのでiPadまで綺麗に表示できるのを目指して修正します。
## ユニバーサルアプリとは
– 様々なタイプのデバイスに対応するアプリをさします

## 現状
– iPhone11では少しガタガタではございますが、まぁ何とか使えるぐらいだと思います!
– iPadはご覧の通りでございます!

| iPhone11 | iPad |
| ——– | ——– |
|![qita3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657899/eeb76da5-278c-4875-78bf-7c16152be628.png)|![

元記事を表示

[Swift] 現在propertyWrapperでは変数名に日本語を使えません

Swiftは変数名に日本語や絵文字や、その他のかなり多くの文字を使うことができます。
そこで英語の苦手な知人に日本語名の変数でいろいろ説明していたのですが、なんと「propertyWrapperでは日本語が使えない」という事実が明らかになったので、共有します。

環境はSwift5.3です。

# 実験
実際にはSwiftUIをいじっている際に起こったのですが、結局問題なのはpropertyWrapperなので一緒です。
まずはシンプルなラッパとそれを使う構造体を宣言します。ポイントは「値」という変数名です。

“`Swift
@propertyWrapper
struct MyWrapper{
let wrappedValue: T
let projectedValue: T

init(wrappedValue value: T){
self.wrappedValue = value
self.projectedValue = value
}
}

struct MyValue{
@MyWrapper

元記事を表示

【Swift】日時、数、通貨、データサイズ、リスト、人の名前、単位付きの数から String へのフォーマットは自分で実装しないで

**令和1998年……?**

この記事は [iOS Advent Calendar 2020](https://qiita.com/advent-calendar/2020/ios)

元記事を表示

GoogleFormをチョット理解してガワだけオリジナルフォームにする

#ガワだけオリジナルフォーム??
画面だけを自分の好きなデザインのフォームにしたいけどGoogleFormみたいな機能使いたいという時に使うちょっとした小技です。

#下準備
適当にGoogleFormを作ります
適当に入力形式の項目などを追加します
適当に解答集計用のスプレッドシートを作っておきます
適当なところから叩けるようにログインが必要のない設定にしておきます

#Chrome Developer Tool
GoogleFormを開いたまま、ChromeのDeveloperToolを開きます
※option + command + i (Macの方は)

#テキストフィールドに割り当てられたフィールド名を確認する
![スクリーンショット 2020-12-25 6.00.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84002/e2455b87-bc73-4790-154c-db01210c447f.png)

#実はこっちの方が楽説・・・・
昔こんなのあったけ?みたいな気持ちですが、

元記事を表示

【SwiftUI】アプリの起動状態を取得する方法【iOS】

初投稿です!
SwiftUIでiOSアプリを開発していて、アプリの起動状態を取得する方法を調べるのに苦労したので備忘録も兼ねてこの場で共有させていただきます。

# iOSアプリにおける起動状態について
iOSアプリの起動状態はActive, Inactive, Backgroundの3つの状態に分けることができます。
状態遷移図は下図の通りです。起動するときはInactiveを経由してからActiveになることや、ActiveからBackgroundになるときもInactiveを経由することが分かると思います。

詳しくは[SwiftUI] Textの省略位置の指定方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638786/d8465754-0bc8-dec4-d213-d2fdc238fea7.png)

調べ方が悪くなかなか情報が見つからず、「SwiftUI Text Overflow」で調べてようやく見つかりました。文字溢れっていうんですね。

“`Swift
struct TestView: View {
var body: some View {
VStack{
Text(“SwiftUIでTextの省略位置を指定するにはtruncationModeを使用しましょう”)
.truncationMode(.tail)
.lineLimit(1)
Text(“SwiftUIでTextの省略位置を指定するにはtruncationModeを使用しましょう”)
.truncatio

元記事を表示

かくつかないiOSアプリを作るために

## 自己紹介

Link-Uの原野です。iOS 50% / Web フロント 50%くらいで仕事をしてます。

## iOSにおけるカクツキとは

iOS では画面をスクロールした際に、滑らかにスクロールせず一瞬アニメーションが飛んでしまうフレーム落ちをするタイミングがあります。
これはユーザー体験によくない影響があり、iOS アプリでは改善の対象となります。

Appleも最近この辺に力を入れているっぽく、WWDCでも一大テーマとして多くのセッションがありました。

## iOS の描画の流れ

まずはカクツキの機序を知るために、iOSが描画のために何をやっているかをざっくり追っていきましょう。

### リフレッシュレート

iOS では画面の描画の処理は一定のリフレッシュレートで行われています。
その速度は iPhone/iPad では 60Hz(16.67ms/回)、最新の iPadPro では 120Hz(8.33ms/回)となります。
カクツキは描画のための処理がこのリフレッシュレート内で処理しきれない場合に発生します。

### RenderLoop

iOS では描

元記事を表示

【Flutter】スマホアプリでよく見かけるチュートリアルページを作る方法(3つのパッケージを比較)

# 最終的にこういったチュートリアルが作れるようになります

左から、tutorial_coach_mark flutter_sliding_tutorial flutter_overboardを使用したチュートリアルページです。

元記事を表示

OTHERカテゴリの最新記事