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

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

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

# はじめに
この記事は[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 さんでした。

`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 年より前は確認していない

|日時の範囲 / ロケール|`ja_JP`
日本|`en_US`
アメリカ|
|:–|:–|:–|
|1 秒後|1 秒後|

元記事を表示

【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-

元記事を表示

インターフェースに最適化する人

## インターフェースとはなにか?
わたしは中学生向けの英和辞典をもっているので、それを元に話をしたい。
インターフェースとは、表面に施された工夫・装飾のことだ。(英和辞典を開かず適当にそれっぽいことを書いた虚言家です。)

## インターフェースに最適化するとは?
誰にでも使える優れたデザインをユニーバーサルデザインなどと総称するらしい。
賞もある。
わたしの頭の中のドーラが「(その賞)欲しい!!」と叫んでいるが、ユニバーサルデザインで賞をもらうなど蛮族のわたしには途方もない宝である。
諦めよう。

優れたデザインというのは、iOSアプリに限らずだが、細かな説明無しに見てわかることが、良いとされている。
画面上に、ボタンがボタンとわかるように、最適なサイズかつ最適な位置で配置されていることは、設計側も消費者側にとっても優れたデザインであると言える。

## 優れたインターフェースへの最適化とは?
私達の身の回りには、優れたインターフェースが溢れかえっている。
全て先人たちの叡智のなせる技だ。
しかし、ここにひとつ、ここまで読み終えた人が「それは問題ですか?」と思うような、自己矛盾的な

元記事を表示

Compose MultiplatformでいつものQiitaビューアを作ってみた

この記事は[NTTテクノクロス Advent Calendar 2023 シリーズ1](https://qiita.com/advent-calendar/2023/ntt-tx)の2日目です。

こんにちは、NTTテクノクロスの戸部@etctaroと申します。

普段は社内でモバイルアプリ開発関連の技術支援や社内向けのノウハウ記事執筆、社内研修講師活動、社内コミュニティ活動などを行なっています。

毎年恒例のアドカレですが、今年も私はComposeで記事を一本を書きました。

今回のお題は「Compose Multiplatform」です。

★ところで、記事の前に宣伝です。

先日まで開催されていた技術書典15では当社の仲間と書籍を出しています。
今回私が執筆した本は以下の通り。

– [ゼロから始めるFlutterアプリ開発入門 2023.11版](https://techbookfest.org/product/5925951072370688)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

Dynamic Islandにアニメーション(風のパラパラ漫画)を表示

[qnote Advent Calendar 2023](https://qiita.com/advent-calendar/2023/qnote) の2日目です。

## はじめに
iPhone14ProからDynamic Islandが搭載されてiPhone15では全機種に搭載されています。

※Dynamic Islandはこんな感じ
![38f1a46c5b3ab31bb0e23574e3d87669.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149731/f4ef76d8-f02d-4048-82bb-837aef13fc94.png)

iPhone15に変えてDynamic Islandがあるので何かできないかと思っていたらMacのステータスバーに[Runcat](https://kyome.io/runcat/)なるものがあるのを思い出し似たようなものを表示させたり常駐できないかなと模索してそれっぽいものができたので記事にしました。

## 出来上がったもの
![DynamicIsl

元記事を表示

iOSアプリのリサインに失敗しないために気をつけること

この記事は[スタンバイ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/stanby “Advent Calendar 2023”)の2日目の記事です。
昨日は、[@weno](https://qiita.com/weno)さんの記事でした。

# リサインに至る経緯
私は2023年12月現在、求人検索サービスを展開するスタンバイでQAグループに所属しています。
今年、dev版iOSアプリのipaファイルをリサイン(resign、リザイン、再署名)する機会に遭遇しました。

リサインはアプリを改竄する行為となりますので、自社アプリのアップデートなどの動作検証の目的だけで実施しましょう。

プログラマティックなQAスタッフはそう多くないはず、とは思いますが、リサイン自体は簡単なプログラムで動きますので、存在を知っていると、いざというときに役立つかもしれません。(たいてい、いざというときは来ないものなんですけどね。。。)

今回の目標は、リサインの罠にハマらず、スタイリッシュにリサインすることです。
リサインの泥濘み

元記事を表示

[Swift] Objective-Cのcompletionをasyncで呼ぶ機能はexecutorを引き継ぐ

# 事前知識
## Objective-Cのcompletionをasyncで呼ぶ機能

https://developer.apple.com/documentation/swift/calling-objective-c-apis-asynchronously

https://github.com/apple/swift-evolution/blob/main/proposals/0297-concurrency-objc.md

“`objc
– (void)signData:(NSData *)signData
withSecureElementPass:(PKSecureElementPass *)secureElementPass
completion:(void (^)(NSData *signedData, NSData *signature, NSError *error))completion;
“`

のようにObjective-Cで定義されたcompletion handler付きのメソッドを

“`swift
@objc func si

元記事を表示

【SwiftUI】3Dマップと2Dマップを切り替える(iOS17)

# はじめに
iOS17のMapKitに関する記事をいくつか書きました。
新規のはまだまだあるので記事にしていきます。

今回は3Dと2Dの切り替えです。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-01 at 22.28.25.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/9bb742cb-3d08-50d2-6481-ca0af686743c.gif)

