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

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

【SwiftUI】PreviewでRunScriptが走らないようにする

# はじめに
Preview時にRunScriptが走ってPreviewが長くなるという問題に直面したので、Previewの時はRunScriptを実行しないようにします。

# 現在のスクリプト
[こちら](https://qiita.com/SNQ-2001/items/4ad7600e1bc9d90c839a)のスクリプトをサンプルとして使います
“`shell
export PATH=/opt/homebrew/bin:$PATH

if which mint >/dev/null; then
# SwiftFormat
xcrun –sdk macosx mint run swiftformat .
else
echo ‘warning: mint not installed.’
fi
“`

# 修正後のスクリプト

“`shell
export PATH=/opt/homebrew/bin:$PATH

if which mint >/dev/null && [ \”$ENABLE_PREVIEWS\” == \”NO\” ]; then

元記事を表示

UnityのiOS版→Xcodeビルド時にccacheを使う

Unityで出力したiOS版プロジェクトからccache使う方法がわかってきたのでメモ。

# 作業環境(2022.11.08時点)

– MacOS Ventura 13.0
– Xcode 14.1
– xcode-select –install を実行してあること
– Homebrew 3.6.9
– ccache 4.7.3
– Unity 2020.3.37f1
– iOS 16.1

### 参考URL

ccache で Unity の生成する Xcode プロジェクトのビルドを高速化する
https://zenn.dev/pobo380/articles/1a5d838ee857e1

M1 環境で Homebrew 導入コマンドを Xcode から叩けない場合の対処法
https://qiita.com/hugehoge/items/0f805c1a264488f7807c

## ccacheのインストール

`brew install ccache`

## ccache_wrapper の作成

“`bash
#!/bin/bash

if [ -d “

元記事を表示

Swift JSON+CodableでURL変換できない文字列をOptionalにする

# 環境
Xcode 14.1

# 概要

以前も[似たような記事](https://qiita.com/hyuga_amazia/items/7d2f7f4ae48ec37c1292)を書いていますが、JSONのレスポンスを解析するとき、`Codable`が使われますが、このときCodable対応したstructにURL型が含まれていて、それに対応するJSONのパラメータが`URL(string:)` で結果がnilになる文字列(空文字、日本語、スペースetc)の場合、DecodingErrorとなってしまいます。

エラーにならない対応とするため、URLとして変換できないものはOptionalにしたいと思います。
以前のコードでは別クラスを作っての対応を行なっていましたが、別クラスを使わずに対応できる方法を紹介します。

## エラーになるCodable

“`swift
let json = “””
{
“id”: 1234,
“name”: “Hello World!”,
“url”: “”
}
“””.data(using: .utf8)

struct M

元記事を表示

【SwiftLint】バージョンを指定しないと機能しない設定があるらしい

# はじめに
SwiftLintを使っていたら警告文が出てきたので原因と修正方法を記録しておきます。

# 警告文
![スクリーンショット 2022-11-05 23.35.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4e4d5d1e-d35d-2e4e-cb33-d92a15ab9780.png)
“`
No Swift version was specified, so some formatting features were disabled. Specify the version of Swift you are using with the –swiftversion option, or by adding a .swift-version file to your project.
“`

# 原因
Swiftのバージョンが指定されていない為、一部の書式設定機能が無効になっている

# 解決方法
“`:ターミナル
cd プロジェクトフォルダ
“`

元記事を表示

Xcodeで設定を分ける場合はxcconfigを使うということも知っておいてほしい

## はじめに

XcodeでiOSアプリ開発をする場合に、設定を切り替えたい場合はxcconfigという手段があるということをグダグダ書いておきます。

グダグダ書くか理由は2つ

– ConfigurationはDebug/Releaseの2つでxcconfig分ければいいだけ
– SchemeでたかだかWeb APIの接続先が違うくらいの小さな設定を変えてしまうのはオーバーキル

つまり(xcconfigに関する良い記事は多いんですが、なぜかそこまで浸透してるとは思えず)なぜか人はオーバーキルしてしまう。具体的には自分で設定してないプロジェクトでSchemeごとに設定を変えられると、差分がないということだけでも証明することがもはや面倒。

という感じで、いきあたりばったりでxcconfigについて書いてみます。間違いがあるかもしれません。お手数おかけしますがコメントにお願いします。

## 基礎

Xcodeでは、プロジェクトのビルド設定をプレーンテキストファイルで指定し、Configuration(DebugビルドやReleseビルド)ごとに異なる設定を指定できます。

htt

元記事を表示

【2022年度版】効果的なレスポンシブ対応

# 【2022年度版】効果的なレスポンシブ対応

## 目次
1. iOSとAndroidのシェア比較
2. 年代別比較
3. OS別比較

まず、上記の3つに絞って比較していきます。

### 1. iOSとAndroidのシェア比較について

こちら、2022年5月時点での記事を参考にしました。
* [日本のiPhoneシェアは44.1%、Androidと7%差の接戦 – MMD研究所調べ](https://news.mynavi.jp/article/20220513-2344809/)

まず初めに、iOSとAndroidのシェア率を比較したところ、Androidの方が若干多い結果になりました。

シェア比率は市場に出回っている数であるため、1人2台持ちもあり得ます。
そのため、次に、年齢ごとの利用者数を見ていきます。

### 2. 年代別比較

10代〜30代の女性の場合
半数がiPhoneの利用者数を占めています。

男性もiPhoneユーザーが多いですが、年齢が上がっていくに連れて、Androidの利用者数が増えています。
30代〜60代はAndroidユーザーが半数

元記事を表示

UIHostingControllerをpresentしてdismissする

まだまだ移行期なので、UIKitな画面からSwiftUIなViewを表示したい時があるのでメモ。

“`TestView.swift
struct TestView: View {

var dismiss: (() -> Void)?

var body: some View {
NavigationView {
Text(“Test View”)
.navigationTitle(“List Navigation Sample”)
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .navigationBarLeading, content: {
closeButton {
dismiss?()
}

元記事を表示

【Swift】UIColorPickerViewControllerをRxSwiftに対応した

# はじめに
1ヶ月前くらいからRxSwiftを学習し始めまして、最近はRxSwiftを使って個人開発をしています。
UIColorPickerViewControllerがRxSwiftに対応していなかったのでDelegateをRxSwiftで使えるようにしてみました。

# 何をするか
`colorPickerViewControllerDidSelectColor`と`colorPickerViewControllerDidFinish`をRxSwiftで使えるようにする
“`swift
extension ViewController: UIColorPickerViewControllerDelegate {
func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) {
}

func colorPickerViewController(_ viewController: UIColorPickerViewController

元記事を表示

[SwiftUI / CoreMotion]iPhone で測定した気圧を画面に表示する

## 記事の内容
iPhone で測定した気圧を画面に表示する

## 開発環境
|項目|内容|備考|
|—|—|—|
|PC|MacBook Air M1 (2020) メモリ:16GB ストレージ:1TB
macOS Ventura(ver 13.0)||
|iPhone|iPhone SE(2nd) iOS 16.1||
|IDE|Xcode ver 14.1||

## 注意事項
– このアプリを起動するためには PC と iPhone を接続する必要があります。
– 下記で紹介するコードにはエラー処理を実装していません。必要に応じて実装してください。

## ポイント
クロージャを利用して気圧のデータを ContentView に渡す

“`swift:測定した値を渡す処理
func st

元記事を表示

Flutter Push通知

FlutterでのPush通知が結構面倒だったのでまとめておきます
FCMの基本準備と設定は他の記事を参考にしてください
## 特徴
##### iOS
APNsとFCMTokenのマッピングを行う

##### Android
フォアグラウンドの時にはFCMをLocalMessageに変換して表示する

## iOS準備
Signing&Capabilities でこの設定を入れる
![スクリーンショット 2022-11-06 12.03.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566476/0f336759-ce5d-fc06-8da0-1ff8f073e0d9.png)

## コード
“` swift: AppDelegate.swift
import UIKit
import Flutter
import Firebase

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override f

元記事を表示

【SwiftUI】Combineを使ってデジタル時計を作る

# はじめに
以前はTimelineViewでデジタル時計を作成してみました
今回はCombineを使用してデジタル時計を作成してみようと思います。

# 完成形
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/257b146a-ef0d-f222-e6ed-69b67fab5b3f.gif)

# 完成コード
“`ContentView.swift
import SwiftUI

struct ContentView: View {
@StateObject private var viewModel = ViewModel()
var body: some View {
GeometryReader { geo in
ZStack(alignment: .center) {
Color(red: 132/255, green: 209/255, blue: 78/255)

元記事を表示

RegexBuilderでカラーコードをUIColorに変換するものを作ってみる

Swift 5.7 / iOS 16になって、正規表現の機能が大幅に強化されました。

それまで用意されていた[NSRegularExpression](https://developer.apple.com/documentation/foundation/nsregularexpression)はひたすら使いづらく、悪夢のような代物でしたが、[Regex](https://developer.apple.com/documentation/swift/regex)や[Regex Literals](https://github.com/apple/swift-evolution/blob/644798165cf04084823b8ead8db52f3b3dd03a0d/proposals/0354-regex-literals.md)の導入で、Swiftの正規表現は他の言語とほぼ遜色ない使い勝手になりました。

しかしSwiftはそこにとどまらず、[RegexBuilder](https://developer.apple.com/documentation/regexbuilde

元記事を表示

オーバーライドをめっちゃ簡潔にまとめてみた

## はじめに
オーバーライドについて改めて学んだことを簡潔にまとめることとする。尚、継承の知識も必要である。

## 対象者
この記事は下記のような人を対象にしている。

– 駆け出しエンジニア
– プログラミング初学者

## オーバーライド(override)の詳細
– 子クラスが親クラスを引き継いだ(継承)をした際、親クラスで定義されているメソッドやプロパティを「子クラス」で上書きすることができる。

– 親クラスの上書きは「継承している子クラス」で行われるため、その上書きした子クラスのクラス内でのみ、あるいは、インスタンス化したときに上書き内容が反映される。
– 親クラスで既に定義されているメソッドやプロパティで同じシグニチャ(同じ名前、同じ引数、同じ戻り値)のメソッドやプロパティを定義する場合は、「override」を指定する必要がある。
– プロパティを上書きする場合は、親・子クラス共に「コンピューテッドプロパティ」でなければ上書きできない。
→こうすることで誤って親クラスのメソッドを上書きしてしまうミスを防ぐことができる。目印はoverride。
– また、su

元記事を表示

URLSession × Combine でAPI通信処理を書いてみる

サポート対象がiOS13,14以上のアプリが増えていく中で、より需要を増していると思われるCombine。
中でも今回は、Combineを使った非同期処理の書き方を記事にしてみました。

せっかくなので、API処理をRequest/Responseをジェネリクス・プロトコルで共通化し、エラーハンドリングもちゃんと行いたいと思います。

## 完成コード
“`swift
protocol APIClientProtocol: AnyObject {
func send(_ request: T)
-> AnyPublisher
}

final class APIClient: APIClientProtocol {
private init() {}
static let shared = APIClient()
private var cancellables = Set()

func send

元記事を表示

【Swift】MintでSwiftFormatを導入する

# はじめに
https://github.com/nicklockwood/SwiftFormat

SwiftFormatを使ってみました。
初めて使ったので導入方法を記録しておきます。

# やりかた
### Mintfile
“`:ターミナル
cd プロジェクトフォルダ
“`
Mintfileを作成します
“`:ターミナル
touch Mintfile
“`
Mintfileを開きます
“`:ターミナル
open Mintfile
“`
MintfileにSwiftFormatを記載します
“`:Mintfile
nicklockwood/SwiftFormat
“`
SwiftFormatをインストールします
“`:ターミナル
mint bootstrap
“`
### .swiftformat
“`:ターミナル
cd プロジェクトフォルダ
“`
.swiftformatを作成します
“`:ターミナル
touch .swiftformat
“`
.swiftformatを開きます
“`:ターミナル
open .swiftformat
“`
.s

元記事を表示

PropertyWrapperを利用したDIコンテナの利用とRxSwift+MVVMでの処理&UnitTestに関する事例解説

## 1. はじめに

昨年に公開した記事の中で[自前でDIコンテナを作ってみる試みとRxSwiftを利用した構成への適用を試してみる](https://qiita.com/fumiyasac@github/items/8d6b77c3547b8b7839ad)というタイトルで、実務を通じてDIコンテナを自作した際のTIPS等を簡単ではありますがまとめました。

この記事の中でも少しだけ触れていますが、この記事を書いたタイミングでは残念ながら実践適用を見送った自作DIコンテナ構築のアイデアとしまして、 [【実装MEMO】PropertyWrappersの機能を利用したDependency Injectionのコードに触れた際の備忘録](https://fumiyasakai.medium.com/%E5%AE%9F%E8%A3%85memo-propertywrappers%E3%81%AE%E6%A9%9F%E8%83%BD%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9Fdependency-injection%E3%81%AE%E3%82%

元記事を表示

【Swift】for文内のif文を省略できるらしい

# はじめに
SwiftLintを使ってたら警告が表示されて気づいたのですが、for文内のif文は`where`を使って1文にできるらしいです。

# やりかた
“`swift
for user in users {
if user == “SNQ-2001” {
print(“自分です”)
}
}
“`

“`swift
for user in users where user == “SNQ-2001” {
print(“自分です”)
}
“`

# おわり
こういうコードの省略形みたいなの知るとめっちゃ嬉しくなっちゃいます笑

元記事を表示

画面ミラーリング専門開発キット「LetsView SDK」とは?インストール&設定する方法についての説明

画面ミラーリングは現在娯楽だけでなく、テレワークやオンライン授業、VRメガネの使用など様々な場面で応用されています。企業や組織にとって、もしアプリに画面ミラーリング機能を追加したい場合、1から開発するより、SDK開発キットを直接に導入したほうが便利で速いでしょう。このような理由でスクリーンミラーリング用の専門SDKキットが誕生されました。今回はご紹介致します。

「LetsView SDK」とは?

「LetsView SDK」とは、プラットフォームやシステムを問わずに動作可能でプロな画面ミラーリング開発キットです。AirPlay、Miracast、DLNA、AMCast(自社開発)など、さまざまなスクリーンミラーリングプロトコルとの互換性があり、アプリなどに便利に導入することができます。人気画面ミラーリングアプリApowerMirrorの開発とサポートは「LetsView SDK」開発チームが担当されています。

![what-is-

元記事を表示

IntelliJ エミュレータがサイドバーに出てしまう問題

IntelliJは初期設定でエミュレータをサイドバーに表示しますが
今回、サイドバーじゃなくて、普通に表示してほしいんじゃい!!ということで
エミュレータをサイドバーではなく、普通に表示します?

# 設定の編集
まず、IntelliJの`preferences`(設定)に行きます。
Windowsの方は、上に出ているメニューバーから
Macの方は、画面上にカーソルを当てて、`IntelliJ IDEA`>`Preferences`を押しましょう。

次に、検索バーに`emulator`と入力し、検索しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017749/3f6ffa49-b538-b9d5-07c7-b217c991ec4c.png)

検索結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017749/5e28d24b-8522-573c-3b0c-f77eb9

元記事を表示

以前作った@resultBuilderでHTMLを書き出すDSLを手直ししながら、@resultBuilderの使い所について考える

SwiftUIとともに颯爽と登場した`@_functionBuilder`(aka `@resultBuilder`)ですが、いまいち使い所を見出せないまま時は過ぎました。

自分の観測範囲に限れば、SwiftUI以外で`@resultBuilder`が有効に使われているライブラリは見当たらず、持て余してるのは自分だけじゃないと思って溜飲を下げていたところです。

そんな中、Swift 5.7が正規表現に対応し、その中で正規表現構築用のDSLを用意してきました。

[RegexBuilder | Apple Developer Documentation](https://developer.apple.com/documentation/regexbuilder)

[swift-evolution/0351-regex-builder.md at main · apple/swift-evolution](https://github.com/apple/swift-evolution/blob/main/proposals/0351-regex-builder.md)

「**そ

元記事を表示

OTHERカテゴリの最新記事