- 1. 【Swift】CIFilterで画像をX線写真のような加工をする
- 2. 1242×2208のSimulatorを生成出来なくて困ったら
- 3. 【iOSアプリ開発】AIと俺俺アプリを作ってサクッと実機テストする【Swift】
- 4. 単純でないイニシャライザにはファクトリを
- 5. 【SwiftUI】ToggleStyleを使用してCheckBoxを作成する
- 6. 「バッテリー残量が少なくなっています」アラートを表示させない
- 7. 指を離しても長押しされたままになる不具合
- 8. 【iOS】StringCatalogのベース言語を変更する
- 9. swiftUIでiOSアプリをリリースしたけどStoreKit周りの実装が大変だった話
- 10. TestFlightでの内部配信が行えない/内部グループが選択できない場合の回避策
- 11. 【SwiftUI】Gestureの検知できる領域について
- 12. 【Swift】CIFilterで画像を古い写真のような見た目にする
- 13. 【Xcode】ファイル作成時のヘッダーコメントが邪魔なので消してやる
- 14. 【SwiftUI】エッジスワイプを実装してみた
- 15. iOS17からLook Aroundの場所移動ができない不具合が解消された
- 16. 【Flutter】Integration Testを極めるためのテクニック集
- 17. 【Swift】バージョンを比較したい
- 18. XcodeからApp Store Connect の Test Flight へ アーカイブをアップロードする方法
- 19. 【Swift】CIFilterで画像の色を反転させる
- 20. 【RxSwift】BehaviorRelayとPublishRelay
【Swift】CIFilterで画像をX線写真のような加工をする
# はじめに
CIFilterを使ってX線写真のようなフィルターを作成します# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-11-02 at 22.37.22.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/cf872185-aaee-9fab-e79b-0d1f99003481.gif)# 実装
“`swift
import SwiftUIstruct ContentView: View {
private let image = UIImage(named: “sample1”)!@State private var uiImage: UIImage?
var body: some View {
ScrollView {
VStack {
if let uiImage {
1242×2208のSimulatorを生成出来なくて困ったら
1242×2208のスクショを撮りたくて、iPhone 8 PlusなどのSimulatorを生成しようとしたが、iOS 17.0が選べない。
– Xcode
– Settings…
– Platforms
– `+`
– iOS…
– iOS 16.4 Simulatorのように選んで古いiOSを追加すると、`New Simulator`の`OSVersion`に`iOS 16.4`が追加され、Simulatorを生成出来るようになる。
【iOSアプリ開発】AIと俺俺アプリを作ってサクッと実機テストする【Swift】
# 概要
簡単なタイマーアプリを作り、デベロッパー登録(有料)をせず自分のスマホにアプリをインストールします。
思いついたアプリを数時間で書いて実機で試してみたい人向けの記事になります。### この記事に含まれる内容
XcodeとSwiftUIでiOSのタイマーアプリを作る方法
Bardと初めての言語でペアプログラミングをする方法
自作アプリを実機に無料でインストールする方法### この記事に含まれない内容
プログラミングの一般的な知識
App Storeでリリースする方法# 目次
– [1. はじめに](#1-はじめに)
– [2. Bardとペアプロで最も単純なタイマーアプリを作る](#2-bardとペアプロで最も単純なタイマーアプリを作る)
– [3. SwiftUIで俺俺タイマーを作る](#3-swiftuiで俺俺タイマーを作る)
– [4. テストとして実機にインストールする](#4-テストとして実機にインストールする)
– [5.おわりに](#5-おわりに)# 1. はじめに
最近ランニングを始めました。
私はiPhone SE3を使っていますが、スマホリン
単純でないイニシャライザにはファクトリを
[前回](https://qiita.com/Se1getsu/items/4654b38886b468ea3756)に引き続き、Modelの設計についての勉強として「[ドメイン駆動設計入門](https://www.shoeisha.co.jp/book/detail/9784798150727)」を読み進めています。サンプルコードはC#で書かれていますが、iOSを勉強している人にもオススメの一冊です。
今回は**9章**の**ファクトリ**についての内容をベースに、Swiftのコードを使って紹介します。
# イニシャライザは単純に
**イニシャライザ**といえば、インスタンスの初期化の役目を担い、プロパティに初期値を代入する関数です。しかし、その**初期化の処理が単純でなくなる場合**には、ファクトリを用いて生成処理をカプセル化しましょう。
とはいえ単に「単純でないイニシャライザ」と言っても、基準が分かりづらいですよね。
「ドメイン駆動設計入門」では、その指標を以下のように示しています。
> イニシャライザ内で**他のオブジェクトを生成**するかどうかそれでは、例を見てみま
【SwiftUI】ToggleStyleを使用してCheckBoxを作成する
# はじめに
SwiftUIにはチェックボックスがありません。
めっちゃ使う場面ありそうなのに。。。ToggleStyleを使って自作してみます。
# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-11-04 at 21.26.51.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3f888990-4d4e-81d5-bbfc-88af647d1401.gif)# 実装
“`swift
import SwiftUIpublic struct CheckBoxStyle: ToggleStyle {
public func makeBody(configuration: Configuration) -> some View {
HStack {
Button {
configuration.isOn.toggle()
「バッテリー残量が少なくなっています」アラートを表示させない
「バッテリー残量が少なくなっています」アラートが表示され、ゲームが中断されてしまった経験はありませんか?
[アクセスガイド](https://support.apple.com/ja-jp/HT202612 “support.apple.com”)を設定すると余計な通知が来なくなります。
毎回設定するのはめんどくさいので、ショートカットで自動化してみました。### 使い方
1. ゲームを開くと「ショートカット」通知が表示されます。
1. 「ショートカット」通知を選択し、「実行」を押下するとアクセスガイドが開始されます。![IMG_5449.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583885/7526bfb0-f4ce-1113-7a06-e74b88c8631e.gif)
### 注意
ミラティブ配信など画面を行き来する必要がある場合は、通知が煩わしく感じるかもしれません。
### 設定方法
##### アクセスガイドの設定
1. 「設定」アプリを起動
1. 「アクセシビ
指を離しても長押しされたままになる不具合
長押しをしている間加算し続けるボタンで、指を離しても加算し続ける不具合が発生した。
結論から言うと、[iOS15で追加された「App間のドラッグ&ドロップ機能」](https://support.apple.com/ja-jp/HT212788#:~:text=%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0-,App%E9%96%93%E3%81%AE%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%26%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E6%A9%9F%E8%83%BD,-%E3%81%AB%E3%82%88%E3%82%8A%E3%80%811%E3%81%A4 “iOS 15 のアップデートについて”)を行うとtouchendイベントが発生しなくなることが原因だった。
### 発生条件
iOS15で「App間のドラッグ&ドロップ機能」が追加された。
この機能は、選択したテキストを浮かび上がるまで押
【iOS】StringCatalogのベース言語を変更する
# はじめに
Xcode15からStringCatalogという多言語化のための新しい機能が追加されました
StringCatalogを使用していて困ったことがあったのでまとめました。# 困ったこと
以下のようなViewがあります。
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
VStack {
Button {} label: {
Text(“ボタン1”)
}Button {
} label: {
Text(“ボタン2”)
}Button {
} label: {
Text(“ボタン3”)
swiftUIでiOSアプリをリリースしたけどStoreKit周りの実装が大変だった話
# はじめに
swiftを勉強しはじめて約3ヶ月の筆者なのですが、先日はじめてApp Storeにアプリをリリースすることができました?今回はサブスクリプションのアプリケーションを作成したのですが、その際の実装が結構大変だったので本記事にまとめます。
興味あれば是非見ていってください!# 開発したアプリ
今回はopen AI APIを用いてギャルやお兄さんなど、色々な属性のAIとチャットを楽しめるアプリをswift UIで開発しました!
興味があれば是非一度ご利用してみてください〜
※月額600円のサブスクリプション制ですhttps://apps.apple.com/jp/app/anychat-with-ai/id6468811282
# StoreKitでのサブスクリプションの実装
このアプリケーションではStoreKitというパッケージを利用して課金周りを実装したのですが、中々日本語の記事が見つからず、結局英語の記事を参考に実装したので、皆さんも実装する際の助けになれば。そもそもStoreKitとは?という方はまず以下の公式ドキュメントをご参照ください
http
TestFlightでの内部配信が行えない/内部グループが選択できない場合の回避策
私は個人と仕事のアプリリリース対応で毎月5~10回ほどリリース作業を行うのですが、
以下現象がごく稀に起こるので、個人用の備忘録として記載しておきます。
(原因も不明でバグFixなど急いでいるとき非常に困る。。)【現象】
![Group 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630810/cf497cdf-9506-afd9-7bcd-db59588dc225.png)
1. Flutterで開発したアプリでipaを生成
2. TransporterでApp Store Connectにアップロード
3. アプリの処理が完了してもTestFlightにて内部グループを選択できない(=テストできない)【解決策】 ※以下手順で別アプリ含め解決できたが再現性が確実かは不明。。。
1. 内部テストグループを新規で作成(「自動配信を有効にする」はチェックにしていました)
2. 自動割り当てされていなかった内部グループが選択される![image.png](https://qiita-im
【SwiftUI】Gestureの検知できる領域について
`DragGesture`や`onTapGesture`といった`Gesture`を使用して、スワイプ検知であったり、`TextField`のフォーカス解除といった場面で、画面全体を検知できる方法を調べてみました。
# どういった場合に機能しないのか
### VStackにそのまま記述
`VStack`に記述したら全体に反映されると思いきや、`VStack`内の`View`のサイズしか反応しませんでした。`VStack`の大きさを指定していないので、`Text`の大きさの中でしか検知できません。
##### ダメな例
“`Swift
VStack {
Text(“SecondView”)
}
.navigationBackButton()
.edgeSwipe()
“`
`VStack`の大きさを指定して、`.contentShape()`を指定してあげると画面全体で検知できるようになります。
##### 正しい例
“`Swift
VStack {
Text(“SecondView”)
}
.frame(maxWidth: .infinity, maxHeigh
【Swift】CIFilterで画像を古い写真のような見た目にする
# はじめに
CIFilterで画像をセピア色に加工するものがあったので記事にしておきます# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-11-02 at 22.42.44.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f28b61ac-519a-71de-0acd-98119e06eb21.gif)# 実装
“`swift
import SwiftUIstruct ContentView: View {
private let image = UIImage(named: “sample1”)!@State private var uiImage: UIImage?
var body: some View {
ScrollView {
VStack {
if let uiImage {
【Xcode】ファイル作成時のヘッダーコメントが邪魔なので消してやる
XcodeでSwiftファイル作成時に、上部にこんなヘッダーコメントが勝手に生成されると思います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633746/6dd7c6d6-3074-f559-1ebd-0e5ee67ff8e5.png)
こういうやつです
これを消す作業から毎回コーディングが始まるので萎えます
とても邪魔なので今から消してやろうと思います# Xcodeの設定ファイルを変更する
変更するファイルはこのディレクトリにあります
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/MultiPlatform/Source/Swift File.xctemplate/
ここに `___FILEBASENAME___.swift` というファイルがあると思うので
**テキストエディット** で開きます
※Xcodeで開くと書き込み不可で編集できな
【SwiftUI】エッジスワイプを実装してみた
NavigationStackの画面遷移では、画面左端を左から右にスワイプすると遷移元に戻ることができます。しかし`.navigationBarBackButtonHidden(true)` を記述してしまうと戻るボタンが非表示になるだけでなく、スワイプ機能も失われてしまいます。これの対策として今回はエッジスワイプをして遷移元に戻るという機能を実装したいと思います。
|標準のエッジスワイプ|今回実装するエッジスワイプ|
|:-:|:-:|
|![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3111542/a253a67d-3338-477a-2999-6eaea1610f2a.gif)|![ezgif.com-video-to-gif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3111542/57bdc122-74da-c69c-8588-11c0cc
iOS17からLook Aroundの場所移動ができない不具合が解消された
# はじめに
少し前に、iOS16の新機能で紹介された`Look Around`をアプリに導入する機会がありました。
表題の通り、場所移動をする昨日に不具合があったのですが、それが`iOS17`になって解消されました。同じように、開発しているアプリをiOS16対応していてうまくいかなくておかしいなぁと苦悩している方がいらっしゃったら何かの助けになるかもしれないと思い、今回記事にしています。
# Look Aroundとは
端的に言えばApple版の`Google Street View`のようなものです。
その名の通り、ある地点の周りを見渡して様子を把握することができる機能です。Google Street Viewは料金コストがかかるのに対し、Look Aroundは**Apple標準の機能**でかつ**無料**で利用ができるので、これからLook Aroundをアプリに導入しようと考える人たちも増えてくるのではないでしょうか。
しかしまだ日本では、`政令指定都市+@`くらいの場所のみのサポートとなるので全国のサポートを想定している場合は注意が必要です。
# 作りたかった
【Flutter】Integration Testを極めるためのテクニック集
# はじめに
Integration Testを実装していく中で最初に知っておきたかったと思ったことをまとめてみました。これまで実装してきた方やこれから実装する人にも参考になる情報があれば嬉しいです。https://docs.flutter.dev/cookbook/testing/integration/introduction
ちなみに、Integration Testとは結合テストのことです。
ビルドしたアプリでテストを実行するので単体テストよりも実際の操作に近い環境でテストを実行できます。# 1. ホットリスタートを使って実装する
テスト実装中は以下のコマンドで実行しましょう。“`sh
flutter run -t integration_test/main_test.dart
“`integration testの実行は、以下のコマンドで実行するように紹介されています。
“`sh
flutter test integration_test
“``test`コマンドで実行すると`ビルド`→`実行`→`終了`→`ビルド`→`実行`→`終了`のように
【Swift】バージョンを比較したい
# はじめに
「バージョンアップしてください」的なアラートを出す際に、現在使用しているバージョンとストアにある最新バージョンを比較するという作業が必要です。
バージョンできるようにするための構造体を作成しましたので記録しておきます。:::note warn
**注意**
セマンティックバージョニングのみ対応してます
:::# 実装
“`SemanticVersion.swift
import Foundationpublic struct SemanticVersion {
public let major: Int
public let minor: Int
public let patch: Intpublic init(_ major: Int, _ minor: Int, _ patch: Int) {
self.major = major
self.minor = minor
self.patch = patch
}public init?(_ string:
XcodeからApp Store Connect の Test Flight へ アーカイブをアップロードする方法
## Xcodeを用いて直接TextFlight へアップロードする方法
### 1. Xcodeプロジェクトを開く:
Xcodeを起動し、アプリのプロジェクトを開く。### 2. ビルド設定の確認:
プロジェクトを開いたら、`Runner`の`Target`を開いてアプリのビルド設定を確認します。設定が正しいことを確認してください。### 3. アーカイブの作成:
Xcodeメニューの “Product” > “Archive” を選択して、アプリのアーカイブを作成します。アーカイブはビルドされたアプリのバイナリファイルです。### 4. アーカイブの管理:
“”Window” > “Organizer”を開いて、作成したアーカイブを管理します。これは、Xcodeメニューの “Window” から “Organizer” を選択してアクセスできます。### 5. アップロード:
Organizerで、作成したアーカイブを選択し、”Distribute App” ボタンをクリックします。### 6. 配布オプションの選択:
配布オプション画面で、”App Stor
【Swift】CIFilterで画像の色を反転させる
# はじめに
CIFilterで画像の色を反転させてみます# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-10-31 at 20.42.54.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5d4d7a19-f41d-e56f-eb8f-88e6de6a2162.gif)# 実装
“`swift
import SwiftUIstruct ContentView: View {
private let image = UIImage(named: “sample1”)!@State private var uiImage: UIImage?
var body: some View {
ScrollView {
VStack {
if let uiImage {
Image
【RxSwift】BehaviorRelayとPublishRelay
# 目次
[1.BehaviorRelayとPublishRelayの特徴](#1-BehaviorRelayとPublishRelayの特徴)
[2.実例](#2-BehaviorRelayとPublishRelayの違い)
[3.おわりに](#3-おわりに)# 1. BehaviorRelayとPublishRelayの特徴
– BehaviorRelayとPublishRelaは.nextメソッドのみ流せる
– .errorと.completedが流れない
– .nextメソッドを流すには`.accept()`を使用する# 2. BehaviorRelayとPublishRelayの違い
| |BehaviorRelay |PublishRelay |
|—|—|—|
|初期値の有無 |有 |無 |
|valueプロパティの有無 |有 |無 |
|現在値流しの有無 |有 |無 |~~~swift:behaviorRelay基本形
var disposeBag = DisposeBag()
let behaviorRelay = B