iOS関連のことを調べてみた

iOS関連のことを調べてみた
目次

Module ‘Nuke’ has no member named ‘loadImage’になってブチ切れてる人へ(俺)

# 【背景】

【API連携編】Qiitaクライアントアプリを作ろう

SwiftとUiKitの練習でこの記事のアプリを作ってみっかーと思ったら途中で詰んだので共有。
どうやらNukeの更新でNuke.loadImageがなくなってしまった模様。

ネットで調べてもあまり情報が無いため、メモ代わりにここに書いておく。

# ダメな書き方
“`
Nuke.loadImage(with: ***, into: ***)
“`

これだと
Module ‘Nuke’ has no member named ‘loadImage’
となる。

# イケる書き方

### その1

“`
import Nuke
import NukeExtensions //コレ追加
“`
importでNukeに加えて”NukeExtensions”ってやつを追加

### その2
“`
loadImage(with: ****, into: ***)
“`

この書き方をする。そしたら動いたわ。

元記事を表示

【SwiftUI】SectionにisExpandedが追加され、折りたためるようになった(iOS17)

# はじめに
iOS17からSectionにisExpandedという引数が追加されました。
これを使用することで、Sectionを開閉することができるようになります。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 Pro – 2024-02-10 at 22.07.05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7d092ec5-55ba-1706-2d92-e412f1e8e76c.gif)

# 実装
ヘッダーの横に矢印ボタンが出るのはListStyleのsidebarだけでした。
その他のスタイルでは`isExpanded.toggle()`のように値を直接変更しないと開閉できません。
“`swift
import SwiftUI

struct ContentView: View {
@State var isExpanded = false

var body: some View {

元記事を表示

ネイティブ開発か、クロスプラットフォーム開発か

## はじめに

モバイルアプリの開発として, ネイティブ開発にするかクロスプラットフォーム開発でFlatterやReactNativeを使うか、今でも議論が絶えません。
現在Androidのリードエンジニアとして働いている自分から見て、どう選定するかを個人的な意見を書きたいと思います。選定の方法として絶対正しい、はないと思いますので参考までにしていただければと思います。
下のような記事の内容はすでに把握している方が対象です。

https://circleci.com/ja/blog/native-vs-cross-platform-mobile-dev/

## 前提条件
iOSとAndroidの両OSでアプリを作る必要がある場合を想定

## 自分の経歴

自分のモバイルアプリ歴として、ざっくり書いておきます。

* Swift
– Swift UIで個人開発3件 
– 100万円以上の収益化に成功しているアプリあり
– 経歴は1.5-2年ほど

* Kotlin
– 個人開発で2件
– 経歴は1年ちょい
– 現在リードエンジニア
– 主にJetpa

元記事を表示

Xcode14 IPAファイル書き出し時に特定のデバイスにインストールを制限

# Xcode 14でIPAファイルの書き出し時に特定のデバイスへのインストールを制限する方法

## 目次
– [はじめに](#はじめに)
– [Xcodeプロジェクトの開き方](#Xcodeプロジェクトの開き方)
– [デバイスの制限設定](#デバイスの制限設定)
– [まとめ](#まとめ)

## ・ はじめに
Xcode 14を使用してiOSアプリケーションを開発する際、特定のデバイスに対してインストールを制限したい場合があります。この記事では、そのような場合にIPAファイルを書き出す方法を紹介します。

## ・ Xcodeプロジェクトの開き方
まず、Xcodeを起動し、制限をかけたいプロジェクトの`Runner.xcworkspace`を開きます。

![Xcodeプロジェクトの開き方](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/a5212eb9-d53e-370e-30f7-ad4f7ba97e01.png)

次に、`Runner`を選択し、Targetの`Runner`から`

元記事を表示

【Swift】2つの要素の差分を取得する

# はじめに
文章の差分検索ツールを作ろうかなって思い、
ちょっと調べたところ、`difference`という機能があることを知ったので記事にしておきます。

