iOS関連のことを調べてみた

iOS関連のことを調べてみた

MVVM architecture for Frontend apps (Model-View-ViewModel)

## Overview

MVVM stands for Model-View-ViewModel, which is a software architectural pattern used in application development, particularly in user interface (UI) development. MVVM is often associated with frameworks like Xamarin, Angular, and Vue.js for web and **mobile application development** (Android, iOS, Flutter).

![mvvm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636261/60be9885-0fdd-8700-105f-1a9b40202773.png)

:::note info
This image illustrates the MVVM architect

元記事を表示

Mobile Safariでinput type=”file”をjsのclick()で開くと、onchangeが発火しない問題

## 環境
iPhone 11 Pro
iOS 17.1.2

## 発生している問題の概要
Mobile Safariでカメラロールから読み込むための``を、
JSから`click()`で発火すると、onchangeが発火しない

## やりたいこと
iPhoneから画像をアップする

読み込みボタンを押すなりしたら読み込みダイアログを出して、
選んだ画像を返すようなメソッド、`showOpenImageDialog()`を作る

## 動かないソース
“`
function showOpenImageDialog() {
return new Promise(resolve => {
const input = document.createElement(‘input’);
input.type = ‘file’;
input.accept = ‘image/*’;
input.addEventListener(‘change’ , (event) => {
resolve(event.target.files[0]

元記事を表示

SwiftUIのLayout protocolについて

:::note info
これは [フェンリル デザインとテクノロジー Advent Calendar 2023](https://adventar.org/calendars/9360) 6日目の記事です。
:::

## Layoutとは

Layoutは、WWDC22で発表されたiOS 16以降で利用できるプロトコルです。
Layoutに準拠した型を実装することで、HStackやVStack、ViewModifierでは実装が難しい複雑なレイアウトのレイアウトコンテナを定義することができます。

https://developer.apple.com/documentation/swiftui/layout

https://developer.apple.com/videos/play/wwdc2022/10056/

Layoutに準拠するためには、以下の2つのメソッドを実装する必要があります。

“`swift
/// Returns the size of the composite view, given a proposed size and the view’s

元記事を表示

SwiftUIでSVG画像を表示する方法

