- 1. プログラミング超初心者がFlutterの環境構築をしてみた
- 2. [Swift5]storyboardとコードでNavigationBarをカスタムする方法
- 3. Metal で サポートしている GPU family と feature set を調べる
- 4. 【SwiftUi】経過時間の表示とListViewのセルデザイン
- 5. Flutterチュートリアルを咀嚼する part1
- 6. Flutter実装時にお世話になったページ 2020/11/19
- 7. 【第4回】初心者二人で0から麻雀アプリ開発
- 8. XGBoostをiOSアプリで動作させる
- 9. [Swift][MVVM]関数型ViewModelのススメ
- 10. [swift]選択肢をもつダイアログの後に処理に応じて再びダイアログを表示して画面遷移したい
- 11. 【SwiftUI】RPGにあるような攻撃エフェクトを再現してみたい!
- 12. アクセス修飾子まとめ【Swift】
- 13. Flutter実装時にお世話になったページ 2020/11/18
- 14. iOSの言語設定を取得するベストプラクティス(Swift)
- 15. カプセル化について
- 16. Mac M1(Apple Silicon)でhomebrewをインストールできるの?
- 17. UIPanGestureRecognizer(パン)とUISwipeGestureRecognizer(スワイプ)をいっしょに使う
- 18. Self-Sizing(Auto Layoutによる高さの自動調整)機能について
- 19. 【SwiftUI】Mapkitから取得した情報をFirebaseに保存する
- 20. Flutter実装時にお世話になったページ 2020/11/17
プログラミング超初心者がFlutterの環境構築をしてみた
やったこと
KBOYさんのYouTubeを見ながら、Flutterの環境構築をしました。1、Flutterのインストール
2、Flutterのパスを通す2からすでに、苦戦するという「マジか」と思いつつなんとかできました。
.bash_profile にパスを記載しようとしたのですが、
最近のPCは bash ではなく.zshrc っていうのが最近の新しいパス設定の場所らしい
参考にした動画
[Swift5]storyboardとコードでNavigationBarをカスタムする方法
## なぜstoryboardだけでやらない?
Swiftで開発を進める際に、storyboardでUIを構築するか、コードのみでUIを構築するか初学者の方は悩まれるのでは?と私は思います。storyboardのみで開発しても良いのですが、コードでカスタムした方が作業工数を減らせることや、デザインの変更などが必要な場合に、コードの方が編集しやすい点などからコードでカスタムを行います。しかし、コードのみだと画面遷移などが直感的に理解しずらいので、今回は最低限をstoryboardで構築し、カスタム内容はコードで記述します。
その他にも、storyboardのみで構築するとコンフリクトが発生しやすい問題や、コードのみで構築するとコードの記述量が多くなるなど双方にメリット,デメリットが存在します。
## storyboardでNavigartionControllerの実装
まずstoryboardでNavigationBarを用意します。①storyboardのiPhoneを選択(下記画像中央)
![image.png](https://qiita-image-store.s3
Metal で サポートしている GPU family と feature set を調べる
### M1 Mac mini がやってきた
我が家に M1 Chip の Mac mini がやってきました。これまで、Metal の試行錯誤は、Intel Mac の Simulator と 実際の iPhone や iPad でサポートしている機能が違うので、試行錯誤の効率が悪かったのですが、M1 Chip Mac を入手したので、A12相当の機能の試行錯誤などの効率があがるものと期待していました。しかし、M1 Chip の Mac の Simulator で検証コードを動かすと、思いもよらぬところで落ちました。
「あれ?」と思い、iPad Pro で実行すると、落ちません。そこで、色々調べ始めると、M1 Chip + Big Sur + Xcode 12.2 のシミュレータでは、A8相当にしかならない事に気がつきました。そこで、2020年10月21日つまり比較的最近アップデートされた、Metal Feature Set Tables を調べてみても、M1 の記述が全くありません。
【SwiftUi】経過時間の表示とListViewのセルデザイン
# はじめに
SwiftUIでRelativeDateTimeFormatterクラスを用いて、経過時間を取得できるようにすることと、取得した経過時間を表示することを目的とする。UIのデザインはcakesのnote風のデザインを参考にカード型のViewを作ります。
今後は今回作成したカードに前回までに実装した地図と都道府県市町村名を表示できるようにし、Firebaseで更新できるようにすることが目的です。
前回までの記事は以下を参考ください。**参考記事**
[【SwiftUI】Mapkitから取得した情報をFirebaseに保存する](https://qiita.com/m37335/items/d548db31ef6b67cd3c83)# 開発環境
OSX 10.15.7 (Catalina)
Xcode 12.2.0
CocoaPods 1.10.0# RelativeDateTimeFormatterの実装
基準日時からの経過時間を出力するクラスです。Twitterなどの○秒前や○日前などを表示をすることができます。
ロケーションを設定することで英語表記や日本
Flutterチュートリアルを咀嚼する part1
Flutterって一つのソースを書くだけでiOSもAndroidもアプリ作ってくれるんだって
すごいなー
勉強してみよう#対象のチュートリアル
https://codelabs.developers.google.com/codelabs/first-flutter-app-pt1#0
#コピペしてできあがったもの
スタートアップ企業の名前をつけてあげるために単語二つの組み合わせをリスト化してくれるアプリ![スクリーンショット 2020-11-17 16.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283826/a192fc3c-b4cb-941a-5006-90fcf9a06acb.png)
#ソースコード
“`dart:main.dart
import ‘package:flutter/material.dart’;
import ‘package:english_words/english_words.dart’;void main() => runApp(My
Flutter実装時にお世話になったページ 2020/11/19
## なにか
毎回、同じ問題に、同じ検索して、同じページで解決してるので。。。
## “`Image.network“` や “`NetworkImage“` で画像が表示されない場合がある
特に画像が大量にある画面でたまに表示できてない画像があった。で、ログが流れる。
> ════════ Exception caught by image resource service ════════════
> Connection closed before full header was received, uri = https://xxxxxx[Stack Overflow “Network Image – Connection closed before full header was received…”](https://github.com/flutter/flutter/issues/25107#issuecomment-655655719)
これで解決する前に、同じページの別のコメントや
[I globally overrode the Htt
【第4回】初心者二人で0から麻雀アプリ開発
[第3回の記事はこちら](https://qiita.com/RTkd59/items/039c380f0955de103886)
##改版履歴
2020年11月19日投稿
##第4回会議(2020年11月13日)###議題
・画面デザイン詰める
・実装してみたい機能
・来週からの活動
・プロジェクト全体の大まかな期間##画面デザイン
画面のデザインはgoogledrive内のdraw.ioを使用して作りました。この時、ホーム画面から成績入力画面に移動する際に、画面全体で遷移させるのか、画面を部分的に遷移させるのか悩みました。部分的に遷移するのが今の流行ということなので、部分遷移でいこう!ということになりました。また、ポップアップで入力画面を立ち上げるという案も出ました。##実装してみたい機能
今回の会議で、お互いにやってみたいことが結構出てきました。
・テーマ
最近のアプリはダークテーマとか、ホワイトテーマとか自分の好みで切り替えられるようにしたい。デフォルトであるらしい…❓・githubの芝みたいなもの
打数に応じてカレンダーに色づけするみたいなことがで
XGBoostをiOSアプリで動作させる
Kaggleなどのコンペで人気のXGBoostをiOSアプリで動作させたので、その方法を紹介します。
### XGBoostとは
勾配ブースティング決定木 (GBDT, Gradient Boosting Decision Tree)を実装したライブラリです。
### GBDTとは
勾配ブースティング決定木とは、手短に説明すると『決定木を複数組み合わせたアンサンブル学習の一種で、勾配降下法を用いて学習を行うもの』です。
決定木とは、木構造を用いて回帰や分類を行う手法です。アンサンブル学習は、複数の決定木を用いて予想の精度を上げる手法です。
ブースティングというのは、アンサンブル学習の一種で、それぞれの学習器を直列に学習する手法です。それ以外のアンサンブル学習の手法としては学習器を並列に学習させるバギングなどがあります。例えば、ランダムフォレストはバギングの一種です。
勾配降下法とは、ディープラーニングでもよく用いられる手法で、重みを少しずつ更新して勾配が最小になるように学習する手法です。
### 図で説明します
駆け足過ぎたので、図で説明します。
例えば、決定木は下
[Swift][MVVM]関数型ViewModelのススメ
# 概要
本稿ではアプリアーキテクチャの1形式であるMVVMの、特に`ViewController`と`ViewModel`の関連を記述するスタイルとして`関数型ViewModel`を紹介します。参考リンク: [Modeling Your View Models as Functions](https://medium.com/grailed-engineering/modeling-your-view-models-as-functions-65b58525717f)
## 前提知識
本稿を読む前提として、以下の知識があると理解しやすいです。
– iOSアプリ開発
– Swift 5
– [RxSwift](https://github.com/ReactiveX/RxSwift)# MVVMを使ったアプリの実装例
いくつかのスタイルで簡単な機能のアプリを実装してみます。## 仕様
まず、以下のようなアプリを考えてみましょう– 画面の中央にカウンターを表示する
– +ボタンを押すとカウンターの数値が1増える
– -ボタンを押すとカウンターの数値が1減る
– 数値が偶
[swift]選択肢をもつダイアログの後に処理に応じて再びダイアログを表示して画面遷移したい
タイトル長くなりがち。
###やりたい事
アカウント設定画面でログアウトボタンを押した時に、
– 「ログアウトしますか?」というダイアログに「OK」/「キャンセル」の選択肢を用意。
– 「OK」を押すと、APIでログアウト処理が行われる。
→成功すると、「ログアウトしました」というダイアログが表示され、画面が遷移する。
→失敗すると、「ログアウトに失敗しました」というアラートが表示される。
– 「キャンセル」を押すと、最初のダイアログが消える。っていう処理を行いたい:hugging:
###とりあえず作ってみた
今回は、
– ちゃんと読んでほしいアラートは手動で閉じる。
– お知らせ程度のダイアログは勝手に消える。みたいな感じでメソッドを使い分けています。
“`AccountViewController.swift
import UIKit
final class AccountViewController: UIViewController {
@IBAction private func tappedLogoutButton(_ sender: U
【SwiftUI】RPGにあるような攻撃エフェクトを再現してみたい!
#はじめに
こんにちは!@kanato4です。仕事ではJavaがメインなのですが、プライベートではSwiftを勉強している若輩者です。ただ、Swiftははじめて間もないので基本的な文法しか分かりません。これからもっと知識をつける予定です。
さて、そんなSwift初心者の私ですが、何を思ったのか「思いきってSwiftUIを使って遊んでみよう!」と考えたわけです。
SwiftUIは2019年に発表されたフレームワークなのですが、従来のSwiftの書き方とかなり違ってくるという話だったので、「やっぱこれからiPhoneアプリ作るなら知っておかないとね☆」と挑戦したわけですが、案の定苦労しました。。
今回はそんな私がはじめてSwiftUIで作れた成果物?を折角なら見てもらいたいなぁと思い記事にしました。アウトプット大事!
#完成したもの
まずは完成したものを見てやってください。
[![Image from Gyazo](https://i.gyazo.com/57f8330a06cfc6de680a0906e2f9e727.gif)](https://gyazo.com/57f83
アクセス修飾子まとめ【Swift】
# はじめに
コードを書く際にあまり意識していなかったのと、理解が曖昧だったので備忘録として投稿します。# アクセス修飾子とは?
アクセス修飾子とは、クラスや関数等にアクセス制限を設けるために利用します。## internal
* 同じモジュール内であればアクセスすることができる。#### モジュールとは
モジュールとは`import`して読み込んで利用する`Framework`を作成するための仕組み。## private
* 一番制約の厳しいアクセス修飾子。
* 同じファイル内からのアクセスのみ許可されている。
* クラス単位ではなく、ファイル単位のアクセス制御であることに注意がいる。( Swift4から`extension`で`private`プロパティにアクセスできるようになった。)## fileprivate
* 同じファイル内からのアクセスのみ許可されている。## public
* 別のモジュールからでもアクセスできる。
* 継承やオーバーライドが不可能## open
* 別のモジュールからでもアクセスできる。
* 継承やオーバーライド
Flutter実装時にお世話になったページ 2020/11/18
## なにか
毎回、同じ問題に、同じ検索して、同じページで解決してるので。。。
## ContainerのBottomにだけ、枠線を入れたかった
[Stack Overflow “How to add a border to a widget in Flutter?”](https://stackoverflow.com/a/53680045)
## url_launcherでカスタムURLスキーマを使用したアプリ起動ができなかった(Android)
AndroidManifestまで意識が行かなかった。。。
[Stack Overflow “[url_launcher] When targeting API 30, canLaunch always retrurns false”](https://github.com/flutter/flutter/issues/63727#issuecomment-691066239)
## flutter upgradeしたら、ビルド通らなくなった。。。
こんなエラーが出るようになりました。
“`
Flutter Row()
iOSの言語設定を取得するベストプラクティス(Swift)
## はじめに
iOSの言語設定を取得するベストプラクティスを紹介します。
## 環境
### PC
– OS:macOS Big Sur 11.0.1
– Xcode:12.2 (12B45b)
– Swift:5.3.1### シミュレータ
– 機種:iPhone SE (2nd generation)
– OS:iOS 14.2## 結論
– アプリがローカライズされていない
– `Locale.current` ではうまく取得できないので、 `Locale.preferredLanguages` から `Locale` を生成し直す
– アプリがローカライズされている
– アプリ単位で優先する言語を指定できるので、「おまけ」に書いたようにローカライズの設定を使うのがベター
– OS単位の言語設定を取得したい場合は、ローカライズされていないときと同様の方法でいい## 言語設定の取得を試す
結論に至るまでにいろいろ試したので、過程を紹介します。
__PREFERRED LANGUAGE ORDER(使用する言語の優先順序): English
カプセル化について
##カプセル化とは
データとメソッドを1つのオブジェクトにまとめてその内容を隠蔽すること!だそうです。
オブジェクト外から直接アクセスすることを出来なくして、不正なアクセス・意図しない変更から守ることができるのです!##オブジェクト指向の1種
オブジェクト指向の構成要素3つのうちの1つになるそうです。
構成要素は以下の3つです。+ 継承
+ カプセル化
+ ポリモーフィズム##カプセル化するには?
データを保護することがカプセル化です。
その保護をするために、アクセス修飾子と言うものを使ってアクセスを制限していきます。##アクセス修飾子
アクセス修飾子には制限の範囲に合わせて使うものが変わってきます。
以下が一覧になります。
私も使いこなせているわけではないですが。(privateしか使ったことありません)
カプセル化ではprivateを使用します。+ open モジュール外からもアクセスできる。
+ public モジュール外からもアクセスできる。 サブクラス化されない。 overrideできない。
+ internal モジュール内ならアクセ
Mac M1(Apple Silicon)でhomebrewをインストールできるの?
## 今まで通りにインストールしようとしたら…
現状、ターミナルから今まで通りhomebrewをインストールしようとするとこのような出力が表示されます。
“`bash
$ /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”Homebrew is not (yet) supported on ARM processors!
Rerun the Homebrew installer under Rosetta 2.
If you really know what you are doing and are prepared for a very broken experience you can use another installation option for installing on ARM:
https://docs.brew.sh/Installation
“`今まで通りではダメみたいですね。
## 対策1
UIPanGestureRecognizer(パン)とUISwipeGestureRecognizer(スワイプ)をいっしょに使う
同じviewにパンとスワイプを同時に与えると、パンしか効かなくなる。
素早くスワイプした時だけスワイプを発火してそれ以外の時はパンするコードがこちら。
基本PanGestureで、Pan速度が一定を超えた時だけSwipeになります。
[スタックオーバーフローの記事の引用です。元記事には実際のジェスチャアニメーションの様子があります。](https://stackoverflow.com/questions/4875255/is-there-any-priority-condition-between-gesture-methods-pan-gesture-and-swipe-g/48235812#48235812)“`swift
let swipeVelocity: CGFloat = 500@objc func didPan(_ sender: Any) {
guard let panGesture = sender as? UIPanGestureRecognizer else { return }
let gestureEnded = Bool(panGesture
Self-Sizing(Auto Layoutによる高さの自動調整)機能について
##はじめに
この機能を知るきっかけとなったのは、セルのimageViewを誤って大きくしてしまったことでした。
オレンジが変更箇所になってます。この結果、チェックマークが表示された時にCellが縦に大きくなると言う現象が起きました。
この件を相談すると、Self-Sizingという機能が元々備わっていて、セルの表示に影響が出たと分かりました。
![スクリーンショット 2020-11-17 20.27.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/aa1b3555-0eaf-a2dc-3de3-d2621e082281.png)##Self-Sizingとは
タイトルにもある通り、セルなどの高さを自動で調整してくれる機能です。
Xcode 9(iOS 11 SDK)でデフォルトになったみたいです。それ以前はコードで表示しなければいけなかったみたいです。
私はデフォルトになってからswiftの勉強を始めたので気にしたこともなかったです。##最後に
今回の件は、
そりゃ、セルの
【SwiftUI】Mapkitから取得した情報をFirebaseに保存する
# はじめに
SwiftUIでMapkitとFirebaseを使用し、位置情報をデータベースに保存することを目的とする。
前回記事までにSwiftUIで取得した現在地から逆ジオコーディングし、都道府県名と市区町村名を取得するところまでを記載した。
今回は取得した情報をFirebaseに保存するところを記載する。
Mapkitを使った逆コーデイングについては前回記事を参考にしてください。**参考記事**
[【SwiftUI】Mapkitを使った位置情報の取得と逆ジオコーデイング](https://qiita.com/m37335/items/a18c0e8979f76a5ad271)# 開発環境
OSX 10.15.7 (Catalina)
Xcode 12.2.0
CocoaPods 1.10.0# 本日の記事内容まとめ
1. Mapkitを使用して取得した位置情報をfirebaseに保存する。
2. ボタンを押したときにデータベースを更新できるようにする
3. 異なるView間でのデータのやり取りをできるようにする# 今回記事で実装・更新したところ
今回記事で更新、
Flutter実装時にお世話になったページ 2020/11/17
## なにか
毎回、同じ問題に、同じ検索して、同じページで解決してるので。。。
## TabBarViewのスワイプによる切り替えを無効にしたかった
[Stack Overflow “disable swiping tabs in TabBar flutter”](https://stackoverflow.com/a/51523272)
## Firebase の Cloud Messaging による通知がiOSで受け取れなかった
公式ドキュメントをちゃんと読めってことですね。
iOS Integration のステップ2で、以下を読み落としてたのと
> Don’t follow the steps named “Add Firebase SDK” and “Add initialization code” in the Firebase assistant.Dart/Flutter Integration のここを実装せずにテストしてました。(Androidは無くても届く)
“`
import ‘package:firebase_messaging/fireba