- 1. 【SwiftUI】PhotosPickerで画像を選択した後、正方形に切り取りできるようにする
- 2. Swiftでバケツツールの塗りつぶし
- 3. [iOS17]Visionで写真の前景をトリミング
- 4. 【Flutter】iOSの生体認証の処理が失敗した時に表示される『パスコードを入力する』を消す方法
- 5. 【iOS】輸出コンプライアンスの回答を省略する
- 6. SwiftUI特定のアイテムまでスクロールする方法
- 7. Swiftで書かれたAffineTransformのコードがあったので姿勢推定のHeatmapの処理を実装してみた
- 8. 【Xcode】特定のプロジェクトだけDerivedDataの場所を指定したい
- 9. 【SwiftUI】カメラを使いたい
- 10. 【Flutter】ListViewを無限ループスクロールできるようにしてユーザーを幸せにする。
- 11. 【TCA】TCAFeatureActionが使用されていない時はSwiftLintで警告を出す
- 12. RxSwiftの.share()オペレーターの挙動についてまとめた
- 13. FirebaseCrashlyticsの導入、クラッシュレポートが作成されない
- 14. 新たに追加されたUIViewController viewIsAppearingの使い方
- 15. 【Xcode】ReleaseとDebugでアプリアイコンを分ける
- 16. [Swift] swift-macro-testingでマクロのテストをより効率的に
- 17. 地方銀行でモバイルエンジニア向け社内勉強会を実施してみた
- 18. 【Xcode】ReleaseとDebugでBundleIDを分ける
- 19. RealmSwiftのwhereにArrayで結合したQueryを利用する
- 20. 【Swift】モーダル画面の下スワイプで画面を閉じる機能を無効にする方法
【SwiftUI】PhotosPickerで画像を選択した後、正方形に切り取りできるようにする
# はじめに
画像を選択した後に画像を切り取りたいことがあると思います。
`allowsEditing`というフラグをtrueにすることで選択した後に切り取りの画面に遷移させることができます。# 実装
“`swift
import SwiftUIpublic struct PhotoPickerView: UIViewControllerRepresentable {
@Environment(\.dismiss) private var dismiss: DismissAction@Binding private var image: UIImage?
public init(image: Binding
) {
self._image = image
}public func makeCoordinator() -> Coordinator {
Coordinator(self)
}public func makeUIViewController(con
Swiftでバケツツールの塗りつぶし
# Swiftでバケツツールの塗りつぶし
ペイントアプリのバケツツールのように、閉じた領域を指定した色で塗りつぶす操作を、[Accelerate frameworkのflood fills](https://developer.apple.com/documentation/accelerate/vimage/vimage_operations/applying_a_flood_fill_to_an_image/applying_flood_fills_to_an_image?changes=___11&language=objc)を用いて簡単に実現できます
![Frame 293.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214313/3970d20a-1641-33db-6cb3-8c1c0b43de2f.png)
# 実装
CGImageをvImageに変換し、vImageFloodFill_ARGB8888を使って、塗りつぶしを始める点を含む閉じた領域を指定した色で塗りつぶします
[iOS17]Visionで写真の前景をトリミング
# Visionで画像の前景をトリミングする
iOS17からVisionに画像の前景をトリミングするAPIが追加されました
写真アプリで長押しするとハイライトされるアレです!
写真アプリにはiOS16から入っていたのですが、iOS17からVisionにAPIが入ったので、アプリにこの機能を簡単に組み込めるようになりました![Frame 288.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214313/219b9f77-2888-c405-6347-1fdda4844595.png)
WWDC23のセッション↓
https://developer.apple.com/videos/play/wwdc2023/10176/?time=165
# 前景を全て含むマスク画像を作成する
これだけのコードで前景のマスク画像を作成できます“`swift
func makeMask(inputImage: CIImage) -> CIImage {
let request = VNGenera
【Flutter】iOSの生体認証の処理が失敗した時に表示される『パスコードを入力する』を消す方法
# はじめに
業務で生体認証系のパッケージで[local_auth](https://pub.dev/packages/local_auth)を触る機会があり、セキュリティの観点からiOSの生体認証の処理が失敗したらパスコードを入力できないようにしたかったので実装しました。
ドキュメントに方法が記述されておらず、私が少しハマったため他の人が困らないように、と私のために備忘録として残しておこうと思います。
# 結論
生体認証の処理を実行時、連続で失敗すると『パスコードを入力する』ボタンが表示されますが、`IOSAuthMessages`クラスの`localizedFallbackTitle`プロパティを空文字にすることで『パスコードを入力する』を表示しないようにすることができます。:::note warn
あくまで2023年10月時点での情報のため、パッケージのアップデートによる破壊的変更や、Flutterのバージョンによって実装方法が変わる可能性がありますので参考程度にしていただけたらと思います?♂️
:::
# 執筆時の環境
– Flutter3.13.2
– local_au
【iOS】輸出コンプライアンスの回答を省略する
# はじめに
AppStoreに審査に出す際やテストフライトに出すときなど、毎回輸出コンプライアンスの設定をするのが面倒なので聞かれないように設定します# やりかた
`Info.plist`にITSAppUsesNonExemptEncryptionを追加して、`NO`を設定します
“`Info.plist
“`
ITSAppUsesNonExemptEncryption
![スクリーンショット 2023-10-09 17.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/
SwiftUI特定のアイテムまでスクロールする方法
今回は`ScrollViewReader`を使用して特定のアイテムまでスクロールする実装です。
実装サンプル
“`SampleScrollViewReader.swift
struct SampleScrollViewReader: View {
@State private var tee = [“緑茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”]var body: some View {
Swiftで書かれたAffineTransformのコードがあったので姿勢推定のHeatmapの処理を実装してみた
OpenCVをXcodeのバージョンに合わせてビルドするのがめんどくさい。
このめんどくいを解決するには、姿勢推定のHeatmap処理がOpenCVに依存しているのを解決する必要がある。
ここでコアな関数は[AffineTransform](https://docs.opencv.org/4.8.0/d4/d61/tutorial_warp_affine.html)。
実装のとっかかりがなかったので放置していたところ、Swiftで書かれたコードを見つける。[Perspective transform from quadrilateral to quadrilateral in Swift](https://rethunk.medium.com/perspective-transform-from-quadrilateral-to-quadrilateral-in-swift-5a9adf2175c3)
## 試しに以前C++のHeatmap処理をSwiftに書き直してみた
元のC++のコードはPaddlePaddleから持ってきた。
https://github.com/P
【Xcode】特定のプロジェクトだけDerivedDataの場所を指定したい
# はじめに
PluginなどでDerivedDataの中にファイルを作成する機能があるライブラリなどがあります。
そのファイルを取得したくてパスを指定しても、DerivedDataのパスが設定によって変化してしまうのでプロジェクト単位でDerivedDataのパスを指定できないかXcodeを調べてたら見つけたので記録しておきます。# やりかた
① 「File」を選択します
② 「Project Settings…」を選択します(もしくは「Workspace Settings…」)
![スクリーンショット 2023-10-08 16.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a7439396-f9f1-adeb-4586-ce6209d9b9b6.png)③ 「Custom Location」を選択します
![スクリーンショット 2023-10-08 17.03.02 1.png](https://qiita-image-store.s3.ap-north
【SwiftUI】カメラを使いたい
# はじめに
SwiftUIでカメラを使いたいと思ってもUIKitをコネコネしないと使えず、
めんどくさいのでコピペで使えるコードを記事にしておきます# 準備
Info.plistに以下の設定が必要です。|Key|Value|
|-|-|
|Privacy – Camera Usage Description|任意の文字列|![スクリーンショット 2023-10-07 19.45.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/dd195715-fec9-45d9-693c-44aca5ac91fe.png)
# 実装
“`swift
import SwiftUIpublic struct CameraView: UIViewControllerRepresentable {
@Binding private var image: UIImage?@Environment(\.dismiss) private var dismiss
【Flutter】ListViewを無限ループスクロールできるようにしてユーザーを幸せにする。
どうも、個人でアプリ開発をしているYuKiOです。
「最高にかっこいいメモアプリHacker Memo」や「社会や街の安全に貢献するためのプラットフォームアプリみんなのチカラ」などアプリを15本リリースしています。
今回の記事は、ListViewで作成したボタン一覧を無限ループでスクロールする方法を紹介したいと思います。
色々調べましたが、なかなか良い解決策がなかったので記事にしてみました。
もし、もっと楽な方法があれば、教えて欲しいです。
## 実現したかったこと
水平にスクロールして選択できるカテゴリ選択ボタンリストがあります。左右どちらにスクロールしても、前後が繋がってリストが表示され続ける無限ループのに表示したい考えました。無限ループにすることで、両端のボタンに素早くアクセスできるようになることで快適になり、ユーザーが幸せになると考えたからです。例えばリストのアイテム数が決まっている場合や、そこまで数が多くない(多くても20くらい)ことが想定される場合に限定される要望だと思いますが、以下のようにカテゴリ選択で今回は実装しました。
![IMG_2094.jpg](
【TCA】TCAFeatureActionが使用されていない時はSwiftLintで警告を出す
# はじめに
TCAFeatureActionについては以下の記事を見てくださいhttps://github.com/pointfreeco/swift-composable-architecture/discussions/1440
https://zenn.dev/kalupas226/articles/e214cf384a7b84
簡単にいうとActionを種類別に分けて、見やすさを向上させよう的なことです
# SwiftLintの設定
https://qiita.com/SNQ-2001/items/e202893e37898bb0c721https://qiita.com/SNQ-2001/items/8a4920a464b0cc3203fa
https://qiita.com/SNQ-2001/items/3bd22c9444910aa60fe7
# 実装
`.swiftlint.yml`に`custom_rules`という項目を追加します
“`.swiftlint.yml
disabled_rules:
…opt_in_rules:
…
RxSwiftの.share()オペレーターの挙動についてまとめた
### .share()について
– ColdからHotに変換するオペレーター
– Observableを複数のサブスクライバーで共有することができる“`swift
public func share(replay: Int = 0, scope: SubjectLifetimeScope = .whileConnected) -> Observable{
switch scope {
case .forever:
switch replay {
case 0: return self.multicast(PublishSubject()).refCount()
default: return self.multicast(ReplaySubject.create(bufferSize: replay)).refCount()
}
case .whileConnected:
switch replay {
case 0: return ShareWhileConnected(source: self
FirebaseCrashlyticsの導入、クラッシュレポートが作成されない
## 事象
クラッシュを起こしてもクラッシュログが作成されず、FirebaseコンソールのCrashlyticsトップ画面から切り替わらない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245300/8ffe7ea7-05f3-b6c2-dc53-a1055c833b98.png)クラッシュトリガーはドキュメントのものを利用
“`HogeSwiftUIView.swift
Button(“Crash”) {
fatalError(“Crash was triggered”)
}
“`## 結論
SPMでFirebaseを追加した時、Targetを選択していなかったため、Crashlyticsがプロジェクトに組み込めていなかった。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245300/e41352d0-c482-6eb8-ed60-ff922a2e4416.png)
新たに追加されたUIViewController viewIsAppearingの使い方
# 概要
新たに追加されたUIViewControllerの`viewIsAppearing(_:)`について説明します。https://developer.apple.com/documentation/uikit/uiviewcontroller/4195485-viewisappearing
viewIsAppearingは、画面の初期表示時にUIをアップデートしたい時に使うものになっています。
## viewIsAppearingが使える環境について
viewIsAppearingはiOS 13から使えるAPIになります。ですが、開発環境がXcode 15ではないと使えないという、iOSとしては珍しい、後方互換がサポートされている新規APIになります。## viewIsAppearingの特徴
[Choosing the appropriate callback](https://developer.apple.com/documentation/uikit/uiviewcontroller/4195485-viewisappearing#4230935)の図を見れ
【Xcode】ReleaseとDebugでアプリアイコンを分ける
# はじめに
昨日、「ReleaseとDebugでBundleIDを分ける」という記事を書きました。
今日は、「ReleaseとDebugでアプリアイコンを分ける」です。https://qiita.com/SNQ-2001/items/32d49401b9e14f889c09
# やりかた
① アイコンを2種類用意します
![スクリーンショット 2023-10-05 21.35.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1c9a6dc7-358e-ad36-2dfa-569e2591535e.png)② 本番用のアイコンを`AppIcon`にセットします
![スクリーンショット 2023-10-05 21.35.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8c75cf43-ab84-9da2-a514-39023d16a1db.png)③ 左下の「+」を押し
[Swift] swift-macro-testingでマクロのテストをより効率的に
先月、pointfreeから新たなライブラリである, swift-macro-testingが出ました。このライブラリを使ってみたところ、かなり便利だったので、今回は従来のマクロのテストコードで起こっていた不便な点と、swift-macro-testingを使用することでどういった点が便利になるのかなどを紹介していきたいと思います。
https://github.com/pointfreeco/swift-macro-testing
また、今回は`@PublicInit`マクロを例にしていきたいと思います。
`@PublicInit`は私のライブラリであるswift-dependencies-macroの中に入っているので、よかったらコードを見てみてください。https://github.com/Ryu0118/swift-dependencies-macro
# 従来のマクロのテスト
まずは従来のマクロのテストフレームワークである`SwiftSyntaxMacrosTestSupport`を使用して,マクロのテストを書いてみます。“`Swift
let macros:
地方銀行でモバイルエンジニア向け社内勉強会を実施してみた
# はじめに
先日、社内で開催した「**モバイルエンジニア向けの社内勉強会**」が凄く実りがあったので、それについて書きました。
他の地銀や固い雰囲気のある会社さんで働いていらっしゃる方も、ぜひ社内で勉強会などをプレゼンするときに「北國銀行はやってますよ!」みたいに、この記事を積極的に使っていただけると嬉しいです。# どんな会社?
我々デジタルバリューは金沢に本店がある「北國銀行」をはじめとする北國フィナンシャルホールディングスの一員で、システム開発を中心に仕事をしています。![北國FHD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2810912/c2c9916a-a444-5c5e-a976-b1cbb4e3428b.png)
銀行というと「半沢直樹」のイメージが強いかも知れませんが、北國銀行は全くそんなことがありません。
少し例を出すと、こんな感じです。
– 頭取とも会話する機会がある(何ならコーヒー飲みながら立ち話をすることもある)
– UNIQLOのTシャツとか髪染めもOK(勿論、
【Xcode】ReleaseとDebugでBundleIDを分ける
# はじめに
ReleaseとDebugでBundleIDを分けることで端末に2つのアプリを共存させることができます。
Release環境とDebug環境で分けている場合、1つのアプリだと環境がごっちゃになってデータベースが壊れてしまう可能性も考えられます。ですので、BundleIDで別アプリにして環境のごちゃごちゃを避けます
# やりかた
① プロジェクトを選択します
② ターゲットを選択します
③ 「Build Settings」を選択します
![スクリーンショット 2023-10-04 18.54.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d9c8d87d-d1f7-f253-f141-b15cdd889ab7.png)④ `Product Bundle Identifier`と検索します
![スクリーンショット 2023-10-04 18.56.34.png](https://qiita-image-store.s3.ap-northeast-1.amazon
RealmSwiftのwhereにArrayで結合したQueryを利用する
SwiftはiOS17から[SwiftData](https://developer.apple.com/xcode/swiftdata/)が使えますが、今のプロジェクトはiOS16と決まっているので[Realm](https://github.com/realm/realm-swift)を使っています。
そんなRealmではNSPredicateでの検索は終わりwhereで検索する時代が来たそうです。よーし試してみるかと、よくあるQueryをappendして結合する昔ながらのQueryを作成しようとしたのですが、マニュアルを読み返してもやり方が不明です。
流石に最近は誰も使わないのか?そんな筈ないやろとRealmのIssueを探すとありました。
[Compound Array of Query
#7731](https://github.com/realm/realm-swift/issues/7731) 結果としてRealmには実装がないそうです。
そうなると真面目に実装すると冗長なコードになるのが請け合いです。
Issueに投稿した方はサンプルコードも提供い
【Swift】モーダル画面の下スワイプで画面を閉じる機能を無効にする方法
## はじめに
Modal画面を表示して、下スワイプで画面を閉じると、色々と都合が悪かったので、下スワイプで画面を閉じる機能を無効にしました。
忘れないために、備忘録を残します。## 実装方法
“` Swift:
class ModalViewController {
override func viewDidLoad() {
super.viewDidLoad()// ここを追記する
self.isModalInPresentation = true
}
}
“`