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

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

EditButtonで「完了」のみ太字にする方法(SwiftUI)

## はじめに

本記事は [SwiftWednesday Advent Calendar 2023](https://qiita.com/advent-calendar/2023/swift-wednesday) の9日目の記事です。
昨日も @uhooi で [ブラーでぼかすけど膨らませない方法(SwiftUI)](https://qiita.com/uhooi/items/68858c46214fe88983a7) でした。

SwiftUIの [`EditButton`](https://developer.apple.com/documentation/swiftui/editbutton) で「完了」のみ太字にする方法を紹介します。

## 環境

– OS:macOS Sonoma 14.0(23A344)
– Swift:5.9

## EditButtonのデフォルト

`EditButton` はデフォルトで「編集」も「完了」も太字ではありません。

|編集|完了|
|:–:|:–:|
|![image.png](https://qiita-image-stor

元記事を表示

Flutter 個体識別IDの取得方法 iOS/Android

# デバイスIDの取得方法

実務でデバイスの個別識別IDを取得する必要が生じたため、その方法を共有します。まず、`flutter pub add device_info`を実行して、`device_info`パッケージの依存関係をプロジェクトに追加します。

次に、このパッケージをインポートします。

“`dart
import ‘package:device_info/device_info.dart’;
“`
# AndroidでのdeviceID取得方法
AndroidデバイスのIDを取得するには、DeviceInfoPluginを使用します。以下はその例です。
“`
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
print(‘Android Device ID: ${androidInfo.androidId}’);
“`
このコードは、非同期関数内で実行する必要があります。androidId

元記事を表示

カスタムCAShapeLayerクラスのAnimatableなプロパティでアニメーションを動かす

# 概要

CAShapeLayerで描画されたViewをアニメーションさせたいケースがあると思います。

`strokeStart`や`strokeEnd`などのCAShapeLayerで定義しているプロパティを指定することで、プロパティ変化に応じてCABasicAnimationによるアニメーションを実行することができます。

しかし、描画する内容によっては、独自のプロパティを指定してアニメーションを実行させたい時があります。

そこで本記事では、円グラフを描画するCAShapeLayerクラスを例に、Animatableなプロパティを定義する方法について説明します。

# 完成イメージ

![画面収録-2023-11-24-18.56.03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368292/9c8845d0-a669-fcf5-5781-ea73cf998dbe.gif)

# 手順

1. カスタムCAShapeLayerクラスを作成
1. カスタムCAShapeLayerを持つV

元記事を表示

CordovaでUDPブロードキャストを受信する

前回の投稿で、ESP32に接続したセンサ信号をUDPブロードキャストしました。

 [ESP32で計測したセンサーデータをUDPブロードキャストする](https://qiita.com/poruruba/items/e19dce57d1b73795c683)

今回は、CordovaでUDPブロードキャストを受信するプラグインを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/0101d6d1-3077-3c1e-1a75-8c1bfed63e91.png)

アプリケーションは、ランダム画像を表示するクロックにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/40adf3bd-bcac-6b40-3377-1dd7e9cc9dbe.png)

クロック表示画面には、ランダム画像提供サイトから取得される画像を背景画像として表示します。
もし

元記事を表示

【SwiftUI】自身(View)が親Viewのどこに位置しているかを取得する(iOS17)

# はじめに
タイトルでちゃんと伝わっているかわからないので記事の内容を見てください笑
(多分伝わってない)

# 解説
今回重要なのは`CoordinateSpaceProtocol`です。
これがiOS17で追加されました。

Viewのサイズや位置などの情報を座標空間に変換して、その空間に名前を付けておけるっぽい?です。
その座標空間情報を使って、呼び出し側のViewが座標空間のどの位置にいるのかを取得するのかな

詳しいことはよくわかりませんが、使ってみるとどのような動きができるのかよくわかります。

以下のサンプルは`VStack`に`container`という名前をつけて`VSTack`内の`Text`で表示しています。

`Text`が`container`という名前の座標空間のどこに位置しているかを取得でき

元記事を表示

SwiftUIで追加読み込みをする方法

## はじめに
ListのViewにて、スクロールして最下部まで到達したら追加読み込みを行う方法です。

## 方法
“`swift
struct ContentView: View {
@State var numbers = Array(1…50)
var body: some View {
List {
ForEach(Array(numbers.enumerated()), id: \.element) { index, element in
Cell(index: index)
.onAppear {
if numbers.count – index == 1 {
// 配列の中身を更新する処理
}
}
}
// 配列の中身を更新中はこの辺りでインジケーターを表示する
}
}
}

private struct Cell: View {
let index: Int
v

元記事を表示

中華フォントをたった1行で解決するtypesettingLanguage【SwiftUI】

![中華フォント例](https://camo.qiitausercontent.com/d36bf81387b691e11cd26b8e922bf21ac9e71f61/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333536343636322f63353932396233302d373932392d333737302d646138322d6261396164376662393466362e706e67)

## 中華フォントとは
中華フォントとは、デバイスの言語設定で日本語を選択していないような場面において、日本語文章(特に漢字)のフォントが中華圏基準のものになる現象の俗称です。

![比較](https://camo.qiitausercontent.com/8c05c570f8f115e50531f5de8a1401e1a2427d70/68747470733a2f2f71696974

元記事を表示

W3CDTF形式のStringをDateに変換する

W3CDTF形式のStringをDateに変換します。

# W3CDTF形式について

W3CDTF(World Wide Web Consortium Date and Time Formats)は、World Wide Web Consortium(W3C)が定義した日付と時刻のフォーマットに関する標準です。

https://www.w3.org/TR/NOTE-datetime

以下の形式があります。

– Year:
– `YYYY (eg 1997)`
– Year and month:
– `YYYY-MM (eg 1997-07)`
– Complete date:
– `YYYY-MM-DD (eg 1997-07-16)`
– Complete date plus hours and minutes:
– `YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)`
– Complete date plus hours, minutes and seconds:
– `YYYY-MM-

元記事を表示

【SwiftUI】スクリーンショットを活用した画像生成

モバイルアプリの強みの一つは同じデバイスでSNSやメッセージアプリで手軽にコンテンツを共有できることです。そこで今回はアプリ内で少し複雑なシェア用の画像を生成する方法を紹介します。

ゲームのリザルト画面やクーポンなど様々なケースが考えられますが、実例として私が開発しているAIキャラ制作アプリ『Eveki』の場合を挙げて実装までを考えてみます。

# 実装したい機能

## ユーザー体験

『Eveki』ではユーザーが話し相手となるAIの設定を行うことできます。これに加えて、作ったAIをコンテンツとして共有できるようにしたいと考えています。具体的には、情報を反映させたカードを画像として生成し、友人に送信したりコレクションすることができるようにします。

![ユーザーが設定を入力 1280×670.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/344c57dc-f201-7b96-3782-c66ec7462298.png)

## 課題の整理

画像生成というと難しく聞こえますが、ま

元記事を表示

【SwiftUI】PhaseAnimatorを使って繰り返しアニメーションを作成する(iOS17)

# はじめに
昨日、繰り返しのアニメーションは`TimelineView`が相性良さそうっていう記事を書いたんですが、もっと繰り返しアニメーションに適しているものがありました。

https://qiita.com/SNQ-2001/items/7272b60527c0db283ee1

それは`PhaseAnimator`です。
iOS17から使用できるようになったようです。

`PhaseAnimator`を使ってアニメーションを作ってみました。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-07 at 21.20.16.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a434fc61-b5ea-997b-a012-fffd8c934158.gif)

# 実装
円の周りに放射状の線を設置するためのView
“`swift
import SwiftUI

struct RadialLineShape: Sh

元記事を表示

SwiftData で バックグラウンド処理

SwiftData への大量インサート。

⚡️令和 5 年最新版⚡️ Swift コードの書き方をアップデートする

:::note info
この記事は [セーフィー株式会社 Advent Calendar 2023](https://adventar.org/calendars/8881) 7 日目の記事です。
:::

## はじめに

今年は Swift 5.9 が発表されました。

[Macros](https://developer.apple.com/documentation/swift/macros)
実装も AST も使いどころも難しい😣

[Observation](https://developer.apple.com/documentation/observation)
`iOS 17.0+` だとプロダクション投入はちょっと。。😓

そんな我々のために、 Swift 5.9 を含むここ 1 〜 2 年ほどの Swift アップデートで可能となった、明日からでも使える Swift コードの書き方をいくつか紹介します。

– 個人的によく使う / よく使われるであろうもの
– Swift 5.9 (Xcode 15.0) 以降なら Deployment Target を気にせ

元記事を表示

熊谷さんのやさしいSwift勉強会

# はじめに

株式会社ゆめみ Advent Calendar 2023 の7日目の記事です

https://qiita.com/advent-calendar/2023/yumemi

# 勉強会

ゆめみでは、開催数 **329回**に達した勉強会があります。

その名も「**熊谷さんのやさしいSwift勉強会**」です。

この勉強会の心持ちがとても気に入っているのでまずは紹介です。

> ### 心持ち
> – みんな知っている、は思い込み
> – 自信や確証は、いらない
> – なんとなくそう思う、大歓迎

ちょうど下記の再生位置から 1分くらいの内容なので是非聴いてもらいたいです。

勉強会だけでなく、リモート会議で沈黙が常態化してしまう関係性においても、そういった状況を打開する心持ちにもなりそうに感じています。

## オープン・ハンドブック

さて、この勉強会に関する記録は、ゆめみオープン・ハンドブック内で公開されています。

> Swift 言語の素養を深

元記事を表示

Flutter 再入門

# はじめに

YUMEMI Flutter Advent Calendar 2023 の7日目の記事です。

https://qiita.com/advent-calendar/2023/yumemi-flutter

著者は、普段は主に Swift/Kotlin でモバイルアプリ開発をしています。Flutter 自体は2019年頃にデモアプリの開発で採用したことがあるものの、その後継続して利用する機会がありませんでした。
直近で、 Flutter で開発されたモバイルアプリを Swift/Kotlin に置き換えるプロジェクトに参加し、既存コードの解析を目的として、Flutter に再入門するきっかけとなりました。

# Flutter Kaigi

今年の11月に Flutter Kaigi が開催され参加しました。

https://flutterkaigi.jp/2023/

基調講演では、Flutter/Dart の8年の歴史について紹介され、成熟している印象を持ちました。開発中はホットリロードで素早く修正を反映し、リリース時はコンパイルされプラットフォームに最適化されたコ

元記事を表示

カレンダー開発の怖い話: タイムゾーンとサマータイム #TimeTreeアドカレ

これは[株式会社TimeTree Advent Calendar 2023](https://qiita.com/advent-calendar/2023/timetree)の7日目の記事です。

https://qiita.com/advent-calendar/2023/timetree

TimeTreeのiOSエンジニア、@gonseeです。

TimeTreeはカレンダーシェアアプリなので、日々カレンダーにまつわる開発を行っています。カレンダーは我々の生活にあまりにも溶け込んだ存在なので、それをアプリで実装することはそれほど難しくないんじゃないか、と思うかもしれません。しかし実際に開発してみるとすごく複雑で、知っておかないと思わぬバグを仕込んでしまうことになります。そんな、エンジニア視点で「怖い」話をお届けしていきます。今回のテーマは「タイムゾーン」と「サマータイム」です。

同じ内容をTimeTreeラヂオでも話しているのでよかったら聞いてみてください。こちらの記事ではコードを交えてより技術的な話をしたいと思います。コードはSwiftによるiOSアプリを前提としています。

元記事を表示

ドキュメンテーションコメントに画像を入れたら便利だった話

# はじめに
この記事は、Swift Advent Calendar 2023 の 5 日目の記事になります。

Swift とは少し離れてしまいますが、とあるコメントアウトの活用について思いついたので、書いていきます。

# ドキュメンテーションについて

皆さんはドキュメントコメント、書いていますか?

Swift ではドキュメンテーションを Markdown で書くことができます。

詳細については、iOS Advent Calendar 2023 2 日目の記事をご参照ください。

https://qiita.com/KaitoMuraoka/items/b2588ff9fbf1100610b3#markdown

# ドキュメンテーションに画像を入れると便利だった話

アプリケーションの作成やライブラリを作成していると、「言葉で説明しにくい」という場面があります。
例えば、図形や info などの GUI での設定が必要な場合など。

先日、実際に仕事中で「iOS のアラートを修正する作業」をしていました。
そのコードにはコメントアウトで「タイトルとメッセージ、そして OK

元記事を表示

【SwiftUI】TimelineViewを使って波を作る

# はじめに
TimelineViewを使って波を作ってみました。
繰り返しのアニメーションはTimelineViewと相性が良さそうです。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-06 at 22.14.44.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/39261a5a-1047-1dae-eb4f-8ce74a83c119.gif)

# 実装
“`swift
import SwiftUI

struct ContentView: View {
var body: some View {
TimelineView(.animation) { timeline in
GeometryReader { geometry in
Path { path in
path.move(to:

元記事を表示

JamfからiPadを再起動させてみる。誰がそんなこと必要とすんねん! え?うちだけど?

# まえがき

どもです。Gzockです。前回記事の如く本名は名乗りません。
早々に2回目の[アドカレ](https://qiita.com/advent-calendar/2023/bitkey-corp-eng)が回ってきました。これをチャンスと呼びましょう。
年の瀬が迫った今、ネガティブな気持ちなんて持ちたくありません。
諸事情により時間がないので、誰の役にも立たないであろう話を書きます。
はい、Jamfを使ってiPadを遠隔再起動させてみようぜっていう話です。
そんなの誰の役に立つんでしょうね? えぇ、弊社です。

# そもそもの話

– 私は情シス所属ではありません
– 普段はIoTの開発やってます
– [2023 AWS Summit Tokyoで弊社が登壇](https://speakerdeck.com/bitkey/yuzati-yan-woxiang-shang-saserukagiha-fen-duan-nojie-xiao-jue-dui-nizhi-merarenaisumatorotukuwoxi-usisutemunoli-ce)させてもらいました

元記事を表示

[Capacitor] cap updateした時に[error] Analyzing dependenciesとでた時の対応法

プラグインをアップデートしたあと、それをネイティブプロジェクトに反映させようと `npx cap update` を実行すると、よく以下のエラーが表示されます。

“`
[error] Analyzing dependencies
[!] CocoaPods could not find compatible versions for pod “****”:
In snapshot (Podfile.lock):

You have either:
* out-of-date source repos which you can update with `pod repo update` or with `pod install –repo-update`.
* changed the constraints of dependency `FBSDKCoreKit` inside your development pod
`CapacitorCommunityFacebookLogin

元記事を表示

OTHERカテゴリの最新記事