iOS関連のことを調べてみた2023年02月07日

iOS関連のことを調べてみた2023年02月07日

【SwiftUI】Previewで@Stateを使用したい

# はじめに
SwiftUIでBindingを使用するとPreviewの時にどうすればいいのか迷いますよね。
私が初学者の時はどうするのかわからずにPreviewを消してました。
同じような問題で困ってる人のために記事にします。

# やりかた
“`diff_swift:ContentView
import SwiftUI

struct ContentView: View {
@Binding var text: String
var body: some View {
Text(text)
}
}

struct ContentView_Previews: PreviewProvider {
+ @State static var text: String = “テスト”
static var previews: some View {
ContentView(text: $text)
}
}
“`

:::note info
**ポイント**
`@State`に`static`を付けます。
:::

元記事を表示

【Swift,iOS】いい感じのアドバイスをくれるアプリを作ってみた

# やりたいこと
* いい感じのアドバイスをくれるAPIを使って、いい感じのアドバイスを画面に表示させたい

1\. Advice Slip JSON API というものを使っていい感じのアドバイスを英語で取得
2\. 取得した英語のアドバイスをDeepLのAPIを使って翻訳
3\. 画面に表示
この流れでやっていきます。

## 完成図

画面をタップするとアドバイスが更新されます。

## やってみる

https://api.adviceslip.com/advice

Swift ファイル情報の備忘録

# **Swiftでファイルサイズを取得**

