iOS関連のことを調べてみた2022年05月13日

iOS関連のことを調べてみた2022年05月13日
目次

【Flutter】Androidの感覚で実装してiOSで起こした不具合

# 不具合発覚
iOSの端末で名前が入力できないとの問い合わせから判明しました。

# 調査
以前、showCupertinoModalPopup を使った際に、Focus と Cursor の挙動がおかしくなったことがあったので似たような問題かな?と思ったが違いました。

連絡をくれた方とやり取りすると、日本語が入力できないとのことだったのでキーボードの設定周りを中心に調査するようにしました。

# 原因

以下の条件で再現することがわかりました。

– キーボードを絵文字と Gboard のような他社製キーボードのみにしている
– TextField の `inputType` に `TextInputType.name` を設定している

`TextInputType.name` を指定すると、iOS では `keyboardType` に `namePhonePad` が設定されるのですが、他社製キーボードのみにしていると、該当のキーボードがないため日本語を入力するキーボードが選択できないため入力できなくなってしまっていました。

# 対応

`inputType` を `Te

元記事を表示

iPadのSwift Playgroundsだけでswift初心者の高校教師がアプリの開発に挑戦してみる <その1>

## はじめに

### 自己紹介

私は高校で教員をしているアラフォー男です。

2022年度は高校現場を離れて、大学でICT教育の研究をしています。研究課題の一つとして「プログラミング教育」を設定しているので、まずは、プロのエンジニアではない自分が自身の力だけでiPadのみを用いてアプリの開発というものがどこまでできるのか試してみることにしました。

ちなみに、私はプログラミングが全くの未経験というわけではありません。教員として働く以前はソフト会社で組み込みエンジニアをしていた経験があるので、C言語だけはすこし分かります。とは言っても、もう10年以上はプログラムのコーディングなどはしていませんし、GUIを伴うアプリケーションの開発はしたことがありませんので、その分野については正真正銘の初心者です。

### 経緯

私が勤務している高校では、今年度から入学してくる1年生が1人1台iPadを持っています。iPadだけでアプリの開発、配信までできるのであれば、その実践を授業に取り入れることができると考え、今回の取り組みを決めました。

そして、同じようなことを考えている方の参考になれば

元記事を表示

firestoreを使ったswiftのCodableを作る時に使う@DocumentIdに隠された便利機能を見つけてしまった

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[もぐめっと](https://mogmet.com)です。

本日はswiftとFirestoreで使う@DocumentIdについて皆が知らないであろう機能を発見したので共有します。

## @DocumentIDとは?

そもそも@DocumentIDってなんやねんというお話をすると、Decodeするときに自動的にidを付加するという便利機能になります。

“`swift
import FirebaseFirestoreSwift

struct UserModel: Codable {
@DocumentID var documentID: String?
let username: String
}

