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

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

LazyVStackの孫ViewのStateが画面外でリセットされる

# SwiftUIのLazyVStackの孫ViewのStateが画面外でリセットされる
とても長いタイトルですが、タイトルままです
他の方が報告されている、こちらのOpen Radarと同じ問題です

https://openradar.appspot.com/FB9900814

iOS 17.2.1、Xcode 15で確認してます

# 起きている現象
例えば下記のようにLazyVStackの子ViewとしてChildView、ChildViewの子ViewとしてSubViewを配置します
(つまりLazyVStackから見たら、SubViewは孫View)
この時、SubViewの持つ@State及び@StateObjectが、そのSubViewが画面外に行った際にリセットされてしまいます
ChildViewの方は値が保持されているので、おそらく不具合かなと考えています

FlutterでiOS Web Pushを実装する

# FlutterでiOS Web Pushを実装する
今回は、FlutterでiOS Web Pushを受け取れる簡単なWebアプリを実装する方法を紹介したいと思います。(記事作成に生成系AIを一部使用してます)

## Web Pushについて
Web Pushとは、Webアプリケーションからユーザーに通知を送る仕組みのことです。Web Pushを使えば、ユーザーがWebアプリケーションを開いていなくても、ブラウザやOSの通知センターにメッセージを表示することができます。

Web Pushは、Service Workerというバックグラウンドで動作するスクリプトと、Push APIというブラウザが提供するAPIを使って実現されます。Service Workerは、Webアプリケーションがインストールされた時に登録され、Push APIは、ユーザーが通知の許可を与えた時に呼び出されます。Push APIは、Webアプリケーションに一意に紐づくPush Subscriptionというオブジェクトを生成し、その中に含まれるendpointというURLをサーバー側に送ります。サーバー側は

元記事を表示

【SwiftUI】Chartの棒グラフでグラデーションを設定した際にグラデーションの終点を揃える

# はじめに
SWiftUIのChartを極めようの会を1人でしてます。

# 解決したい課題
棒グラフにグラデーションを設定します。
“`swift
import SwiftUI
import Charts

struct Temperature {
let day: Int
let max: Double
let min: Double
}

struct ContentView: View {
@State private var temperatures: [Temperature] = [
.init(day: 1, max: 17, min: 13),
.init(day: 2, max: 25, min: 10),
.init(day: 3, max: 12, min: 11),
.init(day: 4, max: 21, min: 11),
.init(day: 5, max: 10, min: 6)
]

var body: so

元記事を表示

Expoでeas buildのad-hocのprovisioning profileに新しい端末を追加できない時

# 前提
– Expoのmanaged workflow
– expo-dev-clientを利用している
– eas buildを利用している
– iOSむけにad-hocビルドを配信したい

# 問題
– 新しいiOS端末を検証端末として登録したかった
– そのために`eas device:create`をして、新しい端末のUUIDを登録した
– その後`eas build –profile development –platform ios`でad-hocのビルド実行した(–profile developmentのdevelopmentのところは各自のeas.jsonの設定によって異なります)
– eas cliから`The provisioning profile is missing the following devices`と尋ねられるので、さっき`eas device:create`で登録した端末を選択して続行
– `Failed to provision 1 of the selected devices:0000xxxx-000359960C21xxxx (

元記事を表示

SwiftUIでの画面遷移問題: NavigationViewからNavigationStackへの移行

SwiftUIを使用する際に直面した、NavigationViewを用いた画面遷移の問題について共有したいと思います。この問題は、遷移前の画面でCore Dataをfetchする際に生じました。具体的には、遷移前の画面でCore Dataを取得し、遷移先の画面でそのデータを更新すると、遷移前の画面が再レンダリングされてしまいました。その結果、NavigationViewのdestinationが解除され、自動的に遷移前の画面に戻ってしまうという状況が発生しました。

この問題には、SwiftUIのNavigationStackの使用が効果的な解決策でした。最近、NavigationViewは非推奨とされ、NavigationStackが推奨されています。NavigationStackに移行したところ、上記の問題が解消されました。NavigationStackは、より直感的で使いやすいAPIを提供し、画面遷移におけるこのような問題を解決するのに役立ちます。

この記事は、同じ問題に直面している他の開発者の参考になることを願っています。SwiftUIの動作に関しては、時に直感に反することが

元記事を表示

【SwiftUI】Chartをスクロール可能に変更する

# はじめに
チャートをスクロール可能にする機能の紹介します。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2024-01-13 at 19.07.56.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/dee5a330-63c9-71eb-d8d5-4c4a959926d9.gif)