# 実装
“`swift
import SwiftUI
import MapKit

struct ContentView: View {
// 東京駅の座標
@State private var position: MapCameraPosition = .region(.init(
center: .init(latitude: 35.681236, longitude: 139.767125),
s

元記事を表示

Xcode でのコメントアウトの仕方まとめ

# はじめに

この記事は iOS Advent Calendar 2023 2 日目の記事になります。

ここでは Xcode のコメントの書き方についてまとめていきます。

## なぜコメント?

コメントを笑うものはコメントに泣きます。

# 行単位のコメント

行単位のコメントは、コメントをしたい箇所に `//` をつけてコメントを書きます。

“`swift
// ここにコメントを書く
func hoge() {
“`

# ブロックコメント

複数行のコメントを書く際、まとめて書いた方が読みやすくなります。
その場合、ブロックコメントを使うと良いでしょう。
ブロックコメントは、`/*` と `*/` でコメントを囲むことによって、複数行のコメントを書くことができます。

“`swift
/*
ここに
複数行の
コメントを書く
*/
func hoge() {
“`

# Document Items

これらのコメントは、コードの読みやすさを向上させ、開発プロセスを効率化するために役立ちます。
特に、大きなプロジェクトやチームでの作業において、これらのコ

元記事を表示

会社の旅行を最高に楽しくするためにアプリ作った

# 挨拶
TDCソフトのアドベントカレンダー2023年の1日目を飾らせていただく佐藤です!よろしくお願いします!

# はじめに
先日会社のイベントとして部の旅行があり、その際旅行を盛り上げる要素としてiOSアプリを開発しました。
そこで、この記事では開発したアプリについて記載していきます。
(旅行先はマザー牧場です。)

# アプリの目的
– 参加者が旅行先でのコンテンツをアプリを通して楽しんでいただく
– 参加者同士で思い出の共有ができる

# アプリを使用することによる狙い
旅行先がマザー牧場ということで、マザー牧場にいる動物と触れ合ったり、バンジー・ジップライン等のアクティビティ、マザー牧場内のイベントを参加者に楽しんでいただく予定でした。
その際、マザー牧場にあるコンテンツにプラスして、アプリを使用することでより楽しいコンテンツにする狙いでアプリの開発を行いました。

# アプリの概要
– 幹事の定めたお題に沿った写真を撮影し、アプリに投稿する。
– (お題の例:うさぎの写真を撮る、バンジージャンプに挑戦する、こぶたのレースで1位を当てるetc…)

元記事を表示

【iOS】新規プロジェクトにSPMマルチモジュールを採用する際の手順書

## 目的
SPMマルチモジュール化の手順を整理すること
備忘録

## ゴール

以下のような、`SPMマルチモジュール構成`を採用したプロジェクトを作れるようになること

## 前提
SwiftUIベースの`初期プロジェクト`作成
今回は初期プロジェクトを`SPMViewTranslation`とします

## 手順

### パッケージを生成 (1/4)

– [ ] パッケージ用のフォルダを作成 (`SPMViewTranslationPckage`)
– [ ] フォルダをパッケージ化

“`.bash
$ cd ~~~~/SPMViewTranslation
$ ls
SPMViewTranslation.xcodeproj SPMViewTranslationUITests
SPMViewTran

元記事を表示

[Swift] isolatedなasync functionからnon-isolatedなasync functionを呼び出した時は必ずActorから出る

# TL;DR

**Swift5.7以降では**

“`swift
@MainActor
func isolatedFunc() async {
await nonIsolatedFunc()
}

func nonIsolatedFunc() async {
// ここはMainActorではない
}
“`

**Swift5.6以前では**

“`swift
@MainActor
func isolatedFunc() async {
await nonIsolatedFunc()
}

func nonIsolatedFunc() async {
// ここはMainActor

try? await Task.sleep(nanoseconds: 100)

// ここはMainActorではない

}
“`

参考

https://github.com/apple/swift-evolution/blob/main/proposals/0338-clarify-execu

元記事を表示

[Swift] VaporをDockerでビルドしようとするとインクリメンタルビルドが無効になる件

最近いろいろあってVaporに入門しているのですが、Dockerでビルドしようとするとインクリメンタルビルドが無効になって、ビルド時間が余計にかかってしまうという問題が発生しました。

Dockerコンテナは起動する度に、ファイルシステム上のファイルが新しい作成日時、最終変更日時などのメタデータを取得してしまい、Swiftのコンパイラがファイルがすべて変更されたと認識してしまうため、インクリメンタルビルドが無効になるみたいです。

どうやら解決策があるようなので、忘れないように記事にします。

# 解決法
Dockerfileにあるswift packageコマンドを使っているRUN命令すべてに以下の文字を添えることでキャッシュされたものが使われるようになります。

“`
–mount=type=cache,target=/build/.build
“`

全体のDockerfileはこのようになりました。

“`Dockerfile
# ================================
# Build image
# =====================

元記事を表示

SwiftUIで一覧画面から詳細画面へ遷移後、データを更新して一覧画面に戻るとちゃんと更新されたデータが反映される実装例

[株式会社Never](https://neverjp.com/)のshoheiです。

株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。
https://neverjp.com/contact/

弊社のアプリ開発は`Flutter`を利用していますが、PJによってはiOSネイティブで開発しています。そこで得た知見を共有します。

本記事は新しい発見とかではないですが、誰かの悩みを解決できるものであれば幸いです。

# 概要

メモアプリ等でよくある、一覧画面から詳細画面へ遷移後、データを更新して一覧画面に戻るとちゃんと更新されたデータが反映される実装例を紹介します。

今回紹介するコードはこちらにまとめてます。
https://github.com/never-inc/iOSAdventCalendar2023

# 実装例のアプリ

元記事を表示

OTHERカテゴリの最新記事