- 1. 今更ながらRiverPodのdependenciesをためしてみた
- 2. AnimatedSwitcherが動かない!というときの対処法
- 3. [SwiftUI] 個人的に有用だと感じたテクニック集を『Effective SwiftUI 候補(仮説)』として公開しました。
- 4. SwiftでのJSONのパースは構造体?辞書?
- 5. iOS ReactNativeでOpenUrlを使って設定アプリの好きな画面へ遷移させる方法
- 6. SwiftでFontファイルを読み込んで使う
- 7. 【Flutter】XcodeをアップデートしたらiOSシュミレーターでビルド失敗(domain=NSMachErrorDomain, code=-308)
- 8. iOS safariで「問題が繰り返し起きました」と出てページが表示できない場合の対応方法
- 9. [SwiftUI 2.0] 忙しい人向けの #WWDC20 まとめ
- 10. SPM対応していないライブラリをSPM Package内で利用する
- 11. アラートダイアログ基本パターン
- 12. CapacitorとCreate React AppでiOSアプリを作り実機実行するまで
- 13. Neumorphismを自動生成するアプリをリリースした
- 14. iOS アプリで古い iOS バージョンをサポート終了するときのチェックリスト
- 15. Swift Playgrounds「ミームメーカー」Appプロジェクトを解説する
- 16. 行動のログを取りたい! ~ 友人と早起きチャレンジ with iOSのショートカット
- 17. SwiftUI Tutorial の応用2
- 18. SwiftUIでAppStoreカードを表示する
- 19. UITextFieldの中の文字をサイズによって可変にする
- 20. 複数のオンラインカレンダーを、ミスなく事故らず使いたい
今更ながらRiverPodのdependenciesをためしてみた
タイトルの通り、今更ながらRiverPodのdependenciesを試してみたメモです。
※RiverPod 1.0.3で確認
# そもそもdependenciesとは?
https://pub.dev/documentation/riverpod/latest/riverpod/Provider/dependencies.html
かんたんにいうと、ProviderRefからScopedなProviderにアクセスするためのパラメータです。dependenciesにScopedなProviderを指定すると、そのProviderもScopedになりアクセスが可能になります。“`dart
final scopedValue = Provider((_) => ‘1’);
final valueDependsOnScopedValue = Provider(
(ref) => ref.watch(scopedValue),
// この指定により、scopedValueがoverrideされるとvalueDependsOnScopedValueもscopedになる
de
AnimatedSwitcherが動かない!というときの対処法
# 結論
これを
“`dart
class _BadWidget extends ConsumerWidget {
const _BadWidget({Key? key}) : super(key: key);@override
Widget build(BuildContext context, WidgetRef ref) {
return AnimatedSwitcher(
duration: const Duration(milliseconds: 100),
child: Icon(
ref.watch(_shouldShowDetail)
? Icons.keyboard_arrow_up
: Icons.keyboard_arrow_down,
),
);
}
}
“`
こうする
“`dart
class _GoodWidget extends ConsumerWidget {
const _GoodWidget({Key? k
[SwiftUI] 個人的に有用だと感じたテクニック集を『Effective SwiftUI 候補(仮説)』として公開しました。
## Tl;Dr
GitHub Discussions にて公開しています。
https://github.com/YusukeHosonuma/Effective-SwiftUI
どなたもリアクション・コメントなどで、お気軽にディスカッションいただければ幸いです :pray: (もちろん読むだけでもOKです)
## 経緯(興味のある方のみどうぞ)
私はここ2〜3ヶ月ほど、SwiftUI にどっぷりと浸かっていました。
SwiftUI はコードの見た目からは想像できないほど **難しく**、また Apple からは推奨される設計・実装パターンはおろか、必要十分といえるドキュメントすら提供されていないように感じました。
そのような状況の中で試行錯誤を繰り返しているうちに、これは多くの SwiftUI プロジェクトで使える **効果的(Effective)** なパターン・慣習であると感じるものが見つかってきました。
最初はそれを思いついたタイミングで、雑にツイートしていました。
https://twitter.com/tobi462/status/15026601736
SwiftでのJSONのパースは構造体?辞書?
今回はJSONをパースする際、どっちの方がいいのかが気になったので検証してみました。
検証が甘いかもしれませんが多めにみてください# どっちが楽か
これは検証するまでもなく圧倒的に辞書の勝利ですJSONの情報量が少なければ構造体も苦ではありませんが返ってくるKeyの数が300件+ネストも深いともなってくると苦行です
# 速度
実はこれがメインです
構造体の方が早いのは予想がつくのですがどのくらい差があるのかが気になったので検証してみました。**計測の方法**
こちらの記事の計測方法を使いましたhttps://qiita.com/osamu1203/items/9160f5f4951ebe205ea3
**取得するJSON**
TwitterAPIのJSONを使用します
“`
https://api.twitter.com/1.1/users/show.json
“`**HTTP通信**
“`Swift
// 構造体でパース
public func user_info(screen_name: String) async throws ->
iOS ReactNativeでOpenUrlを使って設定アプリの好きな画面へ遷移させる方法
# 結論:rootが必要ない
OpenUrlで色んなアプリを呼び出せる。
“`
line://
fb://
“`
などiOSの設定アプリを呼び出す方法でハマったのでメモとして残します。
ReactNativeのLinkingで呼び出す場合
“`
export const openSetting = () => {
Linking.openURL(‘App-Prefs:APPLE_ACCOUNT&path=PASSWORD_AND_SECURITY’).catch(
err => Alert.alert(‘URLを開けませんでした。’, err),
);
};
openSetting()
“`一度AppleSignInしたらFullNameが取れなくなるのでユーザーに解除してもう一度やって貰いたかったから調べました。
参考URL:
https://blog.thetheorier.com/entry/ios15-settings-urlscheme
https://github.com/FifiTheBulldog/ios-settings-url
SwiftでFontファイルを読み込んで使う
# XCodeにFontファイルを取り込む
– [x] Copy items if needed
– [ ] Create groups
– [x] Create folder referenses
– [ ] Add to targets
こんな感じで取り込めたらOKです
# Info.plistでFontの設定

# はじめに
タイトル通りですが、XcodeをアップデートしたくてmacOSも同時にMontereyにアップデートさせました。するとアプデ前まで正常にシュミレーターでビルドできていたのに、?のようなエラーで失敗するようになりました。。。。
“`console
Unable to install /Users/userName/flutter/insta/build/ios/iphonesimulator/Runner.app on DE709473-59D9-47A3-AE88-A4F9A756EE21. This is sometimes caused by a malformed plist file:
ProcessException: Process exited abnormally:
An error was encountered processing the command (domain=NSMachErrorDomain, code=-308):
The operation couldn’t be completed. (Mach error -308 –
iOS safariで「問題が繰り返し起きました」と出てページが表示できない場合の対応方法
## 事象
コンテンツが多い一覧ページをスマホのブラウザで開くと、__https//hogehoge.comで問題が繰り返し起きました。__
__問題が起きたため、このWebページを再度読み込みました__といった現象に遭遇した。

【環境】
検証端末:iphone XS、iphone12Pro
iOS:15.4.1
Safari:15.4
Chrome:100.0.4896.85## 詳細
調査の過程で以下のようなことがわかりました。
・PCブラウザでは発生しない(chrome、Safari、firefox)
・iOSのSafariだけでなく、iOS版のchromeでも似た現象になる
・キャッシュやcookieなどを削除しても現象は起こる
・webフォントやJSなどは使っていない
・ページ内のコンテンツ数を減らすと表示できる
・コン
[SwiftUI 2.0] 忙しい人向けの #WWDC20 まとめ
以前、[note でまとめた WWDC2020 の記事](https://note.com/tobi462/n/n4755c3320183) へのリンクです。
最近、SwiftUI を触ってる関係で見直す機会が多かったのですが、note のマガジンだと検索性が悪かったのでまとめ直しました。
## SwiftUI
### [忙しい人向けの What’s new in SwiftUI](https://note.com/tobi462/n/n4f4e7a46f343)
* [App](https://developer.apple.com/documentation/swiftui/app)
* [Scene](https://developer.apple.com/documentation/swiftui/scene)
* [WindowGroup](https://developer.apple.com/documentation/swiftui/windowgroup)
* [Settings (macOS)](https://developer.apple.com/docum
SPM対応していないライブラリをSPM Package内で利用する
サンプルプロジェクト
https://github.com/kntkymt/UseNonSPMFrameworkInSPMSample
# どんな状況?
`SampleView` と言う`target`で `Hoge` と言うライブラリを使いたい。しかし、`Hoge`はSPM対応していない。
“`swift:Package.swift
// swift-tools-version: 5.6import PackageDescription
let package = Package(
name: “Package”,
defaultLocalization: “en”,
platforms: [.iOS(.v15)],
products: [
.library(
name: “SampleView”,
targets: [“SampleView”]),
],
dependencies: [
// SPM対応していない!
// .
アラートダイアログ基本パターン
## 概要
UIAlertControllerによるダイアログの表示を、汎用クラスを作成し各画面から呼び出せるようにします。
一般的なボタン1つもしくは2つのダイアログを想定。
3つ以上のボタン構成や、テキストフィールド付きのダイアログは使用頻度が低いと考え汎用クラスの要件には含めていません。## 基本的なダイアログの記述
“`:AlertDialog
let alert = UIAlertController(title:<#title#>, message:<#message#>, preferredStyle:UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: <#buttonTItle#> , style:UIAlertAction.Style.default){
(action:UIAlertAction)in
//ボタンが押された時の処理})
alert.addAction(UIAlertAction(title: <#cancelButtonTitle
CapacitorとCreate React AppでiOSアプリを作り実機実行するまで
CapacitorとCreate React AppでiOSアプリを作り実機実行するまでの手順。
## 環境
– MacBook Pro (16-inch 2019)
– macOS Monterey 12.3.1
– Xcode 13.3.1
– Node.js v14.17.1## 手順
### 準備まずcocoapodsをインストールする。
“`sh
sudo gem install cocoapods
“`### プロジェクトの作成
“`sh
npx create-react-app my-app –template typescript # TypeScriptを使うかどうかは好みで
cd my-app
npm install @capacitor/core
npm install @capacitor/cli –save-dev
npx cap init # アプリ名等をここで質問されるので決める。後から変更もできる
npm install @capacitor/ios
npx cap add ios
“`### 実行
“`sh
n
Neumorphismを自動生成するアプリをリリースした
# Neumorphismとは?

こんな感じのやつです「Soft UI」とも呼ばれています
# Neumorphism for SwiftUI

– BaceColor (基準となる色)
– Intensity (影の強度)
– Distance (影のぼかし)
– Light (光の方向)
– Shape (Neumorphismの形)上記の5項目を設定すればSwiftUIのNeumorphis
iOS アプリで古い iOS バージョンをサポート終了するときのチェックリスト
# はじめに
業務で iOS12 のサポート終了対応を行った。
次回作業時ラクするために対応したことをチェックリストにしておく。# チェックリスト
– [ ] ユーザー数の調査
– サポート終了する iOS バージョンのユーザーがどれくらいいるのか GA などのアナリティクスツールで調べる
– DAU、MAU それぞれ全体の何パーセントか、ユーザー数の推移とか
– [ ] 責任者へ確認
– サポート終了の決定権を持っている責任者へユーザー数の調査結果を確認してもらって判断してもらう
– サポート終了したい理由があればそれも合わせて確認
– NG の場合
– どうすればサポート終了していいのか明確にしてもらう
– 明確にするために追加で調査が必要なのであれば対応
– 次回確認日を決める
– OK の場合
– サポート終了までのスケジュールを決めて関係各所へ共有する
– ユーザーに周知することも考慮し余裕を持ったスケジュールにする
– [ ] お知らせ
Swift Playgrounds「ミームメーカー」Appプロジェクトを解説する
# この投稿は何?
iPadとMac向けアプリの「Swift Playgrounds4」に用意されている「ミームメーカー」Appプロジェクトを学ぶための解説です。
学べること
– 非同期的にデータ(画像、JSON)を取得する仕組み
# Appの概要
「ミームメーカー」は、[WEBサイト上にあるJSONデータ](http://playgrounds-cdn.apple.com/assets/pandaData.json)を取得してパンダミームを作成するアプリです。ミームを作成するには、指定したURLから画像を読み込みます。
画像を読み込む際には、インターネット上のサーバに接続するので、状況によっては時間がかかることもあります。
そこで、非同期的なリクエストを使用します。
これによって、アプリは画像読み込みを待機している間も他の処理を継続し、ユーザの操作にも反応できるようになります。
行動のログを取りたい! ~ 友人と早起きチャレンジ with iOSのショートカット
## はじめに
[前記事](https://qiita.com/Beef/items/b7dad88869999359cb9a)にて、自分の行動を GAS を使って記録するアイデアを述べました。今回は GAS の他に iOS のショートカットを使う方法を検討してみました。全部を一気に書き出すとまとまりがなくなるので、今回はその一部です。ちなみに、現在は [Toggl Track](https://toggl.com/track/) なるアプリと自前で作成した行動記録ファイル、どちらが使い勝手がいいかを検討中です。すでに大概の車輪はできているんですよね。すごい。
### 早起きチャレンジとは
早起きして一日を生産的に使おうと、友人と協力して早起きチャレンジをしています。
規定の時間までに、Slack で起床報告をすれば OK 。忘れれば、Starbucks を相手にプレゼントという企画です。ただこの「 Slack を立ち上げ、挨拶を入力し、送信する」のが(友人には悪いのですが)手間に感じていました。そこで、iOS のショートカットアプリを利用して上記(+ α)のショートカットを作った
SwiftUI Tutorial の応用2
## 内容
– SwiftUI Tutorial の応用2## 開発環境
### ハードウエア
|項目||
|—|—|
|PC| MacBook Air(M1,2020) メモリ:16GB ストレージ:1TB |
|実機 | iPhoneSE(2nd Generation 128GB iOS 15.3.1) |
|PCと実機を接続する|[USB-C Digital AV Multiportアダプタ](https://www.apple.com/jp/shop/product/MUF82ZA/A/usb-c-digital-av-multiport%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)|### ソフトウエア
|項目||
|—|—|
|言語|Swift 5.5.2|
|IDE|Xcode Ver 13.2.1|
|その他|Visual Studio Code Ver 1.64.2|### バージョン管理
[GitHub – 実際にコードを確認できます](https://github.com/tanakadaichi1989/M
SwiftUIでAppStoreカードを表示する
# AppStoreカードとは何か?
正式な名前が分からないので勝手に名前を付けさせてもらいました!
(多分正式名称は「SKOverlay」だと思います。)
まだ浸透してないと思うので検索に引っかかるようにタイトルはそのままにしておきます笑
![]()
これです!これをSwiftUIで実装していこうと思います。
# 実装
“`ContentView.swift
import SwiftUI
import StoreKitstruct ContentView:
UITextFieldの中の文字をサイズによって可変にする
# 前提条件
UITextFieldが左右の制約により適切に突っ張っていること。# バージョンによってやり方が異なる
## iOS13より前のバージョン
`_placeholder.adjustsFontSizeToFitWidth`をUITextFieldに以下のように設定するとプレイスホルダーを含めた文字が小さく表示されます。
Min Font Sizeを設定
## iOS13移行
https://d
複数のオンラインカレンダーを、ミスなく事故らず使いたい
## はじめに
これまで、2つのドメインのGoogleカレンダー(以下`gcal`)を、連携して使用していました。あくまでも目的は「予定の見落としによる事故(=ダブルブッキング)を起こさず、平和なカレンダー生活を送る」です。
設定の詳細は、[GoogleWorkspaceのカレンダーについて、ドメインをまたいだ共有を、なるべく便利に(じぶんのイメージと合うように)した](https://qiita.com/hann-solo/items/3edb03ecdf05ce35aaa1) に書きました。
ざくっとまとめると
– macOSではブラウザでカレンダーを扱う
– `gcal-A`がメインで、`gcal-Z`は補助的な役割とする
– iOSは、`gcal-A`を見に行くとなっていました。こうして平和なカレンダー生活