# 実装
“`swift
import SwiftUI
import Charts

struct Temperature {
let day: Int
let max: Double
let min: Double
}

struct ContentView: View {
@State private var temperatures: [Temperature] = [
.init(day: 1, max: 23, min: 13),
.init(day: 2, max:

元記事を表示

Core ML索引

### Core MLに関する記事のリンク集です
60記事ぐらい。MLBoy まじまだいすけが書いた記事です。
新しい記事が上にきます。
(Core MLはiOS/macOSで使えるAIフレームワークです)

**目次**

[**CoreMLについて**](#coremlについて)

[**モデル変換例/使用例**](#モデル変換例使用例)

[**テクニック**](#テクニック)

# CoreMLについて

https://qiita.com/john-rocky/items/f15ac3885e42b52c579b

https://qiita.com/john-rocky/items/caa55453f40f5f444edf

https://qiita.

元記事を表示

Metalシェーダー入門:50行で三角形を描画してみよう

## Metalシェーダー開発

– とにかく綺麗なグラフィックを描画してみたい!
– 数百万単位の大量のパーティクルを描画したい!
– 3Dを描画してみたい!
– オリジナルの画像処理プログラムを書きたい!
– 機械学習モデルをGPUを使って自前で実装してみたい!
– 物理シミュレーションを実装してみたい!

そんな方はぜひMetalでシェーダーを書いてみましょう!
ただ、今回の記事は入門編ということでめちゃめちゃ簡単なところからやっていきます。

## 今回つくるもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567236/7798ea43-5323-6754-9e56-d2a0c738093c.png)

シェーダーの基礎、三角形を描画していきます。

macOSアプリとして実装していくので、Swiftでのアプリ開発経験があるとこの記事は読みやすいと思います。
コードはiOSの実機でも動きます。(シミュレーターでは動きません)
ちなみに完成コードはたったの50行!

## 準

元記事を表示

NotionSwiftを使ってアプリ作ってみた話

「[NotionAPI](https://developers.notion.com/)でアプリ作ってみたい」と思い立って、公式より簡単に作れないかなーと方法を探していたところ、良い感じのライブラリを見つけました。

https://github.com/chojnac/NotionSwift

使ってみよう

READMEを読んだ感じ、使いやすそうだ

# 作ったアプリ
Notionで作成した習慣トラッカーの入力を簡単にするアプリを作りました。(よかったら使っていただけると嬉しいです!)

https://apps.apple.com/us/app/nabit/id6466298791

ライブラリを使用した箇所は以下になります。
– NotionDB作成
– 既存のNotionDBとの連携
– NotionDBにページを追加
– 特定のページのプロパティを更新

# 実装
## Wrapperクラスの作成
`NotionClient`のインスタンスとAPI処理を持つclass。

`NotionClient`のインスタンスを生成するには`integrationToken`と`dat

元記事を表示

【SwiftUI】ChartのX軸Y軸の目盛りを編集する

# はじめに
Chartの折れ線グラフの目盛りに関して調べたので記事にしておきます。

