- 0.1. IOSの権限ダイアログの文言変更の方法
- 0.2. “~が…へのアクセスを求めています”の実装方法
- 0.3. MapKitで近くのお店を取得する方法(MKLocalSearch.Request, MKLocalPointsOfInterestRequest)
- 0.4. 【iOS】AppとApp Extension間でCookieを共有する方法
- 0.5. 【SwiftUI】設定ウインドウを開くボタンを設置する(macOS14)
- 0.6. 【Xcode】ショートカットガチ勢が普段よく使うショートカットを紹介する
- 0.7. mlprogramの出力を画像にする〜GFPGANによる例
- 0.8. SwiftUIのalertのためにOptionalを持つBindingの拡張メソッドを作ってみた。
- 0.9. うおぉぉぉ!いつの間にかiOS形式に変換できるようになっていた消しゴムモデルLaMaをiPhoneで使う
- 0.10. 【SwiftUI】箇条書きできるViewを作成する
- 0.11. 【Xcode】control + mで引数を自動で改行
- 0.12. 【SwiftUI】Qiitaのマークダウンで使えるnoteがかっこよかったので作ってみた
- 0.13. 【SwiftUI×SPM】SPMマルチモジュールでの画面遷移について
- 0.14. 【Swift】コード上で色を視覚的に認識できるように使用する
- 0.15. 以前投稿していたコードに関してAI(GPT-4 Turbo)に聞いてみた結果
- 0.16. 【SwiftUI】iOS 用のスクラッチ カード UI の実装
- 1. はじめに
IOSの権限ダイアログの文言変更の方法
初めてIOSアプリを作成してAppストアに申請して超詰まったところ
「権限の許可ダイアログに詳細な説明がありません」
上記の理由で何度も不許可
でも公式のダイアログ使ってるのにな〜?
何かカスタムする方法あるのかな〜?ありました!
しかも簡単!まずXcodeを開きます
自分のプロジェクトをクリックします
そうよく使うplistとかいうやつです
その中の「info」を選択します
追加した権限が必要なprivacyの末尾のvalueに文字を書くだけ!簡単です![スクリーンショット 2023-12-29 16.02.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647748/deca119e-2d9c-c584-c173-98a0068dc3f8.png)
これの赤線で囲ったところですね
こんな簡単にできたのか。。。
“~が…へのアクセスを求めています”の実装方法
## はじめに
アプリの開発において、ユーザーのプライバシーに関連する情報へのアクセス権を取得する必要が生じることがよくあります。この際、具体的な使用目的や利用する情報の詳細をユーザーに明示し、その許可を得る確認画面を表示することが必要です。今回は、この確認画面を実装するためのXcodeの設定手順について解説します。## Xcode設定手順
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/170c5f23-858f-f4de-d896-777cba1e19d5.png)① プロジェクト設定画面からInfoを選択
② +ボタンでプロパティを追加
③ Key(許可を求める機能:例ではカメラ)を選択
MapKitで近くのお店を取得する方法(MKLocalSearch.Request, MKLocalPointsOfInterestRequest)
# はじめに
AppleのMapKitを使って、現在地近くのお店(MKMapItem)を取得する機会があったので、備忘録的にまとめます。
## 基本
– 2つのオプションがあって、自然言語で検索する場合、しない場合
– MKMapViewに対して使う方法は今回は記載してません。### 自然言語で検索する場合
– MKLocalSearch.Requestを使用する
“`swift
// locationはCLLocationCoordinate2D
let localSearch = MKLocalSearch.Request()
// この場合、centerを中心に100m * 100mの四角形の中を検索する
localSearch.region = MKCoordinateRegion(center: location, latitudinalMeters: 100, longitudinalMeters: 100)localSearch.naturalLanguageQuery = “検索したい言葉”
let response = try? await
【iOS】AppとApp Extension間でCookieを共有する方法
# はじめに
アプリからHTTPリクエストで行動ログを送信し、APIサーバがCookieから端末を識別するための情報(端末ID)を取得して、行動ログと端末を紐づけて分析基盤に記録するということをしています。あるとき、アプリとアプリエクステンションとで、行動ログに紐づく端末IDが異なっていることに気づきました。
正しく分析を行うためには、アプリとアプリエクステンションのどちらから送信される行動ログにも同じ端末IDを付与する必要があります。
原因と対応方法がわかったので、以下にまとめます。
# アプリとアプリエクステンションはそれぞれ別々のCookieストレージを持っている
アプリがAPIサーバに初めてアクセスしたとき、APIサーバが端末IDを発行し、それをSet-Cookieヘッダーの値としてアプリに返す仕組みになっています。アプリは次回以降のアクセスでそのCookieをリクエストに付与するので、リクエストを端末と紐づけて記録することが出来ます。
ところが、アプリとアプリエクステンションはそれぞれ別々のCookieストレージを持っているため、アプリが端末IDのCookie
【SwiftUI】設定ウインドウを開くボタンを設置する(macOS14)
# はじめに
以前も同じ内容の記事を書きました。https://qiita.com/SNQ-2001/items/423db3d6453db5577ad6
今までは設定ウインドウを開くにはAppKitを使用しないと実現できなかったのですが、macOS14からSwiftUIの標準で実装することができました。
# サンプルアプリ
![画面収録-2023-12-28-22.13.55.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a8b2fb90-f2e5-b44c-eace-b2c6c70afb16.gif)# 実装
“`DemoApp.swift
import SwiftUI@main
struct DemoApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}Settings {
Settin
【Xcode】ショートカットガチ勢が普段よく使うショートカットを紹介する
こんにちは!作業効率厨、[むらお](https://twitter.com/ymurao2)です!
爆速コーディングのために、ショートカットガチ勢(自称)である自分が、よく使うショートカットや開発スピードアップテクニック?を紹介します## 登場する記号たち
| 記号 | |
| — | — |
| ⌘ | Command |
| ⇧ | Shift |
| ⌃ | Control |
| ⌥ | Option |
| ↩ | Return |
| ⌫ | BackSpace |
| ↑↓←→ | 矢印 |## Tier
独断と偏見でつけていきます
| Tier | 説明 |
| — | — |
| S | エース・これなしではやっていけない |
| A+ | 最強ではないものの非常によく使う |
| A | 結構使う |
| A- | 場所を選ぶが、結構使う |
| B | 便利 |
| C | たまに使う |
| D | あんまり使わない |# Xcode編
## Build系
| Tier | ショートカット | アクション |
| — | — | –
mlprogramの出力を画像にする〜GFPGANによる例
# ケーススタディGFPGAN
![sampleimage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/428f5550-a1e4-0ddf-8abe-5d493e7216d4.png)
https://github.com/TencentARC/GFPGAN
GFPGANは品質の良くない顔画像を綺麗にできる。
このPytorchモデルをCoreMLで画像出力できるようにしていく。# そのままではうまく画像にできない
CoreMLToolsを使ってPytorchモデルをCoreMLモデルに変換するとき、以下のようにして出力を画像に設定することができるが、**通常このままではうまく画像が出力されない。**
“`python
import coremltools as ctdummy_input = torch.randn((1,3,512,512)).cuda()
jit_model = torch.jit.trace(model,dummy_input)corem
SwiftUIのalertのためにOptionalを持つBindingの拡張メソッドを作ってみた。
SwiftUIでalertをスマートに実装する方法を模索中です。
例えば [`alert(_:isPresented:presenting:actions:message:)`](https://developer.apple.com/documentation/swiftui/view/alert(_:ispresented:presenting:actions:message:)-3md6l) の場合、`presenting`に与えるデータの有無に連動して、`isPresented`のtrue/falseが切り替わる仕組みがあると、便利と思いました。
`Binding`には [get/setのクロージャで値変換が可能なイニシャライザ](https://developer.apple.com/documentation/swiftui/binding/init(get:set:)-7ufcp)があるので、これを利用してみます。
で、汎用的に使えるように拡張メソッドを作ってみました。
“` swift:
extension Binding {
func bool
うおぉぉぉ!いつの間にかiOS形式に変換できるようになっていた消しゴムモデルLaMaをiPhoneで使う
# あの消しゴム機能がついにiOS形式に変換できるようになった
![Dec-27-2023 23-34-07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/1af1859c-f58c-5920-e6f9-050d8aa9ff08.gif)以前はiOS形式にできなかったLaMaインペインティングモデル。
フーリエ変換か何かが変換できなかった。
CoreMLToolsのアップデートで変換できるようになったらしい。
というのは、変換スクリプトを提供してくれている人をGitHubで見つけた。https://github.com/mallman/CoreMLaMa
ありがとうマルマンさん。
# 変換方法
“`shell
git clone https://github.com/mallman/CoreMLaMa.git
cd CoreMLaMa
pip install -r requirements.txt
python convert_lama.py
“`これだけでLaMa.
【SwiftUI】箇条書きできるViewを作成する
# はじめに
箇条書きViewってありそうでないんですよね
そう思ったので作ってみました。# サンプルアプリ
![スクリーンショット 2023-12-27 22.44.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/89c060f9-ea08-2c6e-429b-0a444d3bfc48.png)# 実装
“`swift
import SwiftUIstruct BulletPointListView: View {
let alignment: HorizontalAlignment
let spacing: CGFloat?
let bulletPointShape: BulletPointShape
let items: [String]init(alignment: HorizontalAlignment = .center, spacing: CGFloat? = nil, bulletPointShape:
【Xcode】control + mで引数を自動で改行
Xcode15から使えるショートカットで、引数のどこかにカーソルを合わせて`control + m`を押すと、引数が自動で改行される。
![スクリーンショット 2023-12-27 17.46.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640032/801486c9-30ae-2413-433c-a219b646026d.png)
↓↓↓
![スクリーンショット 2023-12-27 17..png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640032/3d1e0d10-c280-3801-0db2-f30dec8ad3ff.png)
【SwiftUI】Qiitaのマークダウンで使えるnoteがかっこよかったので作ってみた
# はじめに
Qiitaのマークダウンで作れる↓を作ってみることにしました。:::note info
あいうえお
かきくけこ
::::::note warn
あいうえお
かきくけこ
::::::note alert
あいうえお
かきくけこ
:::これかなりかっこいいですよね
# サンプルアプリ
こんな感じのが作れます。
![スクリーンショット 2023-12-27 21.20.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/acf4cf87-a130-1bb4-2874-7791993fac19.png)# 実装
“`swift
import SwiftUIenum QiitaNoteType {
case info
case warn
case alert
}extension QiitaNoteType {
var systemName: String {
switch self {
【SwiftUI×SPM】SPMマルチモジュールでの画面遷移について
# 目的
– モジュールを疎結合にし、SPMマルチモジュール構成を採用するメリットを最大限享受できるようにすること。
– モジュール同士がお互いの存在を知らずとも画面遷移可能な実装を示します
– SPMマルチモジュール構成を採用したプロジェクトにおいて、画面遷移実装を行う際の検討材料になれば嬉しいです**本記事のゴール**
`SPMマルチモジュール上` で [swift-dependencies](https://github.com/pointfreeco/swift-dependencies) を用いた、`疎結合な` `画面遷移` を実装すること| 画面遷移 |
| —- |
| |# 記事を書いた背景
SPMマルチモジュールのメリットである、`ビルド時間の短縮` のた
【Swift】コード上で色を視覚的に認識できるように使用する
# はじめに
Xcodeでは色を視覚的に認識できるように使用できる`#colorLiteral`というものがあります。
これを多用するのは良くなさそうですが、色の定義部分で使用するにはひと目でわかるので便利そうです。補完などは出ないのでコードのコピペで使用しましょう
# どのように表示されるの?
![スクリーンショット 2023-12-25 20.42.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/2e74d928-9cdb-bc15-a6ae-fa2d2497d8c3.png)# 実装
“`swift
#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
#colorLiteral(red: 1, green: 0, blue: 0, alpha: 1)
#colorLiteral(red: 0, green: 1
以前投稿していたコードに関してAI(GPT-4 Turbo)に聞いてみた結果
https://qiita.com/4q_sano/items/bf92f4ebf06d6bb1ead3
以前(2021年08月31日)、投稿した↑こちらの記事ですが、今ではAI(GPT-4 Turbo)に以下のように質問するだけで、理想的なコードを教えてくれます。
質問:**「WKWebViewでtarget=“_blank”に対応する方法は?」**
AI: リンクを現在のwebViewでロードするコードを作成質問:**「これをsafariで開くようにして」**
AI: リンクをSafariで開らくコードを作成:::note info
>navigationTypeが.linkActivated(ユーザーがリンクをタップした)である場合、そしてtargetFrameがnilまたはメインフレームではない(つまりtarget=”_blank”で開くリンクである)場合に、URLがSafariで開かれるようになります。こちらも配慮もされており、我々が見落としがちな実装もしっかりコーディングされております。
また、コードの解説も丁寧にしてくれます。“`swift:A
【SwiftUI】iOS 用のスクラッチ カード UI の実装
はじめに
はじめまして、Hridoy Chandra Das(リド)(@ihridoydas)です。
#### SwiftUI で、Google Pay 特典のスクラッチ カードのようなスクラッチ カードを作成します。
スクラッチカードは競技用に設計されたカードで、多くの場合、PIN を隠すために薄いカードストックまたはプラスチックで作られており、1 つまたは複数の領域に隠された情報が含まれており、不透明なカバーを剥がすことで明らかになります。
ユーザーはデバイスの画面上でカードを仮想的に「スクラッチ」「指で擦る」し、その下に隠されたコンテンツを明らかにすることができます。 このコンテンツは、クーポン コード、割引、その他の特典を紹介するためによく使用されます。
Cocoapods管理ライブラリからプライバシーマニフェストと署名の対象となるSDKを調べる
2024年春以降、Appleから指定されたSDKについて、App Store ConnectでこれらのSDKを含むアプリを提出する場合や、アプリのアップデートの一環としてこれらのSDKのいずれかを追加するアップデートを提出する場合には、プライバシーマニフェストを含める必要があります。
https://developer.apple.com/jp/support/third-party-SDK-requirements/
このうち、アプリに該当のSDKがCocoapods管理ライブラリで混入されているかどうかを調べるruby scriptを作成しました。
# ファイル
以下の2ファイルを同じディレクトリに配置します。
`pod_file_path`は任意のPodfile.lockのパスに置き換えてください。“`check.rb
def find_matching_keywords(text, keywords)
text = text.downcasematching_keywords = []
keywords.each do |keyword|
【iOS ARアプリ】5分でわかる簡単ARアプリ作成【RealityKit】【ARKit】
[株式会社やどかり Advent Calendar 2023](https://qiita.com/advent-calendar/2023/yadokari_qiita “アドベントカレンダー”) 17日目の投稿です!!
今年もやってきましたアドベントカレンダー。
これを見ると年の瀬を感じますね⛄️
自分はあまりエンジニアっぽく業務をやっていないので、あまり大したものを書けないのですが、暇つぶしにでも見ていただけたら幸いです※①こちらの記事の成分は5割が参考記事、5割がchatGPT、マジほんのちょっとの筆者の努力と気まぐれで書かれております。
※②もし間違った内容がありましたら優しく訂正してあげてください。モチベーションに関わります。# 5分でわかる簡単ARアプリ作成
| 項番 | 目次 |
|:—-:|:————-|
| 1 | [どんな動作ができるの](#1-どんな動作ができるの) |
| 2 | [実装について](#2-実装について) |
| 3 | [コード詳細](#3-コード詳細) |
| 4 | [終わりに](#4-終わりに) |#
FlutterアプリのUIテスト自動化を取り組んでみた話
この記事は、[テスト自動化の成功事例を語ろう by T-DASH Advent Calendar 2023
](https://qiita.com/advent-calendar/2023/t-dash02) の8日目です。# はじめに
Flutterアプリを趣味で作っていて、UIやLintなどのテストを自動化するCI/CDを一度やってみたくて、この度取り組んでみました。
今回は様々あるテストの中でも、UIのビジュアルテストに取り組んでいきます。毎度デグレしていないかアプリのUIを見て触って確認するのも大変ですしねぇ。
ではやっていきましょう。# 今回実施するテスト
## Golden Test
FlutterのGolden TestはFlutterフレームワークで使用されるUIコンポーネントやWidgetのビジュアル外観をテストするためのアプローチの一つです。
Golden Testにより、UIが期待通りに変更やレンダリングされていることを確認することができます。Golden TestはGolden Fileと呼ばれる正しいUIの画像ファイルと、スクリーンショッ
【SwiftUI】iOS16から使えるlineLimitのreservesSpaceが地味に便利
# はじめに
iOS16から`lineLimit`に新たな引数が指定できるようになりました。
`reservesSpace`です。# reservesSpaceで何が変わる?
![スクリーンショット 2023-12-24 23.18.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/be009e9b-3e73-5ae6-4682-3cfe06d18c39.png)`reservesSpace`に`true`を指定すると想定される行数分のスペースを確保してくれます。
今回でいうと3行に満たないTextでも3行分のスペースを用意してくれているのがわかります。一方、`reservesSpace`に`false`を指定している方はTextに行数分のスペースしか与えられていません。
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
VStack(spacing: