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

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

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】インタースティシャル広告の表示方法

# はじめに
[リワード広告の表示](https://qiita.com/SNQ-2001/items/253173abefc6f90f86ea)がちょっと需要ありそうだったのでインタースティシャル広告バージョンもやってみました。
投稿ネタ尽きた時用にこれシリーズ化します笑

# 実装準備
実装の前に[スタートガイド](https://developers.google.com/admob/ios/quick-start?hl=ja)に記載してある事を行います

①: Mobile Ads SDK のインポート
②: Info.plist の更新
③: Mobile Ads SDK の初期化

こちらはUIKitでもSwiftUIでも同じなので割愛します
これが終われば準備は完了です。

# 実装
“`Interstitial.swift
import GoogleMobileAds

class Interstitial: NSObject, GADFullScreenContentDelegate, ObservableObject {
@Published var in

元記事を表示

【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

元記事を表示

第4回iPhoneアプリ開発入門〜Appleのチュートリアルの進め方〜

# はじめに
この記事では、プログラミング初心者向けにAppleのチュートリアルの進め方を解説します。

# 翻訳
まず、下記のURLをクリックしてAppleのチュートリアルにアクセスしてください。

https://developer.apple.com/tutorials/app-dev-training/

Appleのチュートリアルは全て英語で書かれています。そのため、英語が苦手な方はブラウザの翻訳機能を使うことをおすすめします。翻訳機能は、SafariよりもChromeの方が精度が高いため、Chromeを使うことをおすすめします。

Chromeをお使いの方は、ページ上で右クリックし、日本語に翻訳をクリックします。
![スクリーンショット 2022-05-08 23.24.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/9ef4c4f8-7d0b-c0bf-3e79-f944fad1d3ea.png)

# はじめよう
そうしたら、「はじめましょう」をクリックして、チュート

元記事を表示

CoreMotionを使ってiPhoneから気圧を取得してみた

## 投稿の経緯
業務でiPhone標準搭載の気圧計を使った機能の開発をするかもしれなくなったので、事前に技術検証としてCoreMotionを触ったので記事にします。

## 環境
Mac Monterey 12.3.1
Swift 5.6
Xcode 13.3.1

## サンプルアプリ
![QR_017541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/06a226ce-ade6-ea92-a198-c5e902cbf18b.png)
コードはGitHubにPushしています。気になる方はご覧ください。
https://github.com/ken-sasaki2/CleanArchitectureTraining

## 実装
“`ContentView.swift
import SwiftUI

struct ContentView: View {
private let altimator = Altimator()

var body: some V

元記事を表示

正方形の画像からアイコン画像を生成する

## 要件検討

– iOSのアイコンなので単純な角丸形状ではなく、複数のRを用いて直線部分と滑らかに接続された角丸形状にする。
– 背景と同化する場合があるのでドロップシャドウを軽くかける。

## 実装方法
単純なRを用いた角丸ではないので`icon.layer.cornerRadius`は使用できない。
また、表示するサイズごとにRの値を計算するのも面倒。
よって、以下の手順で実装

1. アイコン形状のマスクを用意
2. マスクを使ってアイコン画像(UIImage)を切り抜き
3. UIImageViewのimageに切り抜いたUIImageを指定し、シャドウを設定する

## マスクの生成
Appleのwebで使用されていたアイコン表示のマスクイメージを拝借しベクタデータを生成。単純にPDF画像を参照しても良いので

元記事を表示

【SwiftUI】リワード広告の表示

# はじめに
多くのドキュメントはUIKitで書かれていてSwiftUIで書かれていることはほとんどありません。
ドキュメントを見て毎回書き直すのは苦痛です。楽しくありません。
今回のお題である[AdMobのリワード広告ドキュメント](https://developers.google.com/admob/ios/rewarded?hl=ja)もUIKitで書かれています。
今後、同じ事をするであろう方のために書き直したものを公開しておきます。

# 実装準備
実装の前に[スタートガイド](https://developers.google.com/admob/ios/quick-start?hl=ja)に記載してある事を行います

①: Mobile Ads SDK のインポート
②: Info.plist の更新
③: Mobile Ads SDK の初期化

こちらはUIKitでもSwiftUIでも同じなので割愛します
これが終われば準備は完了です。

# 実装
“`Reward.swift
import GoogleMobileAds

class Reward: NSObj

元記事を表示

【SwiftUI】Lottieでアニメーションを表示する

# Lottieとは
![](https://github.com/airbnb/lottie-ios/raw/master/_Gifs/Examples1.gif)

https://github.com/airbnb/lottie-ios

簡単にアニメーションを表示できるライブラリです
[こちら](https://lottiefiles.com/featured)で公開されているアニメーションがすぐ使えるようになります。
そしてとても軽いので使いやすいです。

# インストール
– CocoaPods
– Carthage
– Swift Package Manager

上記3つがサポートされています。

今回はSwift Package Managerでインストールしていきます。

①: [lottie-ios](https://github.com/airbnb/lottie-ios)のURLをコピー
![スクリーンショット 2022-05-07 15.06.30.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

[Xcode] The value for key CFBundleShortVersionString [hoge] in the Info.plist file…に対する処方箋

## 初めに
iOSアプリをAppStoreに新しいバージョンをリリースする際にこんなエラーに当たったので解決方法を載せておきます。

今回のエラーはアプリをアーカイブし、その後Validate Appをした際に発生しました。

![スクリーンショット 2022-05-07 14.43.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/f68d4653-ec6b-9bb6-1d00-677813e4a9e4.png)

## 原因
今リリースしている(アーカイブした)バージョンよりも低いまたは同じ数値を設定しているために発生していると思われます。
例えば、バージョン1.1.0で公開しているものをバージョン1.0.1などでアーカイブしようとした場合です。

## 解決方法
メニューバーより>Product>Archiveから今回リリースしたいアプリを選択し、バージョンを確認しましょう。
今回審査に提出したいバージョンが1.0と前回提出したバージョンより低い数値にになっています。
(()な

元記事を表示

OTHERカテゴリの最新記事