# デフォルト実装
本記事で使用する実装です。
この実装をベースに機能を追加していきます。
“`swift
import SwiftUI
import Charts

struct Temperature {
let day: Int
let max: Double
let min: Double
}

struct ContentView: View {
@State private var temperatures: [Temperature] = [
.init(day: 1, max: 23, min: 13),
.init(day: 2, max: 25, min: 10),
.init(day: 3, max: 23, min: 11),
.init(day: 4, max: 21, min: 11),
.init(day: 5, max: 18, min: 12),

元記事を表示

チーム開発を上手くすすめるために

## 概要

この記事では、チーム開発を上手くすすめるために必要なことを筆者の体験をベースに重要だと考える要素についてまとめています。

## 前提

筆者は iOS 開発者として働いていますが、仕事とは別で個人的にアプリ開発したり、チーム開発をしたりしています。その中で、仕事でない時のチーム開発を上手くすすめるために必要なことをまとめています。筆者はハッカソンへの出場や趣味での iOS アプリ開発で何回かチーム開発をしてきましたが、その中で上手くいかなかったことの原因を思い返すと、モチベーションの低下などほとんどが似たような要素に起因していると考えていますのでその対処法についてこの記事でまとめていきたいと思います。

## メンバー集め

まずは、チーム開発をするためにはメンバーが必要です。メンバーを集める際には、以下のような観点を考えると良いと思います。

1, メンバーの技術力・スキル
仲良しで集まって自由に開発するのも楽しくて良い部分も多くあるかと思います。ただ、リリースを目的にしたり、比較的難易度の高いものを開発目的にする場合は、自分にないスキルを持ったメンバーを集めた

元記事を表示

【SwiftUI】折れ線グラフを2つ表示する

# はじめに
SwiftUIのChartsで折れ線グラフを2つ表示させようとした時に苦戦したので記録しておきます。

# サンプルアプリ
![simulator_screenshot_DB3BA4F1-34EA-42AD-AAA1-773BD7E486DC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/25b897a7-8c8c-4672-ddc9-ad68fcad73e6.png)

# ダメな例
以下のように`LineMark`に`foregroundStyle`をつけることで色を変えることができます。
“`swift
Chart {
ForEach(temperatures, id: \.day) { temperature in
LineMark(
x: .value(“day”, temperature.day),
y: .value(“max”, temperature.max)
)

元記事を表示

[Swift] APIを使用して郵便番号から住所を自動入力する(Storyboard版)

## はじめに
会員制のアプリケーションを開発する際、ユーザーに住所の入力を求めたい場合がありますよね。
ただ住所を都道府県から手入力しようとすると、文字数が非常に長いため、ユーザーにとっては手間となってしまいます。(ユーザーの離脱につながるリスクもある)
そこで多くのアプリケーションに導入されているのが、郵便番号からの住所自動入力です。
この技術をSwiftではどのように導入しているのか気になったため調査・実装してみました。
色々方法はあるようですが、今回はAPIを使用した方法で実装しています。

※本記事はStoryboardで実装しています。SwiftUI版は別途記事を作成します。

## 使用するAPI
以下のAPIを使用します。

https://zipaddress.net/

https://zipaddress.net/ こちらのURLの末尾に`?zipcode={郵便番号}`を追加すると、郵便番号に応じた住所を返してくれます。
例) https://api.zipaddress.net/?zipcode=1000001

## Storyboadに配置するパーツ

元記事を表示

iPhoneで人物を異なる背景に貼り付ける

# 動画合成/画像合成でさまざまなイメージを作れる

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/d7eef89a-c460-f39e-5393-07746238d30b.jpeg)
![matte.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/430608a9-522e-1f47-3ecd-8710fceb3129.jpeg)
![スクリーンショット 2024-01-11 6.24.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/9d3472b2-0696-ee0a-9326-fb2d84d5ed23.png)

iPhoneやiPadのアプリで高速に実行できるので、

**・旅行イメージの提案
・広告画像の作成
・商品使用イメージ
・動画のクロマキー合成**

などに使える。

元記事を表示

App Store アイコンとリンク生成のための便利ツール:Apple Media Servicesの活用

アプリ開発者やウェブサイト運営者にとって、自社のアプリを効果的に宣伝することは極めて重要です。その一環として、App Storeのアイコンやリンクをウェブサイト上で上手く表示することが求められます。そこで役立つのが「Apple Media Services」の提供する特別なツールです。このツールは、公式のApp Storeのアイコンを作成し、アプリへの直接リンクを簡単に生成することを可能にします。

https://tools.applemediaservices.com/ja-jp/app-store

