iOS関連のことを調べてみた2022年12月10日

iOS関連のことを調べてみた2022年12月10日

Responderチェーンを辿る

bitFlyer システム開発本部 フロントエンド開発部 部長の林です。
マネジメント職ですが、気持ちは今もiOSエンジニアです。
この記事は bitFlyer Advent Calendar 2022 の10日目として書かれました。

優秀なiOSアプリエンジニアは画面を平面としてではなく階層として扱う、という持論があります。
ViewやViewControllerの階層が正しく設計され、あるべき層にあるべき情報が保持されていると、複雑な状態を伴うアニメーションにも耐えられる強度を持った美しいアプリが完成します。

さて、階層構造を基本とするUIKitですが、他にもう一つ興味深いデータ構造があります。

タイトルにもなった`Responderチェーン`です。

UIResponderはイベントハンドリングを担当するクラスで、UIViewやUIViewController, UIWindow, UIApplication, UIApplicationDelagateなどUIKitにおける主要なクラスはUIResponderを継承しています。

UIResponderはnextというプロ

元記事を表示

Flutter・webViewで、Webサービスをモバイルアプリ上に実装し、個別通知機能を追加した話

# ? はじめに ?
アドベントカレンダー参加したいなということで・・・
今日は、「Flutter × webView で開発したサービスに個別通知機能を追加」した話をします。
同じような境遇の方がいたら、ぜひ実装方針参考にしてみてください。
また、他の方法がある方はアドバイスお願いします。

# ? 背景 ?
現在、会員制ECサービス Pantrii のバックエンド兼クライアントエンジニアをやっています。
こちらのサービスは「オンライン版コストコ」というキャッチフレーズで活動しています。

https://prtimes.jp/main/html/rd/p/000000005.000084659.html

こちらのECは主にアプリ利用をメインターゲットにしており、開発に Flutter を用いています。
是非、記事を読む際に、下記からアプリをダウンロードして触りながら読んでみてください。
– [iOS](https://apps.apple.com/jp/app/pantrii-%E3%83%91%E3%83%B3%E3%83%88%E3%83%AA%E3%83%BC-%E3%82

元記事を表示

Visual Regression Testingを導入してみた(iOSアプリ)

この記事は[レコチョク Advent Calendar 2022](https://qiita.com/advent-calendar/2022/recochoku)の10日目の記事となります。

https://qiita.com/advent-calendar/2022/recochoku

# はじめに

最近学生時代の友人と会い、昔やっていたギターの熱が再熱してきました村田です。
株式会社レコチョクでiOSアプリ開発をしています。

Visual Regression Testing(以下VRT)をタワーレコード株式会社と弊社が共同で開発してる
TOWER RECORDS MUSICという音楽サブスクリプションサービスのiOSアプリに導入したので、
それを紹介しようと思います。

https://music.tower.jp/

# VRTとは?

特定の時点でのUIのスクリーンショットをピクセル単位で比較し、差分を検知する回帰テストです。

CIと連携してPR毎に自動でテストを実行することでデグレの検知ができるため、非常に高い効果を発揮します。

# 導入検討時の課題は?

元記事を表示

ラクマ夏のインターン2022に参加してみて

# 初めてに

ラクマの iOS Mobile Developer チームで約3ヶ月インターンしました。3ヶ月いろいろ経験させてもらい、本当にあっという間に過ぎてしまいました:sob: 

せっかくなので、このインターンの感想を書いてみました。

# 感想

## きっかけ

このインターンはボスキャリという海外大の留学生用のキャリアサイトで見つけ、応募しました。

応募は英語のレジュメを出すだけでとても楽でした。そのあとは簡単なコーディングテストをし、面接に進むことができました。私は日本の面接はすごくお堅いイメージがあって、すごく緊張していましたが、実際やってみると志望動機なのではなく今まで何をやってきたかというのをメインで聞かれたので話しやすかったです。

今回はインターンのために日本に戻るということで、**楽天側が飛行機などの手続きをしてくれ**て、とても助かりました!人事の人もこまめに連絡を取ってくださり、ありがたかったです。

## インターン

インターンはほぼリモートで家から出ることなく仕事ができたので快適でした。もちろんオフィスも広々としていて、動く机もあり居心地が良

元記事を表示

【SwiftUI】Textに長押しメニューを追加する

# はじめに
iOS15からTextに長押しできる機能が追加されてました。
意外と使えそうなので記録しておきます。

# サンプル
![スクリーンショット 2022-12-09 18.46.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3a4b28c9-f43c-9540-38e9-c6e637ad1ae2.png)

# 実装
“`diff_swift
import SwiftUI

struct ContentView: View {
var body: some View {
Text(“テキスト”)
+ .textSelection(.enabled)
}
}
“`

# おわり
他にも良さそうな機能があったら記事にします

元記事を表示

SpriteKitで2D横スクロールゲームをつくろう(その5)

![Xcode-14.1](https://img.shields.io/badge/Xcode-14.1-brightgreen) ![iOS-16.0](https://img.shields.io/badge/iOS-16.0-brightgreen)

## はじめに
[前回](https://qiita.com/am10/items/90e3a2f58ae88e4ad6c4)の続きです。

今回はついにゴール作成です:sunglasses:

## 実装
ゴール判定は迷ったのですが指定のブロックに接触したらゴールしたことにします。

横に 50 個ブロックをならべているので最後の3つのブロックを判定に使います。

### クリア画面作成
クリア画面を作成します。

“`swift
final class ClearScene: SKScene {

private let jumpTextures: [SKTexture] = [
.init(imageNamed: “j1”),
.init(imageNamed: “j2”),

元記事を表示

@dynamicCallableのdynamicallyCallはasync/awaitでも使える

# 概要

タイトルそのままですが、Swiftの`@dynamicCallable`を使う上で実装が必要になる`dynamicallyCall`で、async/awaitが使えます。

## dynamicCallableについて

dynamicCallableはSwift 5で追加された機能です。
`@dynamicCallable`がマークされた型のインスタンスは、好きな名前で引数をつけて関数呼び出しが可能です。

`@dynamicCallable`がマークされた型は`dynamicallyCall(withArguments:)`もしくは`dynamicallyCall(withKeywordArguments:)` のfuncを実装します。

dynamicallyCallは、引数の名前によって動作させることができます。dynamicallyCallは好きな返り値を設定することができます。

“`swift
@dynamicCallable
struct Foo {
func dynamicallyCall(withKeywordArguments pairs:

元記事を表示

【Swift】iOSでStableDiffusionを使ってみた

# はじめに
AppleからStableDiffusionのCoreML変換バージョンが公開されました。
StableDiffusionに興味があったので使ってみました。

https://github.com/apple/ml-stable-diffusion

しかし、READMEに記載されている方法だと貧弱メモリのMacBookではできなかったので、貧弱MacBookでもできる方法を紹介します。

# サンプルアプリ
今回のサンプルアプリはこちらです。

以下の設定ができます。
– Prompt
– Image Count
– Step Count
– Seed
![スクリーンショット 2022-12-08 22.03.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6c20fa77-c559-9656-03ba-3b46c631723a.png)

ちなみに「StepCount」を50にすると生成までに1時間くらいかかります笑

この例では「StepCount」は5で実行して

元記事を表示

SwiftUIとUIKitが共存している環境でカスタムダイアログを作ろうとして踏んだ罠

現状(2022/12現在)のSwiftUIでは`alert`にカスタムViewを設定することができません。
そのため、UIKit時代のようにカスタムダイアログを作ろうとすると力技[^1]になりがちです。
[^1]:https://qiita.com/yyokii/items/ec984833c4d040001fca

しかし、UIKitとSwiftUIを共存させようとしているプロジェクトでカスタムダイアログを作ろうとした際に思わぬ引っ掛かり方をしたので共有します。

# 何が起きたか
## やったこと
StackOverflow[^3]を参考にカスタムViewをセットできるViewModifierを作りました。
[^3]:https://stackoverflow.com/questions/66547657/swiftui-full-screen-view-over-navigationbar-and-tabbar

※だいぶ端折ってますがそれでも長いので畳んでます

CustomDialog.swift

“`s

元記事を表示

PC,モバイル,VRに対応したマルチプラットフォームアプリのリリースフロー

この記事は [クラスター Advent Calendar 2022](https://qiita.com/advent-calendar/2022/cluster) 8日目の記事です。
昨日は @UnlimitedBuildWorks さんの [私とEyePhoneの出会い](https://qiita.com/UnlimitedBuildWorks/items/0952ad190f0052d532bb) でした。
30年前からHMDが存在していたのに驚きですね!!

こんにちは!クラスター株式会社でSoftware Engineerをしているizumiです。
私は現在主にiOS/Unityの開発と、アプリのリリース担当をしています。

# clusterの対応プラットフォーム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117503/6a1a6686-e1a9-0030-9a32-c53a5f979c43.png)

「cluster」は、VRからスマホまでどこからでも遊べるメタバー

元記事を表示

SpriteKitで2D横スクロールゲームをつくろう(その4)

![Xcode-14.1](https://img.shields.io/badge/Xcode-14.1-brightgreen) ![iOS-16.0](https://img.shields.io/badge/iOS-16.0-brightgreen)

## はじめに
[前回](https://qiita.com/am10/items/8729f77f3ee512a86052)の続きです。

今回はさみしかった画面に敵キャラを登場させます:smiling_imp:

## 素材準備
敵キャラはマヨネーズにしました(とくに意味はありません)。

| m1 | m2 | m3 |
| — | — | — |
|![m1](https://user-images.githubusercontent.com/34936885/205437544-999592a3-0c88-4230-a93f-0e86305d043a.png)|![m2](https://user-images.githubusercontent.com/34936885/205437608-8a3310

元記事を表示

iOS&AndroidのSDK開発で心がけていること

## はじめに
:::note info
この記事は、[Supershipグループ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/supership) 8日目の記事になります。
:::
## 自己紹介

![logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608850/18517075-7d09-448b-6704-5a9a23b69b94.png)
[Ad Generation](https://supership.jp/business/adgeneration/)というプロダクトで、
iOS/Androidアプリ向けのSDKを開発している、 @napo と申します。

普段は .xcframeworkと.aarを開発して過ごしています。

## なんの記事?

業務で、「モバイルアプリ向けのライブラリを開発する」という、あまり馴染みの少ないポジションについて、
日々、どんなことをやっていて、どんな気付きがあるか、

元記事を表示

SwiftUIで円形のプログレスバーを作る

こんにちは!
[アイスタイル Advent Calender 2022](https://qiita.com/advent-calendar/2022/istyle) 8日目の記事をを担当します。[hayakawat](https://qiita.com/tomoyuki_HAYAKAWA)です。
アイスタイルではアプリ開発グループでiOSアプリの開発をしています。
今回は最近個人で開発したアプリで利用した円形のプログレスバーについて書こうと思います。

## 今回作るもの
円形のプログレスバーとはiPhoneのバッテリーウィジェット等で使われている緑の円のやつです。iPhoneユーザの方は見覚えあるかと思います。

## 作り方
緑の円と背景のグレーの円をピッタリ重ねることで円が満たされていくように見せています。

元記事を表示

WWDC2022の面白かった話をまとめてみた

# 初めに

WWDCの動画を視聴し、内容についてまとめていきます。

# 内容

## – Meet Swift Async Algorithms

https://developer.apple.com/videos/play/wwdc2022/110355/

前提知識として、`Concurrency` の `AsyncSequence` を用いることで、非同期の値に対しても `Sequence` のように `for in` ループを使うことができました。(らしいです)

以下の例では公式ドキュメントで紹介されているカスタム `Counter` を使用しています。`AsyncSequence` を使用する場合は `makeAsyncIterator()` の実装が必要で、`AsyncIteratorProtocol` を使用する場合は `next()` の実装が必要です。

“`.swift
for await i in Counter(howHigh: 10) {
print(i, terminator: ” “)
}
// Prints: 1 2 3 4 5 6

元記事を表示

MacOSX の環境にて iOS アプリを Flutter で開発する環境構築の話

本投稿は [テクノロジー検証 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/technology_validation) の 9日目として投稿しています。

https://qiita.com/advent-calendar/2022/technology_validation

今回は、前回紹介しました OSX 10.13 に対し、
開発環境のセットアップ 〜 iPhone のエミュレーション表示までのお話です。

> 前回:
[MacOSX の環境にて iOS アプリを Flutter で開発する前段階のお話](https://qiita.com/nk-nara/items/50b5e0740f6826913772)

https://qiita.com/nk-nara/items/50b5e0740f6826913772

# 今回の目標

以下の画面表示ができる状態までのセットアップです。
![image.png](https://qiita-image-store.s3.ap-northea

元記事を表示

NavigationStackを使ってみた?

## はじめに
[SwiftUI Advent Calendar 2022](https://qiita.com/advent-calendar/2022/swiftui)の8日目です?

iOS 16からNavigationStackという新しい画面遷移のViewが使えるようになりました?
これにより画面遷移の実装がより簡単になったと日々の個人開発の中で実感しております。

NavigationStackの使い方を模索しておりまして、一旦現状を共有することで皆さんに助言をいただきより良いものにしようとする魂胆です。
ですのでこうした方が良いよ!とかなんでこんな書き方しているの?とかご意見ありましたら、ぜひコメントください!

また投稿前日に書いているため支離滅裂な箇所もあるかと思いますので生暖かい目で見ていただければと思います?

NavigationStackを使ってモリモリ開発しているアプリが気になる方はこちらから?
https://apps.apple.com/jp/app/ticketmania/id6444087177
(レビューください⭐️)

サンプルリポジトリはこちら

元記事を表示

複数アーキテクチャ用の xcframework; Rust などで作った静的ライブラリ (*.a) から

# モチベーション
Rust で作った静的ライブラリ(*.a)を, Xcode でビルドしている iOS(/Mac) アプリにリンクして使用したい.
それぞれのプラットフォーム/アーキテクチャ向けにビルドした複数の *.a (とヘッダファイル) を,
1つの xcframework にバンドルする.

## ポイント
iOS シミュレータ(や Mac) については, 動作ターゲットが
– x86_64 な Intel Mac
– aarch64(ARM64) な M1/M2 Mac

のどちらでも使えるように, x86_64 と aarch64 向けの両方を用意したい.

## Rust ? ?
Apple の複数プラットフォーム, アーキテクチャについてビルド済みの静的ライブラリ(*.a)をバンドルしたい, といった需要があるならば, Rust に限った議論ではない.

# Rust ビルドターゲットの整理

Apple の各プラットフォーム, アーキテクチャについて, Rust の target triple をまとめておく.
[Target Tier](https://doc.

元記事を表示

【Xcode】DerivedDataによるストレージ圧迫に気をつけろ!

# はじめに
MacBookのストレージがパンパンになっている原因がわかったので記録しておきます。

# 原因
![スクリーンショット 2022-12-07 19.47.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5efbccdc-b5ff-07e8-40be-5fd09ef28a3a.png)

こいつでした。

自分のXcodeの設定だとプロジェクトごとにDerivedDataが作成されるようになっていました。

# 修正方法
### まず削除
いま作成されているDerivedDataを全て削除します。

### プロジェクトごとに作成されないようにする
① 「Xcode」を選択します。
② 「Settings…」を選択します。
![スクリーンショット 2022-12-07 19.52.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1f238fe8-7d8b-1e76

元記事を表示

【備忘録】PushKitのdidUpdateがどうしても呼ばれない場合の対処法

結論

アプリのプロジェクト名 → Singing & Capabillitiesから、

Push Notificationが追加されているか確認する。

追加されていなければ、右上のプラスボタンから追加する。

元記事を表示

AppsFlyerとそのアトリビューションの仕組み

この記事ではAppsFlyerと、その基本的な機能であるアトリビューションについて解説しています。

## AppsFlyerを一言で言うと・・・

[AppsFlyer](https://www.appsflyer.com/ja)はモバイルアプリのデータを収集・整理し、「アトリビューション」を行うことで、広告の効果を統一的に評価するためのプラットフォームを提供するサービスです。
このようなサービスは、モバイル計測パートナー(MMP; Mobile Measurement Patner)という名前でも知られていて、AppsFlyer以外の類似のサービスとしては adjust, branch, Kochava, singular, tenjin 等が挙げられます。
この中で、グローバルシェアがNo.1のサービスがAppsFlyerになります。

![AF-logo_Horizontal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/eeb0ed79-45cd-6ea0-b1d6-000645

元記事を表示

OTHERカテゴリの最新記事