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

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

【ios 17】バッテリー寿命向上とエネルギー効率化

## バッテリー消費の最適化と省エネ設定

こんにちは。今回は、
ios 17について初心者エンジニア
に向けて、バッテリー寿命を向上させるための方法やエネルギー効率化の設定方法について解説します。

### バッテリー消費の最適化

バッテリー寿命を向上させるためには、バッテリー消費を最適化することが重要です。以下に、バッテリー消費を抑えるための設定方法を紹介します。

#### 地理的な位置情報の制限

ios 17では、地理的な位置情報の利用を制限することでバッテリー消費を減らすことができます。これにより、常に位置情報を利用しているアプリによるバッテリーの消耗を防ぐことができます。

以下のコードは、位置情報の利用を許可するかどうかをユーザーに尋ねる処理を行うコードの一例です。

“`
import uikit
import corelocation

class viewcontroller: uiviewcontroller, cllocationmanagerdelegate {

let locationmanager = cllocationmanager()

元記事を表示

SwiftUI流 リアルタイム表示

リアルタイムの日時を表示する記事をときどき見かけたので、SwiftUIしか知らない私なりのコードを残しておきます。

~~~swift
import SwiftUI

struct RealTimeView: View {
@State private var date = Date.now

private let timer = Timer.publish(
every: 1.0,
on: .main,
in: .default)
.autoconnect()

private let format = Date.FormatStyle(
date: .abbreviated,
time: .standard)

var body: some View {
Text(date, format: format)
.font(.title)
.monospacedDigit()

元記事を表示

【iOS】fastlane (or xcodebuild) で `TestFlight Internal Only` を使う

## はじめに

Xcode Cloud の登場など、 1st party の CD 環境も提供されている今、 fastlane への依存は少しずつ減っているかもしれません。
とはいえ、開発現場ではまだまだ活用されているツールかと思うので、今回は `TestFlight Internal Only` のビルドを fastlane を利用して作成する方法をご紹介します。

## そもそも `TestFlight Internal Only` とは?

WWDC 2023 にて発表された TestFlight の新しい機能です。[^1]
従来、TestFlight で配布するためのビルドは、内部テスターだけではなく、外部テスターへの配布や App Store への配信が可能なものを利用するしかありませんでした。
Xcode 15 以降、 `TestFlight Internal Only` の設定を行なってビルドを作成することによって、そのビルドは「内部テスター」への配布に限定できるようになります。
「社内関係者のみに配布したいケース」などにおいて、意図せず App Stor

元記事を表示

[Firebase] Firestoreの集約クエリ (count, sum, average) について

Firestoreの集約クエリ (aggregation queries) を使用すると、複数のドキュメントの統計的な操作が簡単に行えます。
具体的には以下の3種類のクエリがあります。

– count
– sum
– average

公式ドキュメントではSwiftでのFirestoreのcountクエリの使い方についての説明がありましたが、sumやaverageに関する具体的なSwiftでの実装例は見つかりませんでした。そこで、この記事ではこれら3つのクエリ(count、sum、average)をSwiftでどのように使うかについて解説していきたいと思います。

また、料金的なメリットもありますので、それについても解説していきます。

# 実装方法
説明するにあたって、このような構造のコレクションがあるとします。
“`yaml
– users # (Collection)
– user1 # (Document ID)
– name: “Mike”
– age: 10
– user2
– name: “Takeshi

元記事を表示

SwiftLintのオレオレカスタムルール一覧

SwiftLintの記事はシリーズになっています。
記事を順番に読み進めると、SwiftLintを使いこなせるようになります。

