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

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

CreateMLでマルチラベル分類をしようとしたら詰まった話

## はじめに
趣味の開発でcreateMLを用いて多ラベル分類の検証を簡単に行おうとしていましたが、データを読み込む過程でハマってしまい3時間ほど時間を溶かしてしまいました。ググっても答えがパッと見当たらなかったので、備忘として残しておきます。

CreateMLによる機械学習(画像認識)のやり方は[公式ドキュメント](https://developer.apple.com/documentation/createml/creating-an-image-classifier-model)を参照して下さい。

## 前提条件
[公式ドキュメント](https://developer.apple.com/documentation/CreateML/creating-a-multi-label-image-classifier)に準い、学習データのディレクトリ構成は以下とします。
“`direct
train/
├── image1.jpg
├── image2.jpg
├── …
└── annotations.json
“`

## 問題
[公式ドキュメント](https

元記事を表示

iOS Simulator で Loaded CoreSimulatorService is no longer valid for this process のエラーが出た時の解決方法

# これなに
CoreSimulatorService がも使えないよと言われた時の対応方法

# エラー内容
Simulator 起動しようと思ったらこんなエラーが
“`zsh
Loaded CoreSimulatorService is no longer valid for this process.
Simulator services will no longer be available.
Error=Error Domain=NSPOSIXErrorDomain Code=61 “Connection refused”
UserInfo={NSLocalizedDescription=CoreSimulator.framework was changed while the process was running.
This is not a supported configuration and can occur if Xcode.app was updated while the process was running.
Service version (947

元記事を表示

Storyboardをつかわない、UITabBarControllerをルートとしたのプロジェクト作成

## はじめに
タブバーからのアプリの立ち上げ方メモ
今回のサンプルリポジトリ

https://github.com/kabikira/SampleTabBar

## できるもの
2つのタブバーで画面きりかえをする。

## ストーリーボードを使用しない設定をする
以下記事を参考にしてください。

https://qiita.com/Imael/items/e908aef1e6fc077f29fc

## ViewControllerを2つ作成
下記のよ

元記事を表示

【Flutter】PlatformException(Unexpected security result code, Code: -25299, Message: The specified item already exists in the keychain., -25299, null)

# なんかiOSだとエラーがでてくるんだけど?
Androidの方ではうまく動いていたのに、iOSの方ではうまく動かなくなった。
下のようなエラーが“`secureStorage.write(Key:key, value,value);“`のところで出てきて解決に時間がかかったので備忘録として残しておく。
“`
PlatformException(Unexpected security result code, Code: -25299, Message: The specified item already exists in the keychain., -25299, null)
“`

# エラーの調査と解決策
まったく同じエラーの内容がGitHubの[issue](https://github.com/mogol/flutter_secure_storage/issues/711)に上がっていた。
ただ、ここの内容では、インスタンスの初期化とwriteを呼び出すところを分けるとうまくいったよと書かれているのみだった。
はぁ…詰んだ…と思って、あきらめそうになっ

元記事を表示

今更ながらXcodeで開発しているiOSアプリのデバッグをiPadで行った記録

# はじめに
自分でどうやったのか人に教えるのが面倒なので,立てた記録.
それぞれのデバイスのバージョンは以下の通り.
MacOS Sonoma 14.4.1
Xcode 15.3
iPadOS 16.7

最新情報にはなってないかもので,ご注意ください.

# Xcodeの準備
iOSやiPadOS, MacOS向けのモバイルアプリケーションをビルドするために必要なXcodeを準備する!

### Xcodeのインストール
App storeでXcodeと検索してインストール

![スクリーンショット 2024-05-13 20.39.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680423/10638561-9749-6c6f-6a8f-91df0c0e80f2.png)

### iOSのインストール
今回はiPadでのデバッグを行うので,iOSをインストールしてデバック可能にする.
(MacOSは標準でインストールされているので問題ない)
最初にXcodeを起動したときに設定できるが,

元記事を表示

(前編・文法やビルトインの機能中心)数ヵ月くらいDartとFlutterを触ったので個人の所感と学んだことを全体的ににまとめてみる

お仕事で数か月程度DartとFlutterでのスマホアプリ開発をしていたので触ってみて感じた所感や学んだことなど、追加で調べたことなどを雑多に全体的にまとめておきます。
(個人の復習や知識の漏れの補完・その他チームメンバーへの共有も兼ねて)

※DartやFlutterの基礎であったり、ビルドインやサードパーティのライブラリ含め利用しているものも全体的に触れていきます。

※色々まとめていたら長くなったので前編後編で分けます。本記事では所感やDart周りなどを中心に触れ、後編はFlutterの細かい点も触れていきます(考えなしに書いていたらとても長くなったのでほぼ自分の勉強用の記事となってきています・・・w)。

# 前置き

:::note warn
専任のアプリクライアントエンジニアやフロントエンジニアなどをやってきているわけではないので専門の方々からすると色々知識が荒い点はご了承ください(仕事でサーバーやクラウドなどを触っている時間なども多めです)。

もし専門の方から見て間違いなど気づかれましたらこっそりコメントなどで優し目にマサカリ投げていただけますと幸いです。
:::

#

元記事を表示

【SwiftUI】View を簡単にドラッグして移動したい

https://twitter.com/maochanz/status/1790297337665056921

いつものように簡単な記述で書いていきたい。

“`swift
struct TestDragGesture: View {
@State private var location = CGPoint(x: 150, y: 150)

var body: some View {
ZStack {
VStack(alignment: .trailing) {
Text(“location.x: \(location.x)”)
Text(“location.y: \(location.y)”)
}
.monospaced()

Circle()
.fill(.red.opacity(0.5))
.frame(width: 100)
.position(location)
.gesture(
DragG

元記事を表示

【Flutter】画面タップでキーボードをしまう方法

# はじめに

TextFormFieldを実装した時、キーボードを開く処理は特に必要ありません。
ただ、画面のキーボード以外の部分を触った時に、キーボードをしまう処理は意図的に設定しないといけません。

とても簡単なので、真似してみてください。

# 開発環境

[Flutterバージョン]
3.16.1

[使用端末]
PC: Macbook Air(M1)

[開発ツール]
VSCode

# キーボードをしまう処理

対象とするWidgetの親要素に、GestureDetectorを置き、onTapパラメータとbehaviorパラメータに、以下のコードを渡します。

“`dart
GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
behavior: HitTestBehavior.opaque,
child: ~画面要素~
)
“`

# コード全体

“`dart
class Demo extends StatelessWidget {

元記事を表示

Flutter で開発した iPhone アプリを実機で起動する際の躓きメモ

# はじめに
Flutter を使って iPhone アプリを開発するにあたり、実機でのデバッグ・インストール・起動にちょっと手間取ったので、その時のメモ。
普段 Mac を触らないので、超初歩的な部分でも引っかかりました。。そんなに触らない分、また忘れそうなので備忘も兼ねて記載。

# 環境
– macOS Sonoma 14.1.2 (Macbook Pro 2020 Intel CPU)
– iOS 17.4.1 (iPhone12, iPhone15 Pro)
– Xcode 15.3
– Flutter 3.19.6

# Mac への Flutter 開発環境インストール
基本的に[公式のインストール手順](https://docs.flutter.dev/get-started/install/macos/mobile-ios)に沿えば問題ありません。
英語ですが、そんなに難しくはないです。
「Configure your target iOS device」の部分で開発したアプリをインストールする iOS デバイスのセットアップをします。「Virtual Device」

元記事を表示

pod update で CDN: trunk URL couldn’t be downloaded: https://cdn.cocoapods.org/Specs/…. Response: Failure when receiving data from the peer というエラーが発生

# 背景
CocoaPods を使用しているプロジェクトで `pod update` を行った際に以下のエラーが発生しました。

“`sh
$ pod update
Update all pods
Updating local specs repositories
Analyzing dependencies
[!] CDN: trunk Repo update failed – 2 error(s):
CDN: trunk URL couldn’t be downloaded: https://cdn.cocoapods.org/Specs/0/3/5/Firebase/10.24.0/Firebase.podspec.json Response: Failure when receiving data from the peer
CDN: trunk URL couldn’t be downloaded: https://cdn.cocoapods.org/Specs/0/3/5/Firebase/10.25.0/Firebas

元記事を表示

【SwiftUI】TextEditorの見た目をTextFieldっぽくする

# 概要
TextFieldでは入力欄が空の時に薄い文字を表示することができますが、TextEditorではできません。そこで今回は、TextEditorでもTextFieldっぽく薄い文字を表示する方法を解説していきます。

# ゴール
本来のTextEditorは以下の左のような見た目ですが、今回は以下の右のような見た目を目指します。

# 基本のTextEditor
基本的なTextEditorです。これは、Viewが真っ白で何も見えません。

### コード
“`: SwiftUI: 基本のTextEditor
import SwiftUI

struct QiitaView: View {
// TextEditor用
@State private var memo: String = “”
var body: some View {
// 基本
TextEditor(text: $memo)
}
}

#Preview {
QiitaView()
}
“`

### 見た目
iOSにおける非同期型イベント駆動

:::note info
本記事は [技術書典16](https://techbookfest.org/event/tbf16) で無料配布する同人誌「ゆめみ大技林 ’24」の寄稿です。加筆や修正などがある場合はこの記事で行います。
:::

iOS アプリの開発において、あるイベントに合わせて処理を実行したい、たとえばボタンタップのタイミングで処理を実行したい場合は、次のようなコードを書けば実現できます。

“`swift
Button(“Sign in”) {
signIn()
}

func signIn() {
// …
}
“`

これは、イベント発生(ボタンタップ)と処理実行(関数実行)が同期されています。一方で、実装仕様や設計のため、イベント発生と処理実行を非同期(異なるタイミングや場所)で行いたいとき、どうすればいいでしょうか。

本記事はイベント発生と処理実行を非同期で実現するいくつかの方法をまとめました。なお、それらを解決する便利なサードライブラリもありますが、今回はアップルが提供するライブラリで実現できる方法を扱います。

### 免責事項

元記事を表示

Compose Multiplatformで利用できるようになったNavigationを使ってみた

## はじめに

[Compose Multiplatform](https://www.jetbrains.com/ja-jp/lp/compose-multiplatform/)は、[Jetpack Compose](https://developer.android.com/develop/ui/compose/) をベースにKMP(Kotlin Multiplatform)プロジェクトでUIを構築するためのフレームワークです。
ここ最近は、目まぐるしいスピードで進化をしており、Resource周りも共通で実装できるようになっています!
そして、alpha版ではありますが、ついに `Navigation` も利用できるようになりました🎉

実際に `Navigation` を利用したところ体験が良かったため、本記事で紹介します!

## Navigationとは?

[Navigation](https://developer.android.com/guide/navigation)は、アプリ内の様々なコンテンツ間を遷移するためのAndroidでのライブラリです。
このライブラ

元記事を表示

【iOS】Firebase SDK を追加すると didRegisterForRemoteNotificationsWithDeviceToken が呼ばれない

# 解決方法

:::note info
info.plistに以下の項目を追加する。
|Key|Type|Value|
|:-:|:-:|:-:|
|GoogleUtilitiesAppDelegateProxyEnabled|Boolean|NO|
:::

これで`didRegisterForRemoteNotificationsWithDeviceToken`が呼ばれるようになる。

参考URL

元記事を表示

【SwiftUI】よくある TextField を作る

【Flutter】Patrolでテストを書く(導入まで)

## はじめに
Flutterの[Finder](https://api.flutter.dev/flutter/flutter_test/Finder-class.html)や[WidgetTester](https://api.flutter.dev/flutter/flutter_test/WidgetTester-class.html)ではネイティブビュー(OSの権限許可ダイアログ等)を見つけたり操作することができません。
そこで、[patrol](https://patrol.leancode.co/)を使用して操作できるようにしたいと思います。

本記事では`patrol`を導入し、iOSとAndroidのセットアップまで進めます。

## 環境
・flutter: 3.19.6
・dart: 3.3.4
・patrol: 3.6.1
・patrol_cli: 2.7.0

## `patrol`、`patrol_cli`のインストール

### `patrol`を追加

“`
flutter pub add patrol –dev
“`

※Android SDK

元記事を表示

覚えるのは必須じゃないけど役に立つもの 〜 2の冪(べき) 〜

## はじめに

読了時間:5分

覚えてなくても問題はないけど、覚えていて損はないことを小出しに紹介して行こうかと思います

## **2の冪(べき)と近似値**

今回は **2の冪(べき)と近似値**です。

以下のようなケースで役に立つかと思います。
– スケーラビリティやメモリの制限があるような問題に向き合う時
– Intなど数値型ではどの数値まで扱えたか?

2の冪(べき)の表
2の冪 厳密な値 近似値 MB, GBなど
7 128
8 256
9 512

Flutter の 2 つのウィジェットについて

## 概要

Flutter の 2 つのウィジェット、StatelessWidget、StatefulWidget についてまとめてみました。
特に StatefulWidget のライフサイクルについて深掘りしてみました。

## StatelessWidget とは

– 状態を持たないウィジェット
– 一度描画されるとその後、状態が変化しない
– 例)固定のテキスト表示、アイコン・画像など

## StatefulWidget とは

– 状態を持つウィジェット
– ユーザーの操作や時間の経過などによって、状態が変化し、見た目や振る舞いが変わる
– 例)チェックボックス、テキストフィールド、カウンターアプリなど

## StatefulWidget のライフサイクルについて

ここでは StatefulWidget のライフサイクルについて深掘りしていきたいと思います。

緑の図形で記載したのが状態、青の図形で記載したのが各状態で呼び出されるメソッドになります。

![スクリーンショット 2024-05-05 10.47.02.png](https://qiita-image-

大学非公式アプリのあれこれ

# はじめに

大学生が在学する大学の非公式(一部公式)アプリを開発した例をまとめたいと思います。これは私が大学非公式アプリ開発を始めるための市場調査兼ねていました笑。
現時点(2024年4月)でiOS版ネイティブアプリのリリースが行われているものを対象とします。筆者の独自集計のため漏れがあるかもしれない点はご了承ください。

# 調査

### 1 芝浦工業大学「ScombApp」

これはかなり学生開発アプリの中では有名な事例だと思います。開発者の方が大学に相談したことがきっかけで、大学の公式アプリとして採用され学生エンジニアとして開発・保守を行なっているというなんとも素晴らしいエピソード付きのアプリです。
現在は専用のAPIまで用意されているとか…

https://apps.apple.com/jp/app/scombapp/id1669657083

https://web.sic.shibaura-it.ac.jp/scombapp

### 2 早稲田大学「わせコマ」

こちらは早大生が早大生のために開発された非公式アプリです。時間割の登録が大学公式ポータルMyWas