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

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

Inside Flutter を読んで「Flutter 完全に理解した」状態を抜けた時に書いた記事たち

公式ドキュメントの 1 ページである、 “Inside Flutter” を頑張って読みました。

https://flutter.dev/docs/resources/inside-flutter

元々はアドベントカレンダーのネタ探しにと読んでみたのですが、このドキュメントを読むうちに Flutter の Widget が描画される過程で何が起きているかが分かってきたり、また `Text` や `setState()` といった普段何気なく使っているクラスやメソッドの実装を読んで理解できるようになったりといろいろな発見がありました。

さらに、Flutter の仕組みを知れば知るほど次から次へと新しい発見や疑問が湧いてきて、これは「Flutter 完全に理解した」状態を抜けて「Flutter 全然わからん」の状態に入ったと言えるのではないかと思い、その時に得た発見をいろいろと記事にしてみました。

この記事ではその時に書いた記事を一覧してみたいと思います。

## 【Flutter】Navigator.of(context) から理解する 3つのツリー

https://zenn.

元記事を表示

Flutterをはじめる[環境設定〜立ち上げ]

# 概要
現在エンジニアの需要が高まりと同時にエンジニア転職のために某スクールに通って勉強をする人等が増えている。
そのような人が勉強する内容はwordpress等のweb制作であることが多い。このような技術は差別化を測るのが難しいのでモバイルアプリの開発をしようと考えた。
swiftやkotlinではなくFlutterを選択した理由は主に以下の3つである。

・iosとandroidの両方の開発ができる
・Google様がバックに居るためメンテナンスが定期的に行われる
・新しい技術なので参入できる可能性が高い

# 実行環境
・mac Catalina

