- 1. 1.前書き
- 1.0.1. ChatGPTを相棒に初めてiPhoneアプリを作ったので、内容の備忘録
- 1.0.2. VSCodeで.NET MAUIの開発環境構築
- 1.0.3. Debugビルドの時だけApp Transport Securityを無効化する (Xcode13以降用)
- 1.0.4. iOSアプリ開発でFour Keysを運用してみている話
- 1.0.5. UNNotificationの設定: UNNotificationSettings のまとめ
- 1.0.6. 【SwiftUI】メニューにPickerを横並びで配置する(iOS17)
- 1.0.7. 【SwiftUI】StretchableなUIを作成する
- 1.0.8. iOSで画像から日本語テキストを読み取る(VNRecognizeTextRequest)
- 1.0.9. EditButtonで「完了」のみ太字にする方法(SwiftUI)
- 1.0.10. Flutter 個体識別IDの取得方法 iOS/Android
- 1.0.11. カスタムCAShapeLayerクラスのAnimatableなプロパティでアニメーションを動かす
- 1.0.12. CordovaでUDPブロードキャストを受信する
- 1.0.13. 【SwiftUI】自身(View)が親Viewのどこに位置しているかを取得する(iOS17)
- 1.0.14. SwiftUIで追加読み込みをする方法
カレンダー開発の怖い話: 週番号 #TimeTreeアドカレ
これは株式会社TimeTree Advent Calendar 2023の11日目の記事です。
https://qiita.com/advent-calendar/2023/timetree
TimeTreeのiOSエンジニア、@gonseeです。
TimeTreeはカレンダーシェアアプリなので、日々カレンダーにまつわる開発を行っています。カレンダーは我々の生活にあまりにも溶け込んだ存在なので、それをアプリで実装することはそれほど難しくないんじゃないか、と思うかもしれません。しかし実際に開発してみるとすごく複雑で、知っておかないと思わぬバグを仕込んでしまうことになります。そんな、エンジニア視点で「怖い」話をお届けしていきます。
前回は[「タイムゾーン」と「サマータイム」](https://qiita.com/gonsee/items/f26798f841efc338d899)をテーマにお届けしました。今回のテーマは「**週番号**」です。
同じ内容をTimeTreeラヂオでも話しているのでよかったら聞いてみてください。こちらの記事ではコードを交えてより技術的な話をしたいと思い
【iOS】Kotlin MultiplatformでApp Clip対応アプリを2か月で作ったので振り返る
この記事は[レコチョク Advent Calendar 2023](https://qiita.com/advent-calendar/2023/recochoku)の11日目の記事となります。
## はじめに
こんにちは、永田です。
株式会社レコチョクでiOSアプリ開発をしています。今年の私的音楽トピックは
– 周年ライブ開催により、もう15年も凛として時雨を追っていることに気付く
– NewJeans・LE SSERAFIMを皮切りにK-POPにハマる
– [USB DAC](https://www.fiio.jp/products/btr7/)デビューで逆に有線イヤホンに回帰するの3本でした。
—
さて、レコチョクでは「新しい音楽体験の創出」に向けた取り組みを多数行っています。
その一環として、[P!TNE](https://pitne.jp)というアプリを開発しました。
対応商品に内蔵されたNFCタグをスキャンすることでアプリが起動し、商品に紐づく音源を再生できるアプリです。![P!TNEの紹介画像](https://qiita-image-sto
TCAでGithubリポジトリ検索アプリを作ってみよう②
# はじめに
[TCAでGithubリポジトリ検索アプリを作ってみよう①](https://qiita.com/takehilo/items/814319d4666fef402a41)の続きです。https://qiita.com/takehilo/items/814319d4666fef402a41
前回はプロジェクト構成やAPIクライアントの設計の話まででTCAについては特に触れてませんでしたが、今回はいよいよTCAで作った画面の実装の解説をします。
ちなみに、この記事は [NewsPicks アドベントカレンダー 2023](https://qiita.com/advent-calendar/2023/newspicks) の11日目の記事です。
NewsPicksの他の技術記事も面白いので是非読んでみてください!https://qiita.com/advent-calendar/2023/newspicks
# リポジトリリストの表示
最初に、リポジトリリストの表示機能について見ていきます。リポジトリリスト表示機能は、リスト表示に関するロジック
【SwiftUI】Viewをズームインしたり、ズームアウトしたりする(iOS17)
# はじめに
今回のサンプルは`@GestureState`という機能を使います。
初めて見たよって方は`@GestureState`の記事から見てくださいhttps://qiita.com/SNQ-2001/items/df8c61ff82ffc7bdad33
# サンプルアプリ
# 実装
公式ドキュメントのコードです。
“`swift
import SwiftUIstruct ContentView: View {
@GestureState private var magnifyBy = 1.0var magnification: some Gesture {
MagnifyGesture()
.updating($magnifyBy) {
スライドパズルをつくろう(Swift)
![Xcode-15](https://img.shields.io/badge/Xcode-15-brightgreen) ![iOS-17](https://img.shields.io/badge/iOS-17-brightgreen)
## はじめに
こんな感じの任意の画像をつかった 3 × 3 のスライドパズルをつくります!![puzzle](https://github.com/adventam10/testautolayoutapp/assets/34936885/17ec1ff3-4731-4433-9eef-c4c45f07229e)
今回は簡単そうなので UIKit でやります。
## ソース全体
説明とかいらない人はこちらをどうぞ。ソース
“`swift
import UIKitenum Direction {
case up, down, right, left
}extension UIImage {
func trimming(rect: CGRe
Flutterのcontextとは何者か。
目次
- 1.前書き
- 2.contexrtとは(概念)
- 3.contexrtとは(具象)
- 4.Elementの役割
- 5._parentの使い方
- 6.find~/dependOnInherited~の動き
- 7.まとめ
1.前書き
なぜ、この記事を書こうと思ったのか。
Flutterといえば、ios,android両方のアプリを開発できるフレームワークで
ある程度の知識があれば簡単なアプリなら作業量ほぼ半分で作れてしまう便利な代物です。
しかし、ある程度以上のものを作るとなると必ずと言っていいほど
【contextとは何か】
という壁ChatGPTを相棒に初めてiPhoneアプリを作ったので、内容の備忘録
## はじめに
この記事は、なんとなく面白そうだからiPhoneアプリ作ってみたいなと思った営業職の私が、ChatGPTさんを相棒に初アプリを完成させるまでの工程を振り返ったものです。
たぶんお見苦しいところもあると思いますが、「素人ってこの辺つまづくのね」と思っていただけたり、「SwiftUI初心者仲間みっけ!」と読み物として読んでいただけたりすれば幸いです。## 実際に作ったアプリの動作動画
![価格比較アプリ 作業動画.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661221/ac9e9248-d6b5-8ed3-519b-3c255f5f8fdb.gif)自分のiPhoneだけで機能が完結して、かつデータの保存機能がいらないアプリは比較的難易度が低いようだったので、「こういうアプリ欲しいとかある?」と妻に聞いたところ、
「トイレットペーパーやティッシュ買うときに、どれが割安なのか知りたい」と意見をくれたので、作ってみることにしました。
(調べたら当然先行アプリあったんですが笑)<
VSCodeで.NET MAUIの開発環境構築
# はじめに
## .NET MAUIについて
.NET MAUI(Multi-platform App UI)は、C#とXAMLを使用してモバイルアプリやデスクトップアプリを開発することができるクロスプラットフォームのフレームワークです。名前の通り、Microsoftの.NETシリーズとして提供されています。
これまではXamarin.Formsという名前で提供されてきましたが、2024年5月1日にサポートが終了し.NETシリーズに統合される予定となっています。
https://dotnet.microsoft.com/ja-jp/platform/support/policy/xamarin
## Visual Studio for Macのサポート終了について
.NET MAUIでiOSやMacOS向けのアプリをビルドするにはmacOSの環境が必要ですが、
公式から提供される開発環境としては、Visual Studio for Macが唯一の手段となっていました。しかしながら、2023年8月に、MicrosoftからVisual Studio for Macの廃止
Debugビルドの時だけApp Transport Securityを無効化する (Xcode13以降用)
iOSプロジェクトのビルド設定の整備において、Debugビルドの時だけApp Transport Securityを無効化したい時があります。
で、この対応方法が難儀なものであるのが、以前までの私の認識でした。[^1]
[^1]:[Q. ATS を Debug ビルドでだけ無効にしたいのですが…](https://akisute.com/2016/10/q-ats-debug.html)現在のビルド設定事情を調べたところ、Xcode13以降で作成したプロジェクトならば、info.plistのファイルは追加分の設定を行う役割となっています。[^2]
これによりタイトルの課題は、以下の方法で簡単に対応可能なようです。* プロジェクト設定に デバッグ用の info.plist を追加する。[^3] (例: debug-info.plist)
* debug-info.plist について App Transport Securityの無効化設定を追加する。[^4]
* アプリTargetの Build Setting > Package > Info.plist File にiOSアプリ開発でFour Keysを運用してみている話
はじめましての方ははじめまして、iOSエンジニアのtanakoです。
この記事はタイミーの[アドベントカレンダー](https://qiita.com/advent-calendar/2023/timee)10日目の記事となります。
今回はiOSチームで運用にトライしているFour Keysについて、なぜ運用しているか、運用してどうだったかを書いてみます。(iOS固有の話は少ないです)# Four Keysとは何か
Four Keysとは開発チームのパフォーマンスを示す4つの指標を定義したもので、ビジネス成果と相関関係があります。詳しい説明は次の記事や書籍を参照してください。タイミーもFour Keysを重要視していて過去同テーマで勉強会も行っています。
– [LeanとDevOpsの科学](https://www.amazon.co.jp/dp/4295004901)
– [エリート DevOps チームであることを Four Keys プロジェクトで確認する(Google Cloud Blog)](https://cloud.google.com/blog/ja/producUNNotificationの設定: UNNotificationSettings のまとめ
iOSの通知(UNNotification)の設定状況は、UNNotificationSettings から確認ができます。
各項目が何であるか? をまとめです。“`swift
// UNNotificationSettingsの取得
let settings = await UNUserNotificationCenter.current().notificationSettings()
“`![スクリーンショット 2023-12-10 0.18.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1380/8532d75b-0b37-1f08-a23a-28a118f739e0.png)
| Name | 内容 | 設定画面 | AuthorizationOptions |
|—|—|—|—|
| [authorizationStatus](https://developer.apple.com/documentation/usernotifications/un【SwiftUI】メニューにPickerを横並びで配置する(iOS17)
# はじめに
iOS17からPickerに`palette`というスタイルが追加されました。
これはメニュー内で使用すると効果が出るようです。https://qiita.com/SNQ-2001/items/97f0f379a696f0ec8ecc
以前、ボタンを横並びで配置できる方法を紹介しました。
似ていますが、今回はボタンではなくPickerです。# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-09 at 22.37.43.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e0fcc15b-3d4b-6f00-4071-a3fea6f77df1.gif)# 実装
“`swift
import SwiftUIenum Reaction: Identifiable, CaseIterable {
case heart, star, bookmarkvar id: Self {
【SwiftUI】StretchableなUIを作成する
# Stretchableとは
そもそもStretchableなUIとはなんでしょうか。
`Stretch` + `able` つまり「伸縮可能なUI」を指します。
ScrollViewの開始位置から上にスクロールしたときに、Headerがビヨーンと伸びるあれです。
ちなみに、Stretchableという言い方以外に「StretchyView」という呼び方もあるそうです。その作り方を説明していきます!
# 動作環境
– MacOS Sonoma 14.1.2
– Xcode 15.0.1
– Swift 5.9# 作り方
作り方としては、`ScrolView`の中に`GeometryReader`を入れて、画像の高さとHeaderのY軸のOffsetを計算すればできそうです。
コードにすると下記のようになります。“`Swift: StretchableView.swift
struct StretchableView: View {
var body: some View {
ScrollView {
GeometryReiOSで画像から日本語テキストを読み取る(VNRecognizeTextRequest)
# はじめに
近年、ChatGPT等の盛り上がりにより、テキスト処理の適用範囲が広がっていると思います。
本記事では、iOSのVisionフレームワークを使用して、画像から日本語テキストを抽出する方法を紹介します。VNRecognizeTextRequestは、強力なテキスト認識機能を提供し、多言語のサポートを備えています。# 事前に用意するもの
– Xcodeの最新バージョン
– iOSデバイスまたはiOSシミュレータ
– 基本的なSwiftとiOS開発の知識# 実装の流れ
## Visionフレームワークのインポート
“`
import Vision
“`## テキスト識別リクエストを生成
画像からテキストを識別し、その結果を返すためのリクエストオブジェクト(VNRecognizeTextRequest)を生成します。
この段階ではまだ識別処理は実行されません。
“`
let request = VNRecognizeTextRequest { (request, error) in
guard let observations = request.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-storFlutter 個体識別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を持つVCordovaで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関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた