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

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

【iOS】個人アプリの大改修に立ち向かってみた。

# はじめに
この記事では、過去に開発したiOSアプリの大規模アップデートについての経験を共有します。特に、なぜこのタイミングでアップデートを行うことに決めたのか、開発プロセス、アップデートのリリースとその影響について焦点を当てています。自分の直面した課題とその解決策について詳述し、同様の状況に直面するかもしれない読者の方の参考となれば幸いです。
# 背景
## 改修前のプロダクト情報
### 開発環境
– 初回リリース:2018年
– 最終アップデート:2020年9月
– Minimum iOS Version:11.0
– プロダクトの規模感:小さい

### **改修を決意した理由**
リリース時に使用した広告SDKバージョンのサポート終了により、アップデートが必要となり、大規模な改修を決意しました。

# 改修方針
継続的なアップデートを行うための環境を整えることを目指し、以下の改修方針を決定しました。

### アーキテクチャ
– **MVVM**
– 選定理由
– 継続的なアップデートを行うため、責務分離を行いたい。
– 自分自身がM

元記事を表示

【iOS】react-native-webviewのスクロール速度が微妙だっのを修正した

React Nativeアプリを作っているときにiOSのWebViewのスクロール速度が遅いことに気がついた。
指でフリックしても全然滑らない。
同じサイトをSafariで表示させて比べてみても、スクロール量が全然違う。

### UIWebviewの設定値の問題だった
解決策を検索していてたどり着いた記事がこちら。

https://qiita.com/TechMeetMeet/items/44ccc4cb8ce2504091cd

WebView内のscrollViewのデフォルトの設定値が原因らしく、プロパティの変更で対応できるとのこと。

> 以下のようにするだけでスクロールの滑りがUITableViewのデフォルトと同等になります。
> “`
> self.webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal
> “`

### react-native-webviewで適用するには?
なるほど、ネイティブコードでの修正方法は分かった。ではreact-native-webviewで

元記事を表示

【UiPath】iOSショートカットからジョブを実行してみた

みなさん、こんにちは。:santa:

UiPathのiOSアプリでOrchestratorがあるのは皆さんご存じでしょうか。
![IMG_7224.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654526/1b8fb1c5-ff74-4d31-eda5-bc0859dfaae6.png)

このアプリはiPhoneからOrchestratorの操作ができるアプリです。
スクショを見ると、ダッシュボード、プロセス、ジョブ、トリガー、、、などさまざまな機能にアクセスが可能です。(詳しくは使ってみてね~)
![IMG_7228.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654526/4bc2ab28-88dc-accd-8ff3-43c3c52838aa.png)

今回はiOSアプリOrchestratorから、iOSショートカットにジョブを登録できたので、
iOSショートカット内の「オートメーション」を利用

元記事を表示

iPhoneで動物を検出する

iPhoneやiPadのカメラ、画像から犬と猫を検出できます。
![inu.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/a740a9a5-aef9-01a5-8e68-7f4c92d763a5.jpeg)

“`swift
let request = VNRecognizeAnimalsRequest()
let handler = VNImageRequestHandler(cgImage: cgImage)
do {
try handler.perform([animalRequest])
guard let results = animalRequest.results else { return }
for result in results {
let label = result.labels.first?.identifier // “Dog” or “Cat”
let box = result.boundingBo

元記事を表示

【SwiftUI】Chartsをまだ使ったことがなかったので株価アプリのUIっぽいの作って入門してみた1

# はじめに
iOS16から使えるようになったChartsをまだ使ったことがなかったので、iPhoneに標準で入ってる株価アプリのUIっぽい感じのものを作ってみました。
ほぼ同じのクローンみたいなの作ろうと思ったんですけど、難易度高くて諦めました。

# サンプルアプリ
今回作ったのはこんな感じ
![simulator_screenshot_F5254B35-F7E3-435F-BF3F-E81A558ED637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5e7ce94e-e0db-4e24-42d2-96833c937c89.png)

本当はタップした日時の株価が表示されたらいい感じだったんですけど、むずくて断念しました。
そのうちやります。

# 準備
今回、日付を扱うので軽くDate拡張を作成しました。
これはメインではないので適当な感じです。
“`swift
extension Date {
init(year: Int, month: Int, day: Int

元記事を表示

【Unity】モバイルアプリ上で GPU 負荷を計測する

この記事は [Unity Advent Calendar 2023](https://qiita.com/advent-calendar/2023/unity) の17日目の記事です。

# はじめに

モバイルプラットフォーム (iOS / Android) では Unity 標準の [GPU Usage Profiler module](https://docs.unity3d.com/2022.3/Documentation/Manual/ProfilerGPU.html) のサポートには次のような制限があり、GPU 負荷計測を行うにはサードパーティー製のプロファイリングツールを使う必要が出てくるかと思います。

|Platform|GraphicsAPI|Status|
|:-:|:-:|:-:|
|**Android**|OpenGL|Supported on devices running NVIDIA or Intel GPUs.|
||Vulkan|Not supported|
|**iOS**|Metal|Not supported. Use XCode’s GPU

元記事を表示

iOS デバイス を Intune へ 登録する(デバイス登録)

# はじめに
iOSデバイス(iPhone / iPad) を Intune へ登録するための手順です。

# 事前準備

## ① Microsoft Entra テナント の手配
以下の記事を参考に、Microsoft テナント を手配して、グローバル管理者 を作成します。
既に手配済みの テナント は、グローバル管理者 の権限を所持していれば構成できます。

https://qiita.com/carol0226/items/e560688f2b6a93e97126

:::note info
カスタムドメインは、構成されていても いなくても どちらでも構いません。
:::

## ② 本作業で必要なライセンス
“Intune” ライセンス は、デバイスを Intune に登録する際、および Intune の機能を利用するために必要です。

Intune を包含する上位のライセンスでも構いません。
※ EMS E3 / E5 や、Microsoft365 E3 / E5 などには、Intune の ライセンス が含まれます。

以下の記事に、テナントでライセンスの選び方や 購入の

元記事を表示

iPhoneやiPadを専用端末として使うには?

[1日目の記事](https://qiita.com/YusukeIwaki/items/ec6e63dc37bd52c5f6e1)では、Androidを専用端末として使うには、Android Management APIのKIOSKを使うのがお手軽ですよ、というお話を書きました。ではiOSではどうすればよいのでしょうか?

![貼り付けた画像_2023_12_17_14_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74571/f255b224-2785-09cb-2272-617f4f1bba2c.png)

世の中を見渡してみると、イオンのスーパーのレジゴー端末はAndroidですが、最後の決済完了を受けてるのはiPadですね。小規模なお店だと、レジ端末でiPadやiPodを使ってるのを見ることも増えてきましたね。ああいうiOSデバイスはどのようにして作っているのでしょうか?

## 「シングルアプリモード」という機能がある

https://support.apple.com/ja-jp/

元記事を表示

iOS デバイス を Intune へ 登録する(事前作業:MDM プッシュ証明書)

# はじめに
Microsoft Intune で iOS/iPadOS および macOS デバイスを管理するためには、Apple MDM プッシュ証明書が必要で、毎年 証明書を更新する必要があります。

この記事では、Microsoft Intune で Apple MDM プッシュ証明書をアップロードして更新する手順を紹介します。

【公開情報:Apple MDM プッシュ証明書を取得する】
https://learn.microsoft.com/ja-jp/mem/intune/enrollment/apple-mdm-push-certificate-get

:::note info
なお、手順を見ると 多くのステップがあるように見えますが、一般的な証明書の作成と考え方は一緒です。

(おおざっぱな作業としては、以下を実施しているだけです)
1. Intune 管理センター で CSR を発行
1. Apple Push Certificates Portal へ CSR をアップロードし、証明書を発行
1. 証明書を Intune 管理センターへアップロード
:::

#

元記事を表示

【SwiftUI】LazyVStackのonAppearについて調査した

こんにちは。[ymurao2](https://twitter.com/ymurao2)です!
`ScrollView` + `LazyVStack`で縦に長い画面を実装しているとき、`VStack`と`LazyVStack`の使い分けについて悩むことが少なからずあったので、調査しました

:::note info
動作環境
Xcode15.0.1
:::
以下のような画面で調査しました
![CleanShot 2023-12-17 at 14.40.14.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529173/4cb0fd54-5ce3-ae81-1325-9f63ddab7a57.gif)

調査コード
“`diff_swift
ScrollView {
+ // ここと
LazyVStack {
+ // ここと
LazyVStack {
ForEach(0..<25, id: \.self) { i in

元記事を表示

【Unity】WebGL開発ハマりポイント

本記事は [オルトプラス Advent Calendar 2023](https://qiita.com/advent-calendar/2023/altplus2023) の12/17の記事です。

# はじめに
こんにちは!オルトプラスでクライアントエンジニアをしている渡辺です。
約1年半ほどUnityでWebGL向けのゲーム開発をしております。
今回はWebGL開発中に遭遇したハマりポイントとその解決方法についてご紹介したいと思います。

# 概要
– 背景を透過させたい
– iPad判定がされない
– キャッシュが残ってアプリが更新されない
– iOS対策
– サウンドが再生されない

# 詳細

### 背景を透過させる
Webページの上に別のページのWebページを重ねて表示させたい場合があります。
さらに重ねる方のページは元々表示していたページより小さく表示する場合は少し工夫が必要です。

[Swift] 文字列補完 使ってますか?

# もちろん、使ってますよね。

Swiftの文字列補完とは、以下のように、文字列リテラルに変数や式を埋め込んで文字列を生成できる便利な記法です。_([公式ドキュメント](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/stringsandcharacters/#String-Interpolation)から例を引用)_

“`swift:String Interpolation(公式ドキュメントから引用)
let multiplier = 3
let message = “\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)”
// message is “3 times 2.5 is 7.5”
“`

でも、Swiftの文字列補完は、Pythonの[フォーマット済み文字列リテラルのように](https://docs.python.org/ja/3.8/reference/lexical_analysis.html

元記事を表示

【SwiftUI】Please adopt containerBackground APIでウィジェットが表示されない(iOS17)

# はじめに
iOS17でウィジェットを実行したら以下のような文がウィジェットに表示されました。

`Please adopt containerBackground API`

![IMG_4889.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f6322600-de97-0d72-ae73-fd100394082b.png)

日本語にすると「containerBackground APIを採用してください。」らしいです。

全く表示されないのはまずいです。高速で対応します。

# 実装
“`swift
extension View {
// ウィジェットのbackgroundを設定する
@ViewBuilder
func widgetBackground(_ style: some ShapeStyle) -> some View {
if #available(iOSApplicationExtension 17.0, *) {

元記事を表示

iPhoneアプリをiPad対応するノリでMac対応しよう【SwiftUI】

今回は「iPhone/iPadアプリを超低コストでMac対応する方法」と「その次のステップ」について話します。

## 前提
– アップデートを重ねて成熟したiPhone/iPadアプリがある
– SwiftUIを採用した一般的な構成のアプリ
– Macアプリ開発は未経験

![iPhoneアプリ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564662/369b777e-6704-a404-b7a8-73c304a5e72a.png)

## 「iPhoneアプリをiPad対応するノリ」
iPhoneアプリは`Supported Destinations`に`iPad`を追加するだけでiPadで動作します。ただそのままだと「使い辛いiPadアプリ」になってしまいます。「使い辛くないiPadアプリ」にするためには(多くのケースにおいて)少量の改修で十分です。その少量の改修を実施した状態でApp StoreにリリースしているiPadアプリは沢山あります。それを「iPhoneアプリをiPad対応するノリ」と呼ん

元記事を表示

プライベートリポジトリのRelease AssetsにXCFrameworkをホストして、Swift Package Manager・CocoaPodsで配布する

:::note info
この記事は [ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo) Vol.8の16日目の記事です。
:::

こんにちは。株式会社ZOZO 計測プラットフォーム開発本部 計測アプリ部 iOSブロックの[@na9ain](https://twitter.com/na9ain)です。

本記事では、GitHubのプライベートリポジトリのRelease AssetsでXCFrameworkをホストして、Swift Package Manager・CocoaPodsで配布・利用する方法を紹介します。

# はじめに

XCFrameworkをサーバー上でホストする必要性が生じる典型的な例は、XCFrameworkに含まれるファイルのサイズが100MBを超えるときです。

分かりやすさのために、このリポジトリを例として挙げます。

https://github.com/thenagain/opencv-xcframework

このリポジトリではSwift Package Man

元記事を表示

SwiftUIを使って10日でSNSアプリをリリースしたので知見を公開してみる

# はじめに :beginner:
DeNAでiOSエンジニアをしている[@tsuzuki817](https://twitter.com/tsuzuki817)です!

本記事は [SwiftWednesday Advent Calendar 2023](https://qiita.com/advent-calendar/2023/swift-wednesday) の16日目の記事です🎅🎄

https://qiita.com/advent-calendar/2023/swift-wednesday

昨日は @treastrain(Ryoga Tanaka)さんの[【初心者向け】iPad だけで Google の AI モデル「Gemini」を使ったアプリを作ってみよう!](https://qiita.com/treastrain/items/6ed2802836969d308481)でした :tada:

Geminiを使ってみようと思える良記事でしたね:pray:

さて、今回は `SwiftUIを使って10日でSNSアプリをリリースしたので知見を公開してみる`という記事

元記事を表示

バーチカルカレンダーはどうやって描画されているのか

これは[株式会社TimeTree Advent Calendar 2023](https://qiita.com/advent-calendar/2023/timetree)の16日目の記事です。

https://qiita.com/advent-calendar/2023/timetree

こんにちは。TimeTree の iOS エンジニア @Bax です。

TimeTree はプレミアム(有料プラン)でいくつかの機能を提供しています。その1つにバーチカルカレンダーがあります。こちらは私が過去に開発を担当していたもので、その開発のあれこれについて書きたいと思います。

# バーチカルカレンダーとは何か

月ごとに表示されるカレンダーを私たちはマンスリーカレンダーと呼んでいます。一方で、バーチカルカレンダーは時間軸で1日の予定を見ることができるカレンダーです。あまり馴染みのない言葉かもしれませんが、テレビ番組表のようなタイムテーブルに近いものです。

【SwiftUI】ウィジェットの周りのマージンをなくす(iOS17)

# はじめに
iOS17からウィジェットの周りに余白が付くようになったみたいです。

そんな邪魔な余白をなくすってのが今回の記事の目的です。

![Simulator Screenshot – iPhone 15 – 2023-12-15 at 22.29.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b3dcce73-f729-4154-81d0-2423149ce700.png)

こんな感じ

# 実装
“`diff_swift
struct DemoWidgetExtension: Widget {
let kind: String = “DemoWidgetExtension”

var body: some WidgetConfiguration {
IntentConfiguration(
kind: kind,
intent: DemoWidgetConfigurationIntent

XcodeでArchiveができない時の対処法

色々なサイトで、xcodeの画面で、「iOS Generic Device」にしたら良いという記事を散見されます。

![スクリーンショット 2023-12-15 14.46.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321245/717ec256-d6da-a8d9-e556-11336b74d1f4.png)

ただその項目自体が見つからず、詰まっていましたが、Xcodeが12から「Any iOS Device」を選んでくださいという記事を発見。

無事Archiveができる様になりました。

ViewだけでWebView埋め込みiOSアプリを作る

# はじめに
みなさんは「あ〜このWebサイト・アプリがモバイルアプリだったら便利なのにな〜」と思うことはありませんか?
私はあります…!!

SafariからWebページをホームに追加しても、PWAに対応してないサイトはなんとなく不便、、、
そんなあなたに、WebView埋め込みのiOSアプリをサクッと作るお話を共有したいと思います!

# 環境
– macOS Sonoma 14.2
– Xcode 15.1
– iOS 17.1.2
– Swift 5.x系

# 作ったもの
– Safariに遷移することなく、Webページのコンテンツをアプリ自体に埋め込んだもの
– SwiftUIのViewの中で「WKWebView」を使って実装
– フッターに「戻る」ボタンと「進む」ボタンを実装

# プロジェクトの作成
慣れているみなさまは読み飛ばしてください…!

1. Xcodeで「Create New Project…」を選択
image.png

  • マンスリーカレンダー バーチカルカレンダー