– [Swiftの静的解析ツール「SwiftLint」のセットアップ方法](https://qiita.com/uhooi/items/bf888b53b4b8210108aa)
– [SwiftLintの全ルール一覧(Swift 4.2版)](https://qiita.com/uhooi/items/7f5d6cf2b240f60ba1ed)
– [SwiftLintで追加・変更・廃止されたルールまとめ(Swift 4.2→5.1.2版)](https://qiita.com/uhooi/items/8e9767c2e746f4171ded)
– [SwiftLintで追加・廃止されたルールまとめ(Swift 5.1.2→5.3.1版)](https://qiita.com/uhooi/items/10b9e49d3bd6f1344cad)
– SwiftLintのオレオレカスタムルール一覧 __←イマココ__
– [SwiftLintのAnalyzeを

元記事を表示

【SwiftUI】SpriteKitでうんこの雨を降らす

# はじめに
SpriteKitを今まで触ったことがなかったので入門してみました。
実用的なのを作っても面白くないのでうんこを降らせてみました。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-04 at 22.38.33.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8e68aa88-e1ae-064c-5d1e-bcbd17d9897c.gif)

# フリーのうんこ
今回はこちらのうんこを使用します。

![unchi_character.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8c99c430-393b-57f9-37bc-d548cc4e2a40.png)

https://www.irasutoya.com/2015/08/blog-post_385.html

# やりかた
① `SpriteK

元記事を表示

【Swift】ジェネリクスでよく使記号&意味一覧

# 目次
[1.ジェネリクスで使用する大文字アルファベット](#1-ジェネリクスで使用する大文字アルファベット)
[2.実例](#2-実例)
[3.参考サイト](#3-参考サイト)

# 1. ジェネリクスで使用する大文字アルファベット
関数シグネチャを確認すると時々??となるジェネリクスでよく使う記号ありますよね?(EとかTとか、、)
あれなんなんでしょうね?
そんな時に便利な表を書いておきます。

※シグネチャ…メソッド名、パラメータの型、数、順序、戻り値の型等で構成された、メソッドを識別するための情報

# 2. 実例
| |略 |意味 |使用シーン |
|—|—|—|—|
|T |Type |タイプ |汎用的に利用。とりあえず迷ったらこれ |
|E |Element |要素 |配列の要素などに使われる |
|K |Key |キー |連想配列やマップのキー等 |
|V |Value |値 |配列の値や結果 |
|N |Number |数値 |数値を表す(個数や最大値等) |
|A |Array |配列 |J

元記事を表示

Next.js Native使ってみた

# Next.js Nativeってなんぞや❓
[Capacitor](https://capacitorjs.jp/docs) と呼ばれるwebアプリをクロスプラットフォーム化するライブラリを使って、
Next.jsをネイティブアプリ化できるようにしたものみたい👀

https://nextjs-native.com/

Githubにてスターターキットも用意されてたので、これを試す
https://github.com/RobSchilderr/nextjs-native-starter

とりあえず、Githubからクローン

“`bash
$ git clone git@github.com:RobSchilderr/nextjs-native-starter.git
Cloning into ‘nextjs-native-starter’…
remote: Enumerating objects: 3127, done.
remote: Counting objects: 100% (747/747), done.
remote: Compressing objects

元記事を表示

[Swift] withUnsafeContinuationとexecutorに関するバグ

# TL;DR

「最初の行からasync呼び出しがあるisolated-async function」にかかる、executorへのhopを省略する最適化が`@_unsafeInheritExecutor`を想定できていない問題

apple/swiftに報告済み

https://github.com/apple/swift/issues/69659

# 検証環境

– Swift compiler version info: swift-driver version: 1.87.1 Apple Swift version 5.9 (swiftlang-5.9.0.128.108 clang-1500.0.40.1)
– Xcode version info: Xcode 15.0.1 Build version 15A507
– Deployment target: arm64-apple-macosx14.0

# 実験コード

“`swift
@MainActor
func doSomething() async {
await withUnsafeContinu

元記事を表示

【SwiftUI】LinkPresentationを使ってTwitterの様なタイトル&OGP画像を簡単に表示する

# はじめに
昨日、「LinkPresentationを使ってURLからタイトルを取得する」という記事を書きました。

https://qiita.com/SNQ-2001/items/1abd1e1bed87d4e02a5f

今日はLinkPresentationを使ってタイトル&OGP画像を簡単に表示させてみます。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-03 at 22.23.17.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7abd068a-7eb8-0c68-069a-8c40e65eba00.gif)

# 実装
“`ContentView.swift
import SwiftUI
import LinkPresentation

struct ContentView: View {
@State private var url = “”

@State priv

元記事を表示

swift-dependenciesのMacroでいろいろビミョかった問題が解決されてた

3週間前にDependenciesのバージョンが1.1.0に更新され、マクロが使えるようになりました。これにより、以前は少し微妙だなと感じていた点がマクロによって解決されていたので、今回はそれについて解説していきます。

https://github.com/pointfreeco/swift-dependencies

:::note warn

今回追加されたマクロはprotocolベースのDIには使用できません。最初にstructベースのDIがなぜ推奨されているのか、から解説します。知っている方は[1.1.0以前のDependencies](#1-1.1.0以前のDependencies)まで飛ばしてください。
:::

# なぜstructベースのDIが推奨されているのか
前提として、swift-dependenciesではprotocolベースのDIではなく、structベースのDIが推奨されています。

“`Swift
struct APIClient {
var fetch: @Sendable (_ query: String) async throws -> R

元記事を表示

【SwiftUI】ScrollViewでScrollのOffsetに応じてViewを表示したり隠したりしてみた!

こんにちは。[ymurao2](https://twitter.com/ymurao2)です!
ScrollViewの上部でスクロールに応じてぴょこぴょこするあれの実装が難しかったので、ご紹介します!

# 成果物
![Simulator Screen Recording – iPhone 15 Pro – 2023-12-03 at 13.39.03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529173/10888886-8083-ee7a-c57e-955c600d4bbd.gif)
※ この画面なんて呼ぶんですかね :thinking:

# 実装
お急ぎの方のために全体像です。
“`swift:InteractiveStickyHeaderScrollView.swift
public struct InteractiveStickyHeaderScrollView: View {
@State var offset: CGFloat = .zero
@State va

元記事を表示

既存プロジェクトへのデザインシステム導入の取り組み

# はじめに
この記事は[and factory.inc Advent Calendar 2023](https://qiita.com/advent-calendar/2023/andfactory) 3日目の記事です。
昨日は @hagmon さんの「[Adjust友達紹介プログラムのTips](https://qiita.com/hagmon/items/188a5ffc9c475e3b892d)」でした。

現在、担当している既存アプリでUIをデザインシステム化しているのですが、
iOSエンジニアとして対応していることを備忘がてら記事にしたいと思います。

# なにを書くか

– 書くこと
– デザインシステム化するうえでの対応したこと
– デザイントークンをiOSプロジェクトに組み込む大枠の流れ
– コンポーネント化の取り組みについて
– やってみての所感
– 書かないこと
– デザインシステムの詳細な説明
– iOSに組み込むための詳細な変換処理の実装(`json` → `xcassets`)

# デザインシ

元記事を表示

Merakiで行う家庭モバイルデバイス管理

# はじめに
:::note info
この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2023 の 3日目として投稿しています。
:::

– 2017年版: https://qiita.com/advent-calendar/2017/cisco
– 2018年版: https://qiita.com/advent-calendar/2018/cisco
– 2019年版: https://qiita.com/advent-calendar/2019/cisco
– 2020年版: https://qiita.com/advent-calendar/2020/cisco
– 2020年版(2枚目): https://qiita.com/advent-calendar/2020/cisco2
– 2021年版: https://qiita.com/advent-calendar/2021/cisco
– 2021年版(2枚目): https://qiita.com/advent-calendar/2021/cisco2
– 202

元記事を表示

【SwiftUI】LinkPresentationを使ってURLからタイトルを取得する

# はじめに
以前にURLからWebページのタイトルを取得するという記事を書きました。
https://qiita.com/SNQ-2001/items/7af62a202a6fbbf5167b

しかし、より良い方法を見つけたので記事にしておきます。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-02 at 23.00.26.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/637629f5-dc2e-a415-5892-5d8a2f03ec3c.gif)

# 実装
“`swift
import SwiftUI
import LinkPresentation

struct ContentView: View {
@State private var url = “”

@State private var metadata: LPLinkMetadata?

var

元記事を表示

スマホアプリ開発を始めたい自分がMacBook Pro 14インチ(M3 PRO)を選んだ理由

初投稿です。

これまで組み込みやWindows開発を経験してきましたが、ふと副業でスマホアプリ開発をやってみたい!と思い立ち開発用にMacを購入することになりました。

この記事では
* なぜMacなのか?
* なぜBookなのか?
* なぜM3 PROなのか?

について私なりに考えたことをご紹介します。
ベンチマークやレビューは既にたくさん記事があると思うので、この記事では初心者の視点で選ぶ際に考えたことを書いてみます。

似たような境遇の方がいらっしゃれば少しでも参考になれば幸いです。

## 購入したモデル
私が購入したのはMacBook Pro 14インチ(Late 2023, M3 PRO)です。

* プロセッサ: M3 PRO(11コアCPU, 14コアGPU)
* RAM: 18GB
* SSD: 1TB

プロセッサ、RAMはM3 PROとしては最低構成、SSDは最低構成の512GBからアップグレードしました。

M2世代と比べるとM3とM3 MAXの進化が目覚ましかったため、やや影の薄い感のあるM3 PROですが、個人的にはコスパは決して悪くないように思っていま

元記事を表示

Appleからの「App Analytics Weekly Summary」メールの見方についてChatGPTに聞いてみた

## はじめに

ずっとAppleから送られてくる「App Analytics Weekly Summary」の内容がよく分からなくてモヤモヤしていました。私の検索スキルが低かったのもあると思うのですが、ズバリの回答書いてる記事探せなかったんですよね。公式ドキュメント見てもメールの内容については見つけられず・・・。

そうだ!こんな時こそChatGPT聞いてみよう!

という結果の記事です。多分あってます。自己責任でよろしくお願いします。

## 質問

app analytics weekly summaryのimpressions, app units, proceeds, sessions, crashesの意味をそれぞれ教えて

## ChatGPTの回答

以下に「App Analytics Weekly Summary」で提供される指標の意味を説明します。

### Impressions
**インプレッション数**は、あなたのアプリがApp Storeの検索結果、特集セクション、トップチャートなどで表示された回数を意味します。この指標はアプリの可視性や認知度を示して

元記事を表示

相対的な日時の一覧(Swift)

## はじめに

本記事は [SwiftWednesday Advent Calendar 2023](https://qiita.com/advent-calendar/2023/swift-wednesday) の3日目の記事です。
昨日は @ojun_9 さんで [Xcode 15のPreview Macroにおける依存注入について](https://zenn.dev/dena/articles/9165f8c4e12acc) でした。

`date.formatted(.relative(presentation: .named))` を使うと、「32 秒前」や「4 週間前」のように日時を相対的に表せます。
具体的な日時の範囲と文言が気になり、調べて一覧にしたので紹介します。

## 環境

– OS:macOS Sonoma 14.0(23A344)
– Swift:5.9

## 相対的な日時の一覧

相対的な日時の一覧です。

– 「0 秒前」を「2023/12/01(金) 17:11:52」とする
– 未来の日時は使用頻度が低いため「1 秒後」のみ確認している
– 3

元記事を表示

【iOS】Sign in with apple 初回以降のサインインでユーザー情報を取得できない

# 状況
SwiftUIにて、Signin with Appleのトライしていたところ、初回サインインではユーザー名やemailを取得できたのですが、それ以降のサインイン後はnilが返ってくるという現象が起きました。調べた結果を備忘録として書いておきます。

# 試したコード
こんなコードで試しました。
“`swift: AuthScreen.swift
struct AuthScreen: View {
@State var givenName: String?
@State var familyName: String?
@State var email: String?

var body: some View {
VStack {
Text(“givenName: \(givenName ?? “is nil”)”)
Text(“familyName: \(familyName ?? “is nil”)”)
Text(“email: \(email

元記事を表示

XcodeでARkitを使って3DオブジェクトをAR空間に配置する

# やりたい事
Xcodeで開発したARkitを実機ビルドし、実機でAR空間に3Dオブジェクトを配置する
とりあえず初歩的な内容でデフォルトコードを公開。少し中身をいじって遊んでみる
(初期で配置されるオブジェクトを球体に変更)

# 環境
| デバイス | 環境 | 備考 |
|:-:|:-:|:-:|
| Mac | Ver 13.6.1 | macos Ventura |
| Xcode | 15.0.1 | 公式からダウンロード |
| ios| 16.6 | |

# Xcode立ち上げてプロジェクト作成する

1:Create New Projectでプロジェクト作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/75ae4473-80c9-a826-9c98-170cbec08f46.png)

2:Augmented Reality Appを選択しNextで作成

![image.png](https://qiita-image-

元記事を表示

OTHERカテゴリの最新記事