[Globeeアドベントカレンダー](https://qiita.com/advent-calendar/2023/globee)6日目の記事です。
2日連続になっちゃいましたが、本日は簡単な内容になります。
簡単なんですが、意外とこの内容の記事は見当たらなかったので、置いておきます。

# 背景

`SwiftUI.Image`は現在のところSVG形式の画像を十分にサポートしていないため、実装方法を模索している方も多いのではないでしょうか?
特に、SVGファイル側で定義されているキャンパスのサイズよりも大きくリサイズした場合に、画像が粗くなってしまう問題があります。
今回の記事では、UIKitの`UIImageView`を利用してこの問題を解決する方法を共有します。
以下が結果のスクリーンショットです。

| before | after |
|—|—|
| ![b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35008/e037d87f-5eea-ad46-a2a0-ce2b24c3d69

元記事を表示

iOS端末で擬似Tunnel With Local Proxyモードを試してみた

# はじめに
本記事はゼットスケーラー株式会社としては初の[Advent Calender 2023](https://qiita.com/advent-calendar/2023/zscaler)の一つとして投稿しています。以下の免責事項をご理解の上、記事を読んで頂けると幸いです。
本記事は、ネタ的には何度もコスった少し古いものですが、今でも遜色なく利用ができるので改めてこの場でもご紹介させて下さい。検証データも2021年のものになります。

# 免責事項
本記事のコンテンツや情報において、可能な限り正確な情報を掲載するよう努めておりますが、 誤情報が入り込んだり、情報が古くなったりすることもあり、必ずしもその内容の正確性および完全性を保証するものではございません。そのため、本記事をエビデンスとしたゼットスケーラーへの問い合わせなどはご対応致しかねることをご理解頂けると幸いです。掲載内容はあくまで個人の意見であり、ゼットスケーラーの立場、戦略、意見を代表するものではありません。当該情報に基づいて被ったいかなる損害について、一切責任を負うものではございませんのであらかじめご了承ください

元記事を表示

【SwiftUI】iOS17からグラデーションがアニメーションするようになってた

# はじめに
iOS17からグラデーションがアニメーションするようになってました。

# サンプルアプリ
GIFだとわかりにくいですが、iOS16以前では`withAnimation`ありでも一瞬で切り替わってしまいます。
|~iOS16|iOS17~|
|-|-|
|![Simulator Screen Recording – iPhone 12 – 2023-12-05 at 22.58.14.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c81b4ede-44b0-4fe8-09f2-04ef82532241.gif)|![Simulator Screen Recording – iPhone 15 – 2023-12-05 at 22.57.10.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/86af8c06-17cd-920b-4aab-2ba088e3fa38.gif)|

#

元記事を表示

CoreData に登録したデータを JSON で出力したい!

# はじめに

こんにちは。HIGの清水です。
本記事は、[フューチャー Advent Calendar 2023](https://qiita.com/advent-calendar/2023/future)の5日目の記事です。
昨日は、 @shibukawa さんの「[HTTPでも双方向ソケット通信にチャレンジしてみた(けどやめた)](https://qiita.com/shibukawa/items/1d098e3ba9e065215b40)」でした。
今年は社内でも珍しく、iOSアプリ開発のためにSwiftを読んだり書いたりする機会が多かった一年でした。
そんな一年の締めも、Swiftに関する記事を書いていきたいと思います。

# 内容

今回は、CoreData に登録したデータの変更記録を JSON 形式で出力するする際に詰まった点についてお話します。
以下の順でお話していきます。

* オブジェクトをJSON形式にエンコードして出力する
* CoreDataのEntityモデルをJSON形式で出力する

## 先に結論

`NSManagedObject` は `Coda

元記事を表示

【ios 17】バッテリー寿命向上とエネルギー効率化

## バッテリー消費の最適化と省エネ設定

こんにちは。今回は、
ios 17について初心者エンジニア
に向けて、バッテリー寿命を向上させるための方法やエネルギー効率化の設定方法について解説します。

### バッテリー消費の最適化

バッテリー寿命を向上させるためには、バッテリー消費を最適化することが重要です。以下に、バッテリー消費を抑えるための設定方法を紹介します。

#### 地理的な位置情報の制限

ios 17では、地理的な位置情報の利用を制限することでバッテリー消費を減らすことができます。これにより、常に位置情報を利用しているアプリによるバッテリーの消耗を防ぐことができます。

以下のコードは、位置情報の利用を許可するかどうかをユーザーに尋ねる処理を行うコードの一例です。

“`
import uikit
import corelocation

class viewcontroller: uiviewcontroller, cllocationmanagerdelegate {

let locationmanager = cllocationmanager()

元記事を表示

SwiftUI流 リアルタイム表示

リアルタイムの日時を表示する記事をときどき見かけたので、SwiftUIしか知らない私なりのコードを残しておきます。

~~~swift
import SwiftUI

struct RealTimeView: View {
@State private var date = Date.now

private let timer = Timer.publish(
every: 1.0,
on: .main,
in: .default)
.autoconnect()

private let format = Date.FormatStyle(
date: .abbreviated,
time: .standard)

var body: some View {
Text(date, format: format)
.font(.title)
.monospacedDigit()

元記事を表示

【iOS】fastlane (or xcodebuild) で `TestFlight Internal Only` を使う

## はじめに

Xcode Cloud の登場など、 1st party の CD 環境も提供されている今、 fastlane への依存は少しずつ減っているかもしれません。
とはいえ、開発現場ではまだまだ活用されているツールかと思うので、今回は `TestFlight Internal Only` のビルドを fastlane を利用して作成する方法をご紹介します。

## そもそも `TestFlight Internal Only` とは?

WWDC 2023 にて発表された TestFlight の新しい機能です。[^1]
従来、TestFlight で配布するためのビルドは、内部テスターだけではなく、外部テスターへの配布や App Store への配信が可能なものを利用するしかありませんでした。
Xcode 15 以降、 `TestFlight Internal Only` の設定を行なってビルドを作成することによって、そのビルドは「内部テスター」への配布に限定できるようになります。
「社内関係者のみに配布したいケース」などにおいて、意図せず App Stor

元記事を表示

[Firebase] Firestoreの集約クエリ (count, sum, average) について

Firestoreの集約クエリ (aggregation queries) を使用すると、複数のドキュメントの統計的な操作が簡単に行えます。
具体的には以下の3種類のクエリがあります。

– count
– sum
– average

公式ドキュメントではSwiftでのFirestoreのcountクエリの使い方についての説明がありましたが、sumやaverageに関する具体的なSwiftでの実装例は見つかりませんでした。そこで、この記事ではこれら3つのクエリ(count、sum、average)をSwiftでどのように使うかについて解説していきたいと思います。

また、料金的なメリットもありますので、それについても解説していきます。

# 実装方法
説明するにあたって、このような構造のコレクションがあるとします。
“`yaml
– users # (Collection)
– user1 # (Document ID)
– name: “Mike”
– age: 10
– user2
– name: “Takeshi

元記事を表示

SwiftLintのオレオレカスタムルール一覧

SwiftLintの記事はシリーズになっています。
記事を順番に読み進めると、SwiftLintを使いこなせるようになります。

– [Swiftの静的解析ツール「SwiftLint」のセットアップ方法](https://qiita.com/uhooi/items/bf888b53b4b8210108aa)
– [SwiftLintの全ルール一覧(Swift 4.2版)](https://qiita.com/uhooi/items/7f5d6cf2b240f60ba1ed)
– [SwiftLintで追加・変更・廃止されたルールまとめ(Swift 4.2→5.1.2版)](https://qiita.com/uhooi/items/8e9767c2e746f4171ded)
– [SwiftLintで追加・廃止されたルールまとめ(Swift 5.1.2→5.3.1版)](https://qiita.com/uhooi/items/10b9e49d3bd6f1344cad)
– SwiftLintのオレオレカスタムルール一覧 __←イマココ__
– [SwiftLintのAnalyzeを

元記事を表示

【SwiftUI】SpriteKitでうんこの雨を降らす

# はじめに
SpriteKitを今まで触ったことがなかったので入門してみました。
実用的なのを作っても面白くないのでうんこを降らせてみました。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-04 at 22.38.33.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8e68aa88-e1ae-064c-5d1e-bcbd17d9897c.gif)

# フリーのうんこ
今回はこちらのうんこを使用します。

![unchi_character.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8c99c430-393b-57f9-37bc-d548cc4e2a40.png)

https://www.irasutoya.com/2015/08/blog-post_385.html

# やりかた
① `SpriteK

元記事を表示

【Swift】ジェネリクスでよく使記号&意味一覧

# 目次
[1.ジェネリクスで使用する大文字アルファベット](#1-ジェネリクスで使用する大文字アルファベット)
[2.実例](#2-実例)
[3.参考サイト](#3-参考サイト)

# 1. ジェネリクスで使用する大文字アルファベット
関数シグネチャを確認すると時々??となるジェネリクスでよく使う記号ありますよね?(EとかTとか、、)
あれなんなんでしょうね?
そんな時に便利な表を書いておきます。

※シグネチャ…メソッド名、パラメータの型、数、順序、戻り値の型等で構成された、メソッドを識別するための情報

# 2. 実例
| |略 |意味 |使用シーン |
|—|—|—|—|
|T |Type |タイプ |汎用的に利用。とりあえず迷ったらこれ |
|E |Element |要素 |配列の要素などに使われる |
|K |Key |キー |連想配列やマップのキー等 |
|V |Value |値 |配列の値や結果 |
|N |Number |数値 |数値を表す(個数や最大値等) |
|A |Array |配列 |J

元記事を表示

Next.js Native使ってみた

# Next.js Nativeってなんぞや❓
[Capacitor](https://capacitorjs.jp/docs) と呼ばれるwebアプリをクロスプラットフォーム化するライブラリを使って、
Next.jsをネイティブアプリ化できるようにしたものみたい👀

https://nextjs-native.com/

Githubにてスターターキットも用意されてたので、これを試す
https://github.com/RobSchilderr/nextjs-native-starter

とりあえず、Githubからクローン

“`bash
$ git clone git@github.com:RobSchilderr/nextjs-native-starter.git
Cloning into ‘nextjs-native-starter’…
remote: Enumerating objects: 3127, done.
remote: Counting objects: 100% (747/747), done.
remote: Compressing objects

元記事を表示

[Swift] withUnsafeContinuationとexecutorに関するバグ

# TL;DR

「最初の行からasync呼び出しがあるisolated-async function」にかかる、executorへのhopを省略する最適化が`@_unsafeInheritExecutor`を想定できていない問題

apple/swiftに報告済み

https://github.com/apple/swift/issues/69659

# 検証環境

– Swift compiler version info: swift-driver version: 1.87.1 Apple Swift version 5.9 (swiftlang-5.9.0.128.108 clang-1500.0.40.1)
– Xcode version info: Xcode 15.0.1 Build version 15A507
– Deployment target: arm64-apple-macosx14.0

# 実験コード

“`swift
@MainActor
func doSomething() async {
await withUnsafeContinu

元記事を表示

【SwiftUI】LinkPresentationを使ってTwitterの様なタイトル&OGP画像を簡単に表示する

# はじめに
昨日、「LinkPresentationを使ってURLからタイトルを取得する」という記事を書きました。

https://qiita.com/SNQ-2001/items/1abd1e1bed87d4e02a5f

今日はLinkPresentationを使ってタイトル&OGP画像を簡単に表示させてみます。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-03 at 22.23.17.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7abd068a-7eb8-0c68-069a-8c40e65eba00.gif)

# 実装
“`ContentView.swift
import SwiftUI
import LinkPresentation

struct ContentView: View {
@State private var url = “”

@State priv

元記事を表示

swift-dependenciesのMacroでいろいろビミョかった問題が解決されてた

3週間前にDependenciesのバージョンが1.1.0に更新され、マクロが使えるようになりました。これにより、以前は少し微妙だなと感じていた点がマクロによって解決されていたので、今回はそれについて解説していきます。

https://github.com/pointfreeco/swift-dependencies

:::note warn

今回追加されたマクロはprotocolベースのDIには使用できません。最初にstructベースのDIがなぜ推奨されているのか、から解説します。知っている方は[1.1.0以前のDependencies](#1-1.1.0以前のDependencies)まで飛ばしてください。
:::

# なぜstructベースのDIが推奨されているのか
前提として、swift-dependenciesではprotocolベースのDIではなく、structベースのDIが推奨されています。

“`Swift
struct APIClient {
var fetch: @Sendable (_ query: String) async throws -> R

元記事を表示

【SwiftUI】ScrollViewでScroll方向を取得してViewの表示を切り替える!

こんにちは。[ymurao2](https://twitter.com/ymurao2)です!
ScrollViewでScroll方向に応じてぴょこぴょこするあれの実装が難しかったので、ご紹介します!

# 成果物
![Simulator Screen Recording – iPhone 15 Pro – 2023-12-03 at 13.39.03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529173/10888886-8083-ee7a-c57e-955c600d4bbd.gif)
※ この画面なんて呼ぶんですかね :thinking:

# 実装
お急ぎの方のために全体像です。
“`swift:InteractiveStickyHeaderScrollView.swift
public struct InteractiveStickyHeaderScrollView: View {
@State var offset: CGFloat = .zero
@State va

元記事を表示

既存プロジェクトへのデザインシステム導入の取り組み

# はじめに
この記事は[and factory.inc Advent Calendar 2023](https://qiita.com/advent-calendar/2023/andfactory) 3日目の記事です。
昨日は @hagmon さんの「[Adjust友達紹介プログラムのTips](https://qiita.com/hagmon/items/188a5ffc9c475e3b892d)」でした。

現在、担当している既存アプリでUIをデザインシステム化しているのですが、
iOSエンジニアとして対応していることを備忘がてら記事にしたいと思います。

# なにを書くか

– 書くこと
– デザインシステム化するうえでの対応したこと
– デザイントークンをiOSプロジェクトに組み込む大枠の流れ
– コンポーネント化の取り組みについて
– やってみての所感
– 書かないこと
– デザインシステムの詳細な説明
– iOSに組み込むための詳細な変換処理の実装(`json` → `xcassets`)

# デザインシ

元記事を表示

OTHERカテゴリの最新記事