iOS関連のことを調べてみた2023年08月30日

iOS関連のことを調べてみた2023年08月30日

【SwiftUI】画像の解像度を下げる

# はじめに
画像の解像度を下げる方法を調べたので記事にしておきます。

# こんな感じになる
![simulator_screenshot_DF2EAC46-82BA-499E-A4D5-9B2D154544A7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1bafc622-9cc6-4182-f61f-25acfde467a4.png)

# 実装
“`swift
import SwiftUI

struct ContentView: View {
private let image = UIImage(named: “sample”)!

var body: some View {
if let image = reduceResolution(of: image, scaleFactor: 0.1) {
Image(uiImage: image)
.resizable()

元記事を表示

【Flutter】TextFieldのカウンターを消す方法

`TextField`に`maxLength`を指定した際に、デフォルトでフォームの右下に入力した文字数のカウンターが表示されます。
これいらないんだよね。。ってときの対処法を教えます。

## 結論

`TextField`の`decoration`プロパティに、`InputDecoration(counterText: ”)`を渡すだけ!!超簡単!!

“`dart
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text(‘Sample’),
),
body: const Padding(
padding: EdgeInsets.symmetric(horizontal: 30.0),
child: Center(
child: TextField(
maxLength: 10,

元記事を表示

【セミモーダル】iOS標準のセミモーダルを任意のサイズで表示するTips【なるべく楽したい】

:::note
サービス移行に伴い、記事を転載しました。オリジナルの記事は[こちら](https://withjpinc.hatenablog.com/entry/ios-semimodal-tips)
:::

## 前書き

こんにちは。withでiOSエンジニアをしている @zrn-ns です。

iOSにおける標準のセミモーダル(ハーフモーダル)って、自由度が低くてデザイン仕様を満たすのが地味に大変なことがありますよね。
今回はiOS標準のセミモーダルUIを、簡単に任意のサイズで表示する方法をご紹介します。

## TL;DR

iOS標準のセミモーダルの背景を透過して、その上にビューを配置すれば、少ないコードで任意のサイズのセミモーダルを表示できます!

## 今回実装したいUI

今回実装したいUIはこんな

元記事を表示

【個人開発】【iOS】プログラミング実装ゲームアプリをリリース

# はじめに
タイムアタック形式のプログラミング実装ゲームアプリをリリースしました。

# URL
https://apps.apple.com/us/app/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E7%8E%8B/id6451335541

# ゲーム内容
HTMLのタグを組み合わせてコードを完成させるアプリケーションです。

# サービス概要
### HTMLのタグを組み合わせる
右画面のページに合わせる形でHTMLのタグを組み合わせて画面を開発していきます。

![ezgif.com-video-to-gif (9).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/1578e1ec-468e-b406-4191-7b03ed85fbae.gif)

### タイムを記録
5ステージクリアすると、タイムが表示されます。
タイムに応じて称号が送られるので、最高の称号である「プログラミング王」を目指しま

元記事を表示

Carthageビルドでビルド設定を変更したい時

Carthageを今更使っているプロジェクトは少なくなっているかもしれませんが、それでも使うにはそれぞれの理由があるかと思います。

私のプロジェクトでもCarthageビルドが前提の環境となっており、まだSPMへの移行はできていません。

そんなとき、下記のエラーがCarthageビルドで発生しました。

> ld: file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)
> The iOS deployment target ‘IPHONEOS_DEPLOYMENT_TARGET’ is set to 8.0, but the range of supported deployment target versions is 1

元記事を表示

【Xcode】1行全体を1回のbackspaceボタンで消すショートカット

# はじめに
ショートカットマスターに俺はなる!

# こんな感じ
![画面収録-2023-08-28-22.37.40.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/07a2ad1a-901d-0f16-1ba2-a3d8bb9e4547.gif)

# やりかた
`command` + `shift` + `backspace`

# おわり
ショートカットを使いこなして高速開発

元記事を表示

【初心者向け】Twitter(X)みたいなTextEditorを作ってみたい!! ~Storyboard編~

どうも、現役iOSエンジニアの武久 なおきです!

SwiftUIを使って実装をしているといつも思うのですが、

### 「TextEditorって使いづらい」
ですよね。

…..カスタマイズ性が低すぎる!!

Twitterみたいに、文字数制限を超えると何か変化するTextEditorが欲しい!!

↑こちらのように文字の背景が赤くなる仕様は、純正では頑張っても作れませんでした。
※もし純正のTextEditorで作れる場合はこっそり教えてください(:

なので…もう。

自分で作っちゃいませんか?TextEditor

実は意外と簡単にTextEditorって作れちゃうんですよね。

魔法の「NSAttributedString」で。

### ※注意※ 今回はSwiftUIでの実装ではなく基礎のStroyb

元記事を表示

[SwiftUI] Labelをカスタマイズして、Alignmentとスペースを変える

## はじめに
こんにちは!
アプリ開発が好きで、Swiftの勉強をしている大学生です。
温かい目で見ていただけると幸いです。

## 解決したい問題
`HStack内`に`Image`と`Text`を並べる際は`Label`を使って表現すると、なんだかいい感じです?
“`swift
struct HogeView: View {
var body: some View {
// ① ?
HStack {
Image(systemName: “person”)
.resizable()
.frame(width: 50, height: 50)
.background(.red)
.clipShape(Circle())

Text(“hoge”)
.font(.system(size: 24))
}

元記事を表示

【Flutter】リップルエフェクトを無効にする

# リップルエフェクトってなに?

アクションがつくWidgetを長押しした時に出てくる波紋あるじゃないですか??
あれです。

08182023171430.gif

でも、リップルエフェクトが不要の場合ってありますよね。
と言うわけで、今回はリップルエフェクトを無効にする方法を3パターンご紹介します!

# なぜ出てくる??

マテリアルデザインにデフォルトで搭載されている機能みたい。
基本的に、アクションがついているWidgetに有効になっている機能のように思います。

# プロジェクト全体でリップルエフェクトを無効にする方法

ひとつ目は、プロジェクト全体でリップルエフェクトが不要な際、
デフォルトでリップルエフェクトを無効にする方法です。

“`dart
MaterialApp(
title:

元記事を表示

【Swift】TCAでのアラートの表示方法

# はじめに
https://qiita.com/SNQ-2001/items/26035e88e1959f3876fc

以前、「【SwiftUI】TCAでアラートを実装する」という記事を書きましたが、
TCA独自のアラート表示方法があったのでそちらの方法を記録しておきます

# 実装
“`diff_swift
import SwiftUI
import ComposableArchitecture

struct ContentView: View {
@ObservedObject private var viewStore: ViewStoreOf

let store: StoreOf

init(store: StoreOf) {
self.store = store
self.viewStore = ViewStore(store, observe: { $0 })
}

var body: some View {

元記事を表示

【Swift】TCAで2つのActionを同時に実行する

# はじめに
TCAを使っていて同時にアクションを実行したい場面がありました。
やり方を知ったので記録しておきます。

# 実装
“`diff_swift
import SwiftUI
import ComposableArchitecture

struct ContentView: View {
@ObservedObject private var viewStore: ViewStoreOf

let store: StoreOf

init(store: StoreOf) {
self.store = store
self.viewStore = ViewStore(store, observe: { $0 })
}

var body: some View {
Button {
viewStore.send(.buttonTapped)
} label: {

元記事を表示

【Swift】OrderedDictionaryの導入手順から使用方法

## はじめに
Dictionaryを配列のようにIndex番号で取得する必要があり、**OrderedDictionary**というライブラリを使用して実装したので、忘れないようにメモします。
## OrderedDictionaryとは
`OrderedDictionaryは、DictionaryをIndexで指定して取得できたり、順番をソートできるライブラリです。`
Swift標準のDictionaryは、要素の順番が保証されていないため、配列のようにIndexを指定して要素を取得できません。

## 導入手順
OrderedDictionaryは標準のライブラリではないため、外部からインストールする必要があります。ここでは、CocoaPodsからのインストール手順を説明します。

### 手順1
podfileに以下を追加してくだい。
“`:Podfile
pod ‘OrderedCollections’
“`
### 手順2
ターミナルを開き自分のプロジェクトがあるディレクトリまで移動します。
その後、ターミナルで以下を実行してください。
“`
pod update
`

元記事を表示

【iOS】既存プロジェクトへの Swift Concurrency 導入戦略

## はじめに

Swift Concurrency が WWDC で発表されてから 2 年になりました。各プロダクトではサポートバージョンがアップデートされ、実際に導入が進み始めているプロダクトも多いのではないでしょうか。一方で新規で開発する場合は、前提となる技術だと考えています。弊社でも Swift Concurrency への移行対応を行いましたが、今回は実際に行った導入戦略を紹介したいと思います

## 導入するメリット

では、動いている既存コードを修正して Concurrency を導入するメリットは何でしょうか。

実際に対応を進める場合、実装コストだけではなく、品質を担保するためのテストコストも必要になります。更にプロダクトによってはリリースコストが必要になるため、そのコストに合うメリットが要求されます。

そこで、実際に Concurrency を導入するメリットについて考えてみたいと思います。

### 1. 並行処理を簡潔・安全に記述できる

まず、Concurrency のメリットとして「並行処理を簡潔・安全に記述できる」という点が挙げられます。

実際のコード

元記事を表示

【SwiftUI】OptionalのBindingをアンラップする

# はじめに
Bindingの中身がオプショナルで型が違うので渡せないという問題に遭遇しました。
解決策を記録しておきます。

# 問題点
型が違うので渡せないわけですね
![スクリーンショット 2023-08-25 22.47.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c9bd836c-5e36-7683-8c57-11703fc8b225.png)
“`
Cannot convert value of type ‘Binding‘ to expected argument type ‘Binding
“`
“`swift
import SwiftUI

struct ContentView: View {
@State var text: String = “サンプル”

var body: some View {
SubView(text: $text)
}
}

struct Su

元記事を表示

ViewInspectorを使用したWebViewテストの雛形

[ViewInspector](https://github.com/nalexn/ViewInspector)でWebViewのテストを書こうとしてハマったので備忘録。

作成したサンプルコード

https://github.com/mbotsu/WebViewExample

どの辺でハマったか。

## UIViewControllerに処理を書かないと始まらない。

`UIViewController`の`viewDidLoad`を実行するには、`view.loadViewIfNeeded()`を実行しないと処理が始まらない。
当然ViewInspectorもUIViewControllerを取り出さないと処理が始まらない。

“`swift
sut.on(\.didAppear) { view in
let uiView = try view.view(WebUIViewControllerRepresentable.self).actualView().viewController()
uiView.loadViewIfNeeded()
}
“`

## Vi

元記事を表示

iOSでカメラの権限を変えた後アプリに戻ると強制再起動することについて

先日Flutterでアプリを開発していてカメラの権限周りを触ることがあったのですが、アプリが動いている状態で設定に移動し権限を変更してからアプリに戻ると以下のようなログを吐いてアプリが落ちてしまうという現象に遭いました。
“`
* thread #1, queue = ‘com.apple.main-thread’, stop reason = signal SIGKILL
frame #0: 0x0000000000000004 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x000000004 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x000000008 <+0>: mov x16, #-0x20
0x00000000c <+4>: svc #0x80
0x000000010 <+8>: ret
Target 0: (Run

元記事を表示

Swift Concurrency時代のViewModelのアクション処理を考え直す

MVVM を実装する方法は様々あります。View-ViewModel の接続に関していうと、リアクティブ系ライブラリを使ってそれぞれの入力と出力を定義し接続することがおそらく最も一般的でしょう。

最近は SwiftUI と Swift Concurrency が登場して、リアクティブ系ライブラリで解決したい課題の多くに対応しています。ただし、乗り換えてみても実装が一筋縄ではいかないことが多いです。

V-VM の接続の課題を分解すると、ViewModel の状態をどのように View にバインドするのかと、View のイベントを検知してどのように ViewModel に渡すのかの2つに分けることができます。

前者は ViewModel を [`@ObservableObject`](https://developer.apple.com/documentation/combine/observableobject) に準拠して状態を [`@Published`](https://developer.apple.com/documentation/combine/published/

元記事を表示

【Swift】クロージャ嫌いを克服しよう(関数の引数Ver)

# 目次
[1.クロージャを関数の引数にして使用する](#1-クロージャを関数の引数にして使用する)
[2.実例](#2-実例)
[3.おわりに](#3-おわりに)

# 1. クロージャを関数の引数にして使用する
– Swiftはクロージャ(Pythonでいうところの無名関数)多用しますよね? 少なくとも私が開発に携わっているアプリでは、APIの非同期処理も多いので多用されています。
– クロージャって慣れるまでは読みにくくて仕方ないですよね。ここでは更に読みにくいクロージャを関数の引数として使用している例を解説していきます。

# 2. 実例
クロージャの登場シーンは多いのですが、関数の引数としても指定できます。
– 例
~~~swift: closure.swift
func judgeFeeling ( feelingClosure: (Bool) -> Void) {
print(“How’s it going today?”)
feelingClosure(true)
}

jedgeFeeling ( fee

元記事を表示

AnyViewは悪くないよ

English: [AnyView is Pretty Great, Actually](https://apurin.me/articles/anyview-is-great/)

SwiftUI 開発者のコミュニティでは、[`AnyView`](https://developer.apple.com/documentation/swiftui/anyview/) の評判が良くありません。

コードの臭いと呼ばれることも聞いたことがあるし、一般的に全力で避けるべきものとして扱われています。Apple 自体もよく知られている WWDC 2021 のセッション動画 [Demystify SwiftUI](https://developer.apple.com/wwdc21/10022) で `AnyView` は「邪悪な敵」であることを言及しています。

同じ役割を果たしているのに、Combine の [`AnyPublisher`](https://developer.apple.com/documentation/combine/anypublisher/) や SwiftUI の仲

元記事を表示

[Swift漫談]ホワイト課長が退陣したのでswiftで今の気持ちをコーディングしてみた

[1.どういうことか?](#1-どういうことか?)
[2.今の気持ちをコーディングしてみた](#2-今の気持ちをコーディングしてみた)
[3.おわりに](#3-おわりに)

# 1. ホワイト課長退陣?
どういうことか?
– 経緯
– 今のホワイト課長とは転職の面接(本田技研->iOS開発)の時に初めてお会いしました。
– 課長の人柄の良さ、部下からの慕われ具合、なにより定時で社員が帰れる職場環境作りをしていることろに、かなりの魅力を感じて、現職に決めました。

**そんな課長がなんと部長に昇進してしまった**のです。
課長の「職場環境づくりへの想い」に魅力を感じて入社したのに、、、

# 2. 今の気持ちをコーディングしてみた
– 今の気持ちは以下のコードです。
~~~swift: nowFeeling.swift
var isHappy = false
var status = “会社員”
var boss = “ホワイト課長退陣”

while true {

元記事を表示

OTHERカテゴリの最新記事