“`

“`swift
Firestore.firestore().document(“users/mogmet”).getDocument { snapsh

元記事を表示

Deno/TypeScript入門〜スタブ・サーバーを作ってみる編〜

# まえがき

※この記事は、以下の後続記事です。
Deno/TypeScriptの概要については以下の記事に記載しています。

https://qiita.com/y-some/items/ca6404b7024d54b1ff75

最近私はツールを開発する環境として「[Deno](https://deno.land/)」が気に入っています。
シンプルで、軽くて、ランタイムAPIや標準ライブラリが充実していて、開発体験が良いと感じています。
私のところではDenoを本番で採用しようとすると諸々ハードルがありますが、ツールの開発であれば選択肢として大いにアリです。

iOS/Androidアプリケーションや、シングルページ・Webアプリケーションを開発する際、よく使うツールの一例として「スタブ・サーバー」があります。

特に、バックエンド側(Web API)とフロントエンド側が別チームだったりする場合に、
**「バックエンド側の実装が完了するまでの間、フロントエンド側の実装が停滞してしまう」**
といった状況が発生することがあります。

そのような場合、**ダミーのレスポンス

元記事を表示

【SwiftUI】ネイティブ広告の表示方法

第1部: [リワード広告](https://qiita.com/SNQ-2001/items/253173abefc6f90f86ea)
第2部: [インタースティシャル広告](https://qiita.com/SNQ-2001/items/5590a55324c39582a9ef)
第3部: [ネイティブ広告](https://qiita.com/SNQ-2001/items/7151fdcb8e9f8c2c42c2) ← イマココ

# はじめに
AdMob広告シリーズ第3部です
今回は[ネイティブ広告](https://developers.google.com/admob/ios/native/start?hl=ja)です。
見た目的にはバナー広告に近いように思います。
バナー広告と違う点は広告のUIが変更可能という事です。
これによりアプリに馴染ませることができ、UXの向上につながります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6b0c69d3-d6b

元記事を表示

[Swift]簡単な入力バリデーションを実装してみる

## はじめに

アプリの初回登録時などにバリデーションを走らせたいことが多いと思うので
簡単なサンプルを載せておきます。
※個人的な使い回しも兼ねて

## コード

“`ruby: Validation.swift

import Foundation

enum ValidationResult {
case valid
case nameIsEmpty(section: String)
case ageIsEmpty(section: String)
case birthdayIsEmpty(section: String)

var isValid: Bool {
switch self {
case .valid:
return true
case .nameIsEmpty:
return false
case .ageIsEmpty:
return false
case

元記事を表示

GoogleI/O 2022で発表されたFirebaseの新機能をまとめてみた。

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[もぐめっと](https://mogmet.com)です。
![mogmet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/da66fe2b-213f-2236-da87-e48eb1d70a34.jpeg)
最近[ラグナロクのCKOに就任しました](https://prtimes.jp/main/html/rd/p/000000013.000038912.html)。頑張ります!

本日は2022年のGoogleI/Oで発表されたfirebaseの新機能について紹介致します。

結論から言うと、Crashlyticsがやばい進化してます!!!

## Firebase Extension

元記事を表示

【SwiftUI】シェアを実装する際に気を付ける事

# はじめに
SwiftUIでシェア機能を実装する際は`UIActivityViewController`を使用します。
ここにかなり深い落とし穴があるので落ちないように気をつけましょう。
私は落っこちて原因に気づかず長い間、クラッシュを生み出していました笑
みなさんはそうならない様に気をつけましょう。

# 結論
iPadで普通に`UIActivityViewController`を使うとクラッシュします

# パターン1(おすすめ)
“`Swift
import SwiftUI

struct ContentView: View {
@State var ShowSharePopover: Bool = false
var body: some View {
Button(“シェア”) {
Share()
}
.popover(isPresented: $ShowSharePopover) {
ShareView()
}
}
// iPh

元記事を表示

【Flutter】Error解決: Command PhaseScriptExecution failed with a nonzero exit code

## Error 内容

“`
../../../.pub-cache/hosted/pub.dartlang.org/carousel_slider-4.1.1/lib/carousel_slider.dart:268:7: Error: No named parameter with the name ‘padEnds’.
padEnds: widget.options.padEnds,
^^^^^^^
../../../fvm/versions/2.2.1/packages/flutter/lib/src/widgets/page_view.dart:664:3: Context: Found this candidate, but the arguments don’t match.
PageView.builder({
^^^^^^^^^^^^^^^^
../../../.pub-cache/hosted/pub.dartlang.org/firebase_crashlytics_platform_interface-3.2.0/lib/sr

元記事を表示

NCMBのFlutter SDKを使ってSign in with Appleを実装する

NCMBでは多様なプラットフォームに対してSDKを提供しています。公式ではiOS(Swift/Objective-C)、Android(Java/Kotlin)、JavaScript(Web/Node.js/Cordova/Monaca)、Unityがあります。さらにコミュニティSDKとしてRubyやPython、PHPなどのサーバーサイド言語、React NativeやFlutter向けのSDKも開発されています。

今回はそんなコミュニティSDKの一つ、Flutter SDKを使ってSign in with Apple認証を実装します。ソーシャル認証であればパスワードやメールアドレスの管理を行わずに済み、手軽に利用できます。

## Appleの開発者用サイトでSign in with Appleを有効化

手順が多いので詳細は[Sign in with Appleを利用する際に必要な情報について – ニフクラ mobile backend(mBaaS)お役立ちブログ](https://blog.mbaas.nifcloud.com/entry/2020/05/18/133052)

元記事を表示

[iOS] 複数モーダルを開いている場合、一気に一番初めの階層に戻りたい

複数モーダル(sheetやフルスクリーンなど)を開いている場合、一気に一番初めの階層に戻りたい時

![画面収録_2022-05-10_16_25_01_AdobeCreativeCloudExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1322570/2e3d5056-fc93-0551-2d28-52f2461dc349.gif)

以下二つのどっちか実行するだけで戻れる。
“`
UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true)
“`
または
“`
let scenes = UIApplication.shared.connectedScenes
let windowScene = scenes.first as? UIWindowScene
let window = windowScene?.windows.first
window?.rootViewControll

元記事を表示

【SwiftUI】インタースティシャル広告の表示方法

第1部: [リワード広告](https://qiita.com/SNQ-2001/items/253173abefc6f90f86ea)
第2部: [インタースティシャル広告](https://qiita.com/SNQ-2001/items/5590a55324c39582a9ef) ← イマココ
第3部: [ネイティブ広告](https://qiita.com/SNQ-2001/items/7151fdcb8e9f8c2c42c2)

# はじめに
「[リワード広告の表示](https://qiita.com/SNQ-2001/items/253173abefc6f90f86ea)」がちょっと人気だったので[インタースティシャル広告](https://developers.google.com/admob/ios/interstitial?hl=ja)バージョンもやってみました。
投稿ネタ尽きた時用にこれシリーズ化します笑

# 実装準備
実装の前に[スタートガイド](https://developers.google.com/admob/ios/quick-start?hl=ja

元記事を表示

【Flutter】Error解決: CocoaPods could not find compatible versions

## Error内容

“`
[!] CocoaPods could not find compatible versions for pod “Firebase/RemoteConfig”:
In snapshot (Podfile.lock):
Firebase/RemoteConfig (= 8.7.0)

In Podfile:
firebase_remote_config (from `.symlinks/plugins/firebase_remote_config/ios`) was resolved to 0.11.0-1, which depends on
Firebase/RemoteConfig (= 8.11.0)
“`

## 解決方法

1. `podfile.lock`を削除

2. run
“`
flutter run
“`
上記コマンドを叩く。

## 参考文献

https://www.codegrepper.com/code-examples/whatever

元記事を表示

【Flutter】Error解決: CocoaPods not installed.

## Error 内容
CocoaPodsがインストールされていないというエラーが突然発生。

“`
Warning: CocoaPods not installed. Skipping pod install.
CocoaPods is used to retrieve the iOS and macOS platform side’s plugin code that responds to your plugin usage on the Dart side.
Without CocoaPods, plugins will not work on iOS or macOS.
For more info, see https://flutter.dev/platform-plugins
To install see https://guides.cocoapods.org/using/getting- started.html#installation for instructions.
“`

## 解決方法
Android Studioをターミナ

元記事を表示

[iOS] アプリ上で UserDefaults の内容を確認・編集できる OSS を作った話

## Tl;Dr

任意の iOS アプリに組み込んで利用可能なデバッグツール的な OSS です。

https://github.com/YusukeHosonuma/UserDefaultsBrowser

以下ツイートの動画を見ていただくのが分かりやすいかと思います。

## 現時点の機能

[Property List でサポートされている型](https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/PropertyList.html)に加え、`URL`や`Image`、JSONシリアライズされた`Data`型にも対応しています。

App Groups にも対応しています。

### 閲覧・検索

|閲覧|検索|App Groups|
|–|–|–|
|

元記事を表示

【Swift】 String型を数値型に変換すると、Optionalになってしまう理由

# 目次
[はじめに](#はじめに)
[String型](#string型)
[数値型](#数値型)
[Optional型](#optional型)
[インスタンス・インスタンス化](#インスタンスインスタンス化)
[イニシャライザ](#イニシャライザ)
[結論](#結論)

# はじめに
以下のコードのように、String型を数値型に変換した際、値にOptionalが付いてしまう理由について解説したいと思います。はじめに必要な知識について簡単に説明した後、結論のほうを述べさせていただきます。
“`swift
let text = “123”
let num = Int(text)
print(num) // Optional(123)
“`

# String型
“alphabet” や “アイウエオ” のような文字列を表す型をString型と言い、”abc”のように「”」(ダブルクオート)で文字列を囲むと、String型の値を生成します。
“`swift
let a = “ここに文字列を入れる” // String型
“`

# 数値型
Swiftにおいて数値型は、整数型と

元記事を表示

[iOS]CircleCIで No Space Left on deviceエラーに遭遇した場合の対処法

# はじめに

CircleCI導入検証を進めていたところ、表題のエラーに遭遇しました。

docker利用時の対処法に関する記事はいくつかあったものの、iOSの情報を見つけるのにちょっと手間取ったので書いておきます

# エラー内容

“`bash
/usr/local/share/chruby/chruby.sh: line 50: cannot create temp file for here document: No space left on devic
“`

# 解消した方法

– エラー発生原因は文字通り、容量が不足していることのようなので、不要なファイル群を削除し容量を確保します
– 外部記事を参考にしつつ、下記commandを定義しました
– ※ 適宜必要なディレクトリは削除対象から外す

“`bash
remove-unnecessary: # 不要なファイル群を削除
steps:
– run: sudo rm -rf /Library/Developer/CoreSimulator/Profiles/Runtimes/

元記事を表示

専門学生がFlutterを独学で初めて3ヶ月でリリースした話

# はじめに
先日AppStoreとGooglePlayStoreに入館アプリをリリースしました。
学校の友人とアプリを作ることになったため, その練習としてこちらのアプリを作りました。
自分の通っている専門学校が点呼での出席確認を行なっていたことから
作ってみようとなったのがきっかけです。

## 完成像
![出席GIF_AdobeCreativeCloudExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1631114/c1089680-22d3-6f97-d788-9468072c67d4.gif)

団体ごとに自作のQRコードをスキャンするだけで入館が完了するアプリです。
[AppleStore シュッ席- 入館管理アプリ](https://apps.apple.com/jp/app/id1620188388)
## GitHub
[secretused/student_attendance_app](https://github.com/secretused/student_at

元記事を表示

[iOS]リアルタイム音声認識(Speech to Text)を実装してみる

# Speechフレームワーク

[Speech](https://developer.apple.com/documentation/speech)
[Apple公式のサンプルコード](https://developer.apple.com/documentation/speech/recognizing_speech_in_live_audio)
音声をマイクから認識して文字列に変換するという機能を提供してくれています。
標準のキーボードのマイクボタンを押した時と同じ機能をアプリ上から利用できます。

# 処理の流れ
1. 音声認識機能利用の権限の確認、取得
1. リクエスト作成、設定
1. タスク作成
1. マイクインプット作成、設定
1. 録音開始
1. テキスト変換結果の取得

# カスタムクラス実装
以下のクラスを実装していきます。
#### SpeechRecognizerクラス
– Speechフレームワークを利用するクラス

#### ListenViewModelクラス
– SpeechRecognizerクラスを保持

#### ListenViewクラス
– L

元記事を表示

【Swift】Alamofire6でresponseJSONが使えなくなるらしい

# 警告文が突然出現
“`
‘responseJSON(queue:dataPreprocessor:emptyResponseCodes:emptyRequestMethods:options:completionHandler:)’ is deprecated: responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead.
“`
responseJSONは非推奨です。
Alamofire 6で削除される予定です。
代わりにresponseDecodableを使ってください。

だそうです。

気づいた時に修正しておくのが一番ということで修正したので共有します。

# 結論
“`diff_swift
– AF.request(“”, method: .get).responseJSON
+ AF.request(“”, method: .get).responseData
“`

警告文にはresponseDecodableと記載してあったがresponse

元記事を表示

OTHERカテゴリの最新記事