利用方法は非常にシンプルです。上記のウェブサイトにアクセスし、自分のアプリに関連する情報を入力するだけ。すると、様々なサイズや形式でApp Storeのアイコンが生成され、HTMLやURL形式のリンクも提供されます。これらのリソースを利用することで、ウェブサイト上でのアプリの見栄えを向上させ、より多くのダウンロードへと繋げることができるでしょう。

また、このツールは無料で利用可能であり、Appleの公式リソースを使用するため、信頼性も高いです。アプリのプロモーションにおいて、このよ

元記事を表示

【SwiftUI】iPhoneのロック画面で使用できるライトボタンを再現してみた

# はじめに
iPhone標準の動作を再現してみると勉強になるので、ロック画面で使用できるライトボタンを再現してみました。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2024-01-10 at 22.14.23.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/32dfa2b9-4793-e0e9-a002-739a7594a2e0.gif)

# 実装
“`swift
import SwiftUI
import AVFoundation

struct ContentView: View {
@GestureState private var isDetectingLongPress = false
@State private var isOn = false

var longPress: some Gesture {
LongPressGesture()

元記事を表示

[Swift文法] タプル

# はじめに
Swift の復習でまとめた記事になります。

# タプル型
**複数の型を1つの型として扱うもの**です。

## 定義の仕方
`変数名: (型名1, 型名2, … , 型名n)`のような書き方をします。(nは自然数)

“`swift
var tuple: (Int, String)
“`
タプル型の値を**タプル**と呼びます。上記の例だと、`tuple`がタプルです。
値を代入するには、`(型名1, 型名2, … , 型名n)` と同じように代入していきます。

“`swift
let tuple: (Int, String) = (1, “apple”)
print(tuple) // (1, “apple”)
“`

## 要素のアクセス
タプルの要素へのアクセスは主に3つの方法があります。
– インデックスによるアクセス
– 要素名によるアクセス
– 代入によるアクセス

### インデックスによるアクセス
各要素にインデックスでアクセスできます。

“`swift
let tuple: (Int, String) = (1, “apple

元記事を表示

【SwiftUI】カスタムタブを表示するのはoverlayではなくsafeAreaInsetの方がいい

# はじめに
カスタムタブを作成した際にoverlayを使って表示するとコンテンツに被ってしまうという問題に当たりました。
safeAreaInsetを使ったところ解決したので、記事にしておきます。

今回のサンプルアプリでは「ホーム」「通知」「プロフィール」のタブがある想定で進めます。
しかし、ちゃんと実装するのは「ホーム」だけで「通知」「プロフィール」にはTextを配置します。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2024-01-09 at 23.42.50.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/89a5a91c-ec1c-deb9-4182-802e0bde7ae1.gif)

# カスタムタブの実装
以下のようなシンプルなカスタムタブを作成しました。
![Simulator Screenshot – iPhone 15 – 2024-01-09 at 23.08.20.png](https://qi

元記事を表示

RealityKitのCustomMaterialでアウトラインを描くShader

# RealityKitのCustomMaterialでアウトラインを描くShader

RealityKitの[CustomMaterial](https://developer.apple.com/documentation/realitykit/custommaterial)でアウトラインを描くShaderを作ってみました
オマケでゲーミングアウトラインモードもあります

元記事を表示

iOS、Androidアプリでスクリーンショットを防ぐ

# iOS
そもそもスクリーンショットは端末の機能なのでデベロッパーの都合で禁止すべきではないし、完全に禁止というのはできない。スクリーンショットされたことを検知したりする機能もない。

画面の一部を隠すという機能もデベロッパーに提供されてはいない。

ただ、Appleが用意した`UITextField`の`isSecureTextEntry`をonにすると、そのテキストフィールドの部分だけはスクリーンショットに映らないという公式の機能がある。これをハックすると、画面の一部または全体をスクリーンショットに映らないようにすることもできる模様。

[Youtube – Prevent Screenshot – SwiftUI – Xcode 15](https://www.youtube.com/watch?v=viao1kTWBoY)
[github – yoxisem544/ScreenshotPreventing-iOS](https://github.com/yoxisem544/ScreenshotPreventing-iOS)

筆者自身も、スクリーンショットに映らないようにし

元記事を表示

OTHERカテゴリの最新記事