# 実装
“`swift
import Foundation

let text1 = “2つの文章の差分を検索します”
let text2 = “2つのブンショウの差分を検索します。”

print(text1.difference(from: text2))

// CollectionDifference(insertions: [Swift.CollectionDifference.Change.insert(offset: 0, element: “2”, associatedWith: nil), Swift.CollectionDifference.Change.insert(offset: 3, element: “文”, associatedWith: nil), Swift.CollectionDifference

元記事を表示

Swift5.9からのObservationはどのような仕組みでクラスのプロパティを監視しているのか

# はじめに

Swift 5.9からのObservationがどうやってプロパティを監視しているのか、Swiftのコードから仕組みについて書いておきます。Swiftのコードを読み間違えて解釈していることもあるかもしれませんが、誤りなど見つけたらコメントをください。

# 本題

## withObservationTrackingについて

Observationの[プロポーザル](https://github.com/apple/swift-evolution/blob/main/proposals/0395-observability.md)から、次のようなコードを見たことがあると思います。これはクラスCarのnameとnumberの変更を監視し、.onChangeが動作するというものです。

“`swift
import Observation

@Observable
class Car {
let name: String
let number: String
}

let cars: [Car] = …

@MainActor
func renderCar

元記事を表示

アプリ内からiPhoneの「設定」アプリの通知設定画面に遷移する方法 (iOS 16~)

アプリからiPhoneの設定アプリを開くには `UIApplication.openSettingsURLString` を使いますが、そこから先のアプリごとの通知設定画面へ遷移させるようなURLは以前は提供されていませんでした。

しかしiOS 16から `openNotificationSettingsURLString` が追加されており、iPhoneの設定アプリ内にあるプッシュ通知の設定画面へ一発で遷移できるようになりました。
Appleありがとう。(みんなURLScheme使ってリジェクトされたりしてましたよね。。)

https://developer.apple.com/documentation/uikit/uiapplication/4013180-opennotificationsettingsurlstrin

使い方
“`swift
if let url = URL(string: UIApplication.openNotificationSettingsURLString) {
await UIApplication.shared.open(url

元記事を表示

React NativeでWebViewを使って、Webページからデータを受け取る方法

今回は、Webページの状況によって、Reactnative側で処理を変更したい場合に、データを受け取る必要があるため、詳細を記載していく。

WebViewのライブラリーを用いて、以下のガイドラインを参考に進めていく。

https://github.com/react-native-webview/react-native-webview

https://github.com/react-native-webview/react-native-webview/blob/master/docs/Getting-Started.md

## Webpageからメッセージを送る

### ディレクトリ・ファイル作成
最初にWebページを用意するために、以下のコマンドを入力します。
“`
mkdir WebPage
cd WebPage
touch index.html
“`

### htmlファイルの変更  
index.htmlに以下のコードを加えます。

“`index.html


元記事を表示

[Swift] Journaling Suggestions API に関して

# はじめに

iOS 17.2 から`ジャーナル`機能が提供されました!
(なんで、17.2 っていう中途半端なタイミングで…みたいなツッコミもありつつ…)

今回、機能だけでなく開発者向けの API も提供されました。

https://developer.apple.com/videos/play/tech-talks/111384/

これを触ってみたので、ざっくりと紹介していきます。

# Journaling Suggestions API に触れてみる

公式の動画では、以下のステップで実行できるとのこと。

![Screenshot 2023-12-13 at 5.04.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175242/dde17aa7-3a03-3472-7dbf-b8dd48816cc5.png)

(引用:https://developer.apple.com/videos/play/tech-talks/111384/)

では、実際にやっていきま

元記事を表示

【Swift】Observation基本の基。

## はじめに
WWDC23で発表された新たなフレームワークのObservationの使い方を少しばかり勉強したのでアウトプットです。
今までのCombineとどのようにコードが変わるかを紹介していきます。

## この記事でわかること
– Observationってどんなものか
– Observationを使ってとりあえずプログラムを動かす方法
– Combineと比較して何が変わったのか

## 想定読者
– SwiftUI触ったことあるよーという人
– ObservableObject使ったことあるよーという人

## この記事で説明していないこと
– UIKitとObservationを合わせてどう使うかについて
– “`@Bindable“`などのプロパティラッパーについて

## Observationって?
– WWDC23で発表された新たなフレームワークです
– Combineの進化系。みたいなイメージでいいと思いいます
– iOS17からのみ使用可能です

## 今回作るサンプル
– とてもシンプルなサンプルです。「add peach」ボタンタップするとリストに「

元記事を表示

【SwiftUI】CGAnimateImageDataWithBlockやCGAnimateImageAtURLWithBlockを使ってGIFを表示する

# はじめに
数日前に「【SwiftUI】GIFを表示したい」という記事を書きました。

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

コメント欄でもっといい表示方法を教わったので試してみました。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2024-02-08 at 22.24.03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d1569305-61e7-7978-f028-d5b6bc3f0d32.gif)