FileManagerのattributesOfItemを使って、ファイルサイズを取得することができます。
NSDictionaryに型をキャストすることによって、用意された関数を使用することができます。
[Apple attributesOfItem](https://developer.apple.com/documentation/foundation/filemanager/1410452-attributesofitem)

使い方

“`swift
import Foundation
let fileManager = FileManager.default
guard let attribute = try? fileManager.attributesOfItem(atPath: “パス”) as NSDictionary else { return }
print(attribute.fileSize())
“`
# Swiftでファイル作成日を取得
“`swift
print(attribute.fileCrea

元記事を表示

クラッシュリティクスをSlack通知する(10分で設定できるヨ)

# はじめに

毎朝毎朝、手作業でクラッシュリティクスを確認している明田です。
確認してはクラッシュが出ていない。
クラッシュが出ていない
クラッシュが…..

み、見つけた!クラッシュだ!!と本来喜んではいけないのに高ぶる気持ちを抑えられません。
まるで事件現場を発見したどっかの少年探偵団みたいな気持ちです。
![コナン.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1967088/37ca6674-df89-2804-d3db-3f7ce6560b77.jpeg)
そこから犯人(原因)探しをし修正してクラッシュ解決となるのですが、なんといっても
– 手作業での確認作業が面倒
– 発見して課題化したのに誰かが解決済み
– これは連携ミス。
– 確認が属人化してしまっている
– 運用しているサービスが多いと確認数が増える

など確認作業には多くデメリットが存在します。

くそー何か何かいい方法は…
ざわ…何かいい方法はないのか。
ざわ…:bulb:!!
圧倒的閃き・・・!僥倖

元記事を表示

SwiftUIの技術選定まとめ

# Overview

iOS13から SwiftUIとCombineが導入され、Swift5.5から async awaitが導入され、既存のUIKitの実装から大きく変化が求められてきています。

SwiftUIの紹介から数年が経ったことで、大分関連記事や事例紹介が増えてきました。iOS13未満をサポート対象にしていたアプリも徐々に減り、これらのリファクタリングタスクが必要となってきています。

# 技術選定の観点

この記事の大きな焦点は2点です。

– SwiftUIの提唱する “Single Source of Truth” と Combine実装の共存
– Combineの非同期処理と Swiftのasync/awaitによる非同期処理の使い分け

私はこれらの問題をUI アーキテクチャで綺麗に実装することで、それぞれの強みを最大限に生かすことができると考えます。以下の図のようにMVVM アーキテクチャを設計します。
![MVVM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/

元記事を表示

ジェネリクスを簡単にアウトプット

## はじめに
ジェネリクスを利用すれば複数の型においても汎用的な処理を実装できる。また、ジェネリクスのコンセプトとしては入力値の型も任意にすることによってプログラムの汎用性をさらに高めるものである。尚、今回はジェネリクス「関数」を例にして記載する。

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

– プログラミング初学者

## 詳細
– 超簡単に言うと IntやStringなど型に捉われず汎用的に型の定義や処理を実装できる
– ジェネリクスの基本定義
– func 関数名<型引数>(引数名: 型引数) -> 戻り値の型 { 関数の呼び出しに実行される文 }
– 戻り値にもジェネリクスを定義できる。
“`swift:Swift
//Tというジェネリクスを引数に取り、Tというジェネリクスを返す
//が意味するのは、「AdditiveArithmeticプロトコルに準拠したあらゆる型」と言う意味。加算などを可能にするプロトコル。
func sum(a: T

元記事を表示

【Xcode】ライブラリが認識されていない時の対処法

# はじめに
WWDC2019の「[Creating Swift Packages](https://developer.apple.com/videos/play/wwdc2019/410)」を見ていたら新発見があったので記録しておきます。
SwiftPMでライブラリを導入してもimportできない時ないですか??
Xcodeが重い時に多い気がします。

それを解決できるコマンドをWWCDでしれっと披露してました笑

# コマンド
`command` + `option` + `P`

# 該当場面
4:30くらいでした。
![スクリーンショット 2023-02-05 21.46.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1dc080a6-54d2-fd99-a72a-4d4f022bbc19.png)
![スクリーンショット 2023-02-05 21.46.30.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

【初心者向け】Flutter, SolidityでDappsを作る方法 (Metamaskとも連携)

今回の記事では、Solidity & Flutterを使って、Dappsを作る方法を解説します。

アプリの内容としては、「アプリ→メタマスクに接続→口座にトークンを発行する」というFaucetアプリを作るというものになっています。
画像ではこんな感じ。
SwiftUIでスプラッシュ画面を実装してみた

## はじめに
今回、アプリの初期起動時のみに表示される画面を実装したので、メモします。

## 実装方法
やったこととしては、とてもシンプルで画面起動時にContentView内で分岐処理をして切り替えただけです。

“` swift:code
import SwiftUI

struct ContentView: View {

@State private var isLoading = true
@State var selectedTag = 1

var body: some View {
if isLoading{
// 画面起動時に呼ばれる
// StartUpViewは、別で作ったViewになります
StartUpView().onAppear {
// 画面が起動してから1.5秒後に[isLoading = false]を代入
DispatchQueue.main.asyncAfter(de

元記事を表示

LinuxでiPhoneを接続して写真などを転送する方法

# LinuxでiPhoneとデータ転送を行う

今回はLinuxでiPhoneをUSB接続してデータ転送(差分バックアップ)を行います。

## 用意するもの
– iPhone
– Linuxマシン (今回はArch Linuxを使用します。)
– USB A => Lightningケーブル
– パッケージ [libimobiledevice](https://www.archlinux.jp/packages/?name=libimobiledevice)

マシン詳細

“`sh:Terminal
$ uname -a
Linux haruki 6.1.7-hardened1-1-hardened #1 SMP PREEMPT_DYNAMIC Thu, 19 Jan 2023 00:16:46 +0000 x86_64 GNU/Linux

$ cat /etc/os-release
NAME=”Arch Linux”
PRETTY_NAME=”Arch Linux”
ID=arch
BUILD_ID=rol

元記事を表示

【SwiftUI】特定の条件でのみアニメーションをループさせる

# はじめに
特定条件の場合のみ、ループアニメーションを付与します。

# サンプルアプリ
![Simulator Screen Recording – iPhone 14 Pro – 2023-02-04 at 20.16.09.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/faa55b56-cd37-17fb-418a-d5e86db9e477.gif)

# やりかた
“`swift:ContentView
import SwiftUI

struct ContentView: View {
@State var isAnimation: Bool = false
var body: some View {
VStack(spacing: 50) {
Toggle(“”, isOn: $isAnimation)
.labelsHidden()

Button {

元記事を表示

Push通知の証明書だけ切れた場合(p12形式)

# はじめに
「あれ?急にiOSアプリにPush通知が届かなくなった」、そんなことないでしょうか?

私は今週ちょうどありました。

色々調べてもらって、原因っぽいのがFirebaseに登録している証明書が期限切れになっていたこと。
「じゃあ、証明書更新するか(管理上の問題でPJで更新作業ができるのは私だけ)…」
「あれ?前どうやったっけ?Wikiに書いたけど、Wikiを読んでも記憶が…」

ってことになりました。
キャプチャ付きでWikiを書いておけばいいのですが、前回はトラブルシューティングとしてあれこれやった結果、解決した…って感じだったので、テキストで要点しか残っておらず…

今回もそうなりそうですが、ひとまずOutputすることで記憶の定着に役立てばと思い記事を書いています。

※この記事は主に自分自身の備忘録です。
※iOSはメインスキルではないので、理解が誤っている部分もあるかもしれません?

# やったこと(テキストメモ)

– 認証局に証明書をリクエスト(使用するメールアドレスは管理者権限のアドレスを使用)
– AppleDeveloperでCerti

元記事を表示

超旧式 iOS でストレージが不思議に一杯に?!

10年以上前に購入した iPad 2 をまだ使っている。iOS はこのモデルの最終版 9.3.5。最新のアプリはもちろんのこと、普通のネットのブラウジングもほぼ全く不可能。
でも、音楽の再生には充分。Music アプリの他、LAN のストリーミングサーバー Jellyfin をブラウザーでアクセス(Jellyfin アプリは使えない)、そして NHK のラジオアプリを使っている。Jellyfin はたまに落るが、NHK アプリ全く問題ない。

それが、数ヶ月前から「ストレージ一杯」の警告が出始めた。いらないメディアやテータ、古いアプリを消してみた。でも時間が経つとまたストレージが減って行く。更に削減。全ての写真と音楽ファイルを削除。

それでも。結局消せるものを全て消しても、64GB のストレージの残量が 0 バイトに。アプリの一時的データも保存できないので、操作がガクっと遅くなる。もう使い物にならない。詳細を見ると、ストレージを所有しているのは90%以上が「その他」。(古い OS でデバイス上では見れないが、iTunes で見れる。)。つまり、OS が内部で取っている一時データで、設

元記事を表示

【SwiftUI】複数行のLinkを左寄せにしたい

# はじめに
先日SwiftUIの[Link](https://developer.apple.com/documentation/swiftui/link)を使用した際に、複数行の要素を**左寄せ**(=alignmentをleft)にしたかったのですが、少し実装に苦戦したので備忘録です。

以下のキャプチャの、1枚目の状態から2枚目の状態にする為の実装方法について書きます。URLが左寄せになっています。

# 上手くいかなかった方法
まず思い浮かぶのは下記の様

元記事を表示

Swift(iOS)でお絵描きViewを追加する

# ユーザーに指で描画してもらいたい

![Feb-04-2023 07-29-38.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/3bce0994-373c-de56-41e2-f54e0e8b9b26.gif)
iPhoneをタッチして絵を描いてもらいたい場合、どのようにお絵描きできるViewを追加すればいいのでしょうか?

# ライブラリを追加すればOK

https://github.com/Asana/Drawsana

お絵描きライブラリはいろいろありますが、今回はこれで。

### インストール
Swift Package Manager、Carthage、ファイルのドラッグ&ドロップ、の方法がありますが、僕のお気に入りはSwift Package Managerです。

### 使う

### とりあえず描く

“`swift
import UIKit
import Drawsana

let drawingView = DrawsanaView()
let penToo

元記事を表示

【Swift】コードのみでTableViewを実装する

# はじめに
苦手意識のあるUIKitを克服しよう企画!
これからUIKitの記事も投稿します!
今回はコードのみで最小実装のTableViewを作成してみたいと思います。

https://qiita.com/SNQ-2001/items/d680d8bb4a73106bdefb

https://qiita.com/SNQ-2001/items/f010a0317734ec99bbdc

まずStoryboardを消します。
これは以前書いたので飛ばします。

# 完成サンプル
![simulator_screenshot_D6F38B34-27C3-4D07-BA91-A4B6BDD9DB55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/96425d99-ce65-7f3e-d8e8-392e175d401f.png)

# 実装
“`swift
import UIKit

class ViewController: UIViewController {

let av

元記事を表示

Codableを簡単にアウトプットする

## はじめに
CodableとはEncode・Decodeの両方を兼ね備えたプロトコルである。
JsonEncoderクラスとJsonDecoderクラスを利用してCodableに準拠した型からJSONへのエンコードとJSONからCodableに準拠した型へのデコードを行う。

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

– プログラミング初学者
– Encode・Decodeについて知見がある

## ソースコード
“`swift:Swift
//Codableに準拠した型
struct SomeStruct: Codable {
let value: Int
}

let someStruct = SomeStruct(value: 1)

//Somestruct型をJSONバイト列にエンコード
let jsonEncoder = JSONEncoder()
let encodedJsonData = try! jsonEncoder.encode(someStruct)

print(encodedJsonData) // 11 bytes >>>

元記事を表示

【Flutter】AndroidでiOS風の画面遷移とスワイプによるバックを実現する

# はじめに
Flutterはクロスプラットフォームなフレームワークですが、Flutterでモバイルアプリを開発していて、Android・iOSという二つのOSで画面遷移時の処理を統一するのに少し工夫が必要だったため共有します。
本記事ではAndroidにおいてiOS風の画面がスライドするようなトランジションエフェクトと、スワイプによる画面バック処理の実装について紹介します。
Androidバックキー押下時に何か処理を実装していた場合、そのままではスワイプによる画面バック動作が無効になってしまうので、その解決を試みました。

# 目標
AndroidでiOS風のトランジションと「スワイプで前の画面に戻る」動作を共通で実装させる。

# 実装

実装の内容は大まかに以下となります。

1\. AndroidでiOS風の画面遷移をさせる
2\. バックキーに処理を設定する
3\. バックキー押下時の処理とスワイプによるバック動作を併存させる

## 1\.AndroidでiOS風の画面遷移をさせる

Flutterのコードを読むと、以下のようにOSによって異なる画面遷

元記事を表示

【Expo】ImagePickerで画像を複数枚選択する方法

# はじめに
個人開発中にImagePickerを「Expo ImagePicker 複数枚選択」とググっても「ImagePickerでは複数枚選択できない」とか「MediaLibraryでできる」という記事しかでてこないので記事を書くことにしました。

記事の最後にExpoで個人開発したアプリを紹介しているのでもしよければダウンロードお願いいたします!!?

# 前提
* SDK45以上
* expo-image-pickerインストール済み

# 結論
下記のようにするだけでした。
“`react
import * as ImagePicker from “expo-image-picker”;
~~
~~
const result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
allowsMultipleSelection: true, // これをtrueに設定する
quality: 1,
});
“`
これだけでした。

元記事を表示

Lottie-iOS 4.0.0以降でアニメーションがうまく表示されない時の対処法

## この記事を書くきっかけ
先日、Lottieで3Dレイヤーを含むアニメーションファイルに対応したPRがマージされており、ちょうど3Dレイヤーを含むアニメーションを使用したいためアップデートを行いました。
アップデート後にアニメーションを確認してみると、一部のアニメーションで座標がずれたり、レイヤーの色が真っ黒になってしまうなどの問題がありLottieのissueや検証などを含め解決法を模索しました。

https://github.com/airbnb/lottie-ios/pull/1930
## Lottie-iOS 4.0.0の主な変更内容
– Lottie 3.4.0 から対応されているCore Animationがデフォルトで有効になる
– RenderingEngineOptionのデフォルト値が`.automatic`になる
– DecodingStrategy.dictionaryBasedがデフォルトで有効になる
– AppleのフレームワークとのコンフリクトがあるためAnimationViewなどがRenameされている
– BackgroundBehavior

元記事を表示

OTHERカテゴリの最新記事