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

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

fastlane経由でiOSアプリをFirebaseAppDistributionからテスト配信する時は、Rubyについて知っておくほうが良かった話

# はじめに
こんにちは、iOSエンジニアの [dayossi](https://twitter.com/dayossi) です。

家族が幸せになれるサービスを提供したいと思って、
[HaloHalo](https://hallo-hallo.sakura.ne.jp/home/)という家族日記アプリをリリースしています。

今回は、Firebaseが提供しているアプリのテスト配布ツール`Firebase App Distribution`を
fastlaneから呼び出して、テスト配布を自動化する中で詰まった点を共有いたします。

fastlaneがRubyで構成されているにもかかわらず
私はRubyでの開発は全くやったことがないので、
ほぼ手探り状態でfastlaneを試しました。。

先人の方々の叡智を参考に
なんとかfastlaneを実行してipaファイルをビルドできる状態まで辿り着きましたが

肝心のFirebase App Distributionへデプロイできず、
かなり詰まりました。

同じような境遇で悩まれている方の参考になりましたら幸いです。

## 前提
以下の

元記事を表示

【Swift】Windowの仕様変更が激しい

# 警告文を消したい
“`
‘keyWindow’ was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes
“`
“`
‘windows’ was deprecated in iOS 15.0: Use UIWindowScene.windows on a relevant window scene instead
“`
# iOS13以前
![スクリーンショット 2022-05-13 14.37.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/082136e9-ae2a-2578-8aaa-7b3c213a7549.png)
“`Swift
UIApplication.shared.keyWindow?.rootViewControll

元記事を表示

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

https://qiita.com/kerikerijy/items/38ddbc93ae62c84351b8

# Swift Playgroundsとの出会い

実は、私がSwift Playgroundsだけでアプリの開発に挑戦してみようと思ったのは、Appleが提供しているApple Teacherというプログラムを受講したことがきっかけです。

私にとって、とても有用な学びとなったので、簡単に紹介しておきます。

## Apple Teacherについて

https://appleteacher.apple.com/

Apple Teacherは、指導と学習にiPadなどのApple製品を組み込んでいる教員を支援するラーニングプログラムです。もちろん、無料です!Appleのすごいところは、このような質の高いプログラムが無料で提供されているというところだと思います。

https://www.apple.com/jp/education/giga/

私は、Appleが日本のGIGAスクール構想にとても前向きに参入しているという印象を持っています。もちろん、企業なのでAp

元記事を表示

【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/

元記事を表示

OTHERカテゴリの最新記事