# インデックス
[1.環境構築](#1-環境構築)
[2.flutter doctorのエラー対処](#2-flutterのエラー対処)
[3.アプリの立ち上げ](#3-アプリの立ち上げ)

#1. 環境構築
環境構築は非常に簡単で以下のステップを踏むと完了する。

1.Flutter SDKのdownload
2.環境変数の設定
3.Android studioのdownload

以下で簡潔にそれぞれのステップについて解説す

元記事を表示

Flutter初心者に必要な最低限の知識

## もくじ

1. はじめに
2. 作成したコードの紹介
3. 基本構成
4. 動的に表示を変更
5. 画面遷移
6. 抑えておくべき記法
7. さいごに

### はじめに

Javaの経験はありますが、flutterおよびdartは初心者の私がアプリ作成までに学んだ、最低限これだけは抑えておくべき内容を厳選してまとめておきます。
「初心者だけど、とにかく早くアプリが作成したい」「flutter始めたいけど調べるのが面倒くさい」なんて人にはおすすめできる内容になっていると思っています。
この記事が誰かのお役に立てれば幸いです。

[flutterとは](https://qiita.com/nskydiving/items/4fcf0dbad923d50601f9)

### 作成したコードの紹介

![sample1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527168/63f68de3-ab35-5250-b148-cf1bc538beb3.jpeg)

![sample2.jpg](h

元記事を表示

GKAccessPointの実装

##はじめに
iOS14からGameKitでGKAccessPointというものが使えるようになりました。
ランキングを表示するLeaderboardsや、ゲーム内の達成項目を表示するAchievementsにワンタップでアクセスできるようにするボタンのようなものです。
非常に簡単に導入できるので、おすすめです。

##GKAccessPointとは
以下画像の左上にあるアイコンのようなものです。
画面の四隅のうちどれかに設置することができ、今回私の場合は左上に設置しています。
Appleはなるべく左上に設置することを推奨しています。
![3E821B2A-5646-44C3-BA66-20FDEE20D46D.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681109/6b0437c0-7d06-829f-8ab0-77cc1a9cb232.png)

AccessPointをタップすると以下のようなGameCenterの画面が表示されます。
このメニュー画面のことをDashboardと呼びます。
A

元記事を表示

筋肉にちゃんと「お願いマッスル!」するために、1からReact学んでアプリをリリースした話

2020年の秋に、個人的にReact(expo)でアプリを制作・リリースしました。
日頃の業務はHTMLのマークアップ・コーディング・JSはやってもバニラかjQueryなので、案件ではないとはいえ、初めてやってみてコンポーネントの概念など勉強になりました。
主に参考記事の抜粋が多いですが、アプリを作った中でつまづいたこと・学んだことを書きたいと思います。

# 作ったアプリについて

![pitch-mo-voice-counter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40940/c50c3ab2-4a2a-c413-0438-cd8dafc09509.png)
[**ピッチモボイスカウンター**](https://apps.apple.com/jp/app/%E3%83%94%E3%83%83%E3%83%81%E3%83%A2%E3%83%9C%E3%82%A4%E3%82%B9/id1527541064)

「1、2、3、1回」、「1、2、3、2回」…のようにピッチ(1、2、3のリ

元記事を表示

UITextField で英数字のみ入力可能にする

UITextFieldDelegate の shouldChangeCharactersIn メソッドで、許容したい文字以外があった場合に テキスト変更できない False を返します。

“`swift

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.count > 0 {
var allowedCharacters = CharacterSet(charactersIn: “abcdefghijklmnopqrstuvwxyz1234567890_”) // 入力可能な文字
allowedCharacters.insert(charactersIn: ” -“) // “white space & hyphen”

let unwantedStr = string

元記事を表示

【iOS】DynamoDBからデータを取得する方法

## はじめに
swiftでDynamoDBと連携するアプリの開発をすることがあると思いますが、記事が少なかったのでデータを取得する方法をまとめてみました。

## 開発環境
– Swift 5
– Xcode 12
– [aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios)
– cocoapods

## 1. AWSの認証設定
こちらにまとめましたので参考にしてください。
[【iOS】AWS DynamoDBからテーブル名を取得する方法](https://qiita.com/shungo_m/items/4d06133344ccc4a23f90)

## 2. podにAWSDyanamoDBを追加
プロジェクトにすでにPodが導入されていることが前提です。
もしインストールされていなければ、インストールしてください。

Podfileに`AWDDyanmoDB`を追加します。

“`:Podfile
target ‘aws-sdk’ do
# Comment the next line if

元記事を表示

[Swift] UserDefaultsの使い方

#UserDefaultsとは
アプリ起動時にキーと値のペアを永続的に保存してくれます。
UserDefault classは、デフォルトシステムと対話するためのプログラム上のインターフェイスを提供してくれる
と、公式ドキュメントに載っていました。
このデフォルトシステムを使用すると、例えば、動画再生速度を自分好みに設定して(再生速度1.5倍速とか?)保存できます。
次にアプリを起動する際には、先程の設定がデフォルトになっているので、1.5倍速のままになっている訳です。
#デフォルトオブジェクトの保存
保存のメソッドは型ごとにあります。

“`swift
func set(Any?, forKey: String)
//Sets the value of the specified default key.
func set(Float, forKey: String)
//Sets the value of the specified default key to the specified float value.
func set(Double, forKey: String)

元記事を表示

【iOS】AWS DynamoDBからテーブル名を取得する方法

## はじめに
案件でAWSと連携したアプリを開発することになりましたが、意外と参考にする記事が少なくて苦労したので、手順をまとめてみました。
今回はDynamoDBからテーブル名を取得してみます。

## 開発環境
– Swift 5
– Xcode 12
– [aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios)
– cocoapods

## Cocoapodsの導入
[aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios)のREADMEの手順通りに進めていきます。

まずcocoapodsをインストールします。

“`:ターミナル
$ gem install cocoapods
$ pod setup
“`

プロジェクトのディレクトリ直下でpod init

“`:ターミナル
$ pod init
“`

Podfileが作成されているので使用するAWSのサービスを記載します

“`:Podfile

元記事を表示

iOSでボタンを何度もタッチしないと押せない現象

#はじめに
webの改修のためボタンを追加したのですが、iOSでボタンを押そうとしたとき何度かタッチしないと反応しない現象が起こりました。

#原因
iOSではhover等を1タッチ分としてカウントします。
今回の場合既存コードで全体にかかる外側のdivにonmousemoveイベントがかかっており、これを1回タップした後フォーカスを移動させるためにもう1タップしてからでないと中に追加したボタンを押せなかったようです。

#修正方法
onmousemoveイベントを対象部分のdivに移して、ボタン部分に影響しないよう修正しました。

#まとめ
ブラウザによってcssやJSの動作が異なることがあるのですが、iOSはそういうバグが特に多かったので今後は先に自分でテストしておきたいと思います。

元記事を表示

ライブラリを利用してProgressBarを実装

#はじめに
現在開発中のカウントアプリにあとゴールまでどのぐらいなの感覚的に伝えるためにProgressBarを導入する事にしました。
この記事では、その際に試した事をアウトプットしようと思います。
#完成形
ezgif-6-e8bc45d9fe83.gif

#使用したライブラリ
・MBCircularProgressBar
→https://github.com/MatiBot/MBCircularProgressBar

#CocoaPodsを利用してインストール
CocoaPodsを使用してSwiftConfettiViewをインストールしてください。

“`
pod “MBCircularProgressBar”
“`
Podfileに上記を入力して“pod install “。

#Storyb

元記事を表示

[Swift5]UIButtonタップしてタブを切り替える方法(応用可能)

## 今回やりたいこと
ログインページなどでよく見かけるモーダル遷移で表示したController内で、
UIButtonをタップすると、指定したTabを選択状態にしてモーダル画面を閉じるということ。

つまり、モーダル画面の裏側でタブの切り替えをおこなうということです。

挙動動画
https://gyazo.com/828856720584516e602ebffd83f71c22

添付動画を例に挙げると、タブ1(アカウントタブ)をタップしてモーダル画面を表示し、
キャンセルボタンをタップするとタブ(ニュースタブ)に切り替わってからモーダル画面を閉じるということ。

これはタブの数が増えても応用できますし、UIButtonだけでなく様々な場面で応用できます。

## 実装コード

“`swift
//キャンセルボタンをタップすると呼ばれる
@objc func cancelTap() {

//①タブバーのインスタンスを取得
if let tabBarController = UIApplication.shared.keyWindow?.rootView

元記事を表示

[Swift] private(set)を簡単に説明

#private(set)とは
private(set)が定義されているクラスや構造体の中では変更できるが、

それ以外の場所では読み取りのみ行う事が出来ます。

privateだけの場合は、定義されている場所内では変更・読み取りできるが、

それ以外では変更も読み取りも出来ません。

private(set)は変更できないようにアクセス制限するが読み取りは可能でprivateより制限がゆるいという事です。

#使ってみた
private(set)の方はエラーにならず、読み取り出来ています。

“`swift
class test {
private var number1 = 0
private(set) var number2 = 2
}

let Test = test()

class test2 {
let a = Test.number1 //’number1′ is inaccessible due to ‘private’ protection level
let b = Test.number2
}
“`

元記事を表示

podfile関連エラーと対処法(自分用メモ)

#発生したエラー
iphoneのシミュレータでデバックしようとすると下記のようなエラーが出る

##エラー文①
“`dart
Error output from Xcode build:
objc[27479]: Class AMSupportURLConnectionDelegate is implemented in both ?? (0x1f5bfb8f0) and ?? (0x11acd02b8). One of the two will be used. Which
one is undefined.
objc[27479]: Class AMSupportURLSession is implemented in both ?? (0x1f5bfb940) and ?? (0x11acd0308). One of the two will be used. Which one is
undefined.
“`

##エラー文②
“`dart
Error output from CocoaPods:
[!] Automatical

元記事を表示

NFCタグにスマホをかざして家電を操作できるようにしてみた

#はじめに
ここ最近、リモートで働くようになって家にいる時間が長くなってきました。少しでも面倒なことはなくしていきたいということで、NFCタグにスマホをかざすだけで家電を操作できるようにしました。ちょっと宣伝になってしまうのですが、少し前に[nature_remo_api](https://rubygems.org/gems/nature_remo_api)というgemを作ったので、そちらを使っていこうと思います。

#用意するもの
– iPhone
– NFCタグ(自分は[こちらのNFCタグ](https://www.amazon.co.jp/gp/product/B088HD9JQS/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1)を購入しました。ただ、ちょっと反応が悪い気がする・・)
– Raspberry Pi
– Nature Remo

#全体の流れ
ざっくりですが、最終的な全体の構成は以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

【iOS】最初に表示する storyboard を変更する

# 環境

* Xcode 12.3

# 方法

info.plist の Main storyboard file base name だけでなく、下図でハイライトされている行も変更する。
 ![スクリーンショット 2020-12-12 10.32.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650727/e05045f3-0d3f-ee2d-e955-484d581b06a8.png)

元記事を表示

[SwiftUI]SwiftUIの記法をSwiftらしく理解する。

[SwiftUI](https://developer.apple.com/jp/xcode/swiftui/)はこれまでのUIKitを用いたUIの作成に変わる新たな方法としてWWDC 2019で発表されたフレームワークです。最近ではWidgetがSwiftUIでないと作れなかったりと、将来的にはSwiftUIを用いた開発が主流になっていくと思います。
自分もだいぶ前からSwiftUIの勉強をなかなか気乗りせずにいましたが、Widgetを期に本格的に勉強を始めました。。

↓有限不実行のツイート