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

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

ReactNativeでOSや端末ごとに条件分岐してみた【Platformを用いて】

OSや端末ごとに条件分岐して値を変更したり、表示するテキストを変更する必要があったので、記載していきます。

https://reactnative.dev/docs/platform

を参考に進めていきます。

# 概要
### Platform.OS
![スクリーンショット 2024-02-10 6.58.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799713/3f041baa-d4b0-8133-3b74-a812205eae34.png)
– OSをenumで管理しています

### Platform.isPad
![スクリーンショット 2024-02-10 6.58.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799713/0c95ba39-2aa2-2fcc-2e86-08bf8582d0e1.png)
– iPadかどうかを、boolean型で返します
### Platform.sele

元記事を表示

iOS17.2のネットワーク共有はIPv6だけになっていた

Xで話題に上がったので調べてみたところ、iOS17.2のネットワーク共有ではIPv4通信は行われず、IPv6のみになっていた模様。

AppleCommunityでも話題に上がっていました。
どうやらiOS17.2ではIPv4アドレスがアサインされなくなった、とのこと。

https://discussions.apple.com/thread/255346180?answerId=259959698022

実際にiPhoneのネットワーク共有をonにしたところ、iPad上のIPv4の表示は192.0.0.2/32となっています。

![スクリーンショット 2024-02-15 1.52.41.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601755/f2312dde-637e-75b0-0cfa-68ea950fee92.jpeg)

Wiresharkで見てもインターネット通信はすべてIPv6で行われていることが確認できました。

なお、IP設定を手動にしてDHCPを使用しない場合、ネットワ

元記事を表示

【SwiftUI】ScrollView内のコンテンツがスクロールを必要とするまでスクロールを制限する(iOS16.4)

# はじめに
iOS16.4から`scrollBounceBehavior`が使用できるようになりました。
これはScrollViewだけでなく、Listにも使用できるようです。

# サンプルアプリ
ScrollView内のコンテンツが少ない時はスクロールできません。
![Simulator Screen Recording – iPhone 15 Pro – 2024-02-14 at 22.33.47.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/9741b78c-41d8-4a2a-311e-f994bde21b39.gif)

# 実装
“`swift
import SwiftUI

struct ContentView: View {
struct Item {
let id = UUID()
let color: Color
}

@State private var items = [Item]()

元記事を表示

【限界MAUI難民】MAUIに至る旅Vol.1 Browser APIで開いたアプリ内ブラウザ(SFSafariViewController)のDismissをハンドリング🚀💖【iOS】

# プロローグ 〜限界MAUI難民〜
Xamarinのサポートエンドに追い立てられて、MAUIへのダイブを決めた先駆者たち!
リゾート島だと思っていたら、ここはまさかの限界集落!?

正式リリースされた筈が、そこで見たのはバグの __”玉手箱(トレジャーボックス)”__ !?💔😂

~~Microsoftのプロダクトでさえ採用されてないって本当?
😱~~ウチらこれからどうなっちゃうの~~!?😭🚀💔

# 今日のお題:💖🚀iOS MAUIでアプリ内ブラウザがクローズされたのを検出できない問題、どうする?🤔💡✨

iOSで`Browser` API使ってアプリ内ブラウザ出したのはいいけど、ブラウザ閉じたの検出できない😱😱😱どうしよう〜、助けて〜😭💔

### 実行環境(前提条件)📚
– **.NET MAUI**:v8.0.3
– **Visual Studio 2022**:v17.x 以上
– **iOS SDK**:iOS 14 以上
– **Microsoft.Maui.Essentials**:v8.0.3

## (そもそも)Browser APIってなんだっけ?
.NE

元記事を表示

LicensePlistの実装方法[Swift]

# LicensePlistとは

『license-plistというCLIツールを実行すると、そのプロジェクトで依存しているライブラリを収集して、iOS設定アプリ上に載せられる形式のplist群を生成してくれます』(開発者記事抜粋)

リリースしたアプリにオープンソースのライセンスを表示させる実装方法です。
アプリの設定画面で企業で開発したなどで見ることができますが、個人アプリでも仕様したものは記載した方が良いです。
その際に必要なXcodeでの実装方法となります。
UIKitでもSwiftUIでも実装方法は一緒です。

アプリの設定画面を開くと『Licenses』と表示されるようになってタップすると使っているライブラリを全て表示してくれます。

アプリの設定画面に表示されるようになります

元記事を表示

【Swift】割り算の余りを求めたい

# はじめに
ちょー初歩的なことなんですけど、知らなくて焦ったことがあったので記事にしておきます。

# 何が起きたのか
私は割り算のあまりは`%`で求められると思っていたのですが、こんなエラーが発生しました。

“`
‘%’ is unavailable: For floating point numbers use truncatingRemainder instead
“`

あれ、`%`って使えなくなったの?って思ったんですが違いました。

`%`が使えるのはIntだけみたいです。

私はそれを知りませんでした。

では、DoubleやFloatなどの浮動小数点型ではどのように余りを求めるのでしょうか?

# 実装
### Int
“`swift
// ❌
func calcIntRemainder1(dividend: Int, divisor: Int) -> Int {
return dividend.remainder(dividingBy: divisor)
}
// ✅
func calcIntRemainder2(dividend: Int, div

元記事を表示

React NativeでiOSのExternal Link Account APIに対応する

## 🔰 はじめに
2022年3月あたりに、iOSのリーダーAppにおいてアカウント登録などを目的とする外部サイトへのリンクを設置することが可能となりました。
それに伴い、External Link Acccount APIというものを使用する必要があるのですが、React Nativeでの実装方法が調べても見つからなかったため、備忘録and誰かの参考になればと思い手順を書くことにしました。
なお、下記の手順の前にXcode側の設定が諸々必要なのですが、[詳細な公式ドキュメント](https://developer.apple.com/jp/support/reader-apps/)がすでに存在しているので、こちら参考にしていただければと思います!
今回はXcode側の設定が終わった後の、外部リンク用モーダルシートを開く方法のみ書くことにします!

## 🏁 この記事のゴール
React NativeのiOSアプリで:point_down_tone5:のモーダルシートを開く(以下`外部リンク用モーダルシート`とします)
オブジェクトプールで大量のオブジェクトを管理しよう!

![blog_2023_programmer_tech11 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3565926/705fd0fd-ec10-96b6-1506-e75dccf15c4c.jpeg)

こんにちは。トイロジック新人プログラマーのS.Gです。トイロジックでは毎年新人研修としてiosアプリを開発します。本記事では昨年リリースされた[『バクバクバック』](hhttps://apps.apple.com/jp/app/%E3%83%90%E3%82%AF%E3%83%90%E3%82%AF%E3%83%90%E3%83%83%E3%82%AF/id6450744561 “『バクバクバック』”)で大活躍したオブジェクトプールについて解説したいと思います。

# オブジェクトプールとは
私たちが開発したバクバクバックは、大量の敵から逃げながらクイモンにバク食いさせるというアクションゲームです。

そのため大量のオブジェクトを扱うことになるのですが、どのくらい大量かというと…

!

元記事を表示

Introduction To Combine Framework: Reactive Programming For iOS App Development

Reactive programming represents a paradigm shift in modern iOS application development. It has revolutionized how developers handle asynchronous data streams and events. Further, the significance of reactive programming in iOS app development cannot be underscored. It offers a more declarative approach to managing state and effects in sync with the complex, event-driven nature of today’s applications.

Enter the Combine framework. Developed by Apple to facilitate reactive programming in Swift,

元記事を表示

【SwiftUI】星の数で評価できるViewを作成する

# はじめに
映画評価や書籍評価など、評価系のアプリは意外と多いはずです。
AppStoreのような星の評価ができるViewを調べると、整数部分を星の数として、実装しているものが多くありました。

しかし、少数部分も反映できるViewはなかったので、考えてみました

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 Pro – 2024-02-12 at 18.37.14.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f3e502fb-68c4-0318-ff19-b879836399b2.gif)

# 実装
“`swift
struct ReviewView: View {
@Binding var rate: CGFloat

var rootWidth: CGFloat

var body: some View {
ZStack(alignment: .leading) {

元記事を表示

ReactNativeでアプリのシステム設定画面に遷移する

起動しているアプリに関わるシステム設定の画面へ遷移する方法を記載していく。

公式ドキュメントを参考にする。

https://reactnative.dev/docs/linking?language=typescript#opensettings

## 内容
`Linking`ライブラリーを用います。
`Linking`はアプリのリンクを操作するためのインターフェイスを提供しています。

### ライブラリーをインポート
“`tsx
import { Linking } from ‘react-native’;
“`

### アプリの設定画面に遷移する

“`tsx

元記事を表示

Découvrez les services IPTV premium sur MeilleurIPTV.

Découvrez les services IPTV premium sur MeilleurIPTV. Explorez une large sélection de chaînes, de films et de séries pour des expériences de divertissement immersives.

元記事を表示

【Swift】端末で設定されている週の始まりの曜日を取得する

# はじめに
設定→一般→言語と地域に進むと「週の始まりの曜日」を設定できます。

![スクリーンショット 2024-02-11 21.43.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3ea37cbe-7a0e-5688-27ee-aa357f44abcb.png)

カレンダー使用するアプリは、この設定によってバグが生まれる可能性があるので注意が必要です。

# 取得方法
“`swift
import SwiftUI

struct ContentView: View {
@State var firstDayOfWeek = Locale.current.firstDayOfWeek

var body: some View {
Text(firstDayOfWeek.rawValue)
}
}
“`

# 試してみる
### 日曜日に設定
|||
|-|-|
|![Simulator Screenshot – iPhon

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事