# 今回使用するGIF
![heart.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c5cc430a-6af6-986c-afc6-d102f4fd8991.gif)

Cordova iOSでSafeAreaの有無判定で悩んだ件

CordovaでiPhoneアプリでも作ってみようかと、ちょっと手を出してみましたが、意外なところで、つまづいたのでメモ。

iPhone X以降、画面に切り込みが入り、「ノッチ」と呼ばれる部分が存在するようになりました。それで、iPhone SEやX以前には無かった画面上部の部分を、SafeAreaと呼ぶようです。

そして、この**SafeAreaの有無が簡単に取れないんです**!どうして?!

そして、散々調べて解決方法を見つけたので、ここにメモっておきます。

### 手順(1) CSSの準備

まず、以下のCSSを作成します。

“`css:root.css
:root {
–sat: env(safe-area-inset-top);
–sar: env(safe-area-inset-right);
–sab: env(safe-area-inset-bottom);
–sal: env(safe-area-inset-left);
}
“`

下記の通り取り込むようにしておきます。

“`html:index.html

元記事を表示

firebaseのsignInWithRedirectを用いてのGoogleログインが、iosだと正常終了しない問題

## はじめに
仕事でvue.jsを使うということで、勉強がてらアプリを作ってみようと思い、思った以上に使えそうなものができたのでβ版を公開してみようとしたところ、**何故かiphoneだけ、ログイン処理自体は通過できてもログイン状態にならず…**

調べてみたところ以下の記事が見つかりました。
[Firebase AuthenticationでのサインインがiOS16.1でできなくなった際の障害対応記録](https://synamon.hatenablog.com/entry/2023/01/30/151518)

とりあえずザクッと説明を省きまして、解決には以下の方法のどれかを取る必要があると
> 1.Firebase 構成を更新して、カスタム ドメインをauthDomainとして使用する
> 2.signInWithPopup() に切り替える
> 3.認証リクエストを firebaseapp.com にプロキシする
> 4.ドメインでサインイン ヘルパー コードを自己ホストする
> 5.プロバイダーのサインインを個別に処理する

**今回は 1 の方法で対応することにしました

元記事を表示

【Swift】摂氏と華氏を切り替える

# はじめに
摂氏・華氏の切り替えを実装しようとするとめんどそうです。
そこで、用意されているMeasurementを使用します。
これは色々な単位の計算をコネコネしてくれてめっちゃ便利です。

今回はその例で摂氏・華氏を実装してみようと思います。
私たち日本人がよく触れる温度の単位は摂氏です。

摂氏20℃は、華氏何°Fでしょう?と言われても全然わかりません。

なので[こちら](https://kunisan.jp/gomi/sesshi_kashi.html)のツールを使用させてもらいます。

![スクリーンショット 2024-02-07 22.02.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e0b12a33-1c64-c920-56c0-f47a477cb372.png)

摂氏20℃は、華氏68°Fらしいです。

ではiOSではどのように実装したらこの変換ができるでしょうか
実装してみます。

# サンプルアプリ
いい感じですね。
四捨五入すれば、先ほど使用したツール

元記事を表示

git hooksをトリガにしてfastlaneからユニットテストを実行する

## 大まかな手順

1. Xcodeプロジェクトを作成する
2. Gemfileを設定する
3. Fastfileの雛形を生成する
4. Fastfileに設定を記述する
5. fastlaneによるテスト実行を試みる
6. git hooksをトリガにしてfastlaneからユニットテストを実行する

## 前提

– homebrewをインストール済み
– rbenvをインストール済み
– rubyを設定済み
– rubyはrbenvでインストールしたものを使用しています
– bundlerをインストール済み
– XcodeはGitで管理する設定にする

##### 記事記載時(2024-02-07)の各ツールのバージョン

“`
$ brew –version
Homebrew 4.2.6
$ gem –version
3.5.5
$ rbenv –version
rbenv 1.2.0
$ ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin22]
$ bundle –versio

元記事を表示

【Swift】負の数でも、数字の部分だけ取得したい(絶対値)

# はじめに
絶対値を取得したい時があったので、調べるとabsを使えばできるようなのでやってみました。

# 実装
“`swift
import Foundation

let intPlus: Int = 10
let intMinus: Int = -10

let doublePlus: Double = 10.5
let doubleMinus: Double = -10.5

let floatPlus: Float = 10.5
let floatMinus: Float = -10.5

let cgFloatPlus: CGFloat = 10.5
let cgFloatMinus: CGFloat = -10.5

print(abs(intPlus)) // 10
print(abs(intMinus)) // 10
print(abs(doublePlus)) // 10.5
print(abs(doubleMinus)) // 10.5
print(abs(floatPlus)) // 10.5
print(abs(floatMinus)) // 10.5
p

元記事を表示

[SwiftUI]データバインディングについて(@State, @Binding, ObservableObject)

# 目次

1. [データバインディングとは](#データバインディングとは)
2. [@Stateについて](#`@State`について)
3. [@Bindingについて](#`@Binding`について)
4. [ObservableObjectについて](#ObservableObjectについて)
5. [まとめ](#まとめ)
6. [さいごに](#さいごに)

# データバインディングとは

データバインディングとは、UIとデータの間での双方向の同期を可能にする仕組みです。
ビュー内での状態変更が自動的にUIに反映され、逆にUI上での操作もデータの状態に反映されます。

# `@State`について

`@State`は、ローカルな状態を管理するためのプロパティラッパーです。
ビュー内で状態を保持し、変更する際にUIが自動的に再描画されます。

# `@State`の使い方

“`swift
struct CounterView: View {

// カウンターの値を管理する状態。初期値は0
@State private var count = 0

元記事を表示

git hooksを使用して、git commit前に何がしかの処理を実行する

`git commit`前に諸々の処理を実行するのは、テンポが悪くなるため、実際にやるかどうかは要検討かと思います。
その上で備忘録として記事を残します。

### 最終的にやりたいこと
`git commit`実行前にfastlaneでテストを実行する
→[git hooksをトリガにしてfastlaneからユニットテストを実行する](https://qiita.com/wtrmiya/items/5adc97ca1c3dd1c7d311)

### この記事で記載していること
`git commit`実行前に何がしかの処理を実行する

### 前提
– ターミナルから`git commit`を実行してコミットする

### 本題

https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF
を参照すると、

“`
フックスクリプトを有効にするには、Gitディレクトリの `hooks

元記事を表示

【Swift】割り算の商と余りが欲しい!!

# はじめに
私の今までの知識を使って実装します。

“`swift
let q = 10 / 3
let r = 10 % 3

print(“商: \(q), 余り: \(r)”) // 商: 3, 余り: 1
“`

まぁ悪くないですが、もっといい方法がありました。

# 実装
“`swift
import Foundation

let (q, r) = 10.quotientAndRemainder(dividingBy: 3)

print(“商: \(q), 余り: \(r)”) // 商: 3, 余り: 1
“`

# おわり
Swift知識が増えました

# 公式ドキュメント
https://developer.apple.com/documentation/swift/int/quotientandremainder(dividingby:)

元記事を表示

homebrew install時にwarningが出る’Warning: /opt/homebrew/bin is not in your PATH.’

# 今回の問題
homebrewインストールするために以下コマンドを打ったがwarningが表示されてしまう
“`zsh
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`

途中までは成功かと思われたが出力の途中でWarningが表示された
エラー内容一部抜粋
“`zsh
Warning: /opt/homebrew/bin is not in your PATH.
“`

# 対策
パスが通ってないのでパスを通してあげる
以下コマンドを打てば良い。
“`zsh
export PATH=”$PATH:/opt/homebrew/bin”
“`

その後以下のコマンドでバージョンが表示されればOK
“`
brew –version
“`

元記事を表示

OTHERカテゴリの最新記事