- 1. flutter_riverpodでアプリをMVVMにする
- 2. 手順メモ NiftyのセカンドメールをiPhoneから使えるようにする
- 3. [swiftUI]せっかくなのでアドベントカレンダーが作りたい(後編)
- 4. スマホの充電を騙くらかすアプリを作ったらAppleに怒られた話
- 5. SwiftUIのPull to Refresh実現方法ケース別まとめ
- 6. 今更聞けない Auto Layout を使うときに考えるべきこと
- 7. Swift Package ManagerをiOSで使う時はxcodeprojではなくPackage.swiftで読み込もう
- 8. 【Flutter】日々のスキマ時間で、7日間でiOSアプリのリリース
- 9. 【SwiftUI】通知バナーのようなUIを作ってみた
- 10. iPhoneのフォトライブラリから複数写真を選択【PHPickerViewController】
- 11. SCNViewの描画結果をPIPで表示する
- 12. SwiftUI で幅が不揃いなセルのリストを実装する
- 13. iOSアプリのメモリリークの検知方法・改善方法
- 14. WordPress テーマ使用でのランディングページ制作についてメリット・デメリットなど【LP】
- 15. 学内で開催したiOS勉強会の感想
- 16. 個人的なモバイル向けのアイコン対応
- 17. Builder パターンについてまとめてみた【Swiftでデザインパターン攻略 #4】
- 18. SwiftUI の Preference の基礎
- 19. 経過時間を計測してグラフを出力する①
- 20. Alamofire+Codableをasync/awaitを使ってリクエストする
flutter_riverpodでアプリをMVVMにする
前回のログインアプリをflutter_riverpodを使用して、MVVM風にリファクタしてみました。
前回作成したアプリ(https://qiita.com/yufuku/items/24dac97e6052b2571386)
設計方針については下記を参考にさせていただきました。
https://github.com/wasabeef/flutter-architecture-blueprints今回のゴールはview(ui)側で実装していた処理をviewModelに移行して、view側ではstateを持たないようにすることです。
最初のフォルダ構成とコードは下記になります。
“`shell
└──lib
├── main.dart
├── requester
│ └── requester.dart
└── ui
├── hello.dart
└── login.dart
“`“`dart:lib/main.dart
import ‘package:flutter/material.dart’;
import
手順メモ NiftyのセカンドメールをiPhoneから使えるようにする
# はじめに
すごくマイナーな話で、なかなかネットに情報がなかったので、自分用メモ# Nifty側設定
最初にNifty側で、セカンドメールのメールアカウントに対してimapを有効にする。
(popでも設定できそうだがこちらの方が便利なので。)名前 (任意)
メール (メールアドレス)
説明 (任意)受信メールサーバー
ホスト名 imap.nifty.com
ユーザー名 (メールアドレス)
パスワード (パスワード)送信メールサーバー (詳細画面に)
smtp.nifty.com
SSL 使用
認証 パスワード
サーバーポート 993
[swiftUI]せっかくなのでアドベントカレンダーが作りたい(後編)
#前回までのおさらい
####概要
こちらは会社のアドベントカレンダーを書く企画に便乗してアドベントカレンダーを作ってみたい記事の後編です。
前編は [こちら](https://qiita.com/mame3/items/6187f393d3d64c9e3a95 “[swiftUI]せっかくなのでアドベントカレンダーが作りたい(前編)”)。####前編の最後の進捗
~~1.1日~25日までのボタンを配置する~~
~~2.ボタンをタップすることでモーダル表示されるようにする~~
3.モーダルで何かしらの表示をする ←今回はここからやっていきます。
4.もし当日以降の日付がタップされた場合、「まだ開けられないよ!」と表示する#3.モーダルで何かしらの表示をする
何にしようかな、と悩んだのですが、それぞれの日にちに古今東西の偉人の名言を入れることにしました。
もちろん25日はキリストです。お誕生日なので。
見た目はこんな感じ。
![スクリーンショット 2021-12-11 11.55.33.png](https://qiita-image-store.s3.ap-northeas
スマホの充電を騙くらかすアプリを作ったらAppleに怒られた話
本記事はクソアプリAdvent Calendar 13日目の記事です。
私は6月からモバイルアプリ開発の道に飛び込んだ新参者です。
普段は個人開発でFlutterでのアプリをひたすら作成しています。「クソアプリAdvent Calendarとは、なんて素敵な試みだろう、これは参加するしかない!」
そう思い今回初参加させていただきます。
本記事では、作成したクソアプリの紹介ののち、
余談としてAppleに怒られた話を致します。
「こんなアプリを作ると、こういうリジェクト理由で割とガチ目に怒られる」
という一つの事例として捉えていただければと思います。##作成したアプリ##
ちょっと気まずい相手からLINEの連絡先を聞かれ、
「スマホの充電が切れていたらいいのに、、、」
こう思ったことありませんか?
そんな時のために、いつでもどこでも充電切れ画面を表示するアプリを作成しました!
![Android_FeatureGraphic_ja.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c
SwiftUIのPull to Refresh実現方法ケース別まとめ
最近iOS開発に復帰した @ruwatana です。[iOS Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ios) の13日目を担当させていただきます :bow:
# SwiftUIでPull to Refreshを実現するには?
SwiftUI自体が提供されてからの歴は非常に浅く、UIKitで実現できていた簡単な機能をSwiftUI上で実現することが難しいケースも少なくありません。Pull to Refreshの純正APIは、SwiftUI 3.0(iOS 15以降)でようやくサポートされました。
しかし、詳しくは後述しますがまだまだ制約が多い現状です。
そこで、2021年末時点のSwiftUIにおけるPull to Refreshの実現方法とどれを使うべきかのベストプラクティスについてまとめてみたいと思います。## Case1: Apple純正APIを使う
SwiftUI 3.0 (iOS 15以降) にて、SwiftUIユーザが待ちに待ったPull to Refreshの機能がついに提供されま
今更聞けない Auto Layout を使うときに考えるべきこと
# 前書き
ご無沙汰しております。[元 Auto Layout 絶対◯すマン](https://qiita.com/lovee/items/7454c9f27638a8e471fa)です。
元、と聞くと、まるで筆者が Auto Layout と和解したかのように見えますが、そんなことは一切ありません。単純に SwiftUI の登場により、アップルが事実上自ら Auto Layout を◯してくれた[^apple-killed-autolayout]から、もう私の役目は果たしたと思って、「元」と名乗っただけです。
[^apple-killed-autolayout]: とは言え、実は少なくとも現在の SwiftUI の場合、裏ではまだ Auto Layout が動いているけどね…あくまでユーザ=エンジニアが直接 Auto Layout と格闘しなくて済んだだけです。
ところが残念ながら、登場して 2 年経ちましたが、SwiftUI がまだまだ UIKit を完全に取っ払えるほど強力とは言えませんしバグや罠もたくさん潜んでいます。筆者自身の個人プロジェクトですら、SwiftUI の
Swift Package ManagerをiOSで使う時はxcodeprojではなくPackage.swiftで読み込もう
Swift Package Manager(以降SwiftPM)がXcodeで正式サポートされてからCocoaPodsやCarthageからの移行を検討しているプロジェクトが増えてきています。
その際、大方の記事では以下のようにXcodeでパッケージを取り込む方法が紹介されます。https://dev.classmethod.jp/articles/ios-add-library-with-spm/
https://qiita.com/hironytic/items/09a4c16857b409c17d2c
https://www.yururiwork.net/archives/517
しかし、この方法で移行しようとして2つの課題に当たりました。
1. リポジトリ毎にこの作業をする必要がある
1. 複数のTARGETで同じパッケージを使用する時の動線が分かりづらい
(TARGET -> Build Phases -> Link Binary With Librariesから追加できる)特に長く続いたプロジェクトでは当然それだけ多くのライブラリをCocoaPod
【Flutter】日々のスキマ時間で、7日間でiOSアプリのリリース
## はじめに
この記事はGAOGAO Advent Calendar 2021 ことしもGAOGAOまつりです の11日目の記事です。
昨日は、「[エンジニアの自分がなぜデザインに目覚めたのか](https://note.com/shimataro/n/n2955689946b9)」でした。こんにちは。
世界中でモノつくりの連鎖を起こすスタートアップスタジオGAOGAOでソフトウェアエンジニアをしているしまむら([@smtrdev](twitter.com/smtrdev))です。記事の公開が遅れてしまい申し訳ありま
【SwiftUI】通知バナーのようなUIを作ってみた
## バナーを出したい
こんな感じの記述方法で簡単に画面上部にスライドインでバナーを出したい“`swift
View
.bannerVisible(with: Binding)
“`## できたもの
通知バナーのようなUI作ってみたらアニメーションについてちょっとだけ理解が深まったhttps://t.co/nScc1QzTlb pic.twitter.com/55ifJxBh1y
— Yusuke Miyata (@yuskey38) December 12, 2021
iPhoneのフォトライブラリから複数写真を選択【PHPickerViewController】
2020リリースのPHPickerViewController。
#UIImagePickerControllerとなにがちがうか
**複数枚取得
アルバムへのアクセス
検索機能
プライバシー許可がいらない**アプリでフォトライブラリーの全ての写真を取得するのではなく、
シェアピッカーからユーザーが選んだ写真だけをアプリに渡します。
【複数枚選択】###PHPickerの設定と表示
PhotosUIをインポートし、使用するクラスにPHPickerViewControllerDelegateを継承させます。
“`swift
import PhotosUIclass ViewController: UIViewController,PHPickerViewControllerDelegate {
…
“
SCNViewの描画結果をPIPで表示する
# SCNView の描画結果を PIP で表示する
* SCNView の描画結果を AVPictureInPictureController を使って PIP で表示させる方法です
~~アプリがバックグラウンドの時に更新されないので有用性は未知数ですが、、、(止まるの忘れてました)~~SCNViewの描画結果をpipに描画できた!
アプリをバックグラウンドにすると更新止まるけど… pic.twitter.com/MAD4laqHit— ふじき (@fzkqi) December 11, 2021
SwiftUI で幅が不揃いなセルのリストを実装する
この記事は [ドワンゴ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/dwango) 11 日目の記事です。
## 書くこと
複数のタグをタイトルによって異なる長さで配置するような UI はよく見かけます。下記のような UI です。
すなわち、配置される各々のセルのサイズが、内包するコンテンツの内容によって動的に定まるような UI です。
UIKit を採用している場合であれば `UICollectionView` にて `UICollectionViewLayout` を利用すれば、割と柔軟にレイアウトを構築することができます。一方、SwiftUI には `UICollectionViewLayout` のような仕組みはありません。そこで、今回は Sw
iOSアプリのメモリリークの検知方法・改善方法
## はじめに
iPhoneは年々高性能化していますが、同時にモバイルアプリ自体も高機能化し、求められるものも多くなってます。ただ機能を満たすだけでなくアプリとしての体験をより良くしていくためにはパフォーマンスの改善が必要です。一口にパフォーマンスを改善するといっても色んな観点がありますが、その一つにメモリ管理があります。
最近メモリリークの調査で結構苦労したのでその過程で得た知見をまとめてみました。同じくiOSアプリのメモリリークに苦しんでいる人の助けになれば幸いです。## 環境
本記事で紹介する内容は以下の環境を前提にしています。- Xcode13.1
- Swift5.5## メモリリークとは
**メモリが解放されないまま残り続けること**です。
メモリが解放されないのは参照カウントが0にならなくなってしまった時であり、それは循環参照という問題が発生している際に起こります。
この参照カウントや循環参照という概念を知るためにはSwiftの**ARC(Automatic Reference Counting)**という仕組みを知る必要があります。https://do
WordPress テーマ使用でのランディングページ制作についてメリット・デメリットなど【LP】
以下ページ、知り合いがWordpressを使って作ったランディングページなのであるが、
https://hukugyou-diamond.com/lp/engineer/
たまたまエンジニア関連の記事である奇遇性は置いておくとして(笑)
メリット・デメリットそれぞれ解説していくとする。
※これはあくまで本質的なところを捉えて書いており、そこまで詳しい技術面に関しては書いていない。
■メリット■
操作が簡単
操作は言うまでもなく簡単であり、初心者の方でも視覚的に操作できるため、参入障壁を下げることが出来る点、効果的である。
綺麗なテンプレートが用意されている
比較的整ったテンプレートや素材・ボタンなど用意されているため、余計な手間・タスクを省くことが出来る。
また、初心者の方にとっては品質向上にもつながってくるため、クオリティーを求める手段の1つにもなる。■デメリット■
スキルがあまり身に付かない
HTMLやCSS、Javascriptなどのスキルはあまり身に付かない。
例えば、ある1色の色の素材しかない場合に、HTMLの色コードを変更する必要
学内で開催したiOS勉強会の感想
# はじめに
こんにちは、HCB Advent Calendar 2021の11日目を担当する、kudokaiです。
現在僕は、大学の仲間数人と学内ハッカソンを企画・運営しており、ハッカソンイベントの一部として各種勉強会を企画し開催しています。
僕はiOS勉強会を担当したので、どんな勉強会だったのかを今回紹介します。# 勉強会の資料作成まで
今回の勉強会は1年生や2年生をメインターゲットとしているため、分かりやすい資料かつ、振り返りでも使えることが要求されます。
勉強会を開催したことがなかったため、どこまで盛り込めばいいのか・どこまで説明したらいいのか線引きがとても難しかったです。
経験者からするとかなり冗長な部分があり、「そんなん説明せんでも分かるわ! 舐めとんか!」と思われるかもしれないですが、プロジェクト作成やファイル作成の仕方も説明しています。
完成図を見せただけで、実装をサクサク進めることができるほど簡単なアプリを題材にしました。# 勉強会の内容
当初はオンラインでの実施を予定していましたが、大学から貸し出せるMac Bookの台数を超えてエントリーがあったため大学で
個人的なモバイル向けのアイコン対応
# 前提
- 色んな記事あるけど、個人的にこれでいいやといった内容を整理
- リリース時にしか対応しないので、しばらくやらないと忘れるので半分以上自分用# 手始めに
1. まずは1024x1024でアイコン素材を作成(ココは自力で頑張る)
2. iOSは矩形(勝手に丸みを帯びてくれる)
![icon_ios.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/45ec7c8d-0382-18e9-ecb4-5e4787b6e9df.png)
3. Androidは角に丸み(勝手に丸みを帯びてくれない)
- (個人的にphotoshop的にradius:200px)
![icon_android.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/bc60e78e-670d-2286-c3d1-e75d50977628.png)2. 各種アイコン
Builder パターンについてまとめてみた【Swiftでデザインパターン攻略 #4】
## Builder パターン とは
#### 概要
「Builder」を直訳すると「建築者」という意味です。
プログラミングにおいては、インスタンスの生成を担う「建築者」と捉える事ができます。Wikipediaによると
>オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にする。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580445/29e6784a-a7f9-6122-c0d3-53e3c670843e.png)
[Wikipediaより](https://ja.wikipedia.org/wiki/Builder_パターン)#### SwiftにおけるBuilder パターン
インスタンス生成時に、多くの引数を`init`に渡すため、気づいたらコードが冗長化して見づらくなっているということが自分の中ではあるあるパターンです。Swiftにおいては、デフォルト引数という仕組みがありますが、使いすぎるとインスタンス初期化時にゴチャゴチャしま
SwiftUI の Preference の基礎
## 概要
SwiftUI の Environment は View のツリーの親から子へ値を渡す仕組みです。一方で、子から親に値を渡す Preference という仕組みもあるのですが、あまり馴染みがなかったのでまとめておきます。 `.anchorPreference` や `.overlayPreferenceValue` などの API についてはまた別にするとして、この記事では Preference の概念と基本的な使い方について書きます。
## Environment
まずは Preference の対になる Environment について簡単にまとめておきます。 Environment の仕組みを使うと、直接の子 View だけでなく自分の子となる View ツリーのすべての View に値を渡すことができます。自作して自分の好きな値を Environment にすることも可能ですが、普段の開発では SwiftUI に組み込みのものを使うことが多いでしょう。
例えば、以下のように書くと `Text` のフォントは `.largeTitle` に従って大きく表示さ
経過時間を計測してグラフを出力する①
経過時間を計測してグラフを出力する機能を実装していくうう
手順1.2の二つの記事に分けて記述します。
手順
1.時間を計測する関数を作成し、結果を配列に加える
2.経過時間の配列からグラフを作成し表示#1.時間を計測する関数を作成し、結果を配列に加える
####1.1 まず初めに、変数・パーツをいくつか宣言します。
|変数名 |型・クラス |役割 |
|---|---|---|
|start |Bool |経過時間を計測しているのかどうかを判断する |
|times |Doubleの配列 |経過時間を格納する配列 |
|startTime |Date |計測開始時間を格納する変数 |
|button |UIButton |時間を計測する関数を呼び出すためのボタン |```swift
import UIKit
class ViewController: UIViewController {//時間を計測中か判断する理論値を入れる変数
var start:Bool?
//経過時間を格納する配列
var
Alamofire+Codableをasync/awaitを使ってリクエストする
Swiftにも5.5でついにSwift Concurrencyが導入されたので一番有用そうなAPI取得周りをasync/awaitで記述できるようにしてみます。
今回はSwiftの通信ライブラリとしてスタンダードであろう[Alamofire](https://github.com/Alamofire/Alamofire)+[Codable](https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types)を環境として用いて実装しています。(そのうちAlamofire公式にもasync/awaitで受け取れる口は出来るとは思いますが現時点ではiOS15以降が要求されるのでしばらくは入らないかと思います)
## AlamofireのExtensionを記述する
Alamofireはクロージャで結果を受け取とれるので、これをasync/awaitに変換します。
旧来のクロージャ構文を変換するには[withCheckedT