iOS関連のことを調べてみた2023年09月15日

iOS関連のことを調べてみた2023年09月15日

【Swift】DataSourceでParchmentを実装する方法

## はじめに
ページャーを実装する必要があり、自分で作るのはめんどくさかったので、いいライブラリないかなと思い調べたところ“Parchment“というライブラリを見つけたので実装方法をメモします。

## 前提条件
Parchmentライブラリがインストールされていること

## 実装方法

### 完成イメージ
今回は、画面全体にページャーを実装するのではなく、表示させたい範囲に実装しています。
![Simulator Screen Recording – iPhone 14 Pro – 2023-09-15 at 10.39.49.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/1a93fb42-2e5c-a1a1-67a3-7e098310a9d5.gif)

### 手順1
まず初めに表示したい**View**と**ViewController**のセットをそれぞれ作成します。
![スクリーンショット 2023-09-15 10.52.03.png](https://qii

元記事を表示

[API] Failed to create 0x88 image slot~

問題なく動作はしているようだが、エラーが発生。

“`
Failed to create 0x88 image slot (alpha=1 wide=1) (client=0xe710c575) [0x5 (os/kern) failure]
““
[iPadOS: [API] Failed to create 0x88 image slot (alpha=1 wide=0) (client=0xfbe80e61) [0x5 (os/kern) failure]](https://developer.apple.com/forums/thread/733017)
↑ シミュレータではなかったのに実機にしたら発生したということだが、自分の場合はシミュレータ(iPad Pro(11-inch)(4th generation))で発生している。
(ちなみに、シミュレータをiPhoneにしたら出なかった)

一行ずつデバッグしていくと、NavigationBarを非表示にするコードを変更したら、エラーが発生しなくなった。
“`
// エラー発生する
// self.navigation

元記事を表示

【SwiftUI】カスタムのTextFieldStyleを作成する

# はじめに
LabelStyleやButtonStyleは使ったことがあったのですが、TextFieldStyleは使ったことがなかったので使ってみます。

# Twitterの検索バー的なのを作ってみる
![simulator_screenshot_A963A173-1BDD-4AF4-A4DB-F0480C762401.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4dff5fdc-1e32-3563-1f4b-3e7973249b4f.png)

# 実装
“`swift
struct WithCancelTextFieldStyle: TextFieldStyle {
@FocusState private var isFocused

func _body(configuration: TextField) -> some View {
HStack(spacing: 8) {
HSt

元記事を表示

Unity as a Library(UaaL)でSwiftUIを使う際のビュー位置ズレ問題の解決法

# Unity as a Library(UaaL)でSwiftUIを使う際のビュー位置ズレ問題の解決法

## はじめに

Unity as a Library(UaaL)とSwiftUIの統合は多くの可能性を開きますが、この組み合わせはいくつかの困難ももたらします。この記事では、特にビューの位置がずれるという問題とその解決法に焦点を当てます。

## 我々がどのような状況でどのような問題にあったのか

UnityをiOSアプリケーションに組み込む際、SwiftUIを用いたレイアウトとの統合が必要でした。しかし、SwiftUIの画面にUnityのビューを埋め込むと、そのビューが画面の上部に徐々にずれていく問題に直面しました。

### 使用した技術

– Unity as a Library(UaaL)
– SwiftUI
– UIKit

## その際のコード

問題が発生したのは、SwiftUIとUnity as a Library(UaaL)を組み合わせたプロジェクトでした。具体的には、SwiftUIの`UIViewControllerRepresentable`プロトコルを

元記事を表示

【Xcode/Swift】Thread 1: “Could not load NIB in bundle: ‘NSBundle with name ‘fileName’”

## エラー内容
:::note alert
Thread 1: “Could not load NIB in bundle: ‘NSBundle with name ‘fileName’”
:::

## 原因
nibファイルを呼び出す際に、ファイル名が一致していないため。

## 解決方法
ファイル名かファイル名を呼んでいる箇所でスペルミスがないかチェックをする。

私の場合は、ファイル名の変更を忘れていたためにエラーが発生しました。

元記事を表示

Swiftのアクセス修飾子

## はじめに

Swiftプログラミング言語には、クラス、構造体、関数、プロパティなどのアクセスレベルを制御するためのアクセス修飾子があります。アクセス修飾子を使用することで、コードのカプセル化、隠蔽、保護などを行うことができます。この記事では、Swiftにおける各種アクセス修飾子とその使用例について詳しく解説します。

## アクセス修飾子の種類

Swiftには以下の5つのアクセス修飾子があります。

1. `open` – 別のモジュールでもサブクラス化やオーバーライドが可能。
2. `public` – 別のモジュールでもアクセス可能。
3. `internal` – 同一モジュール内でアクセス可能(デフォルト)。
4. `fileprivate` – 同一ファイル内でのみアクセス可能。
5. `private` – 同一スコープ内でのみアクセス可能。

## アクセス修飾子による呼び出し可能範囲の比較

以下の表は、各アクセス修飾子によって呼び出し可能な範囲を示しています。

| アクセス修飾子 | 同一スコープ | 同一ファイル | 同一モジュール | 別モ

元記事を表示

CIImageを指定サイズにリサイズする

CIImageをリサイズしたい、CGImageとかUIImageに変換してからでもいいけど、CIImageのままリサイズもできます。

# すぐ使えるよ

“`swift
extension CIImage {
func resize(as size: CGSize) -> CIImage {
let selfSize = extent.size
let transform = CGAffineTransform(scaleX: size.width / selfSize.width, y: size.height / selfSize.height)
return transformed(by: transform)
}
}
“`

“`swift
ciImage.resize(as:CGSize(width: 1024, height: 512)
“`

![cat3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/

元記事を表示

【iOS】多言語対応がめんどうなのでChatGPTに一括で翻訳してもらう

# はじめに
今まで個人開発アプリを多言語化するためにDeepLなどの翻訳機を使って翻訳していました。
しかし、時間がかかりすぎるのでChatGPTに任せることにしました。

プロンプトが固まったので記事にしておきます。

# プロンプト
“`
iOS開発を行なっています。
アプリを多言語対応させるために、ローカライズが必要です。
[Base.lproj:]を[対応言語:]にそれぞれ翻訳してください

[対応言語:]
– 英語
– 日本語
– フランス語

[Base.lproj:]
“ContentView.Text1.label” = “おはよう”;
“ContentView.Text2.label” = “こんにちは”;
“ContentView.Text3.label” = “こんばんは”;
“`

# 結果
![スクリーンショット 2023-09-13 20.40.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8adcd256-90b6-0524-4a3b-da8cb

元記事を表示

【Flutter】個人開発アプリを作成したら「大分県警察」と協力関係を締結するまでになった話をしよう。

どうも、個人でアプリ開発をしているYuKiOです。
最高にかっこいいメモアプリ「HackerMemo」などアプリを15本リリースしています。

15作目のアプリをリリースしたのですが、最初は個人開発のチカラで困っている人を助けたいという気持ちでアプリを開発し始めたのですが、最終的には大分県警察と協力関係締結するまでに至りまして、なかなか苦労しました。

なぜ、締結することになったのか、そして個人アプリ開発者、特にこれから個人アプリ開発される方に、アプリを開発するまでの注意点を伝えられたらと思います。

結論は「AppStoreのガイドラインはよく読めよ!」ってことです。

どういうことは最後まで読んで頂けたらと思います。

# 「みんなのチカラ」というアプリを開発したが・・・
15作目のアプリは、指名手配犯の目撃情報を簡単通報できる「みんなのチカラ」というアプリです。作成の経緯はこのツイートを読んで頂ければと思います。(拡散だけでも協力ください!お願いします!)

元記事を表示

【Xcode】Build Configurationごとにアプリ名を変更する方法

# Build Configrationとは
projectをクリックして出てくる`Debug`, ’Debug-Staging’等を指す?
![スクリーンショット 2023-09-13 15.05.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092613/a120d9a0-54a4-0c3b-d3a2-85f9de12a5d3.png)

## アプリ名が変わる原理
Info.plist内の`CFBundleDisplayName`直下の``句がアプリ名に当たり、これを各Build Configrationに設定する

## Build Configurationごとにアプリ名を変更する方法
プロジェクトの設定項目 > `Build Settings` Filterは`All|Combined`を開く

検索窓に`Packaging`と入れる

`Info.plist File`の項目を開くと、各Build Configrationに対応する`Info

元記事を表示

【Swift】フラットなJSONをネストしたモデルでデコードする【Decodable】

こんにちは。
withでiOS開発を行っている @zrn-ns です。

APIから返されたモデルをSwiftの `Decodable` 適合のモデルでデコードする処理を書いているとき、書き方に少し悩んだので、その内容を簡単にまとめておきます。

# 検証環境

– Xcode 14.3.1
– Swift 5.8.1

# フラットなJSONをネストしたモデルでデコードするには

今回実装方法に少し悩んだのは、プロパティがフラットに並んだJSONを、構造化されたSwiftのモデルにマッピングする処理です。

文章だけだとわかりにくいので、具体例を示します。

### 【前提】普通のJSONのデコード処理

以下のようなユーザ情報の一覧情報のJSON文字列を、モデルにマッピングすることを考えます。

“`swift
let usersJsonData1 = “””
[
{
“id”: 1,
“name”: “Mario”,
“age”: 26,
},
{
“id”: 2,
“nam

元記事を表示

SwiftUIレイアウトで複数ページのPDFを作成する

前回のPDFKitでPDFを読み込んで結合した際に透過部分が黒塗りになる現象が発生することがわかった。

– 前回までの記事
– [SwiftUIのレイアウトでPDFを作成する](https://qiita.com/mbotsu/items/1c1a49efed96f8ae145f)
– [SwiftUIのレイアウトでPDFを作成して結合する](https://qiita.com/mbotsu/items/4f091781901c84e69ab0)

どうやらPDFのページ追加時に`context.cgContext.clear(rect)`で毎回コンテキストをクリアする必要があるようだが、PDFKitで読み込んだ場合のコンテキストの操作がわからないので諦めた。

なのでPDF作成時に複数ページを書き込んでから保存するのが妥当と判断。修正したコードがこちら。
これでSwiftUIで複数ページのPDFが安定して作成できる筈だ。
前回のPDFKitのページ結合時の透過現象の解決方法はいつか解る筈。。。

https://gist.github.com/otmb/f48b31

元記事を表示

UITextViewでテキストを選択した時に出るMenuをカスタマイズする方法

UITextViewで文を選択した時に出るMenuに新たなMenuを追加したかったので、備忘録として残します。

## 実装

“`Swift
import UIKit

final class TextView: UITextView {
override func editMenu(for textRange: UITextRange, suggestedActions: [UIMenuElement]) -> UIMenu? {
var actions = suggestedActions

let customMenu = UIMenu(
title: “”,
options: .displayInline,
children: [
UIAction(title: “カスタム”) { _ in
print(“カスタム”)
}
]

元記事を表示

【SwiftUI】positionで画面の隅に図形を移動させたい

# はじめに
positionで画面の隅に図形を移動させたい事があり、苦戦したので記録しておきます。

# こんな感じ
![Simulator Screenshot – iPhone SE (3rd generation) – 2023-09-12 at 20.57.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b3e2b45f-acb8-3067-084a-ea73c9dcd6d5.png)

# 実装
“`diff_swift
import SwiftUI

struct ContentView: View {
+ private var rect: CGRect {
+ let scenes = UIApplication.shared.connectedScenes
+ let windowScene = scenes.first as? UIWindowScene
+ return windowScene?.windows.fi

元記事を表示

【Flutter】Map型まとめ

# Map型とは

以下、公式より引用。

> キーと値のペアのコレクション。関連付けられたキーを使用して値を取得します。

https://api.dart.dev/stable/2.15.1/dart-core/Map-class.html

KeyとValueの組み合わせを、1つのオブジェクト内で管理することができ、Keyを基準にしてValueの取り出し、書き込みを自由に行うことができます。

# Map型の宣言

他の変数の宣言と同様に、変数名の前にMap型を指定する必要があります。
Map型の場合、Keyの型とValueの型も一緒に宣言します。

“`dart
final Map userData = { //Map < Keyの型 , Valueの型 >
“name” : “山田太郎”,
“age” : 24,
};
“`

KeyとValueというワードを使用していますが、Map型の要素で`:(コロン)`の左にあたるところがKey、右側にあたるところがValueになります。

上記で宣言したMap型の変数

元記事を表示

FlutterのAndroidとiOSでのファイルアクセス

# はじめに
FlutterでAndroidとiOSでファイルアクセスしたくなったので、動かしながら調べてみました。
まだしっかりと調べてないところもあるので内容を更新するかも。

# パスの取得方法

## アプリケーション用のパスを利用する場合は path_provider

[path_provider](https://pub.dev/packages/path_provider) で取得されるパスはアプリケーション専用のパスを取得できます。
ほかのアプリケーションから参照することはできません。
ただし、パーミッションをAndroidManifest.xmlに設定する必要はありません。

以下のコマンドでプラグインを導入します。

“`terminal
flutter pub add path_provider
“`

使い方は簡単で、以下のように利用します。
“`dart
var appDocDir = await getApplicationDocumentsDirectory();
File targetPath = File(“${appDocDir.path

元記事を表示

【Swift】文字列内の”(ダブルクォーテーション)をエスケープするのがめんどくさい

# はじめに
SwiftでJSONを文字列で定義しようとするとこんな感じになります

![スクリーンショット 2023-09-11 21.51.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4e2d7784-c20f-90b7-389d-1020ed8e3a55.png)

これを解決するためにバックスラッシュでエスケープします

![スクリーンショット 2023-09-11 21.51.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/70bd7e00-f3ff-119d-451e-63cf170edb5d.png)

ただ、これがめんどう!!

これをしなくていい方法があります

# やりかた
`#`で囲むだけでOK!
“`swift
let text = #”{“name”: “Taishin”, “age”: 22}”#
“`

![スクリーンショット 2023-09-

元記事を表示

Code Push(Flutter)を触ってみた

## 概要

アプリ開発をしていて、急な仕様変更やバグ修正が発生した時に
「申請通さなきゃ…」とか「アップデート版を浸透させなきゃ…」とか
本当に悩ましい問題だなと感じながら日々仕事をしていました。

そんな時に以下の記事を見つけて「すげぇ」ってなったので触ってみることにしました。

https://zenn.dev/tsuruo/articles/13687d8455d1b1

## Code Pushって何?

記事内でも言及されていますが、簡単にいうと
**ストアを介さずにコードを修正できるツール**です。
これによって、

– 申請を通すのに時間がかかる
– アップデートしてくれたユーザーしか変更が反映されない

といったアプリ特有の課題を全て解決してくれそうです。
Apple / Googleがよく怒らないな…と感心。

使えるのはReactNativeとFlutterだけっぽいです。
ReactNativeは結構前から技術あったみたいですね…

https://qiita.com/wktq/items/6083d96ff60a547cf15a

今回はFlu

元記事を表示

Flutter iOSエラー(Failed to lookup symbol )

# 現象
iOSのDebugモードビルドでは発生しないが、Releaseモードビルドでは下記エラーが発生した。
なおAndroidはDebug/Releaseともにエラーが発生しなかった。

Failed to lookup symbol ‘HOGEHOGE’: dlsym(RTLD_DEFAULT, HOGEHOGE): symbol not found

# 解決方法
筆者環境では下記で解決した。

https://github.com/fzyzcjy/flutter_rust_bridge/issues/250

![147508533-78f3d65d-ccf8-4da5-97bd-41c6c9327af8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233237/dfbf87ce-fecb-5e29-5826-2583a5e5ec18.png)

元記事を表示

【Dart / Flutter】演算子まとめ

# 論理演算子

 

 

 

 

 

 

 

論理演算子 解説
+ 加算
減算
/ 除算
~/ 除算(小数切り捨て)
% 